štvrtok 26. mája 2011

Symetrické kľúče vs Asymetrické kľúče - časť 1/2

Veľmi často potrebujeme šifrovať naše data v databáze v rámci SQL serveru. Aby sme sa chránili pred únikom citlivých dát (heslá, firemné údaje a pod) používame šifrovacie nástroje. Teraz sa pozrieme na dva základne typy šifrovania priamo pod SQL serverom.
  • šifrovanie pomocou symetrického kľúča
  • šifrovanie pomocou asymetrického kľúča
Ukážeme si ako sa jednotlivé kľúče vytvárajú, ako sa používajú pri šifrovaní dát a následne ako tieto data načítať. Dozvieme sa aký je zásadný rozdiel medzi symetrickým a asymetrickým kľúčom a prečo je symetrický kľúč uprednostňovaný pred asymetrickým. Rozdiely medzi jednotlivými kľúčmi si ukážeme na praktickej ukážke, kde sa hlavne zameriame na výkonnosť jednotlivých šifrovacích kľúčov.
Symetrický kľúč: Symetrický kľúč musí byť šifrovaný jedným z následujúcich spôsobov - certifikát, heslo, iný symetrický kľúč, aymetrický kľúč alebo provider. Šifrovací algoritmus musí byť jedna z týchto možností:
  • DES
  • TRIPLE_DES
  • TRIPLE_DES_3KEY 
  • RC2 
  • RC4 
  • RC4_128
  • DESX 
  • AES_128 
  • AES_192 
  • AES_256
Algoritmus DESX aktuálne používa TRIPLE DES s 192 bitovým kľúčom. V ďaľších verziách SQL Serveru už nebude podporovaný. Algoritmus TRIPLE_DES používa TRIPLE DES s 128-bitovým kľúčom.
Asymetrický kľúč: Asymetrický kľúč je tvorený dvojicou súkromného a verejného kľúča. Typy šifrovania:
  • RSA 512 ( max 53 znakov pre typ varchar, 21 znakov pre nvarchar )
  • RSA 1024  ( max 117 znakov pre typ varchar, 53 znakov pre nvarchar )
  • RSA 2048  ( max 245 znakov pre typ varchar, 117 znakov pre nvarchar )
Limit znakov sa počíta ako dĺžka šifry / 8 (16 pre nvarchar) - 11 (Microsoft Enhanced Cryptographic Provider for PKCS #1 padding)´= maximálny počet znakov

Najprv si vytvoríme certifikát.
USE TestDB
CREATE CERTIFICATE TestDB_Cert
ENCRYPTION BY PASSWORD 'password4test'
WITH SUBJECT = 'Certificate for secret data'
EXPIRY_DATE = '10/31/2015';
GO
Zoznam všetkých možných certifikátov získame následujúcim príkazom:
USE TestDB;
SELECT * FROM sys.certificates;
Zoznam všetkých symetrických a asymetrických kľúčov získame pomocou sql príkazu:
USE TestDB;
SELECT * FROM sys.symmetric_keys;
SELECT * FROM sys.asymmetric_keys;
Keďže sme zatiaľ žiaden kľúč nevytvorili využíjeme tieto príkazy neskôr. Vytvoríme 4 kľuče, 2 asymetrické a 2 symetrické a 1 certifikát
  • Asymetrický kľuč s kódovaním RSA_2048 šifrovaný heslom
  • Asymetrický kľuč s kódovaním RSA_512 šifrovaný heslom
  • Symetrický kľúč s kódovanim AES_256 šifrovaný heslom
  • Symetrický kľúč s kódovanim AES_256 šifrovaný certifikátom
USE TestDB;
print 'Asymetric key RSA 2048';
CREATE ASYMMETRIC KEY AsymmKey_RSA2048
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD ='password4test!';
GO
print 'Asymetric key RSA 512'
CREATE ASYMMETRIC KEY AsymmKey_RSA512
WITH ALGORITHM RSA_512
ENCRYPTION BY PASSWORD = 'password4test!'
GO
print 'Symetric key AES 256'
CREATE SYMMETRIC KEY SymmKey_AES256
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = ''password4test!'
GO
print 'Symetric key AES 256 Cert'
CREATE SYMMETRIC KEY SymmKey_AES256Cert
WITH ALGORITHM = AES_256
 ENCRYPTION BY CERTIFICATE TestDB_Cert
GO
Pozrime sa teraz na zoznam certifikátov a kľúčov.
USE TestDB;
SELECT * FROM sys.certificates;
SELECT * FROM sys.symmetric_keys;
SELECT * FROM sys.asymmetric_keys;
Mali by sme vidieť jeden certifikát, dva symetrické a dva asymetrické kľuče. Viď obrázok č.1
Obrázok č.1 - Prehľad vytvorených kľúčov a certifikát
Vytvoríme si testovacie tabuľky na ktorých budeme testovať výkonnosť.
CREATE TABLE dbo.SymmKeyTest(
SecretColumn VARBINARY(256))
GO
CREATE TABLE dbo.SymmKeyTest_Cert(
SecretColumn VARBINARY(256))
GO
CREATE TABLE dbo.AsymmKeyTest512 (
SecretColumn VARBINARY(256))
GO
CREATE TABLE dbo.AsymmKeyTest2048(
SecretColumn VARBINARY(256))
GO
Pokračovanie:  Symetrické kľúče vs Asymetrické kľúče - čásť 2/2

1 komentár: