Po dlouhé době jsem se rozhodl napsat pokračování k článku o šifrování a dešifrování v MS SQL, ve kterém jsem zmínil první způsob šifrování a dešifrování dat pomocí asymetrického klíče. V této části se Vám pokusím nastínit další způsob šifrování a dešifrování dat pomocí symetrického klíče.
Symetrické šifrování
Symetrický klíč obsahuje klíč, jimž se data šifrují i dešifrují a důsledkem je, že symetrické klíče jsou mnohem rychlejší než asymetrické klíče, ale na úkor bezpečnosti. Proto jsou tyto klíče považovány za dobrou volbu pro zašifrování většího množství dat.
Syntaxe vytvoření symetrického klíče (zjednodušeně)
CREATE SYMMETRIC KEY nazev_sym_klice
WITH ALGORITHM = { DES | TRIPLE_DES | RC2 | RC4 | DESX | AES_128 | AES_192| AES_256 }
ENCRYPTION BY PASSWORD 'heslo' | SYMMETRIC KEY nazev_jineho_sym_klice | ASYMMETRIC KEY nazev_asym_klice
nazev_sym_klice - jedná se o jedinečný název pro váš symetrický klíč, který se vytvoří nad nějakou datábází a zůstane po celou dobu.
DES | TRIPLE_DES | RC2 | RC4 | DESX | AES_128 | AES_192| AES_256 - šifrovací algoritmus, který se použije při vytvoření klíče
heslo - heslo pro zašifrování symetrického klíče
nazev_jineho_sym_klice - název symetrického klíče, který musí být vytvořen pro zašifrování jiného symetrického klíče
nazev_asym_klice - název asymetrického klíče vytvořený pro zašifrování symetrického klíče
Syntaxe pro otevření symetrického klíče
OPEN SYMMETRIC KEY nazev_sym_klice
DECRYPTION BY ASYMMETRIC KEY nazev_asym_klice WITH PASSWORD = heslo_priv_klice | SYMMETRIC KEY nazev_sym_klice | PASSWORD 'heslo'
CLOSE SYMMETRIC KY nazev_sym_klice
nazev_sym_klice - název vytvořeného symetrického klíče, který chcete otevřít
nazev_asym_klice - pokud je symetrický klíč zašifrován pomocí asymetrického klíče, tak pro otevření je nutné zadat jeho název
heslo_priv_klice - jedná se o heslo pro privátní klíč asymetrického klíče uvedeného při vytváření asymetrického klíče
heslo - heslo, kterým je zašifrován symetrický klíč při jeho vytváření
Syntaxe šifrovací funkce EncryptByKey
EncryptByKey(Key_Guid('nazev_sym_klice'), nazev_sifrovaneho_sloupce)
nazev_sym_klice - název vytvořeného a otevřeného symetrického klíče
nazev_sifrovaneho_sloupce - název sloupce v tabulce, který chcete zašifrovat
Nejlepší vysvětlení bude na nějakém příkladu a proto si vypujčím příklad z předchozí části a použiju ho k ukázce symetrického šifrování.
Po provedení příkazu INSERT se zašifruje vložená hodnota a po zobrazení dat v tabulce uživatelé se zašifrovaná hodnota hesla zobrazí v nečitelné podobě.
Symetrické dešifrování
Při dešifrování není zapotřebí používat jiný klíč než ten, kterým byl daný záznam zašifrován, protože při použití symetrického klíče se data šifrují a dešifrují stejným klíčem.
Syntaxe dešifrovací funkce DecryptByKey
DecryptByKey(nazev_zasifrovaneho_sloupce)
nazev_zasifrovaneho_sloupce - název zašifrovaného sloupce, který chcete dešifrovat
Stejně jako v minulé části si ukážeme jak bude vypadat příkaz pro dešifrování zašifrované hodnoty (v našem případe heslo).
Pokud si vyzkoušíme zobrazit údaje v tabulce uživatelé, kde jsme dešifrovali dříve zašifrovanou hodnotu hesla, tak jí uvidíme v čitelné podobě, tak jak jsme jí vložili do tabulky.
Tato druhá část o šifrování a dešifrování v MS SQL měla za úkol ukázat způsob použití symetrického šifrování, které se využívá v případech, kdy databáze obsahuje velké množství údajů. Kdybychom totiž použili asymetrické šifrování, tak by z hlediska bezpečnosti byla naše databáze zabezpečena velice dobrou ochranou, ale za to její rychlost by se rapidně snížila. Proto je v této situaci lepší použít symetrické šifrování. V příští části bude řeč o třetí variantě šifrování a dešifrování a to za pomoci certifikátu.
Pozn. Šifrování dat využijete nejčastěji při ukládání uživatelských hesel, tak jako v našem ukázkovém příkladě.
Související články: