Asymmetrische cryptografie

Bij asymmetrische cryptografie, ook wel bekend als publieke-sleutelcryptografie, zoals RSA, wordt gebruikgemaakt van twee aparte sleutels: één sleutel wordt gebruikt om de klare tekst te versleutelen of te ondertekenen, en de tweede sleutel om de cijfertekst weer te ontsleutelen of de ondertekening te verifiëren. Bij de 'andere' methode, de symmetrische cryptografie, wordt dezelfde sleutel gebruikt voor zowel versleutelen als ontsleutelen. De sleutel bij symmetrische cryptografie is niet geschikt voor ondertekenen.

Het voordeel van de asymmetrische cryptografie is dat men door het verstrekken van de ene dan wel de andere sleutel kan kiezen wie de versleutelde informatie kan lezen en ook wie allemaal informatie kan versleutelen.

Geschiedenis 
Om vertrouwelijke berichten uit te wisselen, maakten de Romeinen en de Arabieren al gebruik van cryptografie. Als de ontvanger van het versleutelde bericht de manier van encryptie en de sleutel kende, kon het bericht in klare tekst worden omgezet. Het was dus van belang dat de opsteller van de cijfertekst de sleutel op een veilige manier bij de ontvanger wist te bezorgen. Met de ontwikkeling van de computer konden cryptoanalisten veel sneller hun werk uitvoeren.

Sleuteldistributieprobleem 
Het was dus nodig dat de sleutels langer werden en frequenter werden ververst. Een Romeinse veldheer kwam er nog mee weg de sleutel iedere maand te vernieuwen, maar de Duitsers veranderden in de Tweede Wereldoorlog hun sleutels al iedere dag. De komst van e-mail was aanleiding voor het ontwikkelen van een manier waarbij het niet nodig was de sleutel via een ander kanaal uit te wisselen, voordat de ontvanger het bericht kon lezen. 

Asymmetrische cryptografie bood uiteindelijk een oplossing voor het sleuteldistributieprobleem. In het geval van asymmetrische cryptografie is de sleutel voor het versleutelen een andere is dan die voor het ontsleutelen. De twee sleutels zijn echter wel met elkaar verbonden via een wiskundige constructie. De twee wiskundig verbonden sleutels noemen we het sleutelpaar. Het deel van het sleutelpaar dat met een ieder gedeeld mag worden wordt de publieke sleutel genoemd, het deel dat je veilig voor jezelf moet houden noemen we de privésleutel.

Het distribueren van de sleutel wordt nu veel eenvoudiger; doordat de publieke sleutel geen vertrouwelijke informatie meer bevat kan het gedeeld worden met iedere communicatiepartner bijvoorbeeld via een e-mail of adresboek. 

De wiskundige constructie zorgt er voor dat wanneer een bericht met de publieke sleutel is versleuteld, dit alleen met de privésleutel weer ontsleuteld kan worden. Een mooie bijkomstigheid is dat dit ook omgekeerd werkt; wanneer een bericht met de privesleutel is versleuteld dan kan dit alleen met de publieke sleutel ontsleuteld worden. Omdat de publieke sleutel voor iedereen toegankelijk is heb je hiermee een bewijs dat een bericht van de houder van de privesleutel afkomt. 

Nog een eigenschap van de wiskundige constructie is dat er maar 1 publieke sleutel bij een private sleutel past en omgekeerd. Er kan dus geen tweede privé sleutel worden gevonden die ook geschikt is om het versleuteld bericht te ontsleutelen. 

Voor de wiskundige constructies zijn er verschillende algoritmen in omloop. Het meeste gebruikte is RSA. Dit algoritme is gebaseerd op modulair rekenen waarbij de basis ligt in het gebruik van priemgetallen, die alleen deelbaar zijn door een of zichzelf, zonder dat er een rest overblijft. De rest is essentieel bij deze vorm van encryptie, omdat op basis van dit getal wel het bericht kan worden versleuteld, maar niet ontsleuteld. Een alternatieve wiskundige techniek voor asymmetrische cryptografie is Ellyptic Curve Cryptography.

Toepassing 
Toepassingen maken dit principe duidelijk. Stel voor dat je een sleutelpaar bezit. Door één sleutel gewoon in media te publiceren, bijvoorbeeld in een adresboek, op een website of meegestuurd bij ondertekening van een e-mail, wordt dat jouw publieke sleutel. De andere sleutel is dan jouw privésleutel die jij zorgvuldig voor jezelf houdt.

Versleuteling 
Iedereen die aan jou een bericht wil sturen dat geheim moet blijven, kan nu jouw publieke sleutel gebruiken om de informatie te vercijferen. Vervolgens kan het vercijferde bericht worden verzonden. Alleen jij kunt het bericht ontcijferen, omdat jij als enige beschikt over de privésleutel, nodig om het bericht te ontcijferen. Hierdoor blijft het bericht voor iedereen onleesbaar, behalve voor jou. Dit is de meest eenvoudige vorm.

In de praktijk, omdat asymmetrische algoritmes veel rekencapaciteit vragen, worden (grote) berichten niet rechtstreeks versleuteld met de publieke sleutel. Hiervoor worden symmetrische en asymmetrische cryptografie naast elkaar gebruikt: 

Eerst wordt er een willekeurige symmetrische sleutel gegenereerd. Daarna wordt met behulp van een symmetrisch algoritme, dat relatief snel is, het bericht vercijferd met gebruik van deze symmetrische sleutel. Vervolgens wordt de symmetrische sleutel, die beperkt is van omvang, vercijferd door middel van de publieke sleutel. De vercijferde sleutel wordt tezamen met het vercijferde bericht verstuurd naar jou. 

Met behulp van de privésleutel die bij de publieke sleutel hoort ontcijfer je eerst de vercijferde symmetrische sleutel. Vervolgens kun je het vercijferde bericht ontcijferen met het symmetrische algoritme. En daar is het bericht in klare tekst.

Ondertekening 
Andersom kun je een bericht versleutelen met jouw privésleutel en vervolgens versturen. De ontvanger kan vaststellen dat het bericht van jou afkomstig is omdat het bericht zich alleen laat ontcijferen met jouw publieke sleutel. Dit is de meest eenvoudige vorm.

Zoals eerder vermeld vragen asymmetrische algoritmes veel rekencapaciteit. In de praktijk worden (grote) berichten daarom niet rechtstreeks versleuteld met de privésleutel. Er wordt eerst een controlegetal gemaakt van de inhoud, door middel van hashen, bijvoorbeeld een MD5-sum of een SHA. Door nu dat controlegetal met jouw privésleutel te versleutelen, ontstaat er een digitale handtekening. Deze digitale handtekening verstuur je samen met het bericht. 

Ontvangers kunnen nu met jouw publieke sleutel het controlegetal ontsleutelen. Aanvullend kunnen de ontvangers zelf op dezelfde manier het controlegetal van de inhoud berekenen en het resultaat te vergelijken met de ontsleutelde digitale handtekening. Als de uitkomst identiek is, weet men zeker dat het bericht van jou afkomstig is en dat de inhoud van het bericht onderweg niet is aangepast. Immers: alleen jij bezit de privésleutel om te komen tot dit vercijferde controlegetal bij dit bericht.

Dit is de basis van de digitale handtekening die inmiddels is geëvolueerd tot een rechtsgeldige handtekening waarmee op digitale en veilige wijze rechtsgeldige transacties mogelijk zijn geworden.

Vertrouwen 
Hoe weet je nu of de publieke sleutel werkelijk van de persoon is die hij beweert te zijn? De methode van vertrouwen kan ook het best met een voorbeeld uitgelegd worden.

PKI 
Zoals een bericht kan worden ondertekend, zo kan ook de bijbehorende publieke sleutel worden ondertekend, en wel door een derde partij. Die derde partij garandeert dat de eigenaar van die publieke sleutel, dus het sleutelpaar, inderdaad degene is die hij beweert te zijn. Deze bewering staat in het certificaat, waar ook de publieke sleutel in zit, en die op dezelfde manier digitaal ondertekend is met de geheime sleutel van die derde partij, de certificaatautoriteit. In het certificaat staat ook waar je kunt achterhalen of die bewering nog steeds geldig is, de certificate revocation list. Deze methode van vertrouwen heet public key infrastructure PKI.

PGP 
Als alternatief kan een ongetekende publieke sleutel gepubliceerd worden op een betrouwbaar medium, bijvoorbeeld op de website van de eigenaar van de sleutel. Deze vorm van vertrouwen wordt onder andere gebruikt bij PGP.

Cryptografie