Bakalářská práce Šifrování a dešifrování souborů s využitím čipové karty



Podobné dokumenty
Programové vybavení OKsmart pro využití čipových karet

Bezpečnostní mechanismy

Testovací protokol čipová karta Oberthur Id-One Cosmo V5.4

Testovací protokol USB Token Cryptomate

INSTALACE SW PROID+ V OS LINUX

Testovací protokol USB token etoken PRO 32K

Middleware eop. Instalační příručka pro práci s eop v prostředí MS Windows

Testovací protokol čipová karta etoken PRO SmartCard 32K

Testovací protokol čipová karta ACOS5

Middleware eop. Instalační příručka pro práci s eop v prostředí MS Windows

INSTALACE SOFTWARE PROID+ NA MS WINDOWS

Použití čipových karet v IT úřadu

Středoškolská technika Encryption Protection System

Šifrování flash a jiných datových úložišť

Autentizace uživatelů

INSTALACE SW PROID+ V OS WINDOWS

Manuál pro práci s kontaktním čipem karty ČVUT

1. Úvod. 2. CryptoPlus jak začít. 2.1 HW a SW předpoklady. 2.2 Licenční ujednání a omezení. 2.3 Jazyková podpora. Požadavky na HW.

Šifrová ochrana informací věk počítačů PS5-2

ZÁKLADNÍ POKYNY PRO INSTALACI PROID+ Z INSTALAČNÍHO MÉDIA

Šifrová ochrana informací věk počítačů PS5-2

OKsmart a správa karet v systému OKbase

Správa přístupu PS3-2

I.CA SecureStore Uživatelská příručka

4.2. Odhlásit se Šifrování hesla Sepnutí výstupních relé Antipassback Zobrazení všech dat...

Testovací protokol. webový generátor PostSignum. sada PIIX3; 1 GB RAM; harddisk 20 GB IDE OS: Windows Vista Service Pack 2 SW: Internet Explorer 9

Informatika / bezpečnost

Instalace a připojení čtečky čipových karet v systému CryptoPlus Eval

Certifikační autorita PostSignum

Podzim Boot možnosti

Šifrování disků a TrueCrypt

Testovací protokol. 1 Informace o testování. 2 Testovací prostředí. 3 Vlastnosti generátoru klíčů. Příloha č. 13

SSL Secure Sockets Layer

POPIS STANDARDU CEN TC278/WG4. 1 z 5. Oblast: TTI. Zkrácený název: Zprávy přes CN 4. Norma číslo:

KRYPTOGRAFIE VER EJNE HO KLI Č E

Identifikátor materiálu: ICT-2-04

Generování žádosti o certifikát Uživatelská příručka pro prohlížeč Opera

Slovník pro Acronis True Image 2017

Bezpečnostní aspekty informačních a komunikačních systémů KS2

PSK2-16. Šifrování a elektronický podpis I

Kryptografie, elektronický podpis. Ing. Miloslav Hub, Ph.D. 27. listopadu 2007

Šifrová ochrana informací věk počítačů PS5-1

I.CA SecureStore Uživatelská příručka

Minimální požadavky na systém Linux a Windows na jednom disku Zrušení instalace Mandriva Linuxu... 23

Programové vybavení počítačů operační systémy

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

2.2 Acronis True Image 19

Linux CryptoFS. Petr Novický

Šifrovaný disk v Linuxu

Uživatelská příručka

KAPITOLA 1 - ZÁKLADNÍ POJMY INFORMAČNÍCH A KOMUNIKAČNÍCH TECHNOLOGIÍ

Co je Czech Point? Podací Ověřovací Informační Národní Terminál, zredukovat přílišnou byrokracii ve vztahu

SODATSW Case Study 2009 Nasazení řešení Datový trezor ve společnosti Synthesia, a.s.

Karty externích médií

Asymetrická kryptografie a elektronický podpis. Ing. Mgr. Martin Henzl Mgr. Radim Janča ijanca@fit.vutbr.cz

APS mini.ed programová nadstavba pro základní vyhodnocení docházky. Příručka uživatele verze

T-Mobile Internet. Manager. pro Windows NÁVOD PRO UŽIVATELE

Obsah. Úroveň I - Přehled. Úroveň II - Principy. Kapitola 1. Kapitola 2

Návod pro šifrování přenosných disků Vysoká škola polytechnická Jihlava

SMART KARTY V LINUXU A PROČ BY VÁS MĚLY ZAJÍMAT JAKUB JELEN, RED HAT

MBus Explorer MULTI. Uživatelský manuál V. 1.1

8. RSA, kryptografie s veřejným klíčem. doc. Ing. Róbert Lórencz, CSc.

Connection Manager - Uživatelská příručka

SEMESTRÁLNÍ PROJEKT Y38PRO

Digitální podepisování pomocí asymetrické kryptografie

ICZ - Sekce Bezpečnost

Karty externích médií Uživatelská příručka

THE BEST INFORMATION TECHNOLOGY 4 IDENTIFICATION TokenME. Manuál pro koncové uživatele

Základní definice Aplikace hašování Kontrukce Známé hašovací funkce. Hašovací funkce. Jonáš Chudý. Úvod do kryptologie

SecureStore I.CA. Uživatelská příručka. Verze 2.16 a vyšší

Zálohování v MS Windows 10

2 Popis softwaru Administrative Management Center

Souborové systémy a logická struktura dat (principy, porovnání, příklady).

Generování žádosti o certifikát Uživatelská příručka

ISSS Mgr. Pavel Hejl, CSc. T- SOFT spol. s r.o.

Identifikátor materiálu: ICT-1-17

Generování žádosti o kvalifikovaný certifikát pro uložení na eop Uživatelská příručka pro Internet Explorer

VirtualBox desktopová virtualizace. Zdeněk Merta

Instalace software eobčanka pro Linux. instalační příručka

Osobní počítač. Zpracoval: ict Aktualizace:

úvod Historie operačních systémů

Asymetrická kryptografie

Střední odborná škola a Střední odborné učiliště, Hořovice

Hybridní čipové karty

Middleware eop. Instalační příručka pro práci s eop v prostředí Mozilla Firefox, Thunderbird a Adobe Reader na systémech Ubuntu Linux

Karty externích médií

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Middleware eop. Instalační příručka pro práci s eop v prostředí Mozilla Firefox, Thunderbird a Adobe Reader na systémech Ubuntu Linux

UKRY - Symetrické blokové šifry

IT Bezpečnostní technologie pro systémy integrované bezpečnosti

EvMO postup při instalaci

Operační systémy: funkce

EVIDENCE DOCHÁZKY SE ČTEČKOU INTAGRAL. příručka uživatele

dokumentaci Miloslav Špunda

TC-502L TC-60xL. Tenký klient

POPIS STANDARDU CEN TC278/WG4. Oblast: TTI. Zkrácený název: Zprávy přes CN 3. Norma číslo:

Instalace programu ProVIS

2.1.2 V následujícím dialogovém okně zvolte Instalovat ze seznamu či daného umístění. stiskněte tlačítko Další

Karty externích médií Uživatelská příručka

Před instalací 25 Minimální požadavky na systém Linux a Windows na jednom disku Zrušení instalace Mandriva Linuxu...

Transkript:

České vysoké učení technické v Praze Fakulta elektrotechnická Bakalářská práce Šifrování a dešifrování souborů s využitím čipové karty Roman Černý Vedoucí práce: Ing. Ivan Halaška Studijní program: Elektrotechnika a informatika strukturovaný bakalářský Obor: Informatika a výpočetní technika leden 2007

Poděkování Poděkování patří mé rodině a jejich velké podpoře mého studia.

Prohlášení Prohlašuji, že jsem svou bakalářskou práci vypracoval samostatně a použil jsem pouze podklady uvedené v přiloženém seznamu. Nemám závažný důvod proti užití tohoto školního díla ve smyslu 60 Zákona č. 121/2000 Sb., o právu autorském, o právech souvisejících s právem autorským a o změně některých zákonů(autorský zákon). V Praze dne 12.1.2007...

Abstrakt Tato práce se zabývá problematikou ochrany dat před zneužitím a tedy jejich šifrováním a dešifrováním s využitím čipových karet a jejich ukládání na virtuální souborové systémy v operačním systému GNU/Linux. Výsledkem práce je aplikace s jednoduchým grafickým rozhraním, která umožňuje uživateli zabezpečit data pomocí čipové karty. Abstract This document is dealing with problems of data protection from misusage and their encryption and decryption using smart cards and storing on virtual filesystems to GNU/Linux operating system. Result of this document is an aplication with easy graphical interface, which provide to user data protection using smart card.

Obsah Seznam obrázků 1. Úvod... 1 1.1 Popis problematiky 1 1.2 Kryptografie, použité šifrovací algoritmy 1 1.2.1 PKI 1 1.2.2 Symetrická kryptografie 2 1.2.2.1 DES, TripleDES(3DES) 2 1.2.2.2 AES 2 1.2.3 Asymetrická kryptografie 3 1.2.3.1 RSA 3 1.2.4 Hash funkce 3 1.3 Čipové karty 4 1.3.1 Rozdělení a popis 4 1.3.2 Bezpečnost uložených dat a vysoká spolehlivost 4 1.4 Platformy a zařízení 5 1.4.1 Souhrn 5 1.4.2 Čipová karta 6 1.4.3 Čtečka čipových karet 6 1.5 Standardy a rozhraní 7 1.5.1 PC/SC 7 1.5.2 OpenSC 7 1.5.3 PKCS#11 7 2. Popis řešeného problému... 9 2.1 Rozdělení 9 2.2 Uživatelské rozhraní 9 2.3 Práce se souborovými systémy 9 2.4 Kryptografické rozhraní 10 3. Analýza... 12 3.1 Volba komunikačního rozhraní se čtečkou 12 3.2 Volba rozhraní s čipovou kartou 13 3.3 Šifrovací vrstva 13 3.4 Aplikace šifer v programu 14 3.4.1 Volba šifrovacích algoritmů 14

3.4.2 Šifrování a dešifrování virtuálního souborového systému 14 3.4.3 Šifrování klíčů čipovou kartou 15 3.4.4 Využití hash funkcí 15 4. Popis implementace a realizace... 16 4.1 Postup implementace 16 4.2 Grafické rozhraní 16 4.3 Souborový systém 17 4.4 Čtečka a čipová karta 19 5. Testování... 21 6. Srovnání s existujícími řešeními... 22 7. Závěr... 23 8. Seznam použité literatury... 25 9. Přílohy... 27 A. Seznam použitých zkratek 27 B. Obsah přiloženého CD 29

Seznam obrázků 1. Cryptoflex 32K e gate... 6 2. Axalto USB v3... 6 3. Základní model Cryptoki... 8 4. Schéma tvorby virtuálního systému... 10 5. Schéma hierarchie komunikačních standardů... 11 6. Znázornění možností posloupnosti modulů... 12 7. Hybridní schéma použití symetrické a asymetrické kryptografie... 14 8. Ukázka vzhledu programu... 16 9. Obsah CD... 29

1 Úvod 1.1 Popis problematiky V dnešní době mnoho lidí používá počítač pro ukládání osobních či pracovních dat. Většina z nás jistě přemýšlela o možnosti ztráty například notebooku či flash disku a tedy o získání citlivých dat jinou nežádoucí osobou. Právě tomuto vyzrazení tajných dat by měl zamezit můj program, který data šifruje a dešifruje. Úloha programu je taková, že uživatel po zapnutí svého počítače, buď vloží svou čipovou kartu do čtečky a po výzvě zadá PIN, nebo pouze heslo a jeho data se automaticky dešifrují a vytvoří virtuální souborový systém. S daty pak může uživatel pracovat bez omezení, daná oblast vypadá jako logický oddíl nebo disk. Po ukončení práce pak uživatel kartu vyjme, či se odhlásí ze systému a tento souborový systém je odpojen a k datům je ztracen přístup až do dalšího vložení čipové karty či zadání hesla. Použití hesla k šifrování je sice méně nákladnější než pořízení čipové karty, ale na druhou stranu karta zaručuje vetší komfort a především bezpečnost, která je umocněna kryptografickými operacemi prováděnými v čipové kartě. Práce je tedy založena na šifrování a dešifrování souborového systému pomocí čipové karty v prostředí GNU/Linux. Čipovou kartu a čtečku čipových karet mi zapůjčila firma OKsystem, od nichž je i zadání a dostal jsem k dispozici studijní materiály. Práce je situována do prostředí operačního systému GNU/Linux a to z důvodu požadavků zadávající firmy, která již podobný program[1] prodává pro komerční systém Windows firmy Microsoft a chtěla svůj produkt distribuovat i pro systémy open source, ale též mého výběru práce, protože jsem příznivcem právě systémů s otevřenými zdroji. Součástí požadavku bylo i využití kryptografického rozhraní PKCS#11[2], což je standard vyvinutý firmou RSA Laboratories(původní název Cryptoki). 1.2 Kryptografie, použité šifrovací algoritmy 1.2.1 PKI PKI je soustavou technických a především organizačních opatření spojených s vydáváním, správou, používáním a odvoláváním platnosti kryptografických klíčů a certifikátů. Zahrnuje veškerý software, technologie a služby, které umožňují využití šifrování s veřejným a privátním klíčem. Základní nástroje PKI jsou vytvářeny na bázi tzv. asymetrické kryptografie. 1

1.2.2 Symetrická kryptografie Symetrická kryptografie využívá k šifrování pouze jediný klíč. Ten musejí znát obě strany, jak strana vysílající zprávu, tak strana zprávu přijímající. Podstatnou výhodou symetrických šifer je jejich nízká výpočetní náročnost. Algoritmy pro šifrování s veřejným klíčem mohou být i několikanásobně pomalejší. Na druhou stranu velkou nevýhodou je nutnost sdílení tajného klíče, takže se odesilatel a příjemce tajné zprávy musí předem domluvit na tajném klíči. Symetrické šifry se z hlediska zpracování otevřeného textu dělí na dva základní druhy a to proudové a blokové. Proudové zpracovávají otevřený text po znacích abecedy. Jsou jimi například RC4 a FISH. Blokové šifry zpracovávají informace po blocích dané délky, přičemž poslední blok přizpůsobí vhodným způsobem délce jednoho bloku. Podstatné u blokových šifer je, že všechny bloky jsou šifrovány a dešifrovány stejnou transformací, u proudových je tomu naopak. Příklady blokových šifer jsou AES, DES, 3DES, IDEA, Blowfish. Většina těchto šifer používá blok o délce 64b, avšak již se přechází na blok 128b, který používá algoritmus AES. I když útočník nevidí do šifrovaného textu, tak by hypoteticky mohl útočit tak, že by zaměnil pořadí jednotlivých zašifrovaných bloků. Tomu se šifry brání vázáním po sobě následujících bloků. Hovoříme o tzv. módu šifry, který zajišťuje že snadno nelze přehazovat jednotlivé bloky. Často používaným módem je např. mód CBC či ECB. 1.2.2.1 DES, TripleDES(3DES) Bloková symetrická šifra navržená roku 1977. Její nevýhoda je příliš krátký klíč o délce 56b. Byly objeveny teoretické negativní vlastnosti, jako slabé a polo slabé klíče, komplementárnost a teoreticky úspěšná lineární a diferenciální analýza. V roce 1998 pak byl postaven i stroj, který jej luštil hrubou silou. V praxi je tedy jedinou zásadní nevýhodou krátký klíč. Tato šifra byla nahrazena novou, označovanou 3DES, která využívá stejný algoritmus kvůli zpětné kompatibilitě, avšak dvojnásobný či trojnásobný klíč, tedy 112b nebo 168b, které jsou již odolné proti zmíněným útokům. 1.2.2.2 AES Platnou alternativou algoritmu DES je i AES, přijatý v roce 2002. Tento algoritmus využívá délku bloku 128b a podporuje tři délky klíče 128, 192 a 256 bitů. AES nemá slabé klíče a je odolný proti známým útokům a metodám lineární a diferenciální krypto analýzy. Jediné uskutečněné úspěšné útoky, označované side channel attacks, využívaly slabin a 2

