Šifrování databáze – použití šifrovací technologie pro převod informací uložených v databázi (DB) na šifrovaný text , který znemožňuje čtení osobám, které nemají šifrovací klíče [1] .
Hlavní přístupy lze klasifikovat podle úrovně, na které dochází k šifrování [1] [2] :
Také se nazývá „transparentní“ ( anglicky Transparent Database Encryption , TDE). Tato technologie se používá například v produktech Microsoft a Oracle pro šifrování a dešifrování vstupu/výstupu databázových souborů . Data jsou šifrována před zápisem na disk a dešifrována při načítání do paměti, což řeší problém ochrany "neaktivních" dat, ale nezajišťuje bezpečnost informací během přenosu komunikačními kanály nebo během používání. Výhodou TDE je, že šifrování a dešifrování jsou pro aplikace transparentní, to znamená, že je není třeba upravovat [3] [4] [5] .
TDE se aplikuje na databázové soubory a transakční protokol na úrovni stránky. Stránky jsou šifrovány pomocí speciálního šifrovacího klíče symetrické databáze ( Database Encryption Key ), chráněného certifikátem, který je uložen v hlavní databázi a zašifrován svým hlavním klíčem, nebo asymetrickým klíčem, chráněným pomocí Extensible Key Manager ( EKM ). Použití TDE nezvětšuje velikost šifrované databáze a dopad na výkon je zanedbatelný [3] .
TDE se aplikuje na databázové soubory na úrovni sloupců. Pro tabulku obsahující sloupce vybrané k šifrování je vytvořen symetrický šifrovací klíč chráněný hlavním klíčem, který je uložen na bezpečném místě mimo databázi, tzv. peněženka ( anglicky Wallet ). Zašifrované klíče tabulek jsou obsaženy v Data Dictionary [ 4 ] .
Je důležité si uvědomit, že tradiční metody šifrování databáze obvykle šifrují a dešifrují obsah databáze, která je spravována systémem správy databáze, který běží nad operačním systémem [6] . To snižuje zabezpečení informací, protože šifrovanou databázi lze provozovat na otevřeném nebo potenciálně zranitelném operačním systému . Microsoft například používá technologii Encrypting File System (EFS) k zajištění šifrování na úrovni souborů . Každý objekt je zašifrován jedinečným šifrovacím klíčem souboru , chráněným certifikátem uživatele. Tento certifikát může být složený, což umožňuje přístup k souboru více uživatelům. Vzhledem k rozšíření rozsahu šifrování může použití EFS snížit výkon a zkomplikovat správu, protože správce systému potřebuje přístup k operačnímu systému, aby mohl používat EFS [7] [8] .
Jedním z příkladů šifrování na úrovni databáze je šifrování na úrovni sloupců ( Eng. Column-Level Encryption ), které zapisuje již zašifrovaná data do databáze a samotné databáze – bez dalšího šifrování – do úložiště. Rysem šifrování na úrovni sloupců je použití jediného klíče při zpracování dat jednoho sloupce. Klíče mohou být přiřazeny uživatelům a chráněny heslem, aby se zabránilo automatickému dešifrování, ale to komplikuje správu databáze. Při použití šifrování na úrovni sloupců je třeba provést změny v klientských aplikacích. Navíc se snižuje výkon databáze [4] [7] .
Při šifrování na úrovni aplikace je proces šifrování prováděn aplikací, která vytváří nebo upravuje data, to znamená, že k němu dochází před zapsáním do databáze. Tento přístup je flexibilnější, protože aplikace zná role nebo oprávnění uživatelů a také informace o tom, která data jsou soukromá [8] [9] .
Jednou z hlavních výhod šifrování zabudovaného do aplikace je, že není potřeba používat další řešení k ochraně dat při přenosu přes komunikační kanály, protože jsou odesílána již zašifrovaná. Další výhodou této metody je, že krádež důvěrných informací se stává obtížnější, protože útočník musí mít přístup k aplikaci, aby mohl dešifrovat data uložená v databázi [8] [9] .
Pro implementaci šifrování na aplikační úrovni je nutné provést změny nejen v samotné aplikaci, ale také v databázi. Problémy mohou být i s výkonem databáze, která například ztrácí schopnost indexovat a vyhledávat. Další nevýhodou je správa klíčů v systému s takovýmto šifrováním. Vzhledem k tomu, že databázi může používat více aplikací, jsou klíče uloženy na mnoha místech, takže jejich špatná správa může vést ke krádeži informací nebo nemožnosti je použít. Kromě toho, pokud je potřeba změnit klíč, musíte nejprve dešifrovat všechna data pomocí starého klíče a poté je znovu zašifrovat pomocí nového klíče [8] [9] .
Je to jeden příklad šifrování na úrovni aplikace. V architektuře lze vyčlenit [10] : proxy server , ke kterému je zabezpečený přístup z aplikace, server s SQL databází, ve které jsou šifrovány sloupce. Požadavky z proxy serveru jdou na tento databázový server (eng. DBMS server) přes kanál, který má být nezabezpečený. Rozdíl oproti výše uvedenému šifrování na úrovni sloupců je v tom, že server nedešifruje data sloupce, navíc proxy server neposílá klíče ani jiné informace, které serveru umožňují sloupce dešifrovat. Požadavky z proxy serveru vypadají z pohledu serveru s databází jako běžné příkazy pro práci s SQL databází. Server proto může mít hotové řešení např. v podobě CryptDB MySQL používané autory . Protože server DBMS může provádět funkce pouze na šifrovaných datech, úkolem serveru proxy je převádět požadavky uživatelů na ekvivalentní požadavky a operace, které pracují se šifrovanými daty. Tento problém se řeší pomocí různých tříd šifer, jejichž společným znakem je zachování určité vlastnosti prostých textů. Některé z nich jsou uvedeny níže. [deset]
Deterministické šifry, z anglického deterministic encryption. Skládá se ze všech šifer, které mají následující vlastnost: se stejným klíčem jsou stejným způsobem zašifrovány i stejné otevřené texty.
Pokud jsou tedy všechna data ve sloupci zašifrována takovouto šifrou, pak operace na sloupci prostých dat, které vyžadují porovnání dvou hodnot, jsou ekvivalentní operacím na sloupci zašifrovaných dat. Například, pokud chce uživatel spočítat počet řádků s hodnotou ve sloupci Name rovnou „Alice“, pak proxy nahradí pouze parametry v požadavku uživatele, nikoli operátory. "Alice" - na odpovídající šifrový text. Tato třída šifry vám umožňuje spouštět dotazy obsahující mimo jiné: COUNT, GROUP BY, DISTINCT a SELECT s predikátem rovnosti nebo nerovnosti. Příkladem deterministické šifry je bloková šifra s pevným inicializačním vektorem (anglicky IV, inicializační vektor) [11] .
Třída HOMHomomorfní šifry, z anglického homomorphic encryption. Tato třída se skládá ze šifer, které [12] transformují hodnoty ve sloupcích tak, aby operace na nich jednoznačně odpovídala, případně jiné, operaci se šifrovými texty. Architektura CryptDB používá kryptografický systém Peye , který vám umožňuje vypočítat šifrový text součtu hodnot, pokud je znám šifrový text každé z nich, konkrétně:
Pokud je tedy sloupec zašifrován homomorfním šifrováním, lze součet zvolených hodnot vypočítat dešifrováním součinu odpovídajících šifrovaných textů. Proto proxy server přeloží uživatelův požadavek SUM na produkt (vyjádřený pomocí EXP, LOG) a poté s odpovědí z databázového serveru jej dešifruje a vydá uživateli.
Třída OPEŠifry pro zachování pořádku, z angličtiny kódování chránící řád. Šifra z této třídy působí na data ve sloupci tak, že .
Pokud je tedy sloupec zašifrován šifrou třídy OPE, pak volání ORDER BY provedené na prostém textu sloupce je ekvivalentní volání na zašifrovaném sloupci. Pro taková data jsou k dispozici operace s rozsahem hodnot BETWEEN a také MIN, MAX, RANK. Příkladem takového šifrování by bylo zobrazení celého čísla p na číslo c, které je součtem p pseudonáhodných kladných čísel [13] .
Odolnost proti kryptoútokům
Mezi nevýhody výše popsaných tříd šifer a architektury patří zejména zranitelnost vůči některým známým typům útoků. Naveed , 2015 uvažuje útočníka, který má přístup k šifrovaným textům a má určité apriorní znalosti o distribuci otevřeného textu. Předpoklad se shoduje v reálném životě, například databáze může obsahovat informace lékařského charakteru a útočník kromě přímého přístupu do šifrované databáze může mít informace ze sčítání lidu nebo z podobných institucí. Tedy znát rozložení např. krevních skupin. Na základě předpokladu, co přesně má útočník k dispozici, navrhují autoři několik metod pro obnovu dat ve sloupcích zašifrovaných jak šifrou DET, tak šifrou OPE. Vzhledem k tomu, že deterministická šifra mapuje stejný šifrovaný text na stejnou hodnotu ve sloupci, bude rozložení četnosti dat v šifrovaném sloupci odpovídat distribuci prostého textu. Klasická frekvenční analýza má složitost , kde N je velikost celé sady otevřených textů. To znamená, že takový útok je účinný, pokud je N malé. Útok podobný frekvenční analýze je aplikován na sloupec se šifrováním zachovávajícím pořadí, ale místo konkrétních hodnot frekvence se porovnává pořadí v sadě šifrovaného textu sloupce s hodností slova v sadě prostého textu. Jak již bylo uvedeno, útok je nejúčinnější pro sloupce, kde je soubor možných otevřených textů zastoupen nejúplněji [14] .
Byla také vyvinuta metoda útoku pomocí empirické distribuční funkce (ECDF), která je vhodnější pro napadení sloupce s nerovnoměrně prezentovanými šifrovými texty, a metoda, která bere v úvahu informace z více sloupců a také jejich korelaci [15] . Kromě toho práce Minaud, 2019 uvádí schéma pro částečnou obnovu dat ve sloupci OPŽP, pokud jsou pouze informace o všech dotazech. Algoritmus je na rozdíl od předchozích škálovatelný, protože N [14] není zahrnuto v jeho odhadu složitosti .
Navíc ani šifry DET ani OPE, stejně jako všechny deterministické šifry, nemají vlastnost nerozlišitelnosti. Abychom pochopili, zda je daný šifrovaný text zašifrovanou zprávou, nebo zda si útočník potřebuje vyžádat šifrové texty pro obě zprávy, což je při použití otevřeného šifrování proveditelné, a porovnat je s daným šifrovým textem H [14] .
Existují dva hlavní způsoby šifrování informací: symetrické a asymetrické. Hlavním principem v nich je, že vysílač a přijímač zná předem šifrovací algoritmus a klíč ke zprávě, aniž by věděl, která informace je nesmyslná sada znaků [8] [16] .
Symetrické šifrování (šifrování soukromým klíčem) je nejstarší a nejznámější metoda. V kontextu databází zahrnuje soukromý klíč používaný k šifrování a dešifrování informací uložených v databázi a načtených z databáze. Tento klíč změní data takovým způsobem, že je nelze přečíst bez dešifrování. Zjevnou nevýhodou této metody je, že může dojít k úniku důvěrných informací, pokud je klíč v rukou osob, které by k datům neměly mít přístup. Použití pouze jednoho klíče v procesu šifrování má však výhodu v rychlosti a snadném použití této technologie [8] [16] [17] .
Problém dostat tajný klíč do nesprávných rukou při přenosu komunikačními kanály, které má šifrování privátního klíče, je vyřešen v asymetrickém šifrování (šifrování veřejného klíče), ve kterém jsou dva klíče navzájem příbuzné - jedná se o pár klíčů . Veřejný klíč zná každý a může být přenášen přes nezabezpečený komunikační kanál. Zatímco druhý, soukromý klíč, je uchováván v tajnosti a je jedinečný pro každého uživatele. Veřejný klíč se používá k šifrování dat a soukromý klíč k jejich dešifrování. Asymetrické šifrování je bezpečnější než symetrické šifrování, ale zároveň je výrazně pomalejší [8] [16] . Mezi další nevýhody patří skutečnost, že deterministické asymetrické šifrování, které se používá v databázích, ve kterých probíhá šifrování na aplikační vrstvě (viz CryptDB ), je zranitelné vůči útoku na základě zvoleného otevřeného textu [18] .