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).
Pro digitální podepisování lze použít algoritmy RSA, DSA.
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.
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); } ... |
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. |