úniků dat ze systémů, kde byla šifra implementována, tedy ne na samotnou šifru. 1.2.3 Asymetrická kryptografie Tyto algoritmy používají dvojici klíčů, které jsou matematicky svázány a podmínkou je, aby z veřejného klíče nešel spočítat privátní. První klíč, veřejný, je tedy používán k šifrování, druhý, privátní k dešifrování. Veřejný klíč, jak z názvu vyplývá je šířen volně, může ho získat kdokoliv. Privátní klíč oproti tomu má pouze příjemce, většinou je bezpečně uschován, například na čipové kartě, nebo ukrytý třeba v trezoru. Algoritmus tedy pracuje na principu jednocestných funkcí, tedy pakliže zašifrujeme otevřený text veřejným klíčem, nemůžeme ho tím samým klíčem dešifrovat, pouze u příjemce klíčem privátním. Nejrozšířenější algoritmus tohoto typu je RSA. 1.2.3.1 RSA Bezpečnost RSA je postavena na předpokladu, že rozložit číslo na součin prvočísel(faktorizace) je velmi obtížná úloha. Z čísla n = pq je tedy v rozumném čase prakticky nemožné zjistit činitele p a q. Plné dešifrování RSA šifrovaného textu je obtížné v podstatě neproveditelné, jelikož neexistuje žádný známý algoritmus, pomocí kterého by se to dalo provést. Odolnost vůči částečnému dešifrování zprávy může vyžadovat použití některého ze známých způsobů vyplňování. V současné době se používají převážně klíče délky 1024 a 2048 bitů. 1.2.4 Hash funkce Hash funkce slouží k výpočtu kontrolního součtu ze vstupních dat. To znamená, že se vytvoří tzv. otisk o dané velikosti, kterou určuje zvolený algoritmus, bez závislosti na délce vstupních dat. Z toho plyne, že se zde můžou nacházet kolize, tedy že z různých vstupních dat mohou vzniknout stejné otisky. Účelem otisku je, aby se z něj nedostal původní otevřený text, to znamená využiti jednosměrných algoritmů jako u asymetrické kryptografie, avšak zde bez použití klíčů. Příkladem dnes používaných, zatím považovaných za bezpečné, algoritmů těchto funkcí jsou SHA 2 o délce otisku 224, 256, 384 a 512, nebo Ripemd s otisky délky 128/256 nebo 160/320. 3

1.3 Čipové karty 1.3.1 Rozdělení a popis Čipové karty prošly dlouhodobým vývojem a existuje mnoho různých druhů. Pod standardem ISO jsou označovány jako IIC(Integrated Circuit Card). Dělí se na paměťové a mikroprocesorové(smart card), dále na kontaktní a bezkontaktní. Bezkontaktní, nebo li radio frekvenční karty, komunikují prostřednictvím elektromagnetických vln a není potřeba je zasouvat do čtečky, z tohoto důvodu jsou vhodné pro masovou identifikaci fyzického přístupu(vstup do budov apod.). Kontaktní čipová karta je snadno identifikovatelná, například podle pozlaceného konektoru. Ten je rozdělený standardem ISO(7816 2) na 8 až 10 částí, ale v dnešní době se používá pouze 6. Napájeny jsou ze zařízení, přes které přistupují, kromě tzv. Super Smart Card, které jsou napájeny z baterie a obsahují LCD Display a malou klávesnici. Paměťové karty jsou základní, levné a snadno dostupné, mohou nabízet bezpečnostní funkce související s ochranou přístupu k uloženým informacím. Tyto karty jsou vhodné hlavně jako bezpečné médium, nenabízejí kryptografické funkce a jejich bezpečnostní nevýhodou je například to, že je lze zkopírovat. Mikroprocesorové karty jsou aktivní karty s procesorem a operačním systémem nabízejícím potřebné kryptografické, souborové a další funkce. Vyspělé karty obsahují například hardwarový kryptografický koprocesor urychlující náročné matematické operace, kvalitní hardwarové generátory náhodných čísel a bezpečnostní obvody. Zajímavé jsou také hybridní karty, kombinující výhody standardních a bezkontaktních karet. 1.3.2 Bezpečnost uložených dat a vysoká spolehlivost Čipová karta je jedním z nejbezpečnějších médií, kam lze v současnosti uložit data. Jedná se zjednodušeně o jakousi černou skříňku s jednoznačným identifikačním číslem, systémem souborů a služeb, k jehož utajovaným informacím se není možné dostat před vložením správného hesla(pin). Toto heslo může být podstatně jednodušší a kratší v porovnání s heslem používaným pro šifrování nebo přihlašování. Čipové karty dokáží omezit počet pokusů o vložení PIN a při jejich vyčerpání se karta buď zablokuje nebo zničí. Jsou tak zcela eliminovány slovníkové útoky. Případný zájemce o ukrytá data se musí nejprve fyzicky zmocnit čipové karty. Útoky na samotnou čipovou kartu jsou velmi znesnadněny i tím, že systém sestává z jediného čipu a nelze tak sledovat komunikaci mezi jeho jednotlivými prvky. Počítač by pro srovnatelnou úroveň bezpečí musel být minimálně nerozebiratelný a důkladně uzamčený a je z tohoto úhlu pohledu nejslabším článkem. 4

Současné čipové karty jsou odolné i vůči drahým a sofistikovaným útokům, dokáží jim velmi účinně čelit a v případě zablokovat přístup k datům do vložení záchranných kódů. Čipovou kartu lze kombinovat s další bezpečnostní politikou, například uložení do sejfu, vyzvednutí proti podpisu, pořízení zálohy dat apod. Zajímavým doplňkovým prvkem je i možnost oboustranného potisku ve fotografické kvalitě, umožňující umístění fotografie nositele a tím i vytvoření průkazu totožnosti. Čipová karta je zároveň jedním z nejspolehlivějších médií, bohužel dosud nenabízí příliš vysokou paměťovou kapacitu pro uložení většího množství dat. Kapacita standardní čipové karty je několik kilobajtů(většinou 32 nebo 64kB). Nicméně pro uložení extrémně citlivých dat, čím jsou například šifrovací klíče, je tato kapacita více než dostatečná. Vzhledem k parametrům tohoto média by bylo velmi zajímavé disponovat kapacitou v řádech megabajtů a mít zde uložena veškerá důležitá data. Ale i na čipové karty mohou být vedeny útoky. Nejslabším článkem je počítač uživatele. Při zadání PIN kódu tento údaj musí projít z klávesnice až na čipovou kartu. Zde je nebezpečí jeho odchytu nežádoucím programem. Možné útoky jsou ale i na čipovou kartu, i když už vyžadují větší znalosti problematiky a též i technické vybavení. Na čipové karty je možno útočit buď přímo na jejich software a jeho chyby, nebo vyvolat chybnou instrukci procesoru na čipu, např. ovlivněním vhodným elektromagnetickým zářením, nečekanou změnou hodinového signálu, změnou teploty a pak čekat, že karta udělá nějakou chybu, které lze využít. Další útoky jsou tzv. postranními kanály, kdy se zjišťují hodnoty jako čas potřebný k šifrování, či proud, který karta při různých operacích odebírá. Tento druh bezpečnosti a kvalita samotných čipových karet je pak dána jejich certifikací a to evropskou ITSEC nebo americkou FIPS. 1.4 Platformy a zařízení 1.4.1 Souhrn Následující řádky uvádějí platformy a zařízení, na kterých byl program realizován a kde probíhaly úvodní testy: Operační systém GNU/Linux Distribuce Mandriva 2006 Jádro systému 2.6.12 18mdk Čipová karta Čtečka čipových karet Programovací jazyk Grafické rozhraní Cryptoflex 32K e gate Axalto Reflex USB v3 C/C++ GTK+ 2.0 Vývojový nástroj pro GTK+ 2.0 Glade 2.10.0 Kompilátor gcc ve verzi 4.0.1 5

