Masarykova univerzita Fakulta informatiky

Systémy pro ukládání autentizačních informací

Bakalářská práce

Radek Jirovský

Brno, Jaro 2012 Prohlášení

Prohlašuji, že tato bakalářská práce je mým původním autorským dílem, které jsem vypracoval samostatně. Všechny zdroje, prameny a literaturu, které jsem při vypracování používal nebo z nich čerpal, v práci řádně cituji s uvedením úplného odkazu na příslušný zdroj.

Radek Jirovský

Vedoucí práce: RNDr. Jan Kasprzak

ii Poděkování

Rád bych na tomto místě poděkoval svému vedoucímu, doktoru Janu Kasprzakovi, za zajímavý námět na bakalářskou práci a věnovaný čas. Dále bych chtěl poděkovat své rodině za poskytnutou podporu a zázemí.

iii Shrnutí

V této práci popisuji problematiku uchovávání autentizačních informací a porovnávám vybrané systémy na platformě (Figaro's 2, GNOME Keyring, KeePassX, KWallet a pwsafe). Analyzuji je jak z hlediska uživatelského rozhraní, tak z hlediska bezpečnosti – implementované bezpečnostní mechanizmy a použité algoritmy. Součástí práce je implementace vlastní konzolové aplikace pro správu autentizačních informací. Při vývoji jsem vycházel z poznatků získaných při zkoumání existujících systémů. Výsledkem je jednoduchá C++ aplikace s názvem Safe Storage s přehledným strukturovaným kódem, která imple­ mentuje základní funkcionalitu pro organizaci hesel. Aplikace využívá symetrické šifrování AES­256.

iv Klíčová slova uchovávání hesel, správa hesel, bezpečnost, Linux, symetrická kryptografie, CLI aplikace

v Obsah

1 Úvod...... 3 2 Uchovávání autentizačních informací...... 6 2.1 Terminologie...... 6 2.2 Zamezení úniku tajných informací...... 7 3 Přehled vybraných systémů...... 9 3.1 Figaro's Password Manager 2 ...... 10 3.1.1 Uživatelské rozhraní a funkce...... 10 3.1.2 Generátor hesel...... 11 3.1.3 Formát dat...... 11 3.1.4 Export/Import...... 12 3.1.5 Manipulace s hesly...... 12 3.1.6 Bezpečnostní problémy a nedostatky ...... 12 3.2 GNOME Keyring...... 14 3.2.1 Uživatelské rozhraní a funkce...... 14 3.2.2 Generátor hesel...... 15 3.2.3 Formát dat...... 16 3.2.4 Export/Import...... 16 3.2.5 Manipulace s hesly...... 16 3.2.6 Nedostatky a bezpečnostní problémy...... 17 3.3 KeePassX...... 18 3.3.1 Uživatelské rozhraní a funkce...... 18 3.3.2 Generátor hesel...... 19 3.3.3 Formát dat...... 20 3.3.4 Export/Import...... 20 3.3.5 Manipulace s hesly...... 21 3.3.6 Nedostatky a bezpečnostní problémy...... 21 3.4 KWallet...... 22 3.4.1 Uživatelské rozhraní a funkce...... 22 3.4.2 Generátor hesel...... 23 3.4.3 Formát dat...... 23 3.4.4 Export/Import...... 23 3.4.5 Manipulace s hesly...... 24 3.4.6 Nedostatky a bezpečnostní problémy...... 24 3.5 pwsafe...... 25 3.5.1 Uživatelské rozhraní a funkce...... 25 3.5.2 Generátor hesel...... 27 3.5.3 Formát dat...... 27 3.5.4 Export/Import...... 27 3.5.5 Manipulace s hesly...... 28 3.5.6 Nedostatky a bezpečnostní problémy...... 28 3.6 Přehledová tabulka...... 29 4 Vlastní aplikace...... 30 4.1 Uživatelské rozhraní...... 30

1 4.2 Popis zdrojového kódu...... 32 4.3 Formát dat...... 33 4.4 Šifrování a bezpečnost...... 33 4.5 Web projektu...... 33 5 Závěr...... 34 5.1 Zhodnocení existujících systémů...... 34 5.2 Shrnutí vlastní aplikace...... 35 Seznam zdrojů...... 36

2 1 Úvod

Lidé používají čím dál více služeb vyžadujících autentizaci, nejčastěji uživatelským jménem a heslem. Ať už se jedná o oblast IT nebo např. bankovnictví. Navíc bývá doporučováno používat pro každou službu jiná hesla. V praxi se spíše setkávám s tím, že uživatelé volí opakovaně stejné heslo. To aby nemuseli řešit, ke které službě patří jaké. Dalším nešvarem je také volba jednoduchých hesel. Podle mých zkušeností běžní uživatelé nejčastěji volí hesla vycházející z osobních údajů a čísel týkajících se jejich osoby – kombinace adres, dat narození nebo výročí, čísel telefonu nebo již používaných hesel apod. Snaží se jakkoliv vyhnout nutnosti pamatovat si desítky různých hesel. Pokud má jít navíc o bezpečná hesla (8 a více znaků, náhodné kombinace), je jejich zapamatování téměř nemožné. Tento problém uživatelé, kteří jsou nuceni volit bezpečná hesla, přirozeně řeší zapisováním hesel. Ať už na papír nebo v elektronické podobě do textového souboru. Tím se sice eliminují jednoduchá hesla, ale ta bezpečná jsou na druhou stranu relativně volně přístupná (papírek nalepený na monitoru, v lepším případě soubor hesla.txt na Ploše operačního systému). Řešením těchto problémů jsou právě systémy pro správu a uchovávání autentizačních informací. Pomocí jednoho pokud možno silného hesla jsou chráněna všechna ostatní hesla. Ta jsou šifrována pomocí symetrické kryptografie. V současné době existují dvě základní skupiny těchto systémů. V první skupině jsou systémy určené pro ruční správu hesel. Uživatel do nich sám podle uvážení vkládá používané autentizační údaje, třídí je do skupin, zapisuje si k nim poznámky apod. Pokud chce tyto údaje použít v nějaké aplikaci, obvykle je to vyřešeno jejich zkopírováním do systémové schránky. Uživatel je pak vloží na vhodné místo v cílové aplikaci. Často mají systémy v této skupině vylepšenou podporu pro přihlašovací údaje na webových stránkách,

3 1 Úvod což je obvykle nejčastější oblast vyžadující autentizaci. Systém pak například dokáže otevřít webovou stránku patřící k daným autentizačním údajům. Druhou skupinu tvoří systémy pro správu autentizačních informací integrované do operačního systému. Tyto systémy pak poskytují bezpečné úložiště autentizačních údajů pro další aplikace přes aplikační rozhraní. Toto rozhraní má obvykle každý systém specifické. V současnosti však existuje návrh univerzálního rozhraní Secret Service API1, které by poskytovalo jednotný přístup k bezpečnému úložišti bez ohledu na systém, který ho spravuje. Toto rozhraní je nyní v rané fázi a jeho podpora se teprve začíná rozšiřovat. Z předchozího textu je zřejmé, že jednotlivé aplikace musí být přizpůsobeny pro podporu těchto systémů. Výhodou je pak to, že se uživatel o ukládání hesel nemusí příliš starat. Pokud v dané aplikaci vybere volbu Zapamatovat heslo, aplikace se spojí s bezpečným úložištěm a heslo do něj uloží. V případě potřeby ho opět načte. Ruční správa hesel bývá u těchto systémů ve srovnání s první skupinou omezená pouze na základní úkony a není příliš pohodlná. V této práci se zabývám analýzou a porovnáním několika vybraných systémů pro správu autentizačních informací na platformě Linux. Z první skupiny jsou to Figaro's Password Manager 2, KeePassX a pwsafe. Z druhé skupiny jsou to systémy pro desktopová prostředí GNOME a KDE – GNOME Keyring a KWallet (více o výběru těchto systémů v kapitole 3). Každý systém pak analyzuji jak z hlediska uživatelského rozhraní a nabízených funkcí, tak z bezpečnostního hlediska. Zkoumám jaké postupy a algoritmy ve zdrojových kódech konkrétní systémy používají a jak zacházejí s citlivými tajnými informacemi. U každého systému pak popisuji nalezené nedostatky. V závěru pak všechny zkoumané systémy porovnávám. Z tohoto srovnání nejlépe vychází program KeePassX, který

4 1 Úvod disponuje propracovaným uživatelským rozhraním a dobrou mírou bezpečnosti. Z integrovaných systémů mohu doporučit GNOME Keyring, ale pouze pro ukládání méně citlivých údajů (více v kapitole 5.1). Součástí práce je také implementace vlastní aplikace Safe Storage pro uchovávání autentizačních informací s konzolovým rozhraním (první skupina systémů). Při vývoji jsem vycházel z poznatků získaných zkoumáním existujících systémů a snažil jsem se zkombinovat různé přístupy pro dosažení dobré úrovně bezpečnosti. Podrobnější popis aplikace je v kapitole 4. Budoucí přínos práce spočívá v usnadnění rozhodování, který systém použít. Důležité je také poukázání na konkrétní nedostatky v zabezpečení jednotlivých systémů. Aplikace Safe Storage pak může sloužit jako jednoduchý základ k vytvoření vlastního systému pro správu autentizačních informací podle potřeb každého pokročilejšího uživatele.

5 2 Uchovávání autentizačních informací

2.1 Terminologie

Každý systém pro správu autentizačních informací používá vlastní terminologii při označování jednotlivých částí systému. Pro databázi autentizačních informací se používají termíny jako klíčenka (z angl. keyring), peněženka (z angl. wallet), kolekce nebo čistě obecný pojem databáze. Zpravidla se jedná o soubor na disku se zašifrovanými autentizačními záznamy (symetrickou kryptografií). Každý autentizační záznam (angl. item, secret, entry) je složen minimálně z položek název a heslo. Podle potřeby se přidávají další atributy, např. přihlašovací jméno nebo URL. Výše zmíněná databáze je vždy chráněna hlavním heslem. To je zvoleno uživatelem a umožňuje následné dešifrování a zobrazení všech záznamů v databázi – z hlavního hesla je odvozen klíč k symetrické kryptografii. Proto by mělo být hlavní heslo dostatečně silné. Kromě hlavního hesla lze databázi zabezpečit i klíčovým souborem (z angl. key file). Klíčový soubor může být libovolný existující soubor. Z něj se spočítá kontrolní součet a ten je připojen k hlavnímu heslu (heslo je jím prodlouženo). Hlavní výhodou klíčového souboru je to, že může být umístěn na externím médiu, např. na USB paměti. Tím se z něj stává přístupový token.

6 2 Uchovávání autentizačních informací

2.2 Zamezení úniku tajných informací

Při uchovávání hesel je třeba dbát na to, aby tato hesla nemohla být přečtena neoprávněnou osobou. A to ať už přímo nebo pomocí škodlivého softwaru. U systémů pro uchovávání autentizačních informací se počítá s tím, že tato osoba (útočník) má pokročilejší znalosti. Proto je potřeba zajistit ochranu dat na více úrovních. Základním opatřením je zamezení přímému přečtení databáze s hesly. Toto se řeší pomocí symetrického šifrování, kdy klíč k šifře (hlavní heslo) zná pouze oprávněný uživatel. S šifrováním se pojí hrozba útoku pomocí hádání hesla (slovníkový nebo brute­force útok). To musí být v programu maximálně ztíženo. Proto se používají různě složité a časově náročné algoritmy odvozování klíče k šifře z hlavního hesla. Nejčastěji se k tomuto účelu používají jednosměrné hashovací algoritmy, které se opakovaně aplikují na heslo. Jedná se řádově o tisíce opakování. Výpočet klíče pak trvá stovky milisekund, což je přijatelné zpoždění při jednom dešifrování databáze. Při útoku, kdy je potřeba vyzkoušet miliony kombinací, představuje toto zpoždění velkou překážku. Čas potřebný k vyzkoušení všech kombinací na průměrném stroji pak lehce překročí délku lidského života. Další možností je zachycení hesla ve chvíli kdy je už dešifrované (nahrané v operační paměti). To je možné např. násilným ukončením programu a vygenerováním core souboru (obrazu paměti). V něm lze najít nechráněná hesla v otevřeném tvaru. Hesla mohou být ohrožena také při ukládání obsahu paměti na disk. To se děje při stránkování paměti nebo při uspání počítače na disk (hibernace). Stránkování lze zabránit použitím zamykání paměti. Toho lze docílit systémovým voláním mlock()2 z knihovny /sys/mman.h. Tato funkce uzamyká v paměti celé stránky

7 2 Uchovávání autentizačních informací a zabraňuje jejich odsunutí na disk. Odtud by mohl být získán jejich obsah. Uzamykání paměti však neřeší problém s hibernací, kdy se celý obsah paměti bez ohledu na uzamčení uloží na disk. Po jeho vyjmutí lze pak obsah odkládacího prostoru přečíst. Předchozí problém řeší některé aplikace tím, že v paměti drží hesla zašifrovaná a dešifrují je pouze tehdy, kdy je oprávněný uživatel chce přečíst. I tak se dešifrovaná hesla objeví na zlomek času v paměti. Šance na to, že v tomto stavu dojde k odložení paměti na disk je velice malá. Používá se také automatické uzamčení databáze hesel před přechodem systému do hibernace.

8 3 Přehled vybraných systémů

Následující systémy pro uchovávání autentizačních informací jsem vybral podle několika kritérií. Prvním byla samozřejmě platforma Linux a opensource licence. Všechny vybrané systémy lze ovšem provozovat i na dalších UNIX­like systémech. KeePassX i na Windows. Dalším kritériem byla živost a aktuálnost konkrétního projektu. Výjimkou je program pwsafe z roku 2005, který však jako jediný disponuje konzolovým rozhraním. Důležitá byla dostupnost a provozuschopnost těchto programů v aktuálních distribucích Linuxu. Pro mě důležitým faktorem byl programovací jazyk. Abych mohl dobře posoudit bezpečnost těchto programů, vybíral jsem ty psané v jazyce C a C++. Existuje několik dalších systémů programovaných v jazyce Python, Perl nebo .NET/Mono, ale s ohledem na své znalosti bych nebyl schopen relevantně posoudit jejich bezpečnost. Jde ovšem o málo rozšířené a nijak zásadní projekty na platformě Linux.

9 3 Přehled vybraných systémů

3.1 Figaro's Password Manager 2

Systém pro správu hesel Figaro's Password Manager 23 (dále jen FPM 2) ve verzi 0.79 navazuje na od roku 2004 neaktivní projekt Figaro's Password Manager. Rozhraní je přepsáno pro GTK2 knihovnu jazyka C a přibyly nové funkce (momentálně je ve vývoji verze 0.80 využívající novější GTK3). Aplikace je dostupná pro platformu Linux ve formě zdrojových kódů nebo v podobě binárního RPM balíku. K dispozici je také klon aplikace pro Android OS, který však databázový soubor s hesly dokáže pouze číst.

3.1.1 Uživatelské rozhraní a funkce

FPM 2 je možné ovládat pouze přes grafické rozhraní. Při prvním spuštění se zobrazí dialogové okno s výzvou k nastavení hlavního hesla (min. 4 znaky), případně klíčového souboru. Při každém dalším spuštění je nutné zadat hlavní heslo, případně cestu ke zmiňovanému souboru. Poté se zobrazí hlavní okno aplikace. To se skládá z horního pruhu nabídek, nástrojové lišty a seznamu uložených autentizačních informací. Přes horní pruh nabídek je možné nastavit, které atributy záznamů budou v seznamu zobrazeny. Záznamy je také možné přes nástrojovou lištu filtrovat podle uživatelem definovaných kategorií. K dispozici je i rychlé fulltextové vyhledávání. Dále aplikace uživatelům umožňuje vytvoření vlastních spouštěčů a jejich přiřazení jednotlivým datovým záznamům. Každý spouštěč má definovatelný konzolový příkaz s možností využít atributů z datového záznamu jako parametrů. Přednastaven je např. spouštěč Web, který otevře výchozí webový prohlížeč s adresou z atributu URL/Arg. Možné je použít i atributy User Name a Password. V rámci konfigurace spouštěče se také nastavuje, jakým způsobem se bude kopírovat User Name nebo Password – klasicky

10 3 Přehled vybraných systémů do schránky, do primárního výběru nebo kopírování nebude povoleno. Toto nastavení se aplikuje při zavolání spouštěče i při pokusu o ruční kopírování těchto atributů (tlačítka na nástrojové liště, kontextová nabídka).

3.1.2 Generátor hesel

Při vytváření nového autentizačního záznamu je možné nechat si vygenerovat nové heslo. Generátor umožňuje nastavit délku hesla v rozmezí 6­255 znaků (výchozí je 8). Zatržením lze vybrat množiny znaků ze znakové sady ASCII, které budou použity při generování (a­z, A­Z, 0­9, speciální znaky). Dále je zde volba pro vynechání snadno zaměnitelných znaků jako: velké ó/nula, malé el/jedna/ velké í. Naopak chybí volba pro generování tzv. snadno vyslovitelných hesel. Generátor bere náhodné znaky ze systémového generátoru /dev/random.

3.1.3 Formát dat

Záznamy v databázi jsou tvořeny 7 nepovinnými atributy: Title, URL/Arg, User Name, Password, Category, Notes a Launcher. Databáze autentizačních informací se ukládá do XML souboru. Jednotlivé elementy jsou v čitelném formátu, zašifrovány jsou pouze jejich textové hodnoty. Hlavička XML obsahuje informace o verzi programu. V dalším elementu následují informace o použitém šifrovacím algoritmu (v aktuální verzi programu se používá pouze AES­2564), zašifrovaná sůl a zašifrovaný SHA­2565 kontrolní součet všech datových položek bez hesel. Poté již následuje seznam spouštěčů a seznam autentizačních záznamů s jednotlivými atributy. Výchozí umístění databáze je v adresáři ~/.fpm/ a implicitně se udržuje 5 záložních kopií nazpět. Automatické ukládání změn

11 3 Přehled vybraných systémů a vytváření záloh lze změnit v nastavení.

3.1.4 Export/Import

Export hesel se provádí do XML souboru se stejnou strukturou jako původní databáze s tím rozdílem, že textové řetězce jsou v čitelném tvaru a není přítomná informace o šifrování nebo heslu. Před exportem je možné zvolit pouze konkrétní kategorii záznamů, případně zda se mají exportovat spouštěče. Import lze provést pouze z XML souboru se stejnou struktu­ rou, kterou produkuje export.

3.1.5 Manipulace s hesly

Při otevírání databázového souboru v FPM 2 dojde nejprve k ověření hlavního hesla. Pokud je navíc zvolena autentizace pomocí klíčového souboru, je spočítán jeho SHA­256 hash a výsledné heslo vznikne zřetězením hlavního hesla a tohoto hashe. Pro odvození šifrovacího klíče z tohoto hesla je použit algoritmus PBKDF26 využívající HMAC­SHA­256 s 8192 iteracemi. Poté dojde za pomoci odvozeného klíče pro AES­256 k dešifrování kontrolního součtu z databázového souboru a jeho porovnání s nově vypočítaným součtem. Pokud je porovnání úspěšné, heslo bylo zadáno správně. Po úspěšném ověření hesla dojde k dešifrování všech datových záznamů kromě hesel. Jednotlivá hesla jsou dešifrována až tehdy, jakmile si je uživatel vyžádá.

3.1.6 Bezpečnostní problémy a nedostatky

Prvním méně závažným nedostatkem programu FPM 2 je, že uživatel na první pohled nevidí, se kterým databázovým souborem aktuálně pracuje. K této informaci se musí proklikat přes horní pruh nabídek. Při práci s více databázemi tak může dojít k nechtěným změnám. Celkově na přepínání mezi databázemi není FPM 2 dobře

12 3 Přehled vybraných systémů přizpůsobena. Při spuštění aplikace bez parametrů se otevře výchozí databáze. Pokud poté uživatel otevře přes nabídku jinou databázi, k původní se už nemůže vrátit. Program hlásí, že je soubor zamčený. Pomůže jedině ukončení programu a opětovné spuštění. Řešením může být spuštění více instancí aplikace FPM 2 a pomocí přepínače [­f] při spuštění určit cestu k databázi. Dalším problémem je automatické uzamykání databáze při nečinnosti. To lze nastavit pouze pro situaci, kdy je aplikace minimalizovaná v systémové oblasti. Tato volba je však ve výchozím nastavení vypnutá. Dle mého názoru by mělo být možné nastavit automatické uzamčení databáze při nečinnosti, ať se aplikace nachází v jakémkoli stavu. Poslední nedostatek se týká manipulace s hesly v otevřeném tvaru ve zdrojovém kódu. Autor spoléhá pouze na to, že se hesla v otevřeném tvaru objeví v paměti programu pouze na relativně krátkou dobu a šance na odswapování na disk jsou malé. Poté jejich paměťový prostor přepíše nulami pomocí makra wipememory() převzatého z GnuPG knihovny util.h. Uzamykání paměti není využito.

13 3 Přehled vybraných systémů

3.2 GNOME Keyring

GNOME Keyring7 ve verzi 3.4 je součástí projektu GNOME. Sdružuje správu hesel, ssh klíčů a certifikátů (standard X.509). Tento systém je úzce provázán s operačním systémem, zejména při nasazení prostředí GNOME. Je zaměřen na spolupráci s ostatními aplikacemi pomocí několika aplikačních rozhraní komunikujících přes D­Bus jako je libgnome­keyring a ve vývoji je knihovna libsecret (implementace Secret Service API). Menší důraz je kladem na ruční zadávání hesel do databáze a pro verzi 3.x neexistuje plnohodnotné grafické rozhraní na správu hesel, pro verzi 2.x existuje Gnome Keyring Manager. Jeho nahrazení má za cíl aplikace GNOME Seahorse8, která slouží především jako rozhraní ke GPG agentu GnuPG 2. Její možnosti v oblasti správy hesel jsou prozatím velmi omezené.

3.2.1 Uživatelské rozhraní a funkce

Aplikace GNOME Keyring je navržená jako daemon běžící na pozadí (gnome­keyring­daemon) a je zaměřena na co nejvyšší míru integrace do operačního systému. Při prvním použití (např. při přihlášení do systému nebo při požadavku na uložení hesla od některé aplikace) je uživatel vyzván k zadání nového hesla k výchozí klíčence. Tu bude používat operační systém a aplikace k ukládání autentizačních informací. Při zadávání je zároveň zobrazován jednoduchý ukazatel síly hesla. Po nastavení hlavního hesla je GNOME Keyring připraven k použití. Veškerá interakce s uživatelem po přihlášení do systému poté spočívá v zadání hlavního hesla k databázi a jejím odemknutím. Odemknutí klíčenky může být volitelně řešeno pomocí PAM modulu, výchozí klíčenka je pak automaticky odemknuta při přihlášení a uživatel není dotazován na hlavní heslo (nastaví se stejně jako přihlašovací). Po dobu kdy je

14 3 Přehled vybraných systémů klíčenka odemknuta, mohou aplikace využívající příslušné API libovolně pracovat s hesly. Základním grafickým rozhraním pro správu klíčenek je aplikace GNOME , což je nástroj primárně určený pro správu klíčů a certifikátů. Má však i základní podporu pro přístup ke GNOME Keyring. Hlavní okno této aplikace má klasické rozložení. V horní části se nachází řádek nabídek, pod ním nástrojový panel s vyhledávacím polem. Dále jsou zde 3 záložky: Hesla, Osobní klíče a Další klíče. Pro správu databází hesel je důležitá záložka Hesla, obsahující seznam vytvořených klíčenek. Ty je možné libovolně odebírat a přidávat. Před zobrazením obsahu konkrétní klíčenky je nutné ji nejprve odemknout (pokud se nejedná o klíčenku odemykanou při přihlášení). Při pokusu o odemknutí se zobrazí dialog s dotazem na hlavní heslo. Lze zde také nastavit, zda se má klíčenka automaticky odemknout/uzamknout při přihlášení/odhlášení uživatele, pří­ padně po uplynutí zvolené doby nebo při nečinnosti. Po odemknutí se zobrazí jednotlivé záznamy, k dispozici jsou pouze atributy název a heslo. Záznamy je možné vytvářet, upravovat i mazat. Samotné heslo lze přečíst až po zobrazení vlastností záznamu. Žádné pokročilejší operace s hesly aplikace Seahorse neumožňuje. Další dvě záložky slouží pro správu klíčů pro asymetrickou kryptografii. Opět je zde seznam všech přítomných klíčů, se kterými je možné provádět operace vytváření, mazání, změny hesel k privátním klíčům, import a export veřejných částí i celých klíčů.

3.2.2 Generátor hesel

GNOME Keyring neobsahuje žádný nástroj na generování hesel. Klíče pro asymetrickou kryptografii jsou generovány pomocí GnuPG.

15 3 Přehled vybraných systémů

3.2.3 Formát dat

Každá položka v klíčence má následující tvar: název, heslo a libovolný počet atributů ve tvaru název=hodnota. Všechny řetězce jsou kódovány v UTF­8. Používá se několik přednastavených typů, např. pro síťová hesla obsahuje položka atributy: user, domain, server, object, protocol, authtype, port a password. Každá klíčenka má vlastní binární soubor se zašifrovanými položkami, umístěný v adresáři ~/.gnome2/keyrings/ Soubor obsahuje název klíčenky, časy vytvoření a posledního přístupu, specifická nastavení klíčenky, údaj o počtu iterací hashovací funkce, sůl a seznam zašifrovaných položek se seznamy jejich atributů. SSH klíče jsou ukládány v adresáři ~/.ssh/, v šifrovaném souboru (AES­128) privátní klíč a otevřeném tvaru veřejný klíč.

3.2.4 Export/Import

Aplikace GNOME Seahorse neumožňuje export ani import klíčenek s hesly. Jedinou možností je jejich ruční vykopírování z adresáře ~/.gnome2/keyrings/. SSH klíče je možné exportovat a importovat ve formátu ASC. Možné je samozřejmě i ruční kopírování.

3.2.5 Manipulace s hesly

Hlavní heslo každé klíčenky je hashováno pomocí SHA­256 s náhodně zvoleným počtem iterací (1000­2000). Výsledek je použit jako šifrovací klíč pro AES­128 k zašifrování záznamů s hesly. Při práci s tajnými informacemi se používá zamykání paměti, případně rovnou alokování neodswapovatelné paměti. Aplikace vyžaduje nastavení systémových limitů běžného uživatele pro zamykání paměti na minimálně 256KB (ulimit ­l). Pokud není limit dostatečný, zamykání se nepoužije. Pokud je nastavená proměnná prostředí GNOME_KEYRING_PARANOID, aplikace se ukončí.

16 3 Přehled vybraných systémů

Implicitně běží gnome­keyring­daemon pod účtem superuživatele, který nemá zamykání paměti omezeno. Tudíž není v praxi tento limit omezující.

3.2.6 Nedostatky a bezpečnostní problémy

Aplikace nemá vážnější nedostatky, nelze ovšem dobře kontrolovat, které aplikace přistupují k databázi. Nikde není možné zobrazit seznam povolených aplikací. Povolené aplikace navíc mají přístup k celé databázi, ne jen ke svým záznamům. Jistým problémem může být stav dokumentace projektu GNOME Keyring. Jde o poměrně starý a rozsáhlý projekt, který prochází intenzivními změnami. To je jeden z důvodů, proč je zdrojový kód poměrně nepřehledný a velice úsporně komentovaný. Webová dokumentace rychle ztrácí na aktuálnosti, místy je odkazováno i na 4 roky staré neaktuální zdrojové kódy a v popisu jednotlivých funkcí jsou jak již implementované, tak teprve plánované vlastnosti.

17 3 Přehled vybraných systémů

3.3 KeePassX

Aplikace KeePassX9 (aktuální verze 0.4.3) byla původně vyvinuta jako neoficiální port programu KeePass10 řady 1.x pro Linux (používá kompatibilní databázi). Později byly vytvořeny verze i pro Windows a Mac OS X. Existuje i aplikace pro Android OS pro čtení i zápis. Aplikace je primárně určená pro ruční správu hesel a s nimi spojených informací. Její rozhraní využívá framework pro C++.

3.3.1 Uživatelské rozhraní a funkce

KeePassX je možné ovládat pouze skrze grafické rozhraní navržené v Qt frameworku. Při prvním spuštění se zobrazí dialog k vytvoření nové databáze hesel. Zde je nutné nastavit hlavní heslo, případně klíčový soubor. Lze buď nastavit cestu k existujícímu souboru, nebo zde vygenerovat nový. Poté se zobrazí hlavní okno aplikace s nově vytvořenou databází, kterou je třeba ještě ručně uložit do libovolného umístění na disku. Při dalším spuštění KeePassX je uživatel vyzván k zadání hlavního hesla k naposledy otevřené databázi. Tuto výzvu je možné zavřít, poté se zobrazí prázdné hlavní okno a je možné otevřít libovolnou jinou databázi, případně provádět jiné operace. Rozvržení hlavního okna je víceméně standardní – v horní části je pruh nabídek, pod ním nástrojový panel s nejpotřebnějšími funkcemi a vyhledávacím polem. Vlevo jsou do stromové struktury uspořádané kategorie záznamů, lze je také vnořovat. V pravé části okna se potom zobrazuje seznam autentizačních záznamů ve vybrané skupině. K vybranému záznamu se pak vpravo dole zobrazují podrobné informace, které nejsou vidět v seznamu (datum vytvoření apod.). Standardně se zde nezobrazují uživatelská jména ani hesla. Ta jsou zobrazena až na požádání. Se záznamy je možné

18 3 Přehled vybraných systémů provádět základní operace, kopírovat atributy uživatelské jméno, heslo a URL do schránky, duplikovat záznamy a uložit přílohu (viz. dále). Z hlediska práce s více databázovými soubory lze nastavit záložky pro rychlejší přístup k často používaným databázím. U každé databáze je možné nastavit šifrovací algoritmus buď AES­ 256 (výchozí), nebo Twofish (256b). U algoritmů se dá nastavit i počet šifrovacích cyklů při odvozování klíče (viz. kapitola 3.3.5). U této volby je dostupné tlačítko po zjištění optimální hodnoty pro konkrétní počítač (zpoždění 1 s). Samozřejmě je možné změnit hlavní heslo databáze a také dodatečně nastavit klíčový soubor. Dále lze v nastavení vypnout pamatování historie otevřených souborů a umístění. Zapnout lze automatické vymazání schránky při kopírování hesla po zadané době, automatické zamknutí databáze při minimalizaci hlavního okna a při nečinnosti.

3.3.2 Generátor hesel

KeePassX obsahuje integrovaný generátor hesel. Lze generovat hesla ze tří skupin – náhodná, vyslovitelná a vlastní. U náhodných hesel je možné vybírat množiny znaků z ASCII sady, které se použijí (a­z, A­Z, 0­9, mezera, ­, _, další spec. znaky). Nechybí volba pro vynechání snadno zaměnitelných znaků a možnost vynucení použití alespoň jednoho znaku z každé množiny. U vyslovitelných hesel lze vybírat pouze ze znaků a­z, A­Z, 0­9 a speciálních znaků. Speciální znaky jsou většinou umisťovány na začátek a konec hesla. Čísla se objevují náhodně, chybí např. zaměňování nuly za ó, jedničky za i apod. U vlastních hesel lze vypsáním definovat které konkrétní znaky se použijí. Společné je nastavení délky hesla s indikací síly v závislosti na

19 3 Přehled vybraných systémů předchozím nastavení. Vynutit lze sběr entropie před každým generováním – zobrazí se dialog s ukazatelem průběhu a výzvou k hýbání myší a psaní na klávesnici.

3.3.3 Formát dat

Každý záznam má následující atributy: skupina, ikona, název, uživatelské jméno, URL, heslo, komentář, datum expirace a přiložený soubor. Při vytváření nového záznamu je nutné zadat heslo pro kontrolu dvakrát, zároveň je zobrazována jeho síla. Případně je možné heslo vygenerovat. K datovému záznamu je také možné přiložit libovolný soubor, který bude zkopírován a zašifrován do databázového souboru. Tady bych zmínil, že je dobré hlídat velikost souboru (max. desítky MB). S většími soubory má aplikace problémy a prodlužuje se odezva. Každá databáze má vlastní binární soubor ve formátu kompatibilním s původním KeePass 1.x. V něm je informace o algoritmu, sůl, počet iterací šifrování, pole skupin a pole záznamů.

3.3.4 Export/Import

Export databáze hesel je možné provést do textového souboru, kde je vždy název skupiny a pod ním záznamy se všemi atributy ve tvaru název: hodnota. Dalším formátem pro export je KeePassX XML. Obsahuje vždy skupinu a v ní vnořené jednotlivé záznamy s jejich atributy. Informace o vnořených skupinách je zachována strukturou XML. V tomto souboru jsou zahrnuty i přílohy jednotlivých záznamů jako binární data. Není možné exportovat pouze část databáze (např. skupinu), vždy se exportuje celá. Import lze provést z KeePassX XML popsaného výše. Na výběr je i KWallet XML (viz. kapitola 3.4) a PWM soubor produkovaný starším programem PwManager.

20 3 Přehled vybraných systémů

3.3.5 Manipulace s hesly

Pro odvození klíče k šifrovacímu algoritmu z hlavního hesla se z tohoto hesla vytvoří SHA­256 hash. Pokud je nastaveno ověřování pomocí klíčového souboru je opět spočítán jeho SHA­256 hash. Pokud je nastaveno ověřování jak pomocí hesla, tak pomocí souboru, je nejprve spočítán hash z hesla. K němu je připojen obsah klíčového souboru a z tohoto celku je opět spočítán SHA­256 hash. Tento hash je poté zašifrován pomocí AES­256, šifrovací klíč je náhodně vygene­ rován a uložen v databázovém souboru. Šifrování je opakováno (jednotky až desítky tisíc) podle předchozího nastavení databáze. Tím se nepatrně zvýší časová náročnost generování klíče, ale zároveň se značně prodlouží doba potřebná k nalezení klíče pomocí slovní­ kových a brute­force útoků. Výsledek šifrování je opět hashován po­ mocí SHA­256 a hash je použit jako klíč k šifrování databáze. Hesla v paměti jsou před nechtěným únikem chráněna pomocí dočasného šifrování pomocí alg. RC411, klíč je vygenerován náhodně. V případě potřeby jsou hesla dešifrována, zkopírována např. do schránky a opět zašifrována (jiným náhodným klíčem).

3.3.6 Nedostatky a bezpečnostní problémy

Asi jediným zřejmým nedostatkem je to, že aplikace nepoužívá uzamykání paměti s hesly. Spoléhá na to, že se v paměti hesla objeví otevřeně pouze zlomek času. Faktem je i to, že klíč k dočasnému zašifrování hesel se také nachází v paměti i když se pokaždé používá náhodný. Aktuální verze KeePass (bez X) pro Windows již uzamykání paměti obsahuje12.

21 3 Přehled vybraných systémů

3.4 KWallet

Program KWallet13 (kwalletd daemon14) ve verzi 1.8 patří do projektu KDE SC. Podobně jako GNOME Keyring sází na integraci do desktopového prostředí. Jeho hlavní funkcí je poskytnutí bezpečného úložiště hesel pro ostatní aplikace. K tomu se využívá D­Bus KWallet API. Program lze využívat i mimo prostředí KDE, je však nutné instalovat mnoho dalších závislých balíčků (stovky MB). Nejistý je budoucí vývoj tohoto projektu, protože vývojáři mají v plánu nahradit KWallet novým systémem KSecretsService využívajícím univerzální Secret Service API.

3.4.1 Uživatelské rozhraní a funkce

Při prvním použití KWallet vytvoří výchozí databázi hesel a vyzve k nastavení hlavního hesla. Heslo je nutné zadat dvakrát a je zobrazován grafický ukazatel síly hesla. Tato výchozí databáze se pak otevírá na pozadí podle toho, jak ji využívají aplikace. Každou aplikaci je při prvním pokusu o použití KWallet nutné explicitně povolit (dočasně/trvale). K ruční správě ukládaných hesel slouží KDE Wallet Manager (kwalletmanager). Hlavní okno obsahuje pouze horní panel nabídek a jednotlivé databáze znázorněné pomocí ikon. Zde je možné databáze spravovat. Vytvářet nové, mazat, měnit hlavní heslo, vynutit zavření a samozřejmě procházet obsah. Ten je organizován do složek, každá aplikace využívající KWallet má vlastní. Přes KDE Wallet Manager je také možné nastavovat subsystém KWalletd. Jeho použití je zde možné úplně vypnout. Dále lze nastavit automatické uzamčení databáze pokud ji nepoužívá žádná aplikace, uzamčení při spuštění spořiče a po určité době nečinnosti. Možné je zvolit ručně jinou výchozí databázi, případně nastavit další databázi pouze pro lokální hesla.

22 3 Přehled vybraných systémů

V nastavení je možné odebrat přístupová oprávnění aplikacím k jednotlivým databázím a lze vynutit zobrazení upozornění, pokud se nějaká aplikace pokusí kontaktovat KWallet.

3.4.2 Generátor hesel

KWallet neobsahuje generátor hesel.

3.4.3 Formát dat

Jednotlivé záznamy jsou tříděny do složek, ať už ručně vytvořených uživatelem nebo aplikacemi. V každé složce jsou předdefinovány čtyři kategorie záznamů: Hesla, Mapy, Binární data a Neznámé. V kategorii Hesla se ukládají pouze dvojice jméno a heslo. V kategorii Mapy je možné ukládat ke každému záznamu libovolný počet dvojic typu klíč­hodnota. Aplikace si sem ukládají záznamy podle potřeby. Kategorie Binární data slouží pro ukládání libovolných nestrukturovaných dat podle potřeb aplikací. Kategorie Neznámé je výchozí pro načítané položky, předtím než se načte jejich skutečný typ. Pokud se nenačetl jiný typ, zřejmě došlo k chybě a položka je vymazána, tzn. v kategorii Neznámé se nikdy žádné položky neobjeví. V databázovém souboru jsou na prvních čtyřech bytech uložené informace o verzi, použitém šifrovacím a hashovacím algoritmu. Dále je uložená vždy složka a počet položek v ní. Poté vždy záznam a jeho typ. Následují další složky a záznamy. Databázové soubory se ukládají do domovského adresáře uživatele (~/.kde4/share/apps//) v binárním tvaru, pojmenované podle názvu databáze s příponou *.kwl.

3.4.4 Export/Import

Jednotlivé databáze je možné exportovat do XML souboru. Ten obsahuje název databáze a poté vždy složku a v ní obsažená

23 3 Přehled vybraných systémů hesla v otevřené podobě. Import lze provést ze stejného XML souboru, do kterého se exportuje. Také je možné importovat záznamy ze staršího KWallet pro KDE 3. Možné je i ruční kopírování databázových souborů (*.kwl) z/do domovského adresáře uživatele.

3.4.5 Manipulace s hesly

Hlavní heslo k databázi je po blocích hashováno pomocí SHA­115 (156b). Mezi zpracováním každého bloku je opakovaně prováděna hashovací funkce na bezvýznamných datech. Toto se provádí jako záměrné prodloužení útoku typu brute­force. Jednotlivé bloky hashovaného hlavního hesla se spojí a výsledek je použit jako klíč k šifrovacímu alg. Blowfish16. Do databázového souboru se přidává kontrolní součet všech záznamů (SHA­1), který se po každém dešifrování kontroluje.

3.4.6 Nedostatky a bezpečnostní problémy

Bezpečnostní mezera se skrývá v absenci zamykání paměti. Dokonce v kódu (C++) není ani snaha přepisovat hesla v paměti pokud nejsou potřeba. V jeden okamžik se v paměti může nacházet celá databáze hesel v otevřené podobě. Dále je třeba zmínit, že se používají dnes již překonaný a méně odolný hashovací algoritmus SHA­1.

24 3 Přehled vybraných systémů

3.5 pwsafe

Program pro správu hesel pwsafe17 0.2 je v tomto výběru jako jediný navržen jako čistě konzolová aplikace. Tím se výborně hodí např. pro vzdálený přístup. Program je dostupný pouze ve formě zdrojových kódů (C++), tzn. pro jeho zprovoznění je potřeba jistá úroveň znalostí. Při jeho kompilaci s využitím přiloženého Makefile jsem se však nesetkal s žádnými komplikacemi. Pro dosažení plné funkcionality je třeba změnit vlastníka binárního souboru na superuživatele a nastavit suid bit. Toto nastavení je nutné k tomu, aby aplikace mohla libovolně používat zamykání paměti a nebyla omezena systémovými limity aktuálního uživatele. Pokud se toto nastavení neprovede, aplikace i přesto funguje. Upozorní však na to, že se zamykání paměti neprovádí. Další vývoj pwsafe už neprobíhá, ale v současné verzi je aplikace plně funkční.

3.5.1 Uživatelské rozhraní a funkce

Jak již bylo zmíněno, program pwsafe je vybaven pouze rozhraním pro příkazovou řádku. Nejprve je nutné vytvořit novou databázi. Tímto se vytvoří nový databázový soubor ve výchozím umístění (~/.pwsafe.dat).

$> pwsafe --createdb

Nebo lze pomocí přepínače [­f] (­­file) nastavit jiné umístění.

$> pwsafe --createdb -f /cesta/k/souboru/soubor

Program se poté dvakrát zeptá na hlavní heslo a skončí (hesla se při zadávání nevypisují na obrazovku). Jednotlivé záznamy se přidávají do databáze pomocí přepínače [­a] (­­add). Program nejprve ověří hlavní heslo a poté se

25 3 Přehled vybraných systémů zeptá na jednotlivé atributy záznamu. Heslo se nezobrazuje, je jej také možné vygenerovat (viz. další podkapitola).

$> pwsafe -a nazev Enter passphrase for pwsafe.dat: group []: username: radek password [return for random]: password again: notes: supertajné heslo

Všechny záznamy lze vypsat pomocí přepínače [­l].

$> pwsafe -f /cesta/nazev.dat -l Enter passphrase for /cesta/nazev.dat: mojedruheheslo - xjirovsk > sekundární heslo mojeheslo - radek > supertajné heslo

Tento přepínač je možné doplnit vyhledávacím řetězcem, zobrazí se pouze záznamy obsahující tento podřetězec.

$> pwsafe -f /cesta/nazev.dat -l dru Enter passphrase for /cesta/nazev.dat: mojedruheheslo - xjirovsk > sekundární heslo

Tento příkaz lze rozšířit parametry [­u] (­­username) nebo [­p] (­­password), poté se nalezená hodnota parametru zkopíruje do schránky. Výpis na standardní výstup je možné vynutit pomocí přepínače [­E] (­­echo). V případě že bylo nalezeno více vyhovujících záznamů, vypíše se na výstup pouze jejich název a program skončí. K dispozici jsou běžné funkce jako úprava a mazání záznamů, nastavení schránky/primárního výběru, export, slučování databází, výběr X serveru (v souvislosti se schránkou) a další. Propracovaná je manipulace se schránkou. Po vyžádání jména a hesla z určitého záznamu je automaticky zkopírováno jméno do schránky a jakmile je detekováno vložení, je do schránky automaticky zkopírováno i heslo

26 3 Přehled vybraných systémů a po detekci vložení je ze schránky odstraněno. Zároveň se na výstup programu vypisuje, kam byly tyto údaje vloženy (nazev_okna@hostname). Pokud je program nečekaně přerušen, schránka je vyprázdněna.

3.5.2 Generátor hesel

Při vytváření nového záznamu lze programem pwsafe heslo nechat vygenerovat. Lze nastavit délku hesla (min. 8 znaků), množiny znaků ­ písmena/číslice/speciální znaky, písmena/číslice, snadno čitelná hesla, pouze číslice nebo hexadecimální číslice. Snadno čitelnými hesly se zde rozumí taková, která neobsahují snadno zaměnitelné znaky (ne snadno zapamatovatelná). K získání náhodných čísel se používají funkce z balíku OpenSSL (rand.h)18.

3.5.3 Formát dat

Ke každému záznamu se eviduje skupina, název, uživatel, heslo a poznámka. Formát databázových souborů pwsafe je kompatibilní s aplikací 1.x a 2.x pro platformu Windows. V souboru v binárním tvaru se nachází hlavička s náhodnými daty, kontrolním součtem a solí. Náhodná data slouží k ověření hlavního hesla a kontrolního součtu. Dále jsou zde jednotlivé záznamy s atributy.

3.5.4 Export/Import

Záznamy z databáze je možné exportovat do textového souboru. V záhlaví je vždy verze databáze a poté na každém řádku jeden záznam, opatřený unikátním id, se všemi atributy oddělenými tabulátorem. Import lze provést pouze sloučením Password Safe kompatibilního souboru s existující databází.

27 3 Přehled vybraných systémů

3.5.5 Manipulace s hesly

Ověření hlavního hesla probíhá tak, že se z bloku náhodných dat z hlavičky databázového souboru spočítá SHA­1 hash, k němu se přidá zadané heslo a opět se spočítá hash. Výsledek se použije jako klíč k šifře Blowfish, kterou se zašifrují (1000krát) náhodná data z hlavičky souboru. Výsledek je opět hashován pomocí SHA­1 a porovnán s hashem z hlavičky souboru. Pokud jsou stejné, heslo bylo zadáno správně a jeho hash bude použit jako hlavní šifrovací klíč. Při otevírání databázového souboru jsou všechny záznamy dešifrovány a nahrány do paměti do struktury Map. Tato paměť je uzamčena pomocí mlock().

3.5.6 Nedostatky a bezpečnostní problémy

Při uchovávání záznamů v paměti se sice používá uzamykání, ale všechny hodnoty jsou zde uloženy v čitelném tvaru, tudíž může hrozit jejich únik při získání otisku paměti nebo po uspání počítače. Dále je třeba zmínit, že se používá dnes již překonaný a méně odolný hashovací algoritmus SHA­1.

28 3 Přehled vybraných systémů

3.6 Přehledová tabulka

GNOME FPM 2 KeePassX KWallet pwsafe Keyring Rozhraní GUI API, GUI GUI API, GUI CLI Odvození SHA­256, SHA­256 SHA­256 SHA­1 SHA­1 klíče šifry PBKDF2 Šifrovací AES­256, AES­256 AES­128 Blowfish Blowfish funkce Twofish Hesla šifrovaná šifrovaná otevřená otevřená otevřená v paměti (AES­256) (RC4) Zamykání ne ano ne ne ano paměti

29 4 Vlastní aplikace

Po prozkoumání existujících systémů přišlo na řadu vytvoření zcela vlastní konzolové aplikace pro správu a ukládání hesel na základě získaných poznatků. Mým cílem bylo vytvořit jednoduchou aplikaci disponující pouze základními operacemi, ale její kód bude dostatečně přehledný a snadno modifikovatelný. V neposlední řadě byla důležitá i míra poskytnuté bezpečnosti. Aplikaci jsem nazval Safe Storage (dále v textu ss­cli).

4.1 Uživatelské rozhraní

Program je ovládán z příkazové řádky pomocí spouštěcích parametrů. Při spuštění bez těchto parametrů se vypíše jednoduchá nápověda. Nejprve je třeba vytvořit nový databázový soubor pomocí přepínače [­n] s cestou k cílovému umístění:

$> ss-cli -n /cesta/souboru

Uživatel je vzápětí dotázán na hlavní heslo, které je pro kontrolu nutné zadat dvakrát. Znaky se nevypisují na obrazovku. Pokud vše proběhne v pořádku, program skončí. Pro další práci se pak databázový soubor volí pomocí přepínače [­f]:

$> ss-cli -f /cesta/soubor

Bez dalších parametrů program po zadání hlavního hesla vypíše pro každý záznam název a skupinu. Záznamy jsou řazeny abecedně, nejprve podle skupiny, v případě shody podle názvu. Pomocí přepínače [­L] lze vypsat kompletní záznamy vč. hesel:

$> ss-cli -f /cesta/soubor -L

30 4 Vlastní aplikace

Jednotlivé záznamy lze vypsat pomocí přepínače [­l] a zadáním jejich úplného jména. Tak se vypíše kompletní záznam vč. hesla:

$> ss-cli -f /cesta/soubor -l is.muni.cz Enter master password: Database soubor: NAME (GROUP) LOGIN PASSWORD ------is.muni.cz (skola) rjirovsky 12345 ------

Pokud uživatel nezná přesný název záznamu, může jej vyhledat pomocí přepínače ­[sn] doplněného hledaným řetězcem:

$> ss-cli -f /cesta/soubor -sn is Enter master password: Database soubor: NAME (GROUP) ------is.muni.cz (skola) ------

Takto se vypíší všechny záznamy obsahující v názvu výraz „is“. Zobrazí se pouze název a skupina. Obdobně funguje vyhledávání podle skupin pomocí [­sg]. Nový záznam do databáze se přidává pomocí přepínače [­a]. Název záznamu musí být v databázi unikátní, v případě shody je uživatel upozorněn. Pokud není vyplněný název skupiny použije se default, v případě loginu se použije none.

$> ss-cli -f /cesta/soubor -a google.com Enter master password: Group [default]: web Login [none]: rjirovsky Enter new password: Re-enter password:

Atributy záznamu je možné obdobně později upravovat

31 4 Vlastní aplikace pomocí přepínače [­e] a názvu záznamu. Případně lze záznam odstranit z databáze přepínačem [­rm]. Do databáze lze importovat [­I] existující záznamy z CSV souboru ve tvaru skupina;název;login;heslo;. Pokud jsou v CSV souboru položky se shodnými názvy jako mají záznamy v databázi, jsou při importu přeskočeny.

$> ss-cli -f /cesta/nazev -I /cesta/import.csv Enter master password: Such name (google.com) already in database! \ Skipping. Successfuly imported entries: 8

Export se provádí, podobně jako import, do CSV souboru pomocí [­E].

4.2 Popis zdrojového kódu

Aplikace je naprogramovaná převážně v jazyce C++ s využitím funkcí z vybraných knihoven jazyka C (zamykání paměti, ovládání terminálu apod.). K hashování a šifrování se využívá C++ knihovna Crypto++19. V kódu lze jednoduše zaměnit hashovací a šifrovací algoritmy za jiné z knihovny Crypto++. Kód je členěn do tří hlavních částí. První je uživatelské rozhraní a zpracování vstupů (soubor main.cpp). Druhou je manažer, který zprostředkovává veškeré operace nad databází záznamů (soubory DatabaseManager.h a DatabaseManager.cpp a stejnojmenná třída). Třetí částí je třída Database udržující datové záznamy pomocí seznamu struktur Item. Třída Database zároveň poskytuje metody k ověřování hlavního hesla, šifrování a dešifrování. Podrobnější popis se nachází v komentářích zdrojového kódu (viz. příloha).

32 4 Vlastní aplikace

4.3 Formát dat

Každý datový záznam reprezentovaný strukturou Item má 4 atributy. Unikátní název, skupinu, šifrovaný login a šifrované heslo. Záznamy jsou v paměti uchovávány v kontejneru list a jsou abecedně řazeny nejprve podle skupiny, v případě shody podle názvu. Jednotlivé atributy nesmí obsahovat znaky s diakritikou, mezera je povolená. Databázový soubor obsahuje hlavičku (SAFE_STORAGE), kontrolní řetězec, popis atributů záznamu a záznamy samotné. Každý záznam je ve formátu název;skupina;, poté na novém řádku následuje zašifrovaný login a na dalším řádku zašifrované heslo.

4.4 Šifrování a bezpečnost

K odvození klíče šifry se používá alg. SHA224. Hlavní heslo je opakovaně hashováno z důvodu prodloužení času ověření správnosti hesla. Výsledek je použit jako klíč k šifře AES­256. K ověření hesla souží kontrolní hash z databázového souboru, který vznikne zašifrováním klíče (pomocí tohoto klíče) a jeho opětovným hashováním. Stejný proces je proveden se zadaným heslem, které se má ověřit. Následně se tento hash porovná s původním hashem ze souboru. Pokud jsou shodné, heslo bylo zadáno správně. Záznamy se při načítání databázového souboru do paměti nedešifrují. K dešifrování dojde až při požadavku na zobrazení. Kompletní záznamy i odvozený klíč k šifrovacímu algoritmu jsou zároveň uzamčeny v paměti pomocí mlock().

4.5 Web projektu

Stručný popis aplikace včetně odkazů na git repozitář zdrojových kódů se nachází na serveru Github.com na adrese http://rjirovsky.github.com/ss­cli/.

33 5 Závěr

5.1 Zhodnocení existujících systémů

Nejprve bych chtěl shrnout výsledky analýzy existujících systémů pro uchovávání autentizačních informací popsaných v této práci. Z hlediska uživatelského rozhraní nelze tyto aplikace srovnávat přímo. Systémy Figaro's Password Manager 2 a KeePassX jsou zaměřeny na ruční správu autentizačních informací skrze grafické rozhraní. Systémy GNOME Keyring a KWallet naopak sází na propracovanou integraci s desktopovým prostředím a na přímou komunikaci s aplikacemi vyžadujícími ukládání tajných informací. Jejich uživatelské rozhraní slouží spíše pro kontrolu ukládaných záznamů a řízení přístupu aplikací k databázi hesel. Systém pwsafe patří spíše do první jmenované skupiny, je však zaměřený na jiný typ uživatelů. To je dáno zejména konzolovým uživatelským rozhraním. To však představuje výhodu například při vzdáleném přístupu. Z bezpečnostního hlediska lze jednotlivé systémy porovnat relativně dobře. Co se týká šifrování databáze, používané symetrické šifry (AES, Blowfish, Twofish) dosud nebyly prolomeny a lze je považovat za bezpečné. Od používání šifry Blowfish se spíše upouští. Její výhodou je však malá výpočetní náročnost. Hashovací funkce se nejčastěji používá SHA­256, KWallet a pwsafe však zůstávají u starší a zranitelnější SHA­1. Z hlediska ochrany tajných informací v paměti aplikace využívají dva odlišné přístupy. Prvním je udržování tajných informací zašifrovaných po maximální možnou dobu. K dešifrování dojde pouze těsně před jejich zobrazením uživateli. Druhým přístupem je zamykání paměti (ochrana proti odložení paměťových stránek na disk). To je však neúčinné například při uspání počítače

34 5 Závěr na disk. Ani jedna ze zkoumaných aplikací tyto přístupy nekombinuje. Systém KWallet dokonce nepoužívá ani jednu z těchto technik. Systémy GNOME Keyring a KWallet jsou obecně zranitelnější už s principu na kterém fungují. Po odemknutí databáze mají povolené aplikace přístup ke všem záznamům v databázi a ne jen k těm, které jim náleží. Toho by mohl potenciálně zneužít škodlivý software. Z analyzovaných systémů pro správu autentizačních informací bych pro ruční správu doporučil KeePassX. Tato aplikace disponuje propracovaným uživatelským rozhraním a s databá­ zovými soubory lze pracovat i v řadě jiných nástrojů pro různé platformy (např. KeePassDroid pro Android OS vč. editace položek). Ze systémů integrovaných do operačního systému mohu doporučit pouze GNOME Keyring a to jen k ukládání méně citlivých údajů.

5.2 Shrnutí vlastní aplikace

Při vývoji vlastní konzolové aplikace nazvané Safe Storage jsem se zaměřil především na jednoduchost používání a přehlednost zdrojového kódu. Ve srovnání s pwsafe samozřejmě tato aplikace nenabídne tak rozsáhlou funkcionalitu jako je např. propracované použití systémové schránky, její kód je naproti tomu poměrně přímočarý (i ve srovnání s ostatními systémy) a lze snadno ověřit, co se děje se zadávanými hesly. Aplikaci tak lze snadno modifikovat a rozšiřovat. Oproti zkoumaným systémům jsem použil jak šifrování hesel v paměti, tak zamykání paměti, což poskytuje poměrně dobrou ochranu načtených tajných informací. Mým cílem je další vývoj aplikace, zejména důsledné doladění všech bezpečnostních mechanizmů.

35 Seznam zdrojů

[1] Secret Service API Draft [online], 2011 [cit. 2012-04-28]. Dostupný z WWW:

[2] The GNU C library manual – Locking pages [online][cit. 2012-05-04]. Dostupný z WWW:

[3] Figaro's Password Manager 2 [online], Poslední změna 2012-04-13 [cit. 2012-04-26]. Dostupný z WWW:

[4] AES Lounge [online], 2012 [cit. 2012-05-13]. Dostupný z WWW:

[5] SHA-256 [online], Poslední změna 2006-12-21 [cit. 2012-04-26]. Dostupný z WWW:

[6] PKCS #5 Standard [online], 2012 [cit. 2012-04-26]. Dostupný z WWW:

[7] GNOME Keyring [online], Poslední změna 2011-04-19 [cit. 2012-04-28]. Dostupný z WWW:

[8] GNOME Seahorse [online], Poslední změna 2011-04-08 [cit. 2012-04-28]. Dostupný z WWW:

[9] KeePassX [online], 2010 [cit. 2012-04-30]. Dostupný z WWW:

[10] KeePass Password Safe [online], 2012 [cit. 2012-04-30]. Dostupný z WWW:

[11] RC4 [online], Poslední změna 2006-12-21 [cit. 2012-04-30]. Dostupný z WWW:

[12] KeePass – Process Memory protection [online], 2012 [cit. 2012-04-30]. Dostupný z WWW:

[13] The KWallet Handbook [online], Poslední změna 2011-11-28 [cit. 2012-05-01]. Dostupný z WWW:

[14] KDE Runtime repository [online], Poslední změna 2012-04-14 [cit. 2012-05-01]. Dostupný z WWW:

36 Seznam zdrojů

[15] SHA-1 [online], Poslední změna 2006-12-21 [cit. 2012-04-14]. Dostupný z WWW:

[16] The Blowfish Encryption Algorithm [online][cit. 2012-04-14]. Dostupný z WWW:

[17] pwsafe password database [online], 2005 [cit. 2012-05-02]. Dostupný z WWW:

[18] OpenSSL Crypto library [online][cit. 2012-05-02]. Dostupný z WWW:

[19] Crypto++ [online], Poslední změna 2010-09-08 [cit. 2012-05-11]. Dostupný z WWW:

37 Přílohy

Elektronická příloha – Archiv závěrečných prací MU Obsah archivu ss­cli.zip: ss­cli_source/ – zdrojové kódy programu Safe Storage hesla.csv – ukázkový soubor pro import/export