Privacy Policy Cookie Policy Terms and Conditions One-time-pad - Wikipedia

One-time-pad

One-time-pad, soms ook wel OTP, Vernam-cijfer, eenmalig blokcijfer, of het perfecte cijfer genoemd, is de enige bewezen methode voor cryptografie die een onbreekbare vercijfering mogelijk maakt indien correct toegepast. One-time-pad werd in 1917 ontwikkeld door Gilbert Vernam voor gebruik in telexmachines. Elke verstuurde 5-bits baudotcode werd gecombineerd met een 5-bits code op een papieren strook die allemaal willekeurige codes bevatte, de one-time-tape. Deze papieren strook liep synchroon bij zender en ontvanger. De uitvinding van Vernam was de basis voor latere pen-en-papierversies, gebaseerd op hetzelfde principe. Hoewel de onbreekbaarheid van one-time-pad niet enkel theoretisch maar ook praktisch toegepast kan worden, is het sleutelbeheer een groot probleem.

Inhoud

[bewerk] Eigenschappen

Om de theoretische onbreekbaarheid van one-time-pad te verwezenlijken dient aan verschillende voorwaarden voldaan te zijn.

  • De lengte van de sleutel dient minstens even lang te zijn als de te vercijferen gegevens.
  • De sleutel mag enkel bestaan uit werkelijk willekeurige tekens.
  • Een sleutel mag slechts één keer gebruikt worden om één bericht te vercijferen en dient na gebruik vernietigd te worden.
  • Van een sleutel mogen slechts twee kopijen bestaan, zijnde een voor de verzender en een voor de ontvanger van de gegevens.

Enkel indien een vercijfering aan deze voorwaarden voldoet is deze onbreekbaar. Elke letter van een bericht kan immers vercijferd worden door elke willekeurige letter, met elke willekeurige letter als resultaat. Men kan hier ook niet alle mogelijkheden van de sleutel uitproberen, de zogenaamde brute-force-attack, omdat iedere mogelijk sleutel in een andere oplossing kan resulteren. Zo kan men een bericht op zodanige wijze ontcijferen dat het resultaat een totaal ander bericht is. Wanneer we bijvoorbeeld het woord HALLO vercijferen met de sleutel XTOVB bekomen we ETZGR. Indien we ETZGR echter ontcijferen met de foutieve sleutel EEKCR bekomen we als klaartekst het woord APPEL. Zo kan men elk vercijferd bericht in eender welke gewenste klaartekst ontcijferen, zolang we maar de 'juiste' verkeerde sleutel gebruiken. Er is dus geen mogelijkheid om te weten of het bericht correct ontcijferd werd.

In de praktijk is one-time-pad enkel bruikbaar voor het veilig overbrengen van gegevens indien verzender en ontvanger vooraf op een absoluut veilige manier, meestal door de betrokkenen zelf of een koerier, een sleutel ter beschikking gesteld werd. Bij correct gebruik en toepassing van de voorwaarden is one-time-pad de enige bestaande bewezen perfect veilige vercijfering, bestand tegen elke mogelijke cryptoanalytische aanval. Dit werd bewezen in Claude Shannons verhandeling 'Communication theory of secrecy systems'.

[bewerk] Praktische voorbeelden

In het eerste voorbeeld gebruiken we een one-time-pad op basis van getallen. We kiezen als sleutel een reeks totaal willekeurige getallen. We geven elke letter een waarde waarbij A=0, B=1 en zovoort tot Z=25. De waarden van de letters en de sleutel worden opgeteld, maar zonder overdracht (vb. 9+5=4 en niet 14!). Om het bericht te ontcijferen trekken we de sleutel af van de cijfertekst, ook hier weer zonder overdracht, en zetten de getallen terug om in letters.


Tekst:      D  I  T  I  S  G  E  H  E  I  M
           03 08 19 08 18 06 04 07 04 08 12
Sleutel:  +15 84 78 39 66 95 20 16 33 57 48
          ---------------------------------
Resultaat: 18 82 87 37 74 91 24 13 37 55 50

Cijfertekst: 18828 73774 91241 33755 50

In volgend voorbeeld maken we gebruik van letters. De sleutel bestaat hier uit een reeks willekeurige letters. Ook hier geven we elke letter een waarde waarbij A=0, B=1 en zovoort tot Z=25. Tekst en sleutel worden opgeteld, deze keer wél met overdracht, maar met modulo 26 (als het resultaat groter is dan 25 trekken we 26 af). Tenslotte zetten we de getallen om in letters. Om het bericht te oncijferen zetten we cijfertekst en sleutel om in getallen en trekken we de sleutel af van de cijfertekst, ook hier weer met modulo 26 (als het resultaat kleiner is dan 0 tellen we er 26 bij).

Tekst:         D  I  T  I  S  G  E  H  E  I  M
              03 08 19 08 18 06 04 07 04 08 12
Sleutel:       X  V  H  E  U  W  N  O  P  G  D
             +23 21 07 04 20 22 13 14 15 06 03
             ---------------------------------
Resultaat:    26 29 26 12 38 28 17 21 19 14 15
Mod 26 =      00 03 00 12 12 02 17 21 19 14 15
             ---------------------------------
Cijfertekst:   A  D  A  M  M  C  R  V  T  O  P

Cijfertekst: ADAMM CRVTO  P

Om het werk te vereenvoudigen kunnen we een Vigenère-tabel (tabula recta) gebruiken om de letters te combineren, of onderstaande hulptabel:

Letter  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
------------------------------------------------------------------------------------
Waarde 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Mod -  26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
Mod + -26-25-24-23-22-21-20-19-18-17-16-15-14-13-12-11-10-09-08-07-06-05-04-03-02-01

Er zijn nog vele andere manieren om one-time-pad toe te passen, maar deze zijn altijd gebaseerd op een willekeurige sleutel die bij de te vercijferen gegevens wordt opgeteld.

[bewerk] Problemen bij gebruik

Om one-time-pad toe te passen zijn er twee belangrijke problemen die het gebruik ervan bemoeilijken en zeer duur maken:

  • Een eerste probleem is van technische aard en betreft het produceren van grote aantallen willekeurige getallen of tekens voor de sleutel. Om absolute willekeurigheid te maken kan men deze reeksen niet creëren met behulp van eenvoudige mechanische of elektronische middelen. Het produceren van grote aantallen van deze willekeurige gegevens is dan ook een dure onderneming.
  • Het tweede probleem is van praktische aard. Aangezien elke sleutel even groot als de te vercijferen gegevens dient te zijn en slechts eenmalig gebruikt mag worden zijn er een grote aantal verschillende sleutels nodig en dienen deze op veilige wijze ter beschikking gesteld te worden van verzender en ontvanger van een bericht. Dit heeft enorme logistieke en veiligheidsproblemen tot gevolg indien er veel communicatie beveiligd dient te worden.


[bewerk] Toepassingen

Vanwege de praktische bezwaren om een one-time-pad correct toe te passen is het gebruik ervan zeer beperkt. Zij worden o.a. gebruikt voor communicatie tussen inlichtingendiensten en hun veldagenten. De one-time-pad-sleutels, dikwijls zeer kleine boekjes of blaadjes met getallenreeksen, soms op microfilms, kunnen gemakkelijk verborgen worden.

Tot begin jaren '80 werden zij ook gebruikt om militair en diplomatiek telex-verkeer te beveiligen. De telexen gebruikten daarbij het originele principe van Vernam met de one-time-tapes. Later volgden elektronische systemen zoals computer-en telefoonverbindingen die gebruikt maakten van een elektronisch opgeslagen one-time-pad-sleutel.

De enorme kosten voor veilige productie, verspreiding, beheer en vernietiging van enorme aantallen one-time-tapes en codesleutels konden enkel gedragen worden door overheidsinstanties zoals leger, inlichtingendiensten en diplomatie. Door het exponentieel toenemen van communicatie werd grootschalig gebruik van one-time-pads onhoudbaar en schakelde men over op de meer praktische, maar weliswaar minder veilige, cryptografische apparaten en computeralgoritmes.

Een vervangend alternatief voor one-time-pad zijn de "stream ciphers" of stroomvercijfering, waarbij via een algoritme een pseudo-willekeurige getallenreeks geproduceerd wordt. Deze stromen benaderen slechts de werkelijke willekeurigheid en voldoen dus nooit aan de voorwaarden om onbreekbaar te zijn. Dikwijls wordt verkeerd aangenomen dat men een one-time-pad kan creëren met een random-functie op computers, terwijl zulke systemen steeds gebruikmaken van een algoritme om de getallen op te wekken en per definitie nooit echte willekeur produceren.

Vanwege zijn absolute veiligheid blijft one-time-pad echter nog steeds in gebruik bij communicatie waar veiligheid en geheimhouding absolute voorrang hebben. De toepassingen zijn echter zeer beperkt. Dit is onder meer het geval bij de zogenaamde hotlines van belangrijke wereldleiders en topgeheime communicatie bij inlichtingendiensten en legers.

[bewerk] Snake Oil

Helaas zijn er in de praktijk vele voorbeelden van vercijfering die beweren onbreekbaar te zijn, maar die niet voldoen aan de nodige vereisten. Zo is er veel software op de markt waarvan de makers beweren het onbreekbare one-time-pad of Vernam-systeem toe te passen - klinkt indrukwekkend - maar in werkelijkheid geen echt willekeurige gegevens genereren, een te kleine sleutel gebruiken of meermaals vercijferen met dezelfde sleutel. Bovendien heeft het geen zin om bestanden eenmalig te vercijferen met een eenmalige sleutel die even groot is en veilig dient bewaart of overgebracht te worden naar de ontvanger. Men kan evengoed het bestand zelf op veilige wijze bewaren of overbrengen.

Zo is er het fantastisch klinkende verhaal van de oplossing van het sleutelbeheer door middel van twee sleutels. Meneer A zendt zijn bericht, vercijferd met sleutel A. Meneer B kan dit niet ontcijferen, maar vercijfert dit nogmaals met zijn sleutel B, en stuurt dit terug naar Meneer A. Die ontcijfert het bericht met zijn sleutel A en zendt dit nogmaals naar Meneer B. Aangezien het bericht nu enkel nog vercijferd is met sleutel B kan Meneer B het toch ontcijferen, en dit zonder uitwisseling van de geheime sleutels! Hoewel hier op het eerste zicht one-time-pad is toegepast zonder het probleem van sleuteldistributie, gaat de vlieger echter niet op. Meneer A stuurt het bericht één keer met zijn sleutel en één keer met B's sleutel, én het wordt door Meneer B, met beide sleutels vercijferd, teruggestuurd. Elke sleutel werd tweemaal gebruikt, voldoet dus niet meer aan de verplichte voorwaarden, en het bericht kan gebroken worden:

Sleutel B = bericht(A+B) - bericht(A) & Sleutel A = bericht(A+B) - bericht(B)

Er zijn nog vele variaties op dit thema en voorbeelden van ronduit slechte cryptografische systemen en software die al dan niet goedbedoelde 'onbreekbare' veiligheid aanbieden, maar daarbij minstens een van de verplichte voorwaarden negeren. Deze programma's zijn bekend onder de term snake-oil, of slangenolie, genoemd naar de producten van kwakzalvers.

[bewerk] Zie ook

Klassieke cryptografie
ADFGX | Autoclave (Autokey) | Atbash | Baconalfabet | Bifid | Caesarcijfer | Dubbele transpositie | Homofone substitutie | One-time-pad | Paardensprongcijfer | Playfair | Polybiusvierkant | Rozenkruisersgeheimschrift | Scytale | Straddling checkerboard | Substitutie | Transpositie | Trifid | Vigenère
 
THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu