2. Digitální obálky, podpisy a certifikáty

2.1. Digitální obálky (Digital Envelopes)

[znalosti]

Digitální obálka je aplikace, ve které odesílatel zapečetí zprávu a nikdo jiný než zamýšlený příjemce zprávy ji nemůže otevřít. Toto se děje s pomocí symetrických (obsah zprávy) i asymetrických kryptovacích algoritmů (kódování tajného klíče).

Odesílatel (označován jako A - Alice) zakóduje čistý text příjemcovým veřejným klíčem s použitím nějakého asymetrického algoritmu a pošle zprávu příjemci (označován jako B - Bob). Tato zpráva může být přijemcem otevřena pouze tehdy, pokud přijemce zná svůj tajný klíč (náležející k veřejnému klíči příjemce.

Jak bylo řečeno výše, asymetrické algoritmy jsou pomalejší (uvádí se dokonce, že až 1000x) a nejsou tedy vhodné pro přenos velkého množství dat. Asymetrickým algoritmem se proto zašifruje tajný klíč, a tento tajný klíč je poslán příjemci. Jelikož obě strany znají tajný klíč (odesílatel jej znal ze začátku, příjemce jej získal dekódováním první zprávy svým tajným klíčem), může se nyní komunikovat s pomocí symetrického algoritmu.

Pro vytvoření digitální obálky se obvykle používá algoritmus RSA (třída RSACryptoServiceProvider).

2.2. Digitální podepisování (Digital Signing)

[znalosti]

Digitální podpis je aplikace, ve které odesílatel podepíše zprávu tak, že každý může ověřit, zda je od daného odesílatele a že nikdo jiný ji nezměnil poté, co byla odesílatelem podepsána. K digitálním podpisům se používají hashovací funkce a algoritmy s asymetrickým kódováním.

Pro digitální podepisování lze použít algoritmy RSA, DSA.

2.3. Digitální certifikáty

Předchozí aplikace mají několik nedostatků

  • Jak se příjemce zprávy dozví odesílatelův veřejný klíč a jak si může být jist jeho pravostí?

  • Jak se příjemce dozví, jaké použít hashovací funkce a jaké jsou jejich parametry?

  • Jak se příjemce dozví, které kódovací algoritmy použít a jaké jsou jejich parametry?

Tyto nedostatky řeší právě digitální certifikáty. Digitální certifikace je aplikace, ve které certifikační autorita podepíše zvláštní zprávu obsahující jméno uživatele a uživatelův veřejný klíč. Tato zpráva obsahuje také použité algoritmy a jejich parametry. Navíc si každý může zjistit, že tato zpráva byla podepsána právě danou certifikační autoritou. Tato zpráva se nazývá digitální certifikát.

[ukázka kódu]
using System;
using System.Security.Cryptography.X509Certficates;
...
   string certFile;
   ...
   try {   
      // nacteme certifikat ze souboru
      X509Certificate cert = X509Certificate.CreateFromCertFile(certFile);
      
      // vypiseme informace ziskane z certifikatu
      Console.WriteLine("Nazev: " 
        + cert.GetName().Substring(cert.GetName().IndexOf("CN=")+3));
      Console.WriteLine("Vystavil: " 
        + cert.GetIssuerName().Substring(cert.GetIssuerName().IndexOf("OU=")+3));
      Console.WriteLine("Platnost: " 
        + cert.GetEffectiveDateString() + " - " 
        + cert.GetExpirationDateString());
   } catch (System.Security.Cryptography.CryptographicException e) {
      Console.WriteLine(e.Message);
   }
...
[příklad ke stažení]

Testovací program na výpis obsahu certifkátu společně s certifkátem je možno možno ve fromátu zip stáhnout zde.