Vývojové prostředí Eclipse Platform verze 3.2.0 1.4.2 Čipová karta Zapůjčená karta je Cryptoflex 32K e gate. Její specifika jsou paměť 32KB, kryptografický koprocesor a je založena na standardu ISO/IEC 7816. Karta podporuje klíče délky 512, 768, 1024 a 2048, které umí i sama generovat. Podporuje šifrovací a hash algoritmy RSA, SHA 1, DES a 3DES Chain Block Cipher. Karta je dále podporována standardem PC/SC. Obr. 1: Cryptoflex 32K e gate Tato karta se označuje jako aktivní, to znamená, že sama provádí kryptografické operace. Dají se na ní ukládat datové struktury nazývané objekty, které jsou trojího druhu a to certifikáty, klíče a ostatní data[4]. 1.4.3 Čtečka čipových karet Čtečka je Axalto USB v3, je podporována PCSC lite rozhraním a knihovnami CCID. Jak je patrné z názvu, čtečka se připojuje k počítači pomocí rozhraní USB. Obr. 2: Axalto USB v3 Na horní straně je zelená dioda, která se rozsvítí pouze za splnění třech podmínek, tedy připojení čtečky k počítači, její správné instalaci a komunikaci se systémem a při vložené čipové kartě. 6

1.5 Standardy a rozhraní 1.5.1 PC/SC PC/SC je specifikace pro SmartCard čipové karty integrovaná do prostředí počítače. PC/SC je implementováno v Microsoft Windows 2000/XP. Volná implementace PC/SC je PCSC lite a je přístupná pod operačním systémem GNU/linux a svázána i s MacOS X. 1.5.2 OpenSC OpenSC[5] poskytuje skupinu knihoven a nástrojů ke komunikaci s čipovými kartami. Zjednodušuje a rozšiřuje funkce, které jsou definovány ve standardu PKCS#11, dále definuje struktury, které usnadňují práci s kryptografickými objekty na kartě. Nejdůležitější zaměření je na karty, které podporují kryptografické operace šifrování, autorizace a digitální podpis a usnadňují jejich používání v aplikacích jako e mail a další. OpenSC tedy implementuje PKCS#11 API rozhraní, které mohou využívat alpikace, jenž ho podporují, jako Mozilla Firefox a Thunderbird. OpenSC implementuje i nativní funkce pro PKCS#15 standard. Tyto funkce ale nejsou podporovány všemi programy a jsou implementovány výhradně v tomto projektu OpenSC, jejich změny by znamenaly nutnost obnovit i vytvářený program, tudíž po zvážení byly tyto funkce odstraněny a nahrazeny kompletně funkcemi podporující standard PKCS#11. 1.5.3 PKCS#11 V kryptografii je PKCS považováno za skupinu standardů(public Key Cryptography Standards) vyvinutých a publikovaných firmou RSA laboratories v Californii. RSA Data Security Inc přidělil licenční práva pro patent RSA asymetrickému algoritmu a získal práva na několik dalších kryptografických patentů(např. Schnorr patent). PKCS#11 popisuje API rozhraní, nazývané také Cryptoki, se zařízeními obsahujícími kryptografické informace a vykonávající kryptografické funkce. Cryptoki, zkrácený výraz z crypto key and short for cryptographic token interface, se zakládá na jednoduchém objektově založeném přístupu, používajícím nezávislé technologie a možnosti sdílení zařízení(různé aplikace mohou přistupovat k různým zařízením), prezentující aplikaci obecný, logický pohled na zařízení nazývaný kryptografický token. 7

Obr. 3: Základní model Cryptoki První využívanou funkcí je samotná inicializace Cryptoki rozhraní. Pro komunikaci mezi aplikací a čipovou kartou je nutné najít vhodný slot, tedy čtečku čipových karet, kde je vložena čipová karta, jejíž logický pohled na ní je označován jako token, se kterou bude aplikace pracovat. Následuje inicializace vybraného tokenu a otevření session, která poskytuje logické spojení mezi tokenem a aplikací. Session může být R/W, tedy pro čtení i zápis nebo R/O, tedy jen pro čtení. Oba stavy umožňují přístupy na objekty tokenu, ale pouze R/W session je může měnit či rušit. Další volanou funkcí je login, která přihlašuje uživatele na základě vloženého PIN kódu a umožňuje aplikaci přístup ke kryptografickým funkcím. Z nich je v aplikaci použito generování klíče a dešifrování pomocí privátního klíče. Pro ukončení práce je nutné ohlásit uživatele funkcí, následuje zrušení session a zrušení všech vazeb na Cryptoki. 8

2 Popis řešeného problému 2.1 Rozdělení Úkolem této úlohy je práce s čipovou kartou a souborovým systémem v OS GNU/Linux. Program spojuje tři strany, tzn. využívá služeb již hotových rozhraní pro práci s čipovou kartou, dále pak nástrojů pro práci s disky, souborovými systémy a jejich šifrování, jichž je hned několik a poslední částí, kterou je grafické rozhraní pro uživatele. 2.2 Uživatelské rozhraní Počáteční částí je uživatelské rozhraní, tedy požadavky programu. Zde je výčet základních funkcí, které jsou na aplikaci vyžadovány: vytvoření nového virtuálního šifrovaného disku volba jména souboru, jeho umístění na disku, velikost a cíl, kam se má připojovat algoritmus pro šifrování v nabídce jsou dva a to AES a 3DES výběr čipové karty a certifikátu či klíče uložených na čipové kartě, pomocí kterého se bude šifrovat a dešifrovat, nebo případné nastavení připojování pouze heslem Po zdárném vytvoření virtuálního disku je pak uživatelské menu, které poskytuje funkce: připojení souborového systému s požadavkem na PIN, pokud je klíč šifrován čipovou kartou nebo na heslo, pokud je klíč na jeho základě vytvářen odpojení připojeného souborového systému odstranění souborového systému z nabídky(na disku zůstane) celkové smazání(odstranění jak z nabídky, tak smazání z disku) Popsané funkce se budou zobrazovat v grafickém rozhraní. Původní záměr byl vývoj pouze v textovém režimu, ale tuto skutečnost přebil fakt, že snazší a názornější bude využití v grafického prostředí. Na výběr bylo ze dvou a to GTK+ 2.0 nebo QT. Volba GTK byla podmíněna tím, že jsem s ním měl již nějaké zkušenosti, ale také vzhledem k přívětivému prostředí Glade, ve kterém se přímo volí vzhled výsledné aplikace přímým rozmisťováním komponent. Ke GTK je i celkem rozsáhlá dokumentace s průvodcem a velkým množstvím příkladů na domovských stránkách projektu[10]. 2.3 Práce se souborovými systémy Pojem transparentní šifrování znamená, že ona šifrovací vrstva nebude v podstatě viditelná, souborový systém se bude chovat jako obyčejné zařízení. Klasicky se ze souboru 9

