Portál AbcLinuxu, 6. května 2025 01:40
Diskové šifrování se používá stále víc a je stále jednodušší na použití i pro začátečníky, v mnoha distribucích je zašifrování systému nebo alespoň domovského adresáře otázkou několika kliknutí. Ochrání citlivá data v situacích jako je krádež notebooku nebo zaslání disku na reklamaci. Někdy ale potřebujeme skrýt i samotný fakt, že nějaká šifrovaná data máme.
Popiratelné šifrování bylo původně vymyšleno pro pomoc lidem v zemích, kde se nedodržují zásady jako právo nevypovídat, presumpce neviny nebo zákaz výslechů pod nátlakem. Software s jeho podporou většinou umožňuje, abychom měli k šifrovanému disku několik hesel, přičemž zadání jednoho hesla způsobí, že se rozšifrují nějaké soubory, a zadání druhého hesla způsobí zobrazení nějakých jiných souborů, přičemž není možné prokázat, jestli k disku existuje jedno, dvě nebo více hesel. Uživatel si tak může jedním heslem chránit běžné pracovní soubory a druhým heslem skutečně citlivé informace a v případě, že bude muset heslo vydat, vydá pouze první heslo.
Skutečnost samozřejmě není vždy tak růžová. Když je takové šifrování implementováno správně a opravdu není možné matematicky prokázat, jestli jsme rozšifrovali všechno, co na disku bylo, stává se nejslabším článkem opět uživatel, zejména jedná-li se o výslech s použitím pokročilých vyšetřovacích metod. Použitelnější výslechový psycholog bude vždy přesvědčivě tvrdit, že ví, že k disku existuje N+1 hesel, a vymyslí si k tomu i věrohodně znějící „důkazy“ (vyšetřovaného sledují již delší dobu a viděli ho v kavárně zadávat jiné heslo, některý z jeho kamarádů ho udal, …). Dovolil bych si tvrdit, že v případě psychického a fyzického nátlaku lze dostat všechna hesla z většiny lidí.
V devadesátých letech byly objeveny možnosti identifikace pachatelů z biologických vzorků pomocí DNA fingerprintingu. V USA odstartoval Innocence Project, jehož cílem bylo znovu otevřít případy, ve kterých by analýza DNA mohla odhalit, že pachatelem byl ve skutečnosti někdo jiný. Zjistilo se, že v amerických věznicích byla vězněna spousta nevinných a že čtvrtina vězňů, u kterých bylo později prokázáno, že jsou nevinní, se v průběhu vyšetřování přiznala.
Poslední dobou ale začínají nutnost popiratelného šifrování pociťovat i lidé v zemích, které bývají považovány za svobodné. V Británii platí zákon, podle kterého jste povinni vydat heslo k šifrovaným datům, jinak vám hrozí až dva roky vězení (nebo pět při podezření z terorismu). Ve Francii mají v rámci HADOPI něco podobného. Seznam právních systémů, kde něco takového platí, můžete najít v článku Povinné vydávání klíčů na Wikipedii.
Zajímavé je, že se něco takového děje i v USA, kde mají třeba právo nevypovídat zakotvené přímo v ústavě (stejně jako ČR). Byly učiněny určité pokusy tuto část ústavy obejít a vývoj daných případů je vůbec pozoruhodný.
České republice se popsané excesy zatím vyhýbaly, což je podle mě způsobeno tím, že téměř nikdo nešifruje, a proto ještě nedošlo k žádnému mediálně známému případu, kdy by policie potřebovala data a podezřelý nechtěl dát heslo. Obávám se, že jakmile k něčemu takovému dojde, po patřičném mediálním divadle se příslušný zákon připraví a protlačí. Ostatně daný článek Ústavy čeká už příští rok zkouška ohněm a uvidíme, jak obstojí…
Ač mi PŠ přijde jako neúčinná obrana před násilným páčením informací (maximálně tak lze získat čas), proti právnímu vymáhání by mohlo pomoci – alespoň dočasně. Pokud je případů, kdy někdo nechtěl vydat policii/soudu heslo k „normálně“ zašifrovanému disku, jako šafránu, precedentů s PŠ je jako tučňáků v Arktidě. První případy pravděpodobně skončí na nedostatečných technických znalostech zapojených složek. Pak uvidíme, jak se k tomu právo postaví.
Dá se však očekávat, že v případě většího rozšíření by mohl být příslušný software zakázán.
Jaké možnosti má linuxák, když chce použít popiratelné šifrování? Projekty Phonebook, StegFS a Rubberhose jsou beznadějně mrtvé, zbývá nám TrueCrypt a novinka – DM-Steg.
TrueCrypt umožňuje vytvořit takzvaný skrytý kontejner (hidden volume). V praxi pak disk vypadá zhruba takhle:
Postup výroby je takovýto:
Takový postup má bohužel několik problémů:
Pravděpodobně z těchto důvodů vznikl DM-Steg, který se zmíněné problémy snaží řešit:
steal
).steal
).DM-Steg se skládá z jaderného modulu a nástrojů pro správu v uživatelském prostoru. Modul se mi podařilo zkompilovat proti distribučním jádrům 3.0 a 3.2 z Debianu pro i686.
Budeme potřebovat vývojovou verzi OpenSSL, protože ta aktuální ještě neumí AES-XTS, který určitě chceme.
# cvs -d anonymous@cvs.openssl.org:/openssl-cvs co openssl # cd openssl/ # ./config # make
Stáhneme si samotný dm-steg, rozbalíme a v Makefile na začátku nastavíme cestu k souboru libcrypto.a
z vývojového openssl. Zkompilujeme pomocí make
a make driver
a zavedeme do jádra moduly drivers/sxts.ko
a drivers/dm-steg.ko
. Jádro by mělo zahlásit
device-mapper: steg: dm-steg loaded
V adresáři dm-stegu se nám vytvořilo několik binárek. Démona stegd
spustíme. stegctl
slouží pro komunikaci s démonem, stegdisk
umožní manipulovat s aspekty na disku a stegsetup
připojí po zadání hesla příslušný aspekt.
Pro testování jsem si vytvořil prázdný soubor a protože stegsetup
po nás později bude vyžadovat blokové zařízení, rovnou jsem ho nastavil přes loopback.
# dd if=/dev/urandom of=dekameron bs=1M count=200 # losetup /dev/loop5 dekameron
Na zařízení pak spustíme stegdisk
. Řekne, jak je soubor dlouhý a ukáže prompt. Doporučuji ve volné chvíli zadat help
a všechno si pročíst.
My si popíšeme, jak vytvořit následující strukturu:
A teď komentovaný postup, kterým se k tomu dospělo.
# ./stegdisk /dev/loop5 Substrate is 209715200 bytes
/dev/loop5> new 0 100% transparentni - Using 100% of available blocks (400 blocks of 512 KB) Warning: Creating new aspect in blank substrate. Existing data may be overwritten. Warning: Assuming substrate has been securely erased. Randomising header block layout... Randomising atom keyfrags... Free block: 0 Header block: 8000000 Setting up index table... Created transparent aspect 0 Updating region 0...
/dev/loop5> open 0
/dev/loop5:transparentni> new 0 50% prvni passphrase: Using 50% of available blocks (199 blocks of 512 KB) Warning: Creating new aspect in blank substrate. Existing data may be overwritten. Warning: Assuming substrate has been securely erased. Randomising header block layout... Randomising atom keyfrags... Free block: 0 Header block: 8000000 Setting up index table... Created encrypted aspect 0 Updating region 0...
/dev/loop5:transparentni> new 0 100% druhy passphrase: Using 100% of available blocks (199 blocks of 512 KB) Randomising header block layout... Randomising atom keyfrags... Free block: 4000000 Header block: c000000 Setting up index table... Created encrypted aspect 1 Updating region 0...
/dev/loop5:transparentni> aspect Aspect Total Bytes Blocks Data Bytes Name 0 104333312 197 103284736 prvni 1 104333312 197 103284736 druhy
/dev/loop5:transparentni> steal 1 10% Using 10% of available blocks (19 blocks of 512 KB) Created region 1
/dev/loop5:transparentni> region Region Bytes Density Base Limit 0 0 1 9961472 5% 0x800000 0xb080000
/dev/loop5:transparentni> new 1 100% tajny passphrase: Using 100% of available blocks (19 blocks of 512 KB) Randomising header block layout... Randomising atom keyfrags... Free block: 2000000 Header block: 6000000 Setting up index table... Created encrypted aspect 2 Updating region 1...
/dev/loop5:transparentni> write Warning: aspect transparentni has unwritten changes. Warning: aspect prvni has unwritten changes. Warning: aspect druhy has unwritten changes. Warning: aspect tajny has unwritten changes. Writing keyfrags... Writing index table... Writing journal... Nuking free block... Writing header... Calculating header key (level 1)... Aspect written Writing keyfrags... Writing index table... Writing journal... Nuking free block... Writing header... Calculating header key (level 1)... Aspect written Writing keyfrags... Writing index table... Writing journal... Nuking free block... Writing header... Calculating header key (level 1)... Aspect written Writing keyfrags... Writing index table... Writing journal... Nuking free block... Writing header... Calculating header key (level 0)... Aspect written /dev/loop5:transparentni> quit #
Pokud se budete chtít ke správě zařízení někdy vrátit a udělat třeba nějaké změny, stačí znovu spustit stegdisk
. Existující aspekt nahrajete příkazem load
. Nějaké info vám vždy vypíše příkaz print
. Více viz help
.
# ./stegsetup /dev/loop5 passphrase: Searching for aspect... Precalculating level 0... Precalculating level 1... Scanning for aspect header... Valid header found at 0xc000000 Using header at 0xc000000 Searching for aspect's parent... Precalculating level 0... Scanning for aspect header... Valid header found at 0x8000000 Using header at 0x8000000 Checking aspect transparentni meta data... Journal is clean. Created: /dev/mapper/steg0 Checking aspect prvni meta data... Journal is clean. Created: /dev/mapper/steg1 stegsetup succeeded.
Zařízení /dev/mapper/steg0
je teď samotný transparentní aspekt, na ten radši nesahejte. Zařízení /dev/mapper/steg1
je rozšifrovaný aspekt prvni a můžete s ním normálně pracovat – vytvořit na něm souborový systém a někam mountnout. Až vás to přestane bavit, všechna mapování zrušíte pomocí dmsetup remove_all
.
Připojovat do systému souborový systém, který oficiálně neexistuje, je vždycky problém. Data totiž ráda leakují a forenzní analytik na to pak může přijít. Oblíbenými zdroji informaci jsou například:
/var/log/syslog
. Linuxový device-mapper do něj zapisuje informace o mapovaných zařízeních, tedy v tomto případě o aspektech. A to samozřejmě i o těch, které mají zůstat skryté. Navíc když připojíte souborový systém, může být v logu vidět třeba jeho velikost – a forenzní analytik porovná velikosti připojovaných souborových systémů s velikostí aspektů, které získal díky heslům, které jste mu poskytli, a pokud se nějaká velikost neshoduje, už je tu zase podezřelé./tmp/*
. Může jít o nedávno objevené unikání historie terminálů nebo o dočasné soubory, které se vytvoří, když něco upravujete.Nejvhodnějším řešeím je skrytý operační systém – na tom stejném skrytém aspektu, jako jsou data, která chcete zpracovávat. Mělo by stačit přibalit dm-steg do ramdisku a hacknout ramdiskové initskripty (na Debianu /usr/share/initramfs-tools/
). To je ale mimo záběr už tak velmi dlouhého článku, takže možná někdy jindy…
Jak už jsem zmínil v úvodu, pokud po vás někdo bude chtít dešifrovat všechny aspekty, bude pravděpodobně pořád předpokládat, že je jich tam N+1. Jinými slovy dříve či později se dostanete do situace, kdy po vás někdo bude chtít násilím něco, co nemáte. Taková situace je obecně považována za suboptimální. Dá se tedy nějak zařídit, aby šlo prokázat, že jste rozšifrovali všechno? Ano, dá. Stačí vyplnit aspekty celé místo na zařízení a uvnitř aspektů vyplnit všechno místo nějakými nenáhodnými daty.
I pak ale můžete zůstat v podezření, že jste data ukryli třeba do šumu ve fotkách a zvukových nahrávkách (do hodiny stereo 44,1kHz záznamu se dá schovat 20 MB dat). Odpor je marný, jste ztraceni!
Dovolil bych si tvrdit, že v případě psychického a fyzického nátlaku lze dostat všechna hesla z většiny lidí.Ano, presne tak, viz treba zde
Což je z hlediska virtualizace polovičaté řešení. Zatímco virtuální stroje se přelévají mezi fyzickými stroji, takže je zajištěna vysoká dostupnost, tak virtuální úložiště je realizováno jako jedno fyzické (v lepším případě dvě). Do distribuovaných úložišť se nikomu nechce :(
Centralizace dat má i další nevýhodu: Zajímalo by mě, jak by se vyšetřovatel postavil k zajištění důkazu. Jestli by složitě hledal obraz inkriminovaného virtuálního stroje za provozu, nebo jestli by se rozhodl pro jistotu zkopírovat celé fyzické úložiště i s daty třetích osob, nebo jestli by prostě celé úložiště zabavil a odvezl na několik let do policejního skladu.
Vzpomínám si na jeden projekt, kde hostingová společnost neplatila elektriku, tak ji předběžným opatřením zapečetili celou budovu a odstřihly napájení. Problém byl, že se tím zákazníci společnosti stali nechtěnými rukojmími (několik týdnů měli systémy nedostupné jak on-line, tak fyzicky).
Dobré vědět, až ti budu prohrabávat byt, tak ve tmě.Osobně mám v plánu zabezpečit server i primitivním detektorem kovů ala indukční smyčka (takže jdi s plastovým šroubovákem) a kamerou s infrapřísvitem, jenž bude detekovat pohyb a světlo zároveň, takže přijď s optickou kamufláží :D.
ked urobi chybu napriklad udrzbar, co ti prisiel opravit chladenie v serverovni, tak neprecitas data.Nepředpokládám, že bych do místa které mám zabezpečené autodestrukčními zařízeními pouštěl údržbáře.
nebo levotočivou a pravotočivou verzí a pozorovat to pod polarizovaným světlem
Osobně operuji v módu ala jde po mě gestapoTj. zatavená ampule s KCN trvale pod jazykem?
Kdokoliv u koho se ukaze na disku detska pornografie je na odpis
A nechtělo by právě s tímto něco udělat? Jednak za dětskou pornografii lze považovat cokoliv a hlavně přítomnost DP na nějakém mediu prakticky nic neznamená. Myslím, že než věčně něco ukrývat a dokazovat, že jsem nic neudělal (což je pitomost, v právním státě musí nutně platit presumpce neviny), by bylo lepší to prostě obrátit. Takhle je to v podstatě Damoklův meč, který může spadnout na kohokoliv.
A nechtělo by právě s tímto něco udělat?Chtělo, ale nejen s tímto. Předřečník podle mě mohl klidně dát jako příklad „nález“ vydumpované databáze NBÚ - tam sice není takový společenský odpis, ale k odsouzení to může přispět dost.
a poustej ruzne fotkyA kde je vezmou, když je dětská pornografie nelegální?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.