Zabezpečování citlivých údajů v 21. století
Rozmohl se nám tu takový nešvar... Během týdne jsem obdržel hned dva e-maily s přílohou obsahující potencionálně citlivé údaje. V prvním případě v dokumentu bylo akorát pár osobních údajů, které se stejně válí v několik veřejně přístupných registrech, takže... ehm. V druhém případě v dokumentu už pár neveřejných údajů bylo, takže by to mělo smysl... kdyby provedení nebylo někdy z dob krále klacka. Takže si názorně ukážeme, jak zabezpečit citlivé údaje tak, že je to úplně k ničemu.
Oba e-maily mají společné totiž ještě dvě další věci. Za prvé - citlivý dokument je v zip souboru, který je zaheslovaný (což je to jediné zabezpečení). Za druhé - a to je ta horší část - heslo tvoří datum narození a tato skutečnost je v obou případech napsáno přímo v e-mailu s dokumentem. A už někde v téhle části začíná být jasné, že dostat se k dokumentu asi nebude úplně těžké. Jednak datum narození je jako heslo poměrně dost k ničemu, protože patrně adresát dokumentu nebude zdaleka jediný, který tento údaj ví. Ale dobře, vynecháme sociální inženýrství a zkusíme to dále technicky. Datum narození sestává z roku (4 číslice), měsíce (2 číslice) a dne (2 číslice). Dohromady tedy 8 čísel. Nicméně pokud se vlamujeme do cizího dokumentu, máme nejspíše i nějaké hrubé tušení, kolik danému člověku je let. Tedy už minimálně fakt, že daná osoba ještě žije, zredukuje první 4 číslice na řádově 100 čísel (když budeme hledat od novorozenců po 100 leté lidi). Měsíců je 12, to také není úplně příliš. A každý měsíc může mít maximálně 31 dnů. Když to tedy shrnu, hledáme 8 místné číslo s takovými omezeními, že daných kombinací příliš nebude. Ale jdeme dál, stejně chceme vyzkoušet, jak opravdu těžké je se k tomu dostat...
Potřebujeme tedy napřed nástroj na hledání hesel. Po chvíli hledání (řádově sekundy) nacházím fcrackzip. Ten umí různé věci, hledat hesla násilně, ... Ale to nás příliš nezajímá; když máme takhle jasnou představu, jak heslo vypadá, je zbytečné zkoušet všechny. fcrackzip nicméně umí zkoušet hesla ze slovníku. To je potencionálně zajímavé. Takže teď potřebujeme jen sestavit slovník možných hesel na základě podmínek výše. Takže asi po 5 minutách práce (včetně hledání dokumentace, jak se zase open with přesně používá... takže někdo, kdo v Pythonu píše něco častěji, to napíše ještě rychleji) máme tenhle script:
- #!/usr/bin/python3
- with open('zipdict.txt', 'w') as f:
- for year in range(1930, 2003):
- for month in range(1, 13):
- for day in range(1, 32):
- f.write('%04d%02d%02d\n' % (year, month, day))
- fcrackzip -u -D -p zipdict.txt sifrovany_soubor.zip