vytvoří blokové zařízení a to se připojí jako souborový systém. Mezi tyto dvě vrstvy je umístěna šifrovací vrstva, která data šifruje a dešifruje(viz obr. 4). K vykonávání těchto akcí jsou volány přímo programy v systému a ne knihovní příkazy. Zde je první komplikace a to, že tyto programy může používat pouze superuživatel, tedy root a ne běžný uživatel. Obr. 4: Schéma tvorby virtuálního systému 2.4 Kryptografické rozhraní Volba komunikačního standardu mezi čipovou kartou a systémem je ze zadání jednoznačná. Je jím PKCS#11(Publicly Key Cryptography Standards). K výběru však byly další alternativy. Těchto standardů je několik. Mezi nejpoužívanější patří CSP od firmy Microsoft, to však nebylo možné použít z důvodu podpory pouze na operačních systémech Windows. Naopak PKCS#11 je nejpoužívanější rozhraní pro ostatní systémy, je univerzální a není tedy závislé na žádném konkrétním operačním systému, tudíž jeho implementace je možná jak pro Windows, tak třeba pro MAC OS X. Výhoda PKCS#11 je mimo jiné, že je primárně svázán s programovacím jazykem C/C++. Toto rozhraní je již implementováno ve funkčních rozhraní, jimiž jsou libmusclecard a OpenSC. 10

Obr. 5: Schéma hiearchie komunikačních standardů Část 7.(viz obr.5) zprostředkovává služby karty. Ty jsou využity pomocí uvedeného protokolu PKCS#11, který vyvolává samotné kryptografické funkce. Jako zprostředkovatel slouží rozhraní, jimiž jsou OpenSC, který slouží k vlastní komunikaci s kartou a OpenCT nebo PCSC lite, který umožňuje komunikaci s čtečkou. PCSC lite ještě využívá balíček CCID, kde jsou ovladače ke čtečkám čipových karet. 11

3 Analýza 3.1 Volba komunikačního rozhraní se čtečkou V této části je uveden popis jednotlivých komponent a důvody právě jejich volby. Všechny komponenty, jenž jsou v programu využity, jsou open source, tedy volně přístupné se zveřejněnými zdrojovými kódy. Výhoda je tedy jasná. Nemusí se platit za licence, zdrojové kódy a programy už jsou většinou připravené v tzv. balíčku pro danou distribuci unixového operačního systému. Nevýhodou je však jejich množství, tedy každá část se musí instalovat zvlášť, následná konfigurace a synchronizace a dolaďování chyb, které už vyžaduje alespoň mírnou znalost používaného systému. První je tedy projekt PCSC lite, tedy vrstva mezi čipovou kartou a middleware, který zpřístupňuje čtečku karet její komunikaci se systémem, posílá její události, jako jsou vytažení či zasunutí karty apod. Standardně je spouštěn při startu systému a běží jako tzv. daemon. Jeho nezbytnou součástí je balík CCID, což jsou ovladače pro čtečky karet. Obr. 6: Znázornění možností posloupnosti modulů Alternativou PCSC lite je OpenCT, který se liší implementací a tím, že s vyšší vrstvou komunikuje pomocí souboru status, umístěného v adresáři /var/run/openct/. 12

3.2 Volba rozhraní s čipovou kartou Další použitelnou součástí, která se k čtečkám vztahovala je libmusclecard, což už je přímo programové rozhraní, které poskytuje funkce zajišťující práci protokolu PKCS#11. Slouží tedy k ovládání samotné čipové karty, zprostředkované právě PCSC lite nebo OpenCT daemonem. Poslední částí je OpenSC, který je zase alternativou pro libmusclecard. Tento modul je sice primárně svázán s OpenCT, ale podporuje i PCSC lite. Tyto části byly testovány všechny a nakonec vyšla nejlépe kombinace PCSC lite s OpenSC. Výběr podpořila i skutečnost, že tyto prvky jsou standardně implementovaný do nejnovější distribuce Fedora Core 6. Dále pak PCSC lite při testování obstála nejlépe a to díky balíčku s ovladačemi čipových karet CCID, který se pravidelně rozšiřuje, tak jeho bezproblémová funkčnost. S OpenCT byly problémy již při instalaci a následně při práci, protože jak je již zmíněno, komunikuje s vyšší vrstvou pomocí souboru /var/run/openct/status a tyto vrstvy se rozcházely v nastavení. Samotné programové rozhraní pro tvorbu této aplikace bylo zvoleno OpenSC. Důvod byl především bezproblémová funkčnost, množství nástrojů a též již napsaných testovacích programů a příkladů. Jeho nesporná výhoda je i v tom, že podporuje PCSC lite i OpenCT a je jedno, který si uživatel zvolí a nainstaluje, komunikuje s oběma stejně a na výslednou aplikaci to nemá vliv. 3.3 Šifrovací vrstva Další vrstvou je software, jenž bude šifrovat daný virtuální souborový systém. Pro GNU/Linux je jich celkem dost, např. TrueCrypt, CryptoFS, dmcrypt, CrossCrypt, cryptoloop, loop aes nejvíce referencí a kladného hodnocení se bylo možno dočíst u dmcrypt a cryptoloop. Z těchto dvou byl zvolen nakonec dmcrypt a to z následujících důvodů. DmCrypt[6] je novější nástroj a je šifrovací vrstvou pro device mapper. Také není závislý na util linux ani žádném jiném uživatelském nástroji na rozdíl od cryproloop. Ten naproti tomu obsahuje řadu známých zranitelností a to, že není odolný proti plaintext a watermark útokům. DmCrypt je i velmi stabilní díky využívání memloopu. Jeho podpora je však až od stabilního jádra GNU/Linux verze 2.6.4, doporučený použití pak od jádra 2.6.5, cryptoloop je sice podporován už od starších jader, avšak v novějších zůstává kvůli zpětné kompatibilitě. Co je nového na programu dmcrypt, je právě device mapper, který umožňuje nadefinovat nový oddíl nebo logickou jednotku. K funkci potřebuje znát rozsah sektorů nebo existující bloková zařízení, která jsou mapována tzv. mapovací tabulkou (mapping table), a dm crypt pak tyto cíle určuje pro šifrování přes standardní cryptoapi. 13

3.4 Aplikace šifer v programu 3.4.1 Volba šifrovacích algoritmů Pro symetrickou kryptografii jsou zvoleny algoritmy 3DES a AES a to z důvodu jejich bezpečnosti a všeobecné známosti a použití. Pro asymetrickou kryptografii je použit algoritmus RSA, protože jej podporuje karta. Na obrázku je zobrazeno hybridní schéma použití obou typů symetrické a asymetrické kryptografie. Jejich kombinaci bylo využito, protože samotné asymetrické šifrování celého virtuálního souborového systému čipovou kartou by trvalo neúměrně dlouho. Obr. 7: Hybridní schéma použití symetrické a asymetrické kryptografie 3.4.2 Šifrování a dešifrování virtuálního souborového systému Zde je použita symetrická kryptografie. Nejdříve je vytvořen klíč odpovídající délce zvolené šifry, tedy pro 3DES o délce 168 bitů a pro AES 256 bitů. Klíčem a odpovídajícím algoritmem je následně zašifrován souborový systém, klíč je sám pak zašifrován čipovou kartou a je uložen do hlavičky souboru reprezentujícího virtuální souborový systém. Z 14

