Microsoft SQL Server
crittografia
Ricerca…
Parametri
Parametri opzionali | Dettagli |
---|---|
WITH PRIVATE KEY | Per CREATE CERTIFICATE, è possibile specificare una chiave privata: (FILE='D:\Temp\CertTest\private.pvk', DECRYPTION BY PASSWORD = 'password'); |
Osservazioni
La creazione di un certificato DER funzionerà correttamente. Tuttavia, quando viene utilizzato un certificato Base64, il server SQL si lamenterà con il messaggio criptico:
Msg 15468, Level 16, State 6, Line 1
An error occurred during the generation of the certificate.
Importa il tuo certificato Base64 nell'archivio certificati del tuo sistema operativo per poterlo riesportare in formato binario DER.
Un'altra cosa importante da fare è avere una gerarchia di crittografia in modo che uno protegga l'altro, fino al livello del sistema operativo. Vedi l'articolo su 'Crittografia del database / TDE'
Per ulteriori informazioni sulla creazione di certificati, visitare: https://msdn.microsoft.com/en-us/library/ms187798.aspx
Per ulteriori informazioni sulla crittografia del database / TDE, consultare: https://msdn.microsoft.com/en-us/library/bb934049.aspx
Per ulteriori informazioni sulla crittografia dei dati, consultare: https://msdn.microsoft.com/en-us/library/ms188061.aspx
Crittografia per certificato
CREATE CERTIFICATE My_New_Cert
FROM FILE = 'D:\Temp\CertTest\certificateDER.cer'
GO
Crea il certificato
SELECT EncryptByCert(Cert_ID('My_New_Cert'),
'This text will get encrypted') encryption_test
Di solito, si cripterebbe con una chiave simmetrica, quella chiave sarebbe crittografata dalla chiave asimmetrica (chiave pubblica) dal certificato.
Inoltre, tieni presente che la crittografia è limitata a determinate lunghezze in base alla lunghezza della chiave e restituisce NULL altrimenti. Microsoft scrive: "I limiti sono: una chiave RSA a 512 bit può crittografare fino a 53 byte, una chiave a 1024 bit può crittografare fino a 117 byte e una chiave a 2048 bit può crittografare fino a 245 byte."
EncryptByAsymKey ha gli stessi limiti. Per UNICODE questo sarebbe diviso per 2 (16 bit per carattere), quindi 58 caratteri per una chiave a 1024 bit.
Crittografia del database
USE TDE
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE My_New_Cert
GO
ALTER DATABASE TDE
SET ENCRYPTION ON
GO
Questo utilizza 'Transparent Data Encryption' (TDE)
Crittografia con chiave simmetrica
-- Create the key and protect it with the cert
CREATE SYMMETRIC KEY My_Sym_Key
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE My_New_Cert;
GO
-- open the key
OPEN SYMMETRIC KEY My_Sym_Key
DECRYPTION BY CERTIFICATE My_New_Cert;
-- Encrypt
SELECT EncryptByKey(Key_GUID('SSN_Key_01'), 'This text will get encrypted');
Crittografia per passphrase
SELECT EncryptByPassphrase('MyPassPhrase', 'This text will get encrypted')
Questo verrà anche crittografato, ma poi per passphrase invece di chiave asimmetrica (certificato) o con una chiave simmetrica esplicita.