LUKS (od Linux Unified Key Setup ) je specifikace formátu šifrování disku původně zaměřená na použití v operačních systémech založených na jádře Linuxu . Primárním cílem technologie bylo poskytnout uživatelsky přívětivý, standardizovaný způsob správy dešifrovacích klíčů . Jednou z vlastností formátu je podpora více klíčů používaných na stejné úrovni pro přístup k jednomu šifrovanému médiu s možností jejich přidání a odebrání na žádost uživatele [1] .
První verzi LUKS, později pojmenovanou LUKS1, navrhl a implementoval Clemens Fruwirth v roce 2005 na základě kryptografického schématu TKS1, které poprvé popsal o rok dříve. Specifikace dále rozpracoval Milan Broz [1] . V roce 2018 vydal M. Brozh popis LUKS2 - rozšíření standardu LUKS1 s podporou dalších funkcí - například kontrola integrity . K dnešnímu dni má tento dokument status WIP ("probíhá") [2] .
Specifikace LUKS1 a LUKS2 definují standardy nezávislé na platformě pro použití v různých nástrojích. To nejen usnadňuje kompatibilitu a interoperabilitu různého softwaru , ale také zajišťuje, že software implementuje zdokumentovanou a bezpečnou metodu správy hesel [3] .
Referenční implementace LUKS1 a LUKS2 existují pro Linux a jsou dostupné prostřednictvím obslužného programu cryptsetup. Základem implementace je použití transparentního šifrovacího subsystému dm-crypt zabudovaného do linuxového jádra. Pod Microsoft Windows lze s FreeOTFE používat šifrovaná média LUKS1 [4] .
V „New Methods in Hard Disk Encryption“ z roku 2005 Fruwirth poskytuje analýzu požadavků na kryptosystém, který poskytuje uspokojivé zabezpečení a výkon na široce používaném uživatelském zařízení. Na základě výsledků této analýzy je navrženo kryptografické schéma „Template Key Setup 1“ neboli TKS1 a jeho modifikace TKS2, optimalizovaná pro aplikační implementaci a stává se základem specifikace LUKS [5] .
Symetrické šifrování datového pole jedním klíčem , pokud je nutné tento klíč změnit (např. při jeho kompromitaci ), vyžaduje povinné přešifrování celého množství dat novým klíčem. V mnoha případech se jedná o nepřijatelně dlouhou operaci, kterou je obtížné provést v reálném čase bez přerušení systému [5] [3] .
Tento problém má vyřešit použití klíčové hierarchie. Takový systém používá klíče různých úrovní: hlavní klíč , který se používá přímo pro šifrování dat a zůstává fixní po celý životní cyklus šifrovaného oddílu, a uživatelské klíče , který se používá k šifrování hlavního klíče. Obsah hlavního klíče je vždy uložen zašifrovaný s každým z klíčů uživatele. Vzhledem k tomu, že velikost hlavního klíče je malá a obvykle nezávisí na objemu hlavních dat, lze jej znovu zašifrovat v krátkém pevném čase [5] [3] .
Přidání nového uživatelského klíče se provádí obnovením hlavního klíče jedním z již používaných uživatelských klíčů a jeho zašifrováním novým. Uživatelský klíč se změní stejným způsobem, ale kopie hlavního klíče zašifrovaná starým klíčem se přepíše. Smazání uživatelského klíče nevyžaduje zadání žádných klíčů a spočívá ve zničení kopie hlavního klíče zašifrovaného tímto klíčem. Každý z uživatelských klíčů tedy poskytuje přístup k zašifrovaným datům, přičemž jakýkoli klíč lze odvolat nebo změnit, aniž by bylo nutné znovu šifrovat celé pole dat. Je třeba poznamenat, že toto schéma vyžaduje trvalé uložení alespoň jedné kopie hlavního klíče zašifrovaného známým uživatelským klíčem [5] [3] [6] .
Sdílení tajemstvíV praxi může nastat problém s implementací přístupu k zašifrovaným datům za předpokladu, že má subjekt více uživatelských klíčů současně. Pro takový scénář používá TKS1 Shamirovo schéma využívající prahové schéma [7] .
Mnohá fyzická zařízení pro ukládání dat – zejména pevné magnetické disky – mají tu vlastnost, že zadržují stopy informací, které z nich byly odstraněny, i když jsou zcela přepsány, a to v takové míře, že existuje riziko nežádoucí obnovy. Některé konstrukční vlastnosti disků – například přeřazení náhradních sektorů – činí toto riziko zvláště kritickým v podmínkách použití hierarchie klíčů kvůli malé velikosti šifrovaného hlavního klíče, který se často vejde do jednoho sektoru [5] [8] .
Prohlášení o problémuÚkol minimalizace pravděpodobnosti obnovy datového pole (například kompromitované kopie hlavního klíče) po pokusu o jeho zničení spočívá ve vytvoření speciální „křehké“ datové struktury, tedy takové nevratné destrukci jakéhokoli z nichž malá část výrazně sníží šance na obnovu všech původních dat [5] .
Let - informace, která vyžaduje možnost nevratného zničení, - datová struktura sestávající z bloků . Převzít hodnoty od , — od pro všechny . Pak musí existovat funkce , , která staví na , a funkce , , která obnovuje . Pak je požadováno, aby nebylo možné obnovit, pokud je alespoň jedna z komponent poškozena , jinými slovy,
P [ D ( s jeden , … , s i − jeden , X , s i + jeden , … , s n ) = D ] = jeden | D | {\displaystyle P[{\mathfrak {D}}(s_{1},\ldots ,s_{i-1},x,s_{i+1},\ldots ,s_{n})=D]={ \frac {1}{|\mathbb {D} |}}} pro všechny a pro všechny . Jakékoli lze získat se stejnou pravděpodobností, pokud alespoň jeden chybí. Jednoduše řečeno, velmi záleží na každém argumentu .V případě úmyslného přepsání všech bloků takové struktury exponenciálně roste šance, že alespoň jeden z nich bude nenávratně zničen a v důsledku toho nebude možné obnovit všechny původní informace [5] [8] .
ŘešeníJednoduché schéma pro vytvoření takové závislosti může být následující: pro datovou strukturu vygenerujte bloky náhodných dat a vypočítejte . Poté lze obnovu provést jako V tomto případě nenávratné zničení alespoň jednoho bloku vede k neobnovitelnosti původní informace. Tento návrh lze považovat za variantu Shamirova schématu, až na to, že všechny části tajemství jsou uloženy na jednom místě. [7]
Toto schéma lze vylepšit zavedením prvku bitové difúze do řetězce XOR. Pak i částečné poškození jakéhokoli prvku v rozsahu jednoho nebo několika bitů výrazně ovlivní výsledek restaurování. K tomu lze použít nějakou kryptografickou hashovací funkci . Let - bloky náhodných dat, pak musíte vypočítat řetězec hodnot hash: , , a vypočítat jako . V souladu s tím se pro obnovení řetězce hodnot hash vypočítá znovu a
Tento algoritmus ukládání dat se nazývá AFSplitter a používá se v kryptografickém schématu TKS1 k ukládání kopií hlavního klíče zašifrovaného uživatelskými klíči [5] [8] .
Jako součást obrany proti útokům hrubou silou na uživatelsky generovaná hesla, která mají tendenci mít nízkou entropii , využívá schéma TKS1 standard PBKDF2 k odvození uživatelského klíče z hesla , čímž se zvyšuje cena hrubé síly, aniž by došlo ke snížení výkonu při běžném používání [ 5] [8] [9] .
Konečná sekvence akcí provedených podle schématu TKS1 za účelem získání přístupu k šifrovanému médiu [5] :
TKS2 je v každém ohledu podobný TKS1, kromě toho, že uložená kopie hlavního klíče je nejprve zpracována AFSplitterem a poté zašifrována uživatelským klíčem. Při dešifrování klíče získaného z PBKDF2 je tedy uložená datová struktura nejprve dešifrována a poté zpracována pomocí AFMerge pro získání konečného uživatelského klíče. Toto schéma se lépe hodí pro implementaci transparentního šifrování a právě toto schéma vytvořilo základ standardu LUKS 1.0. [5] [3] .
Cílem vytvoření specifikace LUKS bylo standardizovat systém správy klíčů pro diskový oddíl, ke kterému se přistupuje prostřednictvím šifrování datového proudu. Prioritou byla bezpečnost všech fází práce s klíči v podmínkách používání zařízení dostupného běžnému uživateli. LUKS je považován za referenční implementaci modelu TKS2 a jako takový má poskytovat následující výhody [3] :
Mezi výhody LUKS navíc patří zajištění kompatibility prostřednictvím standardizace a bezplatná licence (GNU GPL). [1] [3]
Sekce LUKS1 se skládá z následujících částí [1] :
Hlavička LUKS spolu s obsahem sekce klíče KM poskytuje všechny potřebné informace pro přístup k šifrovanému oddílu. Záhlaví obsahuje následující údaje [1] :
kouzlo | Podpis záhlaví oddílu LUKS |
verze | Verze LUKS |
jméno-šifry | název šifry |
šifrový režim | parametry šifry |
hash-spec | hash používaný v režimu HMAC pro všechny operace PBKDF2 |
užitečné zatížení-offset | počáteční offset šifrovaných dat (v sektorech) |
klíčové bajty | velikost klíče v bajtech |
mk-digest | kontrolní součet hlavního klíče |
mk-trávicí-sůl | sůl používaná v PBKDF2 |
mk-digest-iter | počet iterací PBKDF2 |
uid | UUID oddílu |
klíč-slot-1 | slot na klíče 1 |
klíčová drážka-2 | slot na klíče 2 |
… | … |
klíčová drážka-8 | slot na klíče 8 |
Záhlaví a obsahové části klíčů mohou být uloženy na jiném fyzickém médiu než samotná šifrovaná data. Pokud dojde ke ztrátě záhlaví nebo částí obsahu klíčů, nebude možné získat přístup k zašifrovaným datům [5] .
Každý z 8 slotů klíče v phdr odpovídá jedné části obsahu klíče a obsahuje následující informace [1] :
aktivní | stav slotu (povoleno/zakázáno) |
iterací | počet iterací PBKDF2 |
sůl | sůl pro PBKDF2 |
klíč-materiál-offset | posun začátku sekce klíčového obsahu |
pruhy | počet jízdních pruhů pro ochranu při obnově |