hlavičky je pak vyjmut když je potřeba odpojený souborový systém připojit, pomocí karty dešifrován a poslán vrstvě, která se stará o transparentní šifrování. Popsaný způsob je bezpečný z hlediska použití šifer, avšak je nutno nakládat s dešifrovaným klíčem tak, aby v této podobě byl po co nejnutnější dobu a nezůstal v některé proměnné poté, co se operace provedou. Proměnná odkazující na klíč je tedy po jeho odeslání transparentní vrstvě přepsána náhodnými daty. 3.4.3 Šifrování klíčů čipovou kartou Čipová karta sama provádí kryptografické operace s dvojicemi kryptografických klíčů, tedy veřejného a privátního, které jsou na ní uloženy. Veřejný klíč je volně přístupný a lze ho získat z karty i bez zadání PIN kódu. Privátní klíč je pak použit pouze pro kryptografické operace uvnitř čipové karty a není možné jej získat v jeho podobě, což je velmi bezpečné. Tyto operace jsou zabezpečené PIN kódem, bez kterého je nelze používat. Počet pokusů vložení PIN kódu je většinou omezen, například na tři pokusy, potom se karta zablokuje. Pro šifrování a dešifrování je zde využito asymetrické kryptografie. Po vytvoření klíče pro šifrování souborového systému je tento klíč zašifrován veřejným klíčem. Ten uživatel zvolí z nabídky dvojice klíčů či certifikátu, které jsou uložené právě na čipové kartě. Pro dešifrování klíče jej opět pošle na čipovou kartu, kde je po zalogování, tedy povolení operací zadáním od uživatele získaného PIN kódu, dešifrován privátním klíčem a vrácen v otevřené podobě. 3.4.5 Využití hash funkcí Jako nadstandardní funkcí programu je šifrování souborového systému pomocí hesla, tedy bez použití čipové karty. Použití šifer AES a 3DES se nemění, změna je pouze při tvorbě klíče pro jejich funkci. Ten se získá právě pomocí hash funkce z hesla zvoleného uživatelem. Funkce jsou též využity pro vyrobení otisků veřejných klíčů, kvůli identifikaci certifikátů na kartě. 15

4 Popis implementace a realizace 4.1 Postup implementace Program byl realizován podle již zmíněných třech částí. První byl návrh grafického rozhraní a základní funkčnosti. Poté přišlo na řadu vytváření souborových systémů a jejich šifrování, ale zatím jen pomocí hesla. Poslední částí bylo doplnění funkčnosti právě o čipovou kartu. 4.2 Grafické rozhraní Grafické uživatelské rozhraní je tedy vytvořeno v GTK+ 2.0. K tomu byl použit návrhový program glade 2. Výsledkem jsou soubory main.c, kde je zavedení programu, interface.c, ve kterém se definují a vytvářejí všechny komponenty, tedy okna, dialogy a jejich součásti. Třetím souborem je pak callback.c, kde jsou všechny události. To znamená, že když se stiskne kterékoliv tlačítko či jiná definovaná událost, tak se volají funkce právě z tohoto souboru. Vzhled byl navrhován tak, aby dominantou byl výpis všech uživatelem definovaných souborů. Obr. 8: Ukázka vzhledu programu Soubory se zobrazují jen ty, na které má uživatel právo a které na disku existují. Jak je patrné z obrázku, uživateli se zobrazuje pět sloupců a to, kam se bude souborový systém připojovat, umístění šifrovaného souboru na disku, jeho kapacita v bajtech, použitý šifrovací algoritmus a nakonec stav, tedy zda li je připojen či není. 16

4.3 Souborový systém Další částí je šifrování a připojování daného souborového systému. Nejdříve se vytvoří soubor, jenž bude obsahovat celý souborový systém. Vytvoří se ve svém uživatelském adresáři a uloží se do něj hlavička, se kterou pak bude program pracovat. Hlavička nese tyto údaje: 1. bajt zda souborový systém šifrujeme kartou nebo heslem 4. bajty algoritmus pro dešifrování 20. bajtů hash veřejného klíče 128. nebo 256. bajtů symetrický klíč První bajt je k pro šifrování kartou, nebo h pro šifrování pomocí hesla. Další čtyři bajty představují algoritmus pro šifrování, v nabídce je AES nebo 3DES. Jedna možnost bylo nahradit jej jedním znakem kvůli bezpečnosti a případným útokům, ale nakonec byl zvolen přímý způsob, tedy zapsání celého názvu, kvůli pozdější snazší implementaci dalších algoritmů. K identifikaci klíče či certifikátu na kartě slouží dalších 20 bajtů, které musejí být uvedeny, protože na kartě se může nacházet více těchto objektů. K tomu se dá využít dvou metod, jednou z nichž je ukládání ID tohoto objektu, avšak tímto by byl program vázán pouze na danou čipovou kartu, při jejíž ztrátě by se k datům již těžko dostávalo i přes to, kdyby měl uživatel kopii certifikátu či privátního klíče, např. uloženou bezpečně v trezoru. Druhou metodou je uložení pomocí hash funkce otisk veřejného klíče. Při hledání daného objektu pak musí program prohledat všechny objekty na kartě a udělat z veřejných klíčů hash funkcí otisk a porovnat s tím v hlavičce. Tato metoda je sice časově a implementačně náročnější, ale pro uživatele komfortnější a bezpečnější z hlediska ztráty dat. Posledním údajem je samotný klíč, který je ukládán ve znakové podobě a to z důvodu jednoduchosti. Tedy 1024 bitový klíč bude zabírat osminu místa, tedy 128 bajtů a 2048 bitový 256 bytů. Zbytek souboru se musí naplnit daty na velikost zvolenou uživatelem. Zde musí ale zůstat potřebné místo, aby si nesmazala hlavička. Ta potřebuje při standardním klíči 1024 bitů 153 bajtů a při klíči 2048 bitů pak 281 bajtů a jelikož jsou k dispozici bloky o velikosti 512 bajtů, tak by stačil uvolnit jeden. Avšak s ohledem na možné budoucí rozšíření klíčů na 4096 bitů, kdy je k uložení potřeba minimálně 512 bajtů, případně k rozšíření funkcí programu a jejich potřebnému záznamu do hlavičky, jsou vyhrazeny 2 bloky. Nakonec je kvůli větší bezpečnosti soubor naplněn náhodnými daty ze souboru /dev/urandom, který generuje náhodné znaky. Následuje vytvoření blokového zařízení, vytvoření souborového systému a připojení. Zde ale došlo k problému a to, že se tyto příkazy musejí volat pouze s právy super uživatele, tedy roota. To se může celkem tolerovat, pokud program poběží pouze u samotného 17

