A LUKS (a Linux Unified Key Setup -ból ) egy lemeztitkosítási formátum - specifikáció , amelyet eredetileg Linux kernelen alapuló operációs rendszerekben használtak . A technológia elsődleges célja az volt, hogy felhasználóbarát, szabványosított módszert biztosítson a visszafejtési kulcsok kezelésére . A formátum egyik sajátossága, hogy több, egymással egyenértékű kulcsot támogat egy titkosított adathordozó eléréséhez, a felhasználó kérésére lehetőség van ezek hozzáadására és eltávolítására [1] .
A LUKS első, később LUKS1 névre keresztelt verzióját Clemens Fruwirth tervezte és valósította meg 2005-ben, a TKS1 kriptográfiai séma alapján, amelyet egy évvel korábban írt le először. A specifikációt Milan Broz fejlesztette tovább [1] . 2018-ban M. Brozh kiadta a LUKS2 leírását – a LUKS1 szabvány kiterjesztését, amely további funkciókat is támogat – például az integritás-ellenőrzést . A mai napig ez a dokumentum WIP ("folyamatban") [2] státuszú .
A LUKS1 és LUKS2 specifikációk platformfüggetlen szabványokat határoznak meg a különféle eszközökben való használatra. Ez nemcsak a különböző szoftverek kompatibilitását és interoperabilitását segíti elő , hanem azt is biztosítja, hogy a szoftver dokumentált és biztonságos jelszókezelési módszert valósítson meg [3] .
A LUKS1 és LUKS2 referenciamegvalósításai léteznek Linuxra, és a cryptsetup segédprogramon keresztül érhetők el. A megvalósítás alapja a Linux kernelbe épített transzparens lemeztitkosítási alrendszer dm-crypt használata. Microsoft Windows alatt a LUKS1 titkosított adathordozók használhatók a FreeOTFE - vel [4] .
A 2005-ös "New Methods in Hard Disk Encryption" című kiadványban a Fruwirth elemzi egy olyan titkosítási rendszer követelményeit, amely kielégítő biztonságot és teljesítményt nyújt a széles körben használt felhasználói berendezéseken. Ennek az elemzésnek az eredményei alapján javasolt a „Template Key Setup 1” vagy TKS1 kriptográfiai séma, valamint annak TKS2 módosítása, amely az alkalmazás implementációjára optimalizált és a LUKS specifikáció alapjává válik [5] .
Egy adattömb szimmetrikus titkosítása egyetlen kulccsal , ha módosítani kell ezt a kulcsot (például ha feltörik ), a teljes adatmennyiség kötelező újratitkosítását új kulccsal kell végrehajtani. Sok esetben ez egy elfogadhatatlanul hosszú művelet, amelyet nehéz valós időben végrehajtani a rendszer megszakítása nélkül [5] [3] .
A kulcshierarchia használata ezt a problémát hivatott megoldani. Egy ilyen rendszer különböző szintű kulcsokat használ: mesterkulcsot , amelyet közvetlenül az adatok titkosítására használnak, és a titkosított partíció teljes életciklusa alatt rögzítettek maradnak, valamint felhasználói kulcsokat , amelyek a mesterkulcs titkosítására szolgálnak. A főkulcs tartalma mindig titkosítva kerül tárolásra a felhasználó minden egyes kulcsával. Mivel a mesterkulcs mérete kicsi, és általában nem függ a fő adatok mennyiségétől, rövid fix időn belül újratitkosítható [5] [3] .
Új felhasználói kulcs hozzáadása úgy történik, hogy a mesterkulcsot visszaállítjuk valamelyik már használt felhasználói kulccsal, és titkosítjuk egy újjal. A felhasználói kulcs ugyanígy megváltozik, de a főkulcs régi kulccsal titkosított másolata felülíródik. A felhasználói kulcs törléséhez nincs szükség kulcsok megadására, és az ezzel a kulccsal titkosított főkulcs másolatának megsemmisítését jelenti. Így a felhasználói kulcsok mindegyike hozzáférést biztosít a titkosított adatokhoz, miközben bármely kulcs visszavonható vagy megváltoztatható anélkül, hogy a teljes adattömböt újra titkosítani kellene. Megjegyzendő, hogy ez a séma megköveteli a mesterkulcs legalább egy példányának állandó tárolását, ismert felhasználói kulccsal titkosítva [5] [3] [6] .
Titok megosztásaA gyakorlatban probléma adódhat a titkosított adatokhoz való hozzáférés megvalósításával, feltéve, hogy az alany több felhasználói kulccsal rendelkezik egyidejűleg. Egy ilyen forgatókönyv esetén a TKS1 Shamir sémáját használja küszöbsémát használva [7] .
Számos fizikai adattároló eszköz – különösen a mágneses merevlemezek – megvan az a tulajdonsága, hogy a róluk törölt információk nyomait még akkor is megőrzi, ha azok teljesen felülíródnak, olyan mértékben, hogy fennáll a nem kívánt helyreállítás veszélye. A meghajtók egyes tervezési jellemzői – például a tartalék szektorok átcsoportosítása – ezt a kockázatot különösen kritikussá teszik kulcshierarchia használatának körülményei között a titkosított főkulcs kis mérete miatt, amely gyakran belefér egy szektorba [5] [8] .
A probléma leírásaEgy adattömb (például a főkulcs egy kompromittált másolata) visszaállításának valószínűségének minimalizálása a megsemmisítési kísérlet után egy speciális „törékeny” adatstruktúra felépítéséhez vezet, vagyis minden olyan visszafordíthatatlan megsemmisítéshez. amelyek kis része nagymértékben csökkenti az összes eredeti adat visszaállításának esélyét [5] .
Legyen - információ, amely visszafordíthatatlan megsemmisítés lehetőségét igényli, - blokkokból álló adatstruktúra . Vegyünk értékeket a , — -ból mindenki számára . Ekkor léteznie kell egy függvénynek , amely a -ra épít , és egy függvénynek , amely visszaállítja . Akkor szükséges, hogy a helyreállítás lehetetlen legyen, ha legalább az egyik alkatrész megsérült , más szóval,
P [ D ( s egy , … , s én − egy , x , s én + egy , … , s n ) = D ] = egy | D | {\displaystyle P[{\mathfrak {D}}(s_{1},\ldots ,s_{i-1},x,s_{i+1},\ldots ,s_{n})=D]={ \frac {1}{|\mathbb {D} |}}} mindenkinek és mindenkinek . Bármelyik beszerezhető ugyanolyan valószínűséggel, ha legalább egy hiányzik. Egyszerűen fogalmazva, ez erősen függ minden érvtől .Az összes ilyen szerkezetű blokk szándékos felülírása esetén exponenciálisan nő az esélye annak, hogy legalább az egyik helyrehozhatatlanul megsemmisül, és ennek eredményeként lehetetlen lesz az összes eredeti információ visszanyerése [5] [8] .
MegoldásEgy ilyen függőség létrehozásának egyszerű sémája a következő lehet: egy adatszerkezethez generáljon véletlenszerű adatblokkokat , és számítsa ki . Ekkor a helyreállítás a következőképpen történhet: Ebben az esetben legalább egy blokk helyrehozhatatlan megsemmisülése az eredeti információ visszaállíthatatlanságához vezet. Ez a kialakítás Shamir sémájának egy változatának tekinthető, kivéve, hogy a titok minden részét egy helyen tárolják. [7]
Ez a séma javítható, ha az XOR láncba bitenkénti diffúziós elemet vezetünk be. Ekkor bármely elem egy vagy több bites részleges sérülése is jelentősen befolyásolja a helyreállítás eredményét. Ehhez néhány kriptográfiai hash függvény használható . Legyen - véletlenszerű adatok blokkjai, akkor ki kell számítani a hash értékek láncát: , , és kiszámítani a következőképpen . Ennek megfelelően a hash-értékek láncának visszaállításához újra kiszámítjuk és
Ezt az adattárolási algoritmust AFSplitternek hívják, és a TKS1 titkosítási sémában használják a mesterkulcs felhasználói kulcsokkal titkosított másolatainak tárolására [5] [8] .
Az alacsony entrópiájú , felhasználók által generált jelszavak elleni brute force támadások elleni védelem részeként a TKS1 rendszer a PBKDF2 szabványt használja a felhasználói kulcsok jelszóból való származtatására , növelve a brutális erőszak költségeit anélkül, hogy a normál használat során a teljesítményt veszélyeztetné . 5] [8] [9] .
A TKS1 séma szerint végrehajtott műveletek végső sorrendje a titkosított adathordozóhoz való hozzáférés érdekében [5] :
A TKS2 minden tekintetben hasonló a TKS1-hez, azzal a különbséggel, hogy a mesterkulcs tárolt másolatát először az AFSplitter dolgozza fel, majd titkosítja a felhasználói kulccsal. Így a PBKDF2-től kapott kulcs visszafejtésekor a tárolt adatszerkezetet először dekódolja, majd az AFMerge feldolgozza, hogy megkapja a végső felhasználói kulcsot. Ez a séma alkalmasabb transzparens titkosítás megvalósítására, és ez a séma képezte a LUKS 1.0 szabvány alapját. [5] [3] .
A LUKS specifikáció létrehozásának célja az volt, hogy szabványosítsa a streaming titkosítással elérhető lemezpartíció kulcskezelő rendszerét. Elsőbbséget élvezett a kulcsokkal végzett munka minden szakaszának biztonsága a hétköznapi felhasználó rendelkezésére álló berendezések használati körülményei között. A LUKS a TKS2 modell referencia megvalósításának tekinthető, és mint ilyen, a következő előnyöket kívánja nyújtani [3] :
Ezenkívül a LUKS előnyei között szerepel a kompatibilitás biztosítása a szabványosítás és a szabad licenc (GNU GPL) révén. [1] [3]
A LUKS1 szekció a következő részekből áll [1] :
A LUKS fejléc a KM kulcs szakasz tartalmával együtt minden szükséges információt megad a titkosított partíció eléréséhez. A fejléc a következő adatokat tartalmazza [1] :
varázslat | LUKS szakaszfejléc aláírás |
változat | LUKS verzió |
rejtjel-név | titkosított név |
titkosítási mód | titkosítási paraméterek |
hash-spec | HMAC módban használt hash minden PBKDF2 művelethez |
hasznos teher-eltolás | a titkosított adatok kezdeti eltolása (szektorokban) |
kulcs-byte-ok | kulcsméret bájtban |
mk-emésztés | főkulcs ellenőrző összeg |
mk-emésztés-só | PBKDF2-ben használt só |
mk-digest-iter | a PBKDF2 iterációk száma |
uid | Partíció UUID |
kulcs-nyílás-1 | kulcsnyílás 1 |
kulcs-nyílás-2 | kulcsnyílás 2 |
… | … |
kulcs-nyílás-8 | kulcsnyílás 8 |
A kulcsok fejlécei és tartalmi részei más fizikai adathordozón is tárolhatók, mint maga a titkosított adat. Ha a kulcsok tartalmának fejléce vagy részei elvesznek, lehetetlenné válik a titkosított adatok elérése [5] .
A phdr 8 kulcsnyílása mindegyike a kulcstartalom egy-egy szakaszának felel meg, és a következő információkat tartalmazza [1] :
aktív | slot állapota (engedélyezett/letiltva) |
iterációk | a PBKDF2 iterációk száma |
só | só a PBKDF2-hez |
kulcs-anyag-offset | a legfontosabb tartalom szakasz kezdetének eltolása |
csíkok | sávok száma a helyreállítási védelemhez |