Antes de tudo, não me referiria a mim mesmo como especialista em segurança, mas tive a oportunidade de responder a essa pergunta. O que descobri me surpreendeu um pouco: não existe um sistema completamente seguro . Bem, acho que um sistema completamente seguro seria aquele em que todos os servidores estão desligados :)
Alguém que trabalhava comigo na época descreveu o projeto de um sistema seguro em termos de elevar o nível dos invasores. Portanto, cada camada de segurança diminui a oportunidade de um ataque.
Por exemplo, mesmo se você pudesse proteger perfeitamente a chave privada, o sistema não é completamente seguro. Porém, o uso correto dos algoritmos de segurança e a atualização dos patches aumentam o nível. Mas, sim, um super computador poderoso o suficiente e com tempo suficiente pode quebrar a criptografia. Tenho certeza de que tudo isso está entendido, então voltarei a pergunta.
A pergunta é clara, então primeiro tentarei abordar cada um dos seus pontos:
Digamos que a chave esteja protegida pelo modelo de segurança do sistema de arquivos; mas e os superusuários (maliciosos) ou plataformas que não fornecem essa fidelidade?
Sim, se você usar algo como Windows Key Store ou uma chave privada TLS criptografada por senha, estará exposto aos usuários que possuem a senha (ou acesso) às chaves privadas. Mas acho que você concorda que isso aumenta a fasquia. As ACLs do sistema de arquivos (se implementadas corretamente) fornecem um nível de proteção bastante bom. E você está em posição de examinar pessoalmente e conhecer seus superusuários.
Ou a chave está codificada nos binários de software, mas sempre pode ser descompilada, e o software de código aberto ou o código interpretado?
Sim, eu vi chaves codificadas em binários. Novamente, isso eleva um pouco a fasquia. Alguém que esteja atacando esse sistema (se for Java) precisa entender que o Java produz código de bytes (etc) e deve entender como descompilar a leitura. Se você estiver usando um idioma que grava diretamente no código da máquina, poderá ver que isso eleva a fasquia um pouco mais. Não é uma solução de segurança ideal, mas poderia fornecer algum nível de proteção.
Se a chave for gerada, esse algoritmo precisará ser determinístico (presumivelmente) e, em seguida, o mesmo problema se aplica à semente.
Sim, basicamente o algoritmo se torna a informação da chave privada para criar a chave privada. Portanto, agora precisaria ser protegido.
Portanto, acho que você identificou um problema central em qualquer política de segurança, gerenciamento de chaves . Ter uma política de gerenciamento de chave em vigor é essencial para fornecer um sistema seguro. E, é um tópico bastante amplo .
Portanto, a questão é: qual é a segurança do seu sistema (e, portanto, a chave privada)? Quão alto, no seu sistema, a barra precisa ser elevada?
Agora, se você estiver disposto a pagar, há algumas pessoas por aí que produzem soluções para isso. Acabamos usando um HSM (Hardware Security Module) . É basicamente um servidor inviolável que contém uma chave no hardware. Essa chave pode ser usada para criar outras chaves usadas para criptografia. A idéia aqui é que (se configurada corretamente), a chave nunca sai do HSM. HSMs custam muito . Mas em algumas empresas (protegendo os dados do cartão de crédito, digamos), o custo de uma violação é muito maior. Então, há um equilíbrio.
Muitos HSMs usam cartões-chave da manutenção e administração dos recursos. Um quorum de cartões-chave (5 de 9, digamos) deve ser fisicamente colocado no servidor para alterar uma chave. Portanto, isso eleva a fasquia bastante alto, permitindo apenas uma violação se um quorum de superusuários conspirar.
Pode haver soluções de software por aí que oferecem recursos semelhantes aos de um HSM, mas não estou ciente do que eles são.
Eu sei que isso só serve para responder à pergunta, mas espero que isso ajude.