uživatele. Avšak pokud bychom ho chtěli požívat sdíleně, například v učebnách, tak to už by nebylo možné. Řešení jsou k dispozici dvě. První je, že tyto příkazy bude obsluhovat tzv. daemon, nebo li program, který poběží neustále na pozadí systému. To je ale značně nepraktické, protože by tento program musel běžet neustále, i když by se program nevyužíval. Druhé řešení je při instalaci nastavit programu suid bit. To znamená, že se bude spouštět s právy roota. To je ale značně nebezpečné a ani to nebylo umožněno ze strany skupiny GTK. Aplikován byl nakonec kompromis, jímž je vytvoření zvláštního programu, který bude mít nastaven onen suid bit, avšak bude obsluhovat jen příkazy, které potřebují rootovská práva. Program se volá s pěti parametry, a to volba funkce, tedy jestli se bude odpojovat, vytvářet nebo připojovat souborový systém, dále cíl připojení, připojovaný soubor, šifrovací algoritmus a heslo nebo klíč. Pomocný program volá přímo systémové programy, místo daných knihovních funkcí. Volá je jako samostatné procesy, které vytvářím s příkazem fork() a execlp() nebo příkazem popen. Zde bylo nutné si uvědomit, že dané procesy se zdvojují, a tak se na ně musí v hlavním běhu programu čekat, aby se náhodou nepředběhly. Musí se také počkat na návratovou hodnotu, aby program zjistil, zda li příkaz proběhl v pořádku. Prvním příkazem pomocného programu je losetup, který vytvoří z daného souboru blokové zařízení. Zde ale došlo ke zjištění, že standardně je k dispozici pouze 8 míst pro tato bloková zařízení. Ale po vyhodnocení situace se dospělo k závěru, že nejsou v takovéto míře využívána a uživatel nebude najednou připojovat 8 šifrovaných souborových systémů. U tohoto příkazu je též nutná kontrola volných loop zařízení, která jsou číslována loop0 až loop7. Při připojování souboru se nesmí zapomenout nastavit offset, abych si nepřepsal hlavičku souboru. Nyní je ze souboru vytvořené blokové zařízení. Následuje šifrovací vrstva a tedy dmcrypt. Ten se volá pomocí příkazu cryptodev s parametry: cryptsetup c aes h ripemd160 b `blockdev getsize /dev/loop0` create cryptodev0 /dev/loop0 V případě volby šifrování pomocí hesla, v případě klíče: cryptsetup c aes d key s keysize b `blockdev getsize /dev/loop0` create cryptodev0 /dev/loop0 V prvním případě je možné si všimnout parametru h, který znamená hash a tudíž se z hesla vytvoří klíč pomocí algoritmu ripemd160. V druhém případě je to k, který určuje umístění klíče, který je mu poskytnut hlavním programem. Z blokového zašifrovaného zařízení umístěného v /dev/loop0 se vytvoří dešifrované v /dev/mapper/cryprodev0. Dalším krokem je vytvoření souborového systému příkazem mkfs v tomto případě 18

bude systém souborů ext2. V případě nutnosti se pak může doplnit volba na jiné souborové systémy. Poslední fází je připojení cryprodev0 k ostatním souborovým systémům do uživatelem definovaného adresáře, standardně do /mnt/. K tomu slouží příkaz mount. Tím se připojí virtuální zařízení do místa, odkud chce uživatel k danému šifrovanému zařízení přistupovat. Jelikož je ale připojováno s právy super uživatele, tak on jediný má k tomu přístup. Posledním krokem tedy bude změna vlastníka z roota na uživatele a to příkazy chown a chmod. A teď již s tím může uživatel pracovat jako s libovolným diskem. V programu je i volba připojit, ta je totožná jako již zmíněný postup, kromě formátování, tedy příkazu mkfs, který už není znovu volán. Souborový systém je možno používat až do doby, než jej uživatel odpojí. To se stane buď automaticky vypnutím systému nebo volbou tlačítka odpojit. Tlačítko splní úlohu jen v případě, že uživatel se souborovým systémem již nepracuje, jinak funkce umount jej odmítne odpojit. Je to z důvodu toho, kdyby byl souborový systém odpojen např. během kopírování, tak by mohlo dojít k poškození či ztrátě dat. Toto může nastat, kdyby program umožňoval odpojovat souborový systém automaticky po vytažení čipové karty. To je sice komfortnější, uživatel se nemusí starat o odpojování, ale v programu je kladen důraz hlavně na bezpečnost dat, tak funkce není implementována. Po odpojení je práce u konce a k virtuálnímu souborovému systému není možné přistupovat. Zůstal akorát zašifrovaný soubor, který je možno libovolně kopírovat, zálohovat, nebo přenášet na paměťových zařízení a data v něm budou v bezpečí. Pro dešifrování pak bude stačit soubor otevřít v tomto programu, ten zjistí jakou formou je šifrován a vyzve uživatele k vložení čipové karty a zadání PIN kódu nebo pouze k zadání hesla, v závislosti na původní volbě. Nedílnou součástí programu je pomocný soubor config.sif. Zde jsou uloženy všechny uživatelem přidané soubory, i ty, které již neexistují. Při spuštění programu jsou všechny soubory zkontrolovány, zda li existují a zda li na ně má uživatel práva. Poté se ověří, zda li není souborový systém připojen a pak se informace o něm zobrazí v úvodní nabídce. Posledním souborem je sifrsyst.conf, ve kterém se udává cesta ke knihovně implementující standard PKCS#11. V tomto programu je tato knihovna součástí OpenSC a je v /usr/lib/opensc pkcs11.so. 4.4 Čtečka a čipová karta Studium rozhraní PCSC lite a OpenSC bylo obtížné a spočívalo v pročítání zdrojových kódů, které byly k dispozici u instalací. Především pak funkcí souvisejících s PKCS#11, tedy prací s objekty na kartě a kryptografickými operacemi. PCSC lite je tedy program označovaný jako daemon, protože při spuštění systému 19

běží na pozadí systému, čeká na události, jako je připojení či odpojení čtečky, vložení či vytažení čipové karty. Program je možné spustit s parametrem f, který umožňuje běh programu na popředí a tedy uživateli sledovat výpis všech událostí které PCSC lite vykonává včetně chybových stavů. Další zajímavou funkcí je záznam do logovacích souborů všech APDU instrukcí čipové kartě. OpenSC rozšiřuje a zjednodušuje funkce, které jsou definovány ve standardu PKCS#11. V programu jsou využity tyto: 1. PKCS11_CTX_new, PKCS11_CTX_free vytváří CTX strukturu a uvolňuje ji 2. PKCS11_CTX_load, PKCS11_CTX_unload mačítá PKCS#11 modul 3. PKCS11_enumerate_slots, PKCS11_release_all_slots vyhledá a uvolní sloty 4. PKCS11_find_token prohledá sloty a vrátí jeden, ve kterém je čipová karta 5. PKCS11_open_session, PKCS11_close_session otevře nebo zavře session 6. PKCS11_generate_random vygeneruje klíč 7. PKCS11_enumerate_certs vyhledá všechny certifikáty na kartě 8. PKCS11_login, PKCS11_logout přilologuje odloguje uživatele pomocí PIN kódu 9. PKCS11_find_key vyhledá veřejný klíč v certifikátu 10. PKCS11_private_decrypt dešifruje data pomocí privátního klíče Výhodou fukcí je jejich snadné použití ale i urychlení programu. Například funkce PKCS11_enumerate_certs, která vyhledá všechny certifikáty na kartě, je uloží přímo do pole struktur těchto typů a pak se s nimi může pracovat bez opakovaného přístupu na kartu. Certifikáty je nutné načíst všechny, protože se z jejich veřejného klíče dělají hash otisky, které slouží k ověření veřejných klíčů a tím identifikaci privátních klíčů pro dešifrování. Dále jsou také ze všech certifikátů získávány informace jako vlastník, šifrovací algoritmus a délka klíče, aby je měl uživatel k dispozici a pak se mohl rozhodnout, se kterým z certifikátů bude pracovat. 20

