Depois de perguntar isso , ainda tenho uma pergunta.
Uma empresa precisa armazenar dados confidenciais. Por favor, não vamos falar sobre certificado agora.
Um DBA faz o seguinte:
CREATE SYMMETRIC KEY SecureSymmetricKey1
WITH ALGORITHM = DESX
ENCRYPTION BY PASSWORD = N'blabla';
Um programador deseja criptografar dados e faz o seguinte:
-- open key
OPEN SYMMETRIC KEY SecureSymmetricKey1
DECRYPTION BY PASSWORD = N'blabla'
-- actual encrpyt
DECLARE @encrypted_str VARBINARY(MAX)
SET @encrypted_str = EncryptByKey(Key_GUID('SecureSymmetricKey1'),'my data');
Outro programador quer LER os dados, então ele faz:
DECLARE @decrypted_str VARBINARY(MAX)
SET @decrypted_str = DecryptByKey(...encrypted_str...)
Tudo bem.
Perguntas :
Quando um programador abre uma chave simétrica, ele deve saber a senha. Não acho que um programador deva saber a senha. Como isso pode ser resolvido ?
Se um hacker GOD obtiver o
.BAK
arquivo inteiro e restaurar o backup em sua própria máquina - ele poderá visualizar a fonte do procedimento armazenado que um dos programadores escreveu e ver a senha. e então o HACKER pode fazer:ABRIR CHAVE SIMÉTRICA SecureSymmetricKey1 DESCRIPTAÇÃO POR SENHA = N'blabla'
O que estou perdendo ?
Obrigado por ajudar.
Na verdade, existem apenas duas opções:
Descriptografia de chave automática Ie. a hierarquia de chaves inclui uma criptografia pela chave mestra do serviço (geralmente por meio da chave mestra do banco de dados) e o mecanismo é capaz de descriptografar e/ou criptografar os dados quando necessário. Isso protege contra perda acidental de mídia, mas qualquer pessoa com acesso ao servidor em execução tem acesso aos dados criptografados (sujeitos a permissões de acesso , não sujeitos a proteção criptográfica). Transparent Data Encryption TDE é a versão high-end deste tipo de acesso.
Chave de descriptografia fornecida pela sessão explícita O aplicativo deve solicitar ao usuário a senha de descriptografia da chave e abrir as chaves explicitamente em cada sessão que usar. O mecanismo em si não pode descriptografar os dados. Isso protege contra qualquer acesso não autorizado aos dados por meios criptográficos (mesmo que alguém possa acessar o mecanismo e tenha direitos de acesso para ler os dados, ele não pode usar os dados sem realmente conhecer a senha). Desnecessário dizer que fazer com que o aplicativo solicite a senha do usuário é irritante, na melhor das hipóteses, em aplicativos de desktop, e totalmente impossível em aplicativos da web (os aplicativos da web precisam armazenar a senha para usá-la entre as solicitações, e isso é um grande problema).
Estas são as únicas alternativas. Nunca há necessidade de ter a senha armazenada em qualquer arquivo de configuração ou procedimento armazenado. Qualquer esquema que exija armazenar a senha de acesso em algum lugar está condenado desde o início e você precisa reverter para a página um do seu design e começar do zero.