Pozor na podpisovanie binárnych reťazcov …

Tak som si znova študoval čosi o digitálnych podpisoch. Len tak na okraj, že prečo preboha: Vyvíjam zrovna Java klientskú aplikáciu, ktorú by som rád distribuoval ako applet alebo cez Java Web Start. Kvôli náture aplikácie sa však potrebujem pripojiť na vzdialený server, čo je však Java Runtimom považované za citlivú operáciu a keď kód chce bežať ako applet alebo cez Java Web Start, tak je pod dohľadom otravného security managera a ten takéto operácie neoblomne zamieta hádzaním security exsepšien (genitív množného čísla od anglického slova exception). Jednoduchým spôsobom ako toto vyriešiť je svoj kód podpisovať, čo znamená mať svoj pár kľúčov, certifikát atď atď.

Tak som si znova načítal wikipeďácku stránku http://en.wikipedia.org/wiki/Digital_signature a začal po 467. krát študovať. Matematika ohľadom kryptografie v PKI schéme mi do hlavy nejde vôbec, ale samotná schéma je celkom jednoduchá a jasná akurát, že vždy zabudnem detaily typu kedy sa z čoho robí hash, čo sa k čomu prikladá a tak.

Potom som si vygúglil, že čo by momentálne mohla byť moja certifikačná autorita a celkom ma potešilo zistiť, že už aj v našej malebnej krajine máme celkom dobrú ponuku. Kukal som firmu Disig, ktorá ponúka zaujímavé produkty, certifikované od NBÚ. Už aj veci ako čipovú kartu alebo usb kľúč na ukladanie privátneho kľúča sa ponúkajú v cenách ktoré si môže dovoliť aj bežný kostelový človek ako ja.

Neviem prečo, ale dostal som chuť prečítať si slovenský zákon o elektronickom podpise, že čo by som tak mohol ešte robiť zo svojím zaručeným elektronickým podpisom, kebyže si ho kúpim od nejakej CA.

Ale čo ma najviac zaujalo na celom tomto researchi bol článok (PDF tuná) na ktorý som sa dostal cez spomínanú wikipedia stránku, ktorý hovoril o jednom zaujímavom spôsobe (z milión iných) ako kompromitovať digitálny podpis.

Ide o to, že to čo sa vlastne pri digitálnom podpise podpisuje je sekvencia bitov. Pre nás samotná táto sekvencia nemá valný význam pokiaľ sa nejako neinterpretuje, povedzme ako PDF dokument, alebo iný formát ako napr. HTML, XML alebo aj slávny DOC. Dôležité je to, aby človek vedel, že to čo podpisuje je nejakým dobre definovaným spôsobom spojené s tým čo pred sebou vidí. Autori tento princíp alebo požiadavku nazývajú WYSIWYS (What You See Is What You Sign). Interpretácia binárnych reťazcov je mojou srdcovou témou teoreticko-informatických kontemplácií, preto som si neodpustil nepodeliť sa so zážitkom z čítania.

Autori článku načŕtajú pár zaujímavých útokov na podpisový mechanizmus. Napr. Keď sa podpisujú XML dokumenty a nepriloží sa k nim ich schéma alebo DTD, tak môže veľmi jednoducho nastať problém interpretácie. To čo ste podpísali môže mať pri inej schéme úplne iný význam.

Ešte zaujímavejšia je úvaha o fontoch. Ak používam aplikáciu, ktorá renderuje text pomocou fontov, tak si musím byť istý, že také isté fonty bude mať aj každý človek, ktorého sa môj podpísaný dokument nejako týka. Citlivé su napríklad znaky ako $, ale hypoteticky sa dá uvažovať aj nad “malicious userom” ktorý velice chytro vymení glyfy tak aby ste si mysleli, že podpisujete niečo nevinné a pritom mu dávate plnú moc na svoje bankové konto alebo iné fajnovosti.

Pre ľubovoľné binárne dáta, ktoré majú byť kódovaním nejakej grafickej informácie autori radia vždy vytvoriť si aj bitmapu samotnej grafickej reprezentácie a tú (poprípade len jej hash) vždy prikladať k podpisovaným dátam. Budete tak mať zaručené, že podpisujete skutočne to čo ste videli.

Leave a Reply

Your email address will not be published. Required fields are marked *