5 Testování První testy probíhaly při tvorbě samotného programu a pomohly odhalit především problémy s uživatelskými právy. Po dokončení aplikace byl vytvořen scénář standardních i nestandardních, ale možných použití programu. Důraz byl kladen na správné dešifrování a připojování virtuálních systémů souborů a především na bezchybnou práci s reprezentujícím souborem, při jehož poškození či špatné funkci by mohl uživatel přijít o svá data. Testovalo se na konfiguraci GNU/Linux distribuci Mandriva 2006. K dispozici byla čtečka Axalto USB v3 a čipová karta Cryptoflex 32K e gate. První testy se zakládaly na interakci uživatele s programem, tedy na kroky které uživatel může a které by mu neměly být povoleny a následné informování o jejich provedení či neprovedení a návrh možného řešení. Při vytváření nového disku se ověřovalo jeho umístění, zda li program včas upozorní uživatele, jestli se pokouší přepisovat již existující soubor, nebo když se pokusí zapisovat soubor do míst, kam nemá přístup, totéž i u výběru cílového adresáře. Dále je k dispozici stránka s volbou šifrování pomocí čipové karty nebo hesla. Zde se ověřovala reakce programu na špatně potvrzená hesla, na to, když uživatel před potvrzením vyjme čipovou kartu. Při jejím výpise se kontrolovala korektnost zobrazených údajů o kartě, certifikátech, jejich vlastnících a klíčích. Následovalo vytvoření šifrovaného disku a jeho připojení. Soubor měl určenou zvolenou velikost, název, umístění a byl připojen na určené místo. Následoval test chování programu, když změním šifrovanému souboru hlavičku nebo ho smažu. Program v obou případech odstranil soubor z tabulky. Dobře vyšla i zkouška nalezení a zobrazení všech připojených virtuálních disků, po vypnutí a následného zapnutí programu. Další testování se zaměřilo na druhou volbu a tedy na přidávání již existujícího šifrovaného disku. Kromě zmíněných částí ohledně připojení a umístění jako v případě vytváření se ještě zohledňovalo to, zda li přidávaný soubor již není v uživatelské nabídce a reakce programu v opačném případě. Předposlední z řad testování bylo zaměřeno na pomocný program rootprg s nastaveným suid bitem. Zde by se mohla vyskytnout bezpečnostní chyba, tedy zneužití příkazů s právy uživatele root a přístup k souborům, na které nemá uživatel práva. Program byl testován zvlášť a byly mu uměle posílány neoprávněné příkazy na připojování do nepřístupných míst, případně požadavky na práci a formátovaní neoprávněných souborů. Během finálního testování pak již nebyly odhaleny žádné chyby. K otestování byli přizvání i běžní uživatelé, jmenovitě kolegové Ing. Petr Vokáč a Milan Zach, kteří program prověřili z nezaujatého hlediska a s vlastními postupy. Aplikace bez problémů splnila očekávání. 21

6 Srovnání s existujícími řešeními Srovnávat tento program lze s již existujícím, komerčně prodávaným softwarem od zadávající firmy, jenž sloužil jako ukázkový a z jehož funkčnost bylo v podstatě vycházeno. Základním rozdílem obou implementací je, že každá pracuje pod jiným systémem, ale to byl záměr a ta pro Windows je dopracována vizuálně tak funkčně, což u této neplatí a to z důvodů především časových, ale v zásadě to nebyl ani záměr. Dalším, a to velmi podstatným rozdílem, je způsob instalace a fungování. Ačkoliv tato verze se skládá z již vytvořených a fungujících částí, které jsou poskytovány pod licencemi GNU, či GPL, program je akorát spojuje a využívá jejich služeb a ony se musí instalovat zvlášť, Verze pro Windows se instaluje najednou, tedy mimo ovladačů. Co se týká samotné funkčnosti programu, tak obě splňují základní požadavky, a to výběr certifikátu pro šifrování, nastavení velikosti a umístění oddílu, umístění a název souboru, volba šifrovacího algoritmu, dále pak výběr mezi šifrování oddílu právě kartou nebo pouze heslem. Rozdíly jsou ve vlastním připojení onoho virtuálního souborového systému. Ve Windows se připojuje jako jednotka označená písmenem, v Linuxovém prostředí se připojuje většinou do adresáře /mnt. Rozdíl je i ve formátování při vytváření souborového systému. Ve Windows verzi se musí naformátovat s administrátorskými právy, pod která se uživatel musí přepnout, nebo požádat odpovědnou osobu a je zde zvolen systém souborů NTFS. V GNU/Linux verzi programu toto zajišťuje pomocný program s nastaveným suid bitem a systém souborů je zvolen ext2. Nevýhodou v GNU/Linux verzi je pak obtížnější způsob odpojování souborového systému například po vyjmutí karty, protože to systém neumožňuje, pokud právě uživatel ještě se složkami pracuje. 22

7 Závěr Program splňuje požadavky zadání. Problémem mohou ale být nekompatibility v jednotlivých distribucích. Program byl implementován na aktuálních verzích daných podpůrných balíčků, avšak předpokládám, že uživatel, který by chtěl tento produkt používat a zabezpečovat data, nebude pracovat na deset let starém systému, který sám osobě už nesplňuje bezpečnostní požadavky. Dále je nutné se zmínit o bezpečnosti. Jak je uvedeno, jsou data velmi dobře zabezpečena, a je li vůbec možné šifry prolomit, tak s dnešními technologiemi velmi těžko, avšak nejslabším článkem je lidský faktor a tedy prozrazení PIN kódu, ať už virem či pouhým odečtením stisknutých kláves druhou osobou a následné odcizení karty. Tomu by se mohlo zamezit pomocí biometrických informací, ale to už není téma této práce. Další velmi nepříjemným faktorem je, že ačkoliv je vyžadována velká bezpečnost, která se tímto systémem dostává, tak se toto může stát uživateli i osudným. To znamená, pokud uživatel nebude mít kopie certifikátů či kryptografických klíčů někde schované, tak při ztrátě či poškození karty, nebo zapomenutí PIN kódu, se může se svými daty rozloučit. Tomu může zamezit akorát záloha kryptografických klíčů nebo přímo samotných nešifrovaných dat, ale to už je věcí uživatele. Myslím si, že by tento program mohl být využíván, a to především uživateli přenosných počítačů a flash disků. Před uvedením do komerční sféry by bylo nutné v aplikaci dodělat úpravy a to především v podpoře pro ostatní distribuce a umístění do tzv. instalačních balíčků. Nakonec je potřeba zajistit právní náležitosti a to vzhledem k použitým modulům, které jsou distribuovány pod licencemi GPL nebo GNU. I když mě samotného by potěšilo, kdyby byl jednou tento program sám poskytován pod těmito licencemi a já tak přispěl svým dílem do open source komunity. 23

24

8 Seznam použité literatury [1] OKsystem. OKsmart integrační software pro čipové karty[online]. 2006 <http://www.oksystem.cz> [2] RSA Laboratories. PKCS #11: Cryptographic Token Interface Standard[online]. 2004 <http://www.rsasecurity.com/rsalabs/node.asp?id=2133> [3] Doc. Ing. Róbert Lórencz, CSc., Tomáš Rosa, PhD. Aplikovaná kryptografie[online], 2006. <http://service.felk.cvut.cz/courses/x36apk/> [4] GSA. Smart Card Handbook[online]. 2002. <http://www.smart.gov> [5] OpenSC. OpenSC Project[online]. 2006. <http://www.opensc project.org/opensc/documentation> [6] Christophe Saout, Dm crypt: a device mapper crypto target[online]. 2005. <http://www.saout.de/misc/dm crypt/> 25

26

9 Přílohy A. Seznam použitých zkratek 3DES AES APDU API DES EEPROM gcc GNU GPL ISO/IEC PC/SC Tripple DES Trojitý DES Advanced Encryption Standard Pokročilý šifrovací standard Application Protocol Data Unit Datová jednotka aplikačního protokolu Application programable interface Aplikační programové rozhraní Data Encryption Standard Standard pro šifrování dat Electrically Erasable Programmable Read Only Memory Elektricky smazatelná a programovatelná paměť pro čtení The GNU Compiler Collection GNU sada kompilátorů GNU is not Unix GNU není Unix General Public Licence Obecná veřejná licence International Organization for Standardization/International Electrotechnical Commission Mezinárodní organizace pro standardizaci/mezinárodní komise pro elektrotechniku Personal Computer/Smart Card Osobní počítač/čipová karta PIN Personal Identification Number PKCS RSA SHA Osobní identifikační číslo Public Key Cryptography Standards Kryptografické standardy pro práci s veřejnými klíči Ron Rivest, Adi Shamir, Len Adleman Secure Hash Algorithm Bezpečnostní hash algoritmus 27

28

B. Obsah přiloženého CD Obr. 9: Obsah CD 29