streda 1. júna 2011

Symetrické kľúče vs Asymetrické kľúče - čásť 2/2

Pokračovanie z Symetrické kľúče vs Asymetrické kľúče - čásť 1/2

Do tabuliek vložime 5x5 000 riadkov. Dľžka jedného záznamu bude 52 znakov Odmeriame čas potrebný na vloženie dát do tabuliek a porovnáme ich.
DECLARE @StartTime DATETIME, @EndTime DATETIME;
DECLARE @KeyGUID UNIQUEIDENTIFIER, @KeyGUIDCert UNIQUEIDENTIFIER;
DECLARE @AsymKeyID_2048 INT, @AsymKeyID_512 INT;
SET @AsymKeyID_2048 = ASYMKEY_ID ('AsymmKey_RSA2048');
SET @AsymKeyID_512 = ASYMKEY_ID('AsymmKey_RSA512');
SET @KeyGUID = KEY_GUID('SymmKey_AES256');
SET @KeyGUIDCert = KEY_GUID('SymmKey_AES256Cert');

print 'Asymmetric key RSA 2048'
SET @StartTime GETDATE();
INSERT INTO dbo.AsymmKeyTest2048 (SecretColumn)
SELECT TOP 5000 ENCRYPTBYASYMKEY(@AsymKeyID_2048, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
FROM master.sys.columns c1 CROSS JOIN master.sys.columns c2;

SET @EndTime = GETDATE();
PRINT 'Asymmetric Key 2048: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

print 'Asymmetric key RSA 512';

SET @StartTime = GETDATE();
INSERT INTO dbo.AsymmKeyTest512 (SecretColumn)
SELECT TOP 5000 ENCRYPTBYASYMKEY(@AsymKeyID_512,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')

FROM master.sys.columns c1 CROSS JOIN master.sys.columns c2;
SET @EndTime = GETDATE();

PRINT 'Asymmetric Key 512: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

print 'Symmetric key AES 256';
SET @StartTime = GETDATE();
OPEN SYMMETRIC KEY SymmKey_AES256 DECRYPTION BY PASSWORD = 'password4test!';
INSERT INTO dbo.SymmKeyTest (SecretColumn)
SELECT TOP 5000 ENCRYPTBYKEY(@KeyGUID, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
FROM master.sys.columns c1 CROSS JOIN master.sys.columns c2;

SET @EndTime = GETDATE();
CLOSE SYMMETRIC KEY SymmKey_AES256;

PRINT 'Symmetric Key AES 256: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

print 'Symmetric key AES 256 Cert';
SET @StartTime = GETDATE();
OPEN SYMMETRIC KEY SymmKey_AES256Cert DECRYPTION BY Certificate TestDB_Cert WITH PASSWORD ='password4test';
INSERT INTO dbo.SymmKeyTest_Cert (SecretColumn)

SELECT TOP 5000 ENCRYPTBYKEY(@KeyGUIDCert,
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')
FROM master.sys.columns c1 CROSS JOIN master.sys.columns c2;
SET @EndTime = GETDATE();
CLOSE SYMMETRIC KEY SymmKey_AES256Cert;
PRINT 'Symmetric Key AES 256 Cert: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

Čas potrebný na vykonanie jednotlivých príkazov.


Výsledok: Najpomalšie vkladanie dát je asymetrickým klúčom s RSA 2048 bitovou šifrou. Symetrický kľúč AES 256 s certifikátom bol rýchlejsí ako symetrický kľúč AES 256. Najrýchlejší sposob bol asymetrický kľúč s RSA 512 bitovou šifrou. Časove rozdiely medzi jednotlivými typmi sú síce rozdielne, ale keďže málokedy vkladáme taký obnos dát do databázy, viac nás bude zaujímať následujúci test.


Teraz otestujeme čas potrebný na dešifrovanie údajov: Postupne sme dešifrovali stále väčší počet riadkov - Top 100, Top 500, Top 1000, Top 5000 a Top 25 000.
USE TestDB;
DECLARE @StartTime DATETIME, @EndTime DATETIME;
DECLARE @KeyGUID UNIQUEIDENTIFIER, @KeyGUIDCert UNIQUEIDENTIFIER;
DECLARE @AsymKeyID_2048 INT, @AsymKeyID_512 INT;
SET @AsymKeyID_2048 = ASYMKEY_ID ('AsymmKey_RSA2048');
SET @AsymKeyID_512 = ASYMKEY_ID('AsymmKey_RSA512');
SET @KeyGUID = KEY_GUID('SymmKey_AES256');
SET @KeyGUIDCert = KEY_GUID('SymmKey_AES256Cert');

print 'Select with Asymmetric key RSA 2048';
SET @StartTime = GETDATE();
SELECT TOP 25000 CONVERT(varchar(255), DECRYPTBYASYMKEY(@AsymKeyID_2048, SecretColumn, N'password4test!'))
FROM dbo.AsymmKeyTest2048;
SET @EndTime = GETDATE();
PRINT 'Asymmetric Key AES RSA 2048: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

print 'Select with Asymmetric key RSA 512';
SET @StartTime = GETDATE();
SELECT TOP 25000 CONVERT(varchar(255), DECRYPTBYASYMKEY(@AsymKeyID_512, SecretColumn, N'password4test!'))
FROM dbo.AsymmKeyTest512;
SET @EndTime = GETDATE();
PRINT 'Asymmetric Key AES RSA 512: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

print 'Select with Symmetric key AES 256';
OPEN SYMMETRIC KEY SymmKey_AES256 DECRYPTION BY PASSWORD = 'password4test!';
SET @StartTime = GETDATE(); SELECT TOP 25000 CONVERT(varchar(255), DECRYPTBYKEY(SecretColumn))
FROM dbo.SymmKeyTest;
SET @EndTime = GETDATE();
CLOSE SYMMETRIC KEY SymmKey_AES256;
PRINT 'Symmetric Key AES AES 256: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

print 'Select with Symmetric key AES 256 Cert';
OPEN SYMMETRIC KEY SymmKey_AES256Cert DECRYPTION BY Certificate TestDB_Cert WITH PASSWORD = 'password4test';
SET @StartTime = GETDATE();
SELECT TOP 25000 CONVERT(varchar(255), DECRYPTBYKEY(SecretColumn))
FROM dbo.SymmKeyTest_Cert;
SET @EndTime = GETDATE();
CLOSE SYMMETRIC KEY SymmKey_AES256Cert;
PRINT 'Symmetric Key AES AES 256 Cert: Execution Times (Cas vykonania) (ms): ' + CONVERT(VARCHAR, DATEDIFF(ms, @StartTime, @EndTime));

Čas potrebný na vykonanie jednotlivých príkazov...


Výsledok: Už na prvý pohľad je jasné, že použitie asymetrického kľúča s 2048 bitovou šifrou na šifrovanie citlivých dát je nepoužiteľné. Čas potrebný na dešifrovanie touto šifrou narastal skoro lineárne s počtom riadkov ktoré bolo nutné dešifrovať. O niečo lepšie si počínal asymetrický kľúč s 512 bitovou šifrou, ovšem aj tieto časy sú neprimerane veľké a hlavne obmedzenie na 53 znakov je dosť limitujúce. Dešifrovanie symetrickými kľúčmi bolo pomerne rovnaké, avšak oproti asymetrickým kľúčom niekoľko krát rýchlejšie. Pri dešifrovaní 5000 reťazcov sú rozdiely medzi symetrickým a asymetrickým šifrovaní neporovnateľné, 66 120 milisekúnd vs 123 milisekúnd (RSA 2048 vs AES 256) alebo 2 973 ms vs 80 ms (RSA 512 vs AES256 s cert)


Zhrnutie:  Boj medzi symetrickým a asymetrickým kľúčom z hľadiska použiteľnosti a výkonu je jednoznačne v prospech symetrického kľúča. Ďalším pozitívným faktorom je neobmedzenosť dĺžky reťazca, ktorý sa šifruje. Pri asymetrických kľúčoch je táto dĺžka obmedzená. 

Žiadne komentáre:

Zverejnenie komentára