Zas po dlhšom čase sa Vám hlásim s novým dielom o programovaní v jazyku C#. Z času na čas sa hrám a experimentujem s novinkami, ako už syntaktickými či funkcionálnymi, v C#3.5.
Nemôžem sa ale pustiť do novej kapitoly článkov, kým nesplním sľub, čo som dal v minulom článku a to, že Vám ukážem, ako sa jednoducho programuje v C# digitálny podpis (ospravedlňujem sa fanúšikom korektnej pojmológie ;-), že ho nenazývam správne - elektronický podpis).
Problém nastal v tom, že sa mi nechcelo písať dlhý článok, kde by som rozobral teóriu okolo digitálneho podpisu, tak som namiesto toho otvoril SharpDevelop a spravil som jeden ucelený a hlavne aj použiteľný program (WinForms), kde si môžete všetko pekne “ohmatať“.
O digitálnom podpise, odborne nazývanom u nás na Slovensku : zaručený elektronický podpis si môžete vo voľnom čase viac počítať tu:
- Zákon o elektronickom podpise
- Veľmi pekne a názorne popísaný proces podpisovania a overovania digitálneho podpisu
- Pohľad žurnalistu na digitálny podpis
- Štandardné texty o digitálnom podpise z pohľadu NBU
>>Ako funguje dig.podpis po lopate
Možno ste si predchádzajúce odkazy preštudovali, možno nie, ale pokúsim sa to ešte zhrnúť polopatisticky ;-) Základom je Asymetrické šifrovanie, vďaka ktorému máme privátny a verejný kľúč.
Privátny máte iba Vy, nikomu ho nedávate a dá sa ním iba zašifrovať.
Na rozdiel od verejného kľúča, ktorý môžete voľne distribuovať (v prípade digitálneho podpisu), pretože sa ním dá len dešifrovať.
Aby výsledný podpis nebol príliš veľký tak sa šifruje iba Hash z podpisovaných dát. Potom vzniknutý podpis priložíte k textu a je to hotovo.
Príjemca potom dešifruje podpis, spraví Hash (rovnakým zvoleným algoritmom) z prichádzajúcej správy (dát) a porovná Hash-e. Ak sa rovnajú, je zaručené, že ste to popísali Vy (teda jediný človek, ktorý ma v rukách privátnu kľúč k danému podpisu).
Pozn.: Z toho vyplýva, že Váš podpis je zakaždým iný v závislosti od textu, alebo dát, ktoré podpisujete. Asi to bolo zrejmé, ale len pre istotu ;-)
>>Príklad
No a poďme si ukázať čo robí program, ktorý som pre Vás nachystal.
Skladá sa z dvoch hlavných častí. V prvej nazvanej Kľúče si môžete po prvé vygenerovať novú sadu a uložiť si výsledok do súboru, a po druhé, v prípade keď budete správu overovať, ich musíte zas pred tým načítať zo súboru.

V druhej časti nazvanej Podpisovanie, môžete do prvého poľa vložiť text, ktorý chcete podpísať, prípadne, ktorý chcete práve overiť. Keď kliknete na Generuj podpis tak (po prvý raz to trvá vždy dlhšie) sa Vám v dolnom poli zobrazí kľúč v Base64 forme. Môžete si ho jednoducho aj hneď vložiť do Windows schránky, pretože ho budete chcieť určite pridať za správu, ku ktorej ste práve vygenerovali podpis.
Overenie podpisu vyžaduje, aby ste mali najprv načítaný verejný kľuč, voči ktorému idete overovať. Do horného políčka dáte správu, ktorú chcete overiť a dole vložte podpis, ktorý je spojený s danou správou a už len kliknúť na Over podpis.Zobrazí sa Vám zodpovedajúce informačné okno, či je podpis a teda verejný kľúč k nemu správny alebo nie.

Stiahnuť len program
Stiahnuť celé solution so zdrojákmi.
>>Ako to funguje?
Nuž, mám dobré odporúčanie, stiahnite si zdrojáky a pozrite sa, kľudne si čokoľvek upravte (trebárs aj autora ;-) ), jednoducho – pohrajte sa s tým. Jediné nasmerovanie Vám dám:
Všímajte si metódy triedy RSACryptoServiceProvider : VerifyData() a SignData(), ktoré sú v knižniciach .NET už pekne nachystané a uvidíte, že samotné overovania a podpisovania bolo oveľa jednoduchšie ako celé GIU okolo toho ;-).
>>Čo bude nabudúce?
Dúfam, že ste za to, aby sme týmto článkom ukončili kapitolu o šifrovaní a presunuli sa nové technológie, ktoré nám prináša C# 3.5 - teda všetky možné foundation, LINQ a k tomu náležitý syntaktický cukor. OK?
>>P.S. : V diskusii privítam akékoľvek ohlasy, či sa Vám program z tohto dielu páčil, či ste si pomocou neho ozaj odskúšali asi ako to funguje a podobne. Prípadne ak ste ho upravili, zaveste Vašu verziu niekde na Web a dajte link.
[Iné zdroje]
Digitálne podpisovanie konfiguračných XML súborov.
Digitálny podpis a Webové služby.
[Predchádzajúce diely]
Programujeme v jazyku C# III. Diel 11. – Šifrovanie III
Programujeme v jazyku C# III. Diel 10. – Šifrovanie II
Programujeme v jazyku C# III. Diel 9. – Regulárne výrazy IV
Programujeme v jazyku C# - Diel 25. - Šifrovanie I.
SEE YOU!
Autor: Michal Čižmár
micitn@orangemail.sk