Modular Design of Secure yet Practical Cryptographic Protocols Ronald Cramer Van oudsher hield de cryptologie zich voornamelijk bezig met het ontwikkelen van "geheimschriften" (cryptografie) en het bestuderen van de betrouwbaarheid daarvan (cryptanalyse). Na WO II, vooral onder invloed van Claude Shannon's informatie theorie, is de cryptologie een op mathematische leest geschoeide wetenschap geworden. Een tweede grote doorbraak vond plaats in 1976 met de publicatie van het artikel New Directions in Cryptography door Whitfield Diffie en Martin Hellman. Zij formuleerden het idee van public key cryptografie. Indachtig aan de public key cryptografie zoals die zich nadien heeft ontwikkeld, heeft Oded Goldreich het vakgebied als volgt omschreven: "Cryptografie kan men beschouwen als de wetenschap die zich bezighoudt met het beperken van de effecten die teweeg gebracht kunnen worden door oneerlijke dan wel zich misdragende partijen". Indien er bij de lezer zich een vergelijking met de rechtspraktijk opdringt, wijs ik er op dat de cryptografie beoogt het succesvol ontplooien van zulke bezigheden op voorhand onmogelijk dan wel ondoenlijk te maken. Strikt genomen hebben de begrippen "cryptografie", "cryptanalyse" en "cryptologie" nog steeds betrekking op repectievelijk ontwerp, studie van veiligheid en de combinatie daarvan (zij het nu in een veel bredere context), maar voor het gemak zal ik hier "cryptografie" als de verzamelnaam nemen. Belangrijke begrippen in de cryptografie zijn authenticiteit en geheimhouding van informatie. Het laatste begrip heeft hier een zeer ruime betekenis: gegevens van welke inhoudelijke aard dan ook, zoals die over een computer-netwerk verzonden en ontvangen kunnen worden, worden als "informatie" aangemerkt. In deze beschouwing wordt een computer-netwerk opgevat als een collectie van computers of "processoren" die afzonderlijk kunnen functioneren. Communicatie, dat wil zeggen, uitwisseling van informatie, wordt mogelijk gemaakt door een netwerk van verbindingen tussen deze processoren. Laten we aannemen dat dit netwerk volledig is, dat wil zeggen, tussen elk tweetal processoren bestaat er een verbinding. Stel dat een zekere processor A een "bericht" m ontvangt, dat wil zeggen, een pakketje informatie gezonden over de verbinding tussen processor A en een andere processor B. Processor A beschouwt m als authentiek, indien A met zekerheid kan vaststellen dat m inderdaad van B afkomstig is. Indien de verbindingen tussen processoren op generlei wijze beveiligd zijn, is het onjuist om authenticiteit vast te stellen op grond van de "fysieke" oorsprong van het bericht: de verbinding tussen A en B. Immers, het bericht zou ook afkomstig kunnen zijn van een mogelijk kwaadwillende partij C die zich toegang heeft verschaft tot de onbeveiligde verbinding tussen A en B, en een bericht aldaar heeft ingevoerd en verzonden, als ware dit afkomstig van B. Laten we nu aannemen, afgezien van de vraag of A de authenticiteit van m heeft vastgesteld, dat B het bericht inderdaad heeft verzonden, en wel als "klare tekst". Dan mogen we aannemen dat partij C het bericht had kunnen afluisteren. Van geheimhouding van m, dat wil zeggen, de inhoud van het bericht is slechts bekend aan zender en ontvanger, kan dan a priori geen sprake zijn. De public key cryptografie, waarvan de principes in 1976 door Diffie en Hellman zijn geformuleerd, biedt een elegante wiskundige oplossing voor het authenticiteits- en het geheimhoudings-probleem. Voordien waren er reeds wiskundige methoden om authenticiteit en geheimhouding te waarborgen, in feite gebaseerd op bilaterale "geheime afspraken" tussen elk tweetal partijen die onderlinge veilige communicatie nodig achten. Deze zal ik eerst gedeeltelijk toelichten. Een in de praktijk nog steeds gebruikt voorbeeld van een dergelijke "vercijferingsmethode" die geheime communicatie mogelijk maakt, is de Data Encryption Standard (kortweg DES), die in het begin van de jaren zeventig door IBM is ontwikkeld. Het bestaat uit een publiekelijk bekend vercijferings- en ontcijferings-algoritme (een algoritme is een berekeningsvoorschrift). Elk tweetal partijen in het netwerk kiest samen een random (willekeurige) geheime sleutel. Hiertoe dienen zij, voor de duur van de totstandkoming van deze geheime, gedeelde sleutels, over een veilig kanaal te beschikken, bijvoorbeeld door gebruik te maken van een betrouwbare koerier, verzegelde enveloppen of anderzijds fysiek beveiligde kanalen. Deze geheime sleutel stelt een dusdanig grote hoeveelheid random informatie voor, dat het juist gokken ervan door een derde partij praktisch gezien geen kans van slagen heeft. Door de grootte van de sleutel is het tevens praktisch beschouwd onmogelijk dat dezelfde sleutel gekozen zal worden door meer dan een tweetal partijen. Een partij A versleutelt een klare tekst bericht m bestemd voor B door de functie DES te berekenen op m en hun gedeelde geheime sleutel k(A, B). De vercijfering c ontvangen hebbende, roept B de functie DES aan, met als invoer k(A, B) en c, om de klare tekst m te verkrijgen. De veilige werking ervan berust op de grootte van de sleutels en op het feit dat het DES-algoritme zo ontworpen is dat, hoewel vercijfering en ontcijfering gegeven de sleutel snel uitgevoerd kunnen worden, het "kraken" van vercijferingen zonder wetenschap van de geheime sleutel waarmee de onderliggende klare tekst is versleuteld, praktisch gezien ondoenlijk is. Op DES en andere zogeheten common key cryptografische methoden kunnen ook message authenticity codes gebaseerd worden als oplossing van het authenticiteits-probleem. De public key cryptografie van Diffie en Hellman vindt zijn oorsprong in hun pogingen cryptografische systemen te ontwerpen die geheime afspraken tussen elk tweetal partijen (zoals noodzakelijk in de common key cryptografie) overbodig maken: niet alleen als een besparing op de benodigde hoeveelheid werk om het systeem op te zetten, maar vooral ook omdat de fase waarin deze afspraken gemaakt worden grote veiligheidsrisico's met zich mee kan brengen. Immers, in die fase beschikken de partijen nog niet over een betrouwbare cryptografische methode. De sleutel tot de oplossing wordt gegeven door zogeheten trapdoor one-way functies; deze functies zijn eenvoudig te evalueren voor elk argument uit hun domein, maar het berekenen van de inverse van deze functies op een willekeurige waarde uit hun beeld is ondoenlijk, tenzij men de trapdoor kent, dat wil zeggen, de geheime sleutel. Als er voldoende veel van zulke trapdoor one-way functies bestaan, zullen in de visie van Diffie en Hellman alle partijen afzonderlijk een willekeurige functie met corresponderende trapdoor kiezen. Laten we zeggen dat partij A de functie f_A gekozen heeft met s_A als trapdoor. Dan plaatst A een beschrijving van f_A, A's public key, in een publiekelijk toegankelijk bestand, dat op een betrouwbare manier bijgehouden wordt. A bewaart s_A als geheime sleutel. Wanneer B een geheim bericht m naar A wil verzenden, berekent B, na A's public key in het bestand opgezocht te hebben, de vercijfering c als f_A(m), en verstuurt het over de (onveilige) verbinding tussen A en B. De eigenschappen van de gebruikte functies garanderen dan dat alleen A bericht c kan ontcijferen, en wel door m = f_A^{-1}(c) te berekenen met gebruikmaking van de geheime sleutel s_A. Tot zover het geheimhouding-probleem. Een andere zeer belangrijke bijdrage van Diffie en Hellman is de digital signature: de digitale equivalent van de handgeschreven handtekening. Een handtekening moet aan twee eisen voldoen: de handtekening die een bericht vergezelt, moet de authenticiteit van het bericht waarborgen, en verder moet deze authenticiteit door elke partij te controleren zijn. Nu wordt aan de laatste eis in alledaagse pen-en-papier praktijken, in de meest strikte zin beschouwd, niet immer voldaan. Digitale handtekeningen daarentegen, voldoen aantoonbaar aan beide eigenschappen. Een digitale handtekening systeem werkt eveneens volgens het public key principe. Laat f een functie zijn waarvoor het ondoenlijk is om deze te evalueren op enig argument uit zijn domein, tenzij men de beschikking heeft over een geheime trapdoor s. Laat de handtekening op een bericht m de waarde \sigma = f(s, m) zijn en laat g een functie zijn die voor een gegeven \sigma, m en f bepaalt of \sigma inderdaad het f-beeld van m is. Dan bestaat de verificatie van een handtekening uit het toepassen van g op \sigma, m en f. Gegeven een grote verzameling van zulke functies f en g, kiest iedere partij A een willekeurig paar (f, g) met bijhorende trapdoor s. De public key van A bestaat dan uit f en g, terwijl de trapdoor s de geheime sleutel vormt. Tegenwoordig spelen digitale handtekeningen een cruciale rol in de praktijk, met name in die electronische informatie systemen waar integriteit van informatie van groot belang is. Nadat Ron Rivest, Adi Shamir en Leonard Adleman een realisatie van trapdoor one-way functies hadden gegeven (de "RSA-functies"), gebaseerd op de computationele moeilijkheid van het factorizeren van samengestelde gehele getallen met alleen grote priemfactoren, heeft het cryptografische onderzoek een enorme vlucht genomen. Zonder op deze plaats technische details te vermelden, de crux van hun idee is dat het relatief eenvoudig is om twee willekeurige, verschillende, priemgetallen van, zeg, ieder 100 cijfers decimaal te selecteren en het product daarvan te berekenen, terwijl wanneer men slechts dat product gegeven is, het ondoenlijk is om de priemfactoren te berekenen. In de public key cryptografie wordt de graad van veiligheid van een systeem ontleend aan de computationele moeilijkheid van getaltheoretische problemen zoals factorizatie en discrete logaritmen, of het bestaan van functies met voor de cryptografie relevante eigenschappen. Een veiligheidsanalyse dient aan te tonen dat indien een cryptografisch systeem effectief gekraakt zou worden, men tevens een effectieve methode in handen zou hebben om die zeer moeilijke getaltheoretische problemen op te lossen. De huidige stand van zaken is dat indien men de probleem instanties groot genoeg kiest (als voorbeeld, het factorizeren van willekeurige samengestelde getallen van, zeg, meer dan 200 decimale cijfers is tot op heden ondoenlijk), elk bestaand wiskundig algoritme buitensporig veel tijd vergt om deze op te lossen. Sterker nog, het lijkt erop dat deze problemen intrinsiek moeilijk zijn. Naast het onderzoek naar public key encryptie/decryptie en public key digital signatures, waarvoor in de jaren tachtig de theoretische fundamenten zijn gelegd, ontwikkelde de (theoretische) cryptografie zich in de breedte met het onderzoek naar diverse klassen one-way functies (functies die gemakkelijk te berekenen zijn, maar ondoenlijk om te inverteren), pseudo-randomness (functies waarvoor het ondoenlijk is de geproduceerde uitvoer van een willekeurige uitvoer te onderscheiden, en dat terwijl de grootte van de invoer slechts een fractie van de grootte van de uitvoer betreft), anonimiteit in electronische transactie systemen (bijvoorbeeld anonimiteit van de betaler in een digitaal betalings systeem), en zo verder. Andere fundamentele onderzoeksgebieden binnen de cryptografie zijn secure multi-party computations en zero knowledge protocollen. Deze laatste twee begrippen zal ik nu nader toelichten, daar zij naast digital signatures een grote rol spelen in dit proefschrift. Losjes gezegd, in een multi-party computation berekenen een aantal partijen samen een gegeven functie (waarbij elk van de partijen z'n eigen invoer heeft) zodat de uitkomst aan iedereen bekend geraakt en de berekingswijze bestand is tegen deelnemende partijen die "vals spelen", terwijl de afzonderlijke invoer van elk van de partijen voor de andere partijen verborgen blijft. Een belangrijk voorbeeld is de electronische verkiezing. In zo'n systeem kunnen, bijvoorbeeld, alle daartoe gerechtigde Nederlanders bij de Tweede Kamerverkiezingen een electronisch "stembiljet" invullen en aan de autoriteiten sturen. Maar dan wel op zo'n manier dat individuele stemmen voor de autoriteiten verborgen blijven. Slechts de totale verkiezingsuitslag kan gepubliceerd worden, en zelfs door iedereen op juistheid gecontroleerd worden. Eveneens vanwege de gebruikte cryptografische methode, kan het vervalsen van de verkiezings uitslag ondoenlijk dan wel onmogelijk gemaakt worden. Een zero knowledge protocol is een interactief vraag-en-antwoord spel tussen een "prover" (een partij die bewijst) en een "verifier" (een partij die verifieert). De prover beweert dat een zekere wiskundige stelling geldig is, maar wenst het bewijs van die stelling niet aan de verifier te tonen, wellicht omdat de prover bevreesd is dat de verifier met de eer gaat strijken. In ieder geval wil de prover de verifier ervan overtuigen dat de stelling klopt. Maar dan wel op zo'n manier dat de verifier daaruit geen informatie verkrijgt zodat die op zijn beurt een derde nu eveneens van de waarachtigheid van de stelling kan overtuigen. En natuurlijk wil de verifier niet overtuigd geraken van een stelling die onjuist is. Zero knowledge protocollen bieden de mogelijkheid om een skeptische verifier te overtuigen, zonder dat deze enige informatie over het bewijs verkrijgt. Deze zero knowledge protocollen spelen een belangrijke rol in complexe cryptografische systemen, met name op plaatsen waar een bepaalde partij een andere partij ervan moet overtuigen dat, bijvoorbeeld, een zekere gegeven waarde op een van tevoren afgesproken manier is berekend, zonder de precieze waarden die ten grondslag hebben gelegen aan de berekening prijs te geven. Anderzijds vindt zero knowledge, naast het daaraan gerelateerde witness hiding, een directe praktische toepassing in toegangscontrole van, bijvoorbeeld, computernetwerken (merk op dat een aanpak simpelweg gebaseerd op passwords geen hout snijdt wanneer de toegangscontrole over een onveilige lijn tot stand moet komen, en dat dan in ieder geval de te volgen procedure interactief dient te zijn om de mogelijkheid van replay-attacks uit te schakelen). Dit proefschrift poogt de theoretische cryptografie en de cryptografische praktijk dichter bij elkaar te brengen. In de theorie worden zeer elegante oplossingen gegeven voor bovenstaande fundamentele cryptografische vraagstellingen. Deze oplossingen hebben dan de eigenschap dat men de veiligheid volgens een wiskundig bewijs kan herleiden tot de veiligheid van onderliggende cryptografische primitieven zoals bepaalde typen one-way functies of specifieke zeer ingewikkelde getaltheoretische problemen. Een nadeel is echter dat de resulterende methoden vaak te veel werk (berekening, tijd, opslag of communicatie) vergen om praktisch te kunnen zijn. Aan de andere kant missen methoden die direct zijn toegesneden op de praktijk (en dus "handzaam" zijn) meer dan eens duidelijkheid wat betreft hun veiligheid: de wiskundige reducties die moeten aantonen dat een gegeven praktisch systeem veilig is indien, bijvoorbeeld, factorizeren of het berekenen van discrete logaritmen inderdaad fundamenteel moeilijke problemen zijn, blijft vaak achterwege, en wel omdat het in die gevallen volstrekt onduidelijk is hoe zo'n reductie zou moeten verlopen. Teneinde deze discrepantie in een aantal belangrijke gevallen te doen verdwijnen, worden in Hoofdstuk 2 zogenaamde \Sigma-protocollen ingevoerd: Merlin-Arthur "spelen" met drie zetten waarbij de verifier slechts random coinflips ("toevalsgetallen") geacht wordt te verzenden. Typisch cryptografische eigenschappen die hiervan geëist zullen worden zijn (een zekere vorm van) zero knowledge en collision-intractability. Deze laatste eigenschap houdt in dat het moeilijk moet zijn om voor zekere functies afgeleid van de \Sigma-protocollen (en onder zekere condities) twee verschillende invoerwaarden te berekenen die dezelfde beeldwaarde hebben. \Sigma-protocollen zullen de bouwstenen vormen voor de resultaten in de latere hoofdstukken, maar niet voordat er een theorie over is ontwikkeld, die leert hoe men op praktische en betrouwbare wijze kan "stapelen" met de gegeven bouwstenen, en hoe men deze abstracte bouwstenen praktisch kan realizeren. Gebaseerd op \Sigma-protocollen worden in Hoofdstuk 3 eerst partial proofs (partiële bewijzen) ingevoerd. Als voorbeeld: met een partieel bewijs kan een prover een verifier ervan overtuigen dat van, zeg, 100 gegeven stellingen er ten minste 50 waar zijn, zonder de verifier enige informatie te geven welke 50 waar zijn. Veel algemener gezegd is het mogelijk om zero knowledge, collision-intractable \Sigma-protocollen die betrekking hebben op één stelling (willekeurig gekozen uit een zekere verzameling stellingen) over te voeren in \Sigma-protocollen (met dezelfde cryptografische eigenschappen) die betrekking hebben op n willekeurige stellingen waarop een willekeurige monotone conditie (dat wil zeggen, een voorschrift dat gegeven kan worden in termen van logische AND- en OR-operatoren) is gelegd. Indien een familie van zulke (polynomiaal begrensde) condities gegeven is, kan de transformatie nog steeds doorgang vinden, maar dan onder de aanname dat een zeker type efficiënt secret sharing schema beschikbaar is. Indien de probleem-instanties (de "stellingen") waarop de \Sigma-protocollen betrekking hebben op de juiste manier uit een collectie "zeer moeilijke problemen" gekozen worden, dan is het resulterende schema witness hiding: een malicieuze verifier kan de bewijzen niet aan de prover onttrekken. Er is een subtiel verschil tussen zero knowledge en witness hiding: in het laatste geval kan de verifier geen informatie onttrekken die deze verifier zou helpen later zelf als de prover op te treden, terwijl in het eerste geval de verifier helemaal geen informatie leert (buiten de juistheid van de stelling). Echter, in menig cryptografisch protocol volstaat witness hiding als garantie voor de veiligheid ervan. Tevens zijn witness hiding protocollen in het algemeen efficiënter dan zero knowledge protocollen. Deze partial proofs zullen daarna de basis vormen van zero knowledge proof systeem voor het circuit satisfiability-probleem. Het resultaat bereikt de laagste bekende communicatie-complexiteit voor dit probleem, namelijk een lineair aantal bit commitments (een bit commitment wordt berekend door een functie waarvan de beeldwaarde (het commitment) het bijbehorende origineel verbergt, terwijl het ondoenlijk is om twee originelen te vinden die door deze functie in hetzelfde beeld overgevoerd worden) als functie van de grootte van het onderhavige circuit. Voorgaande oplossingen vergden tenminste een logaritmische factor (in de grootte van het circuit) meer aan communicatie. Aangezien circuit satisfiability een NP-compleet probleem is (in een NP-probleem dient men voor een gegeven verzameling L en een gegeven element z te beslissen of dat element in die verzameling zit, terwijl gegeven is dat, indien z \in L, er een kort bewijs daarvan bestaat), levert deze methode een communicatie-efficiënt zero knowledge proof systeem voor alle "wiskundige" stellingen die als een NP-bewering op te vatten zijn. Onder NP-beweringen vallen bijvoorbeeld alle stellingen van het type "Laat y een gegeven waarde zijn en f een efficiënt berekenbare functie. Er bestaat een x zodanig dat f(x) = y." In complexe cryptografische systemen komt het vaak voor dat een zero knowledge proof voor zo'n type stelling gegeven moet worden (waarbij f dan een one-way functie voorstelt). In praktische situaties kan de efficiënte methode die in dit proefschrift gepresenteerd wordt, aanzienlijke besparingen op de benodigde hoeveelheid communicatie opleveren. Verdere resultaten in Hoofdstuk 3 betreffen efficiënte zero knowledge proofs voor monotone afsluitingen van talen (verzamelingen bitstrings) die een membership-proof (een bewijs dat een gegeven element in de verzameling zit) van het type \Sigma-protocol toelaten. Steunend op sommige van de voorgaande resultaten wordt Hoofdstuk 3 afgerond met het presenteren van een klasse digitale identificatie methoden die bestand zijn tegen zogeheten adaptive impersonation attacks, de meest krachtige aanval die een malicieuze partij zou kunnen uitvoeren op een identificatie methode (binnen het polynomiale tijd berekenings model zoals dat in de public key cryptografie wordt gehanteerd), en het tot op heden meest efficiënte electronische verkiezingssysteem. Hoofdstuk 4 gaat uitsluitend over digitale handtekeningen. \Sigma-protocollen worden hier aangewend om digitale handtekeningen te ontwikkelen die bestand zijn tegen existential forgery under adaptively chosen message attacks, het hoogste veiligheidsniveau (wederom binnen het standaard polynomiale tijd berekenings model) van digitale handtekeningen. Enerzijds worden handtekeningen ontwikkeld die een zelfde communicatie complexiteit hebben als voorgaande methoden met relatief lage communicatie complexiteit, maar dan onder zwakkere "intractability" hypothesen (aannamen met betrekking tot de moeilijkheid van zekere computationele problemen). Het proefschrift wordt afgerond met een digitale handtekening systeem gebaseerd op RSA. Nu waren er reeds zulke systemen, maar de bijzonderheid van dit schema is gelegen in het feit dat dit het eerste schema is dat zowel bewezen veilig is (in de strikte zin van resistentie tegen adaptively chosen message attacks, en onder aanname dat de RSA-functies veilig zijn) en praktisch genoeg is om, bijvoorbeeld, op een smartcard (plastic kaart met daarop een "intelligente" chip) uitgevoerd te kunnen worden.