|
| One-time pad of
OTP, ook wel Vernam-cijfer, éénmalig
blokcijfer, of het perfecte cijfer genoemd, is
een crypto algoritme waarbij de tekst of data
gecombineerd met een willekeurige sleutel van
dezelfde lengte. Het is de enige gekende
vercijfering die onbreekbaar is. Gebruikt door
Special Operations teams en het verzet in
Wereldoorlog II, populair bij
inlichtingendiensten en hun spionnen tijdens de
Koude Oorlog en later, heeft one-time pad een
sterke reputatie opgebouwd als eenvoudige maar
solide encryptie in de intrigerende wereld van
diplomatie, inlichtingen, spionage en geheime
operaties, met een absolute veiligheid die
ongeëvenaard is door moderne crypto algoritmes. Om van one-time pad encryptie te kunnen spreken en de onbreekbaarheid effectief te verwezenlijken dient aan verschillende voorwaarden voldaan te zijn. Indien één van deze voorwaarden ontbreekt kan men niet meer spreken van one-time pad en is het niet meer onbreekbaar. Bij correct gebruik is one-time pad echter de enige bestaande bewezen perfect veilige vercijfering, bestand tegen elke mogelijke cryptoanalytische aanval. Dit werd bewezen in Claude Shannon's verhandeling 'Communication theory of secrecy systems'.
Opmerking: one-time pads en
one-time vercijfering zijn niet te verwarren met
kleine one-time sleutels (one-time key of OTK) of
one-time passwords (ook aangeduid met OTP). Deze
laatste zijn in grootte beperkte sleutels, geldig
voor éénmalige authenticatie of inloggen, of
één enkele vercijferingssessie door een gewoon
crypto-algoritme onder controle van die kleine
sleutel. Zulke kleine one-time sleutels zijn
hoegenaamd niet onbreekbaar aangezien de
veiligheid afhangt van het gebruikte
crypto-algoritme en de regels van one-time pad
niet werden gevolgd. Oorsprong van one-time padHet verhaal van one-time pad begon in 1882, wanneer de Californische bankier Frank Miller een codeboek samenstelde onder de titel "Telegraphic Code to Insure Privacy and Secrecy in the Transmission of Telegrams". Zulke codeboeken werden veel gebruikt, vooral om de kosten van telegrammen te drukken door woorden en zinnen om te zetten in korte nummercodes of letter-codes. Deze codeboeken boden vrijwel geen veiligheid. Miller's codeboek bevatte echter instructies voor een superencryptie (een tweede vercijferings-laag over de code) met behulp van een unieke methode: hij telde zogenaamde shift-nummers (de sleutel) op bij de plaincode (woorden, omgezet in cijfers) en definiëerde de shift-nummers als een lijst van onregelmatige nummers die moeten gewist worden na gebruik en nooit herbruikt mogen worden. Zijn codeboek bevatte 14.000 woorden, zinnen en blanks (voor uitbreiding) and wanneer bij vercijfering de som van plaincode en sleutel meer dan 14.000 was, diende men 14.000 af te trekken van de som. Indien bij ontcijfering de cijfertekst waarde kleiner was dan de sleutel diende men 14.000 bij de cijfertekst bij te tellen alvorens er de sleutel van af te trekken. (dit is principieel een modulo 14.000 bewerking). Als de shift-nummers willekeurig gekozen werden en slechts één maal gebruikt, bood de modulo bewerking onbreekbare vercijfering. Miller had het eerste one-time pad algoritme uitgevonden. Helaas werd Miller's systeem nooit algemeen bekend, raakte het verloren in de geschiedenis van cryptografie en kreeg daarom nooit de verdiende erkenning. Zo vroeg als het was uitgevonden, zo snel verdween het in de vergetelheid, om pas in 2011 opnieuw ontdekt te worden in de archieven. Jaren later, in 1917, ontwikkelde AT&T ingenieur Gilbert Vernam een systeem om teletype TTY communicatie te vercijferen. Hoewel Vernam's uitvinding wiskundig gelijkenissen vertoonde met Miller's idee, had hij een elektromechanisch systeem ontwikkeld dat totaal verschilde van Millers pen-en papier algoritme. Het lijkt daarom onwaarschijnlijk dat Vernam het idee van Miller had afgekeken. Hij nam een vijf-bits Baudot-code ponsband, met daarop het bericht, en mixte deze met een tweede ponsband met willekeurige tekens, de geheime sleutel. Om de twee papiertapes te mixen werd een modulo 2 optelling (nu bekend als XOR of Exclusive OR) uitgevoerd met behulp van relais, en de sleuteltapes liepen synchroon op de verzendende en ontvangende teleprinter. Het was de eerste directe en automatisch on-line encryptie. Vernam begreep dat de encryptie met een korte sleuteltape (inf feiten een eenvoudige poly-alphabetische encryptie) niet veilig genoeg was. Initieel gebruikte hij een mix van twee sleuteltapes, met een voor beide tapes relatieve priem als lengte, waardoor er één zeer lange sleutel ontstond. Kapitein Joseph Mauborgne (later Hoofd van het U.S. Signal Corps) toonde aan dat zelfs het systeem met dubbele sleuteltape niet bestand was tegen cryptoanalyse indien gebruikt bij grote volumes berichten. Mauborgne stelde vast dat enkel wanneer de sleuteltape onvoorspelbaar was, even lang als het bericht en slechts één keer gebruikt, het bericht veilig zou zijn. Meer zelfs, de vercijfering bleek effectief onbreekbaar. One-time vercijfering was geboren! Het Amerikaanse National Security Agency (NSA) noemt Vernam's one-time tape (OTT) patent uit 1919 "één van de belangrijkste in de geschiedenis van cryptografie". AT&T commercialiseerde het Vernam systeem in de jaren '20, helaas met weinig succes. De productie, distributie en consumptie van enorme hoeveelheden one-time tapes beperkte het gebruik tot vaste stations (hoofdkwartieren, communicatie centra). Het was pas tijdens de Tweede Wereldoorlog dat het Amerikaanse Signal Corps uitgebreid gebruik begon te maken van OTT systemen voor hun high level teleprinter communicaties. Drie Duitse cryptologen herkenden echter onmiddellijk de voordelen van one-time vercijfering. Begin jaren '20 cryptanalyseerden Werner Kunze, Rudolf Schauffler and Erich Langlotz het Franse diplomatieke berichtenverkeer. Deze pen-en-papier numerieke codes gebruikten codeboeken om woorden en zinnen om te zetten in cijfers. Vervolgens werd een numerieke sleutel bij de cijfergroepen opgeteld (modulo 10) om de codebook waarden te vercijferen. Zij realiseerden zich dat wanneer men een uniek willekeurige cijfer optelt bij elk codeboek cijfer het bericht onbreekbaar zou zijn. Zij bedachten een systeem met papiervellen met willekeurige cijfers. Van elk vel met cijfers bestonden slechts twee kopijen (één voor verzender en één voor ontvanger). In feite hadden zij Miller's systeem uit 1882 opnieuw uitgevonden. Rond 1923 werd het systeem geïntroduceerd bij Buitenlandse Zaken en Duitse ambassades om hun diplomatieke correspondentie te beveiligen (zie afbeelding rechts). Voor de eerste maal in de geschiedenis van de cryptografie hadden diplomaten een werkelijk onbreekbare vercijfering tot hun beschikking. Later werden vele variaties op dit manuele systeem bedacht. De naam one-time pad komt van de kleine blocnotes of "pads" waarop willekeurige cijfers of letters, meestal in groepen van vijf, worden gedrukt. De pads zijn dikwijls gedrukt op zeer kleine boekjes of op microfilm voor gebruik door geheime diensten (meer info over zulke one-time pad is te vinden op de manuele one-time pads pagina). Tijdens en na de Tweede
Wereldoorlog werden one-time pads gebruikt door
verschillende inlichtingenorganisaties en
sabotage-en spionage eenheden. De sovjets leunden
sterk op OTT's en OTP's waardoor de meeste van
hun vitale communicatie ondoordringbaar bleef.
One-time pad en tape systemen bleven decennia
lang populair vanwege hun absolute veiligheid,
ongeevenaard door eender welke cryptomachine of
algoritme. Vandaag maken digitale versies van
one-time pads het opslaan van enorme willekeurige
sleutels mogelijk waardoor grote volumes data
veilig kunnen vercijferd worden. One-time
vercijfering is nog steeds het enige systeem dat
absolute berichtveiligheid biedt, en zal dit
blijven in de toekomst. Papieren one-time pads
|
|
Inlichtingendiensten gebruiken one-time pads voor communicatie met hun agenten in operaties in het buitenland, waar absolute veiligheid de hoogste prioriteit heeft. Met one-time pads dienen zij geen compromitterende crypto systemen of computer programma's bij zich te hebben. De one-time pad sleutels, dikwijls zéér kleine boekjes of blaadjes met getallenreeksen, soms op microfilm, kunnen gemakkelijk verborgen worden. Een bekende wijze om OTP-vercijferde berichten te verzenden naar agenten te velde is via nummerstations.
Een voorbeel van gebruikt voor spionage is de TAPIR procedure, gebruikt in het voormalige Oost-Duitsland , is gepubliceerd op de SAS und Chiffrierdienst website. Bij TAPIR wordt de klare tekst eerst omgezet in getallen via een tabel, vergelijkbaar met een straddling checkerboard, alvorens te vercijferen met one-time pad. De meest frequente letters hebben één cijfer en andere letters, veelgebruikte bigrammen, getallen en tekens hebben twee cijfers. Vervolgens word de tekst vercijferd door de sleutel ervan af te trekken. De TAPIR tabel onderdrukt pieken in de frequenctie-distributie van de cijfers en creëert fractionering. In de uiteindelijk vercijferde tekst weet men nooit of een cijfer een volledige letter is, of het linker of rechter-cijfer van een letter of teken. WR 80 is een nieuwe lijn. Bu 81 (Buchstaben) en Zi 82 (Ziffern) worden gebruikt als omschakeling tussen letters en tekens. ZwR 83 is een spatie. Code 84 wordt gebruikt als prefix voor 5 cijferige codes die lange woorden of zinnen vervangen, verkregen uit een codeboek. De rode vakken mogen zowel binnen letter als teken mode gebruikt worden (met dank aan SAS und Chiffrierdienst voor de afbeeldingen van de one-time pad boekjes en TAPIR tabel, copyrighted). Op de SAS und Chiffrierdienst website is ook een goede beschrijving door de Oost-Duitse inlichtingendienst (Stasi) te vinden van de one-time pad procedures voor nummerberichten, gebruikt door CIA agenten die in de DDR opereerden. U kunt een voorbeeld van codeboek hier bekijken. Merk op dat de vreemde reeks van cijfercombinaties voor het vervangen van woorden of uitdrukkingen zorgvuldig gekozen is zodat fouten in de codes makkelijk ontdekt kunnen worden. Meer details over het gebruik van papieren one-time pads vind u op de manuele one-time pads pagina.
Rechts boven vind u foto's van verschillende vormen van one-time pads. Een miniatuurboekje, samen met een microdot lezer en een speciale lens, was handig verborgen in een speelgoed truck die Canada was binnengebracht door de zoon van een inlichtingenofficier die het land was binnengekomen om te spioneren (Canadese CSIS). Er is ook een TAPIR omzettingstabel, gebruikt door de Oost-Duitse inlichtingendienst (SAS und Chiffrierdienst). U ziet ook een Duits one-time pad, gebruikt voor officiële communicatie tussen Saigon en Berlijn, bestaande uit een verzegelde map met serienummer 55 en honderd one-time pad bladen, genummerd van 6500 tot 6599. Elk blad bevat de willekeurige getallen en genoeg ruimte om het bericht neer te schrijven en de berekeningen te doen (NSA National Cryptologic Museum). De laatste foto is een one-time pad, gebruikt door Alexander Ogorodnikov, een ambtenaar op het Sovjet ministerie van buitenlandse zaken die voor de CIA spioneerde (Andrei Sinelnikov [Nederlands] ).
Hieronder links een one-time pad met Vigenere tabel, van een westerse agent, in beslag genomen door het Oost-Duitse MfS (Ministerium für Staatssicherheit of Stasi). De tweede foto is een one-time pad vel van een Oost-Duitse agent, gevonden door het West-Duitse BfV (Bundesamt für Verfassungsschutz of federale binnenlandse veiligheid). De foto rechts is een one-time pad van een westerse agent, in beslag genomen door het MfS. Het is bewaard in een 35 mm dia frame. Het pad zelf is slechts zo'n 15 mm breed (dus nog kleiner dan afgebeeld) en vrijwel onmogelijk te lezen met het blote oog! Ik had zelfs moeilijkheden om het goed te fotograferen. Zulke miniatuur one-time pads werden gebruikt door illegale agenten, opererend in het buitenland, en waren makkelijk te verbergen in onschuldig lijkende alledaagse voorwerpen zoals aanstekers, holle batterijen of asbakken. U kunt alle foto's aanklikken om ze te vergroten. Echter, om het kleine one-time pad te kunnen lezen zult u nogmaals moeten klikken en inzoomen in uw browser na vergroten (Detlev Freisleben collectie).
|
|
|
Alle afbeeldingen zijn
copyrighted. Meer info over de copyrights en gebruik van
deze afbeeldingen op
deze pagina.
Tot begin jaren '80 werd éénmalige vercijfering ook gebruikt om militair en diplomatiek Telex verkeer te beveiligen. De Telex machines gebruikten daarbij het originele one-time tape (OTT) principe van Vernam. Dit systeem vereiste twee identieke rollen papiertape met werkelijk willekeurige vijf-bits waarden, de zogenaamde one-time tapes. Deze werden op voorhand verdeeld aan verzender en ontvanger. Meestal werd het bericht voorbereidt (geperforeerd) in klare tekst op een perfo-tape. Vervolgens werd het bericht met behulp van een tapelezer verstuurd op een Telex machine en één kopij van de geheime one-time tape liep synchroon met het bericht op een tweede tapelezer. Alvorens de machine te verlaten werden de vijf-bits signalen van beide tapelezer gemixt via een Exclusive OR (XOR) functie, waardoor het bericht onleesbaar werd. Aan de andere kant van de lijn werden de onleesbare signalen via XOR functie terug gemengd met de tweede kopij van de geheime one-time tape om tenslotte leesbaar uitgeprint of geperforeerd te worden op de ontvangende machine.
Ook de zogenaamde hotlines van belangrijke wereldleiders en topgeheime communicatie tussen inlichtingendiensten en legers gebruikten one-time pads. Een beroemd voorbeeld van het veilige one-time pad is de Washington/Moskou hotline met de ETCRRM II, een standaard commerciële one-time tape mixer voor Telex. Hoewel eenvoudig en goedkoop bood deze de ETCRRM absoluut onbreekbare communicatie tussen Washington en het Kremlin, zonder geheime crypto technologie te onthullen aan de tegenstander. Sommige andere codeermachines die het principe van one-time pad gebruikten waren de Amerikaanse TELEKRYPTON, SIGSALY (ruis als one-time pad), B-2 PYTHON en SIGTOT, de Britse BID-590 NOREEN en 5-UCO, de Canadese ROCKEX, de Nederlandse ECOLEX serie, de Zwitserse Hagelin CD-57 RT, CX-52 RT en HT-55 met superencryptie, de Duitse Siemens T-37-ICA en M-190, de Oost-Duitse T-304 LEGUAN, de Tjechische SD1, de Russische M-100 SMARAGD en M-105 N AGAT en de Poolse T-352/T-353 DUDEK. Er waren ook verschillende teleprinter of codeermachine configuraties, verbonden met een afzonderlijke tape-lezer, voor one-time tape encryptie of superencryptie. De afbeelding hieronder toon het principe van one-time tape vercijfering voor Telex (TTY Murray).
Teletype signaal one-time tape vercijfering |
Hieronder enkele foto's van de beroemde Washington-Moskou hotline, vercijferd met one-time tapes. De hotline werd operationeel in 1963 en was een full-duplex teleprinter (Telex) verbinding. Hoewel de hotline in films en de populaire cultuur steevast werd afgebeeld als een rode telefoon, werd de mogelijkheid van een spraakverbinding onmiddellijk afgewezen, aangezien spontane verbale communicatie kon leiden tot misvattingen, slechte communicatie, foutieve vertaling of ondoordachte opmerkingen. Allemaal serieuze risico's bij overleg tijdens zware conflicten. Desalniettemin leefde de mythe van de rode telefoon nog een lang leven. De echte Hotline was een directe kabel link van Washington via Londen, Kopenhagen, Stockholm en Helsinki naar Moskou. Het was een dubbele verbinding met commerciële teleprinters, één link met twee Amerikaanse Teletype Corp Model 28 ASR teleprinters met Engelse karakterset en een link met twee Russische T-63 teleprinters van Oost-Duitse makelij met Cyrillische karakterset. De links waren vercijferd met one-time tapes met behulp van vier ETCRRM's (Electronic Teleprinter Cryptographic Regenerative Repeater Mixer). De one-time tape vercijfering bood onbreekbare vercijfering, absolute veiligheid en privacy. Hoewel een zeer veilig systeem, werden de ongeclassificeerde standaard teleprinters en ETCRRM's verkocht door commerciële firma's en onthulden daarom geen geheime crypto technologie aan de tegenstander. Meer info op Jerry Proc's Washington/Moscow hotline webpagina.
|
|
|
One-time pad vercijfering is enkel mogelijk indien zowel verzender als ontvanger in bezit zijn van dezelfde sleutel. Daarvoor moeten de sleutels op voorhand veilig en fysiek uitgewisseld worden door beide partijen of door een vertouwde koerier. Dit betekend dat de veilige communicatie verwacht en gepland is binnen een specifiek tijdsbestek. Genoeg sleutelmateriaal dient beschikbaar te zijn voor alle nodige communicatie totdat een nieuwe uitwisseling van sleutels mogelijk is. Afhankelijk van de situatie en toepassing kan een groot volume aan sleutels nodig zijn voor een korte tijd of slechts zeer weinig sleutelmateriaal voor een zeer lange periode (tot verscheidene jaren). One-time pads zijn meer geschikt voor de laatste. Er zijn procedures nodig om zeker te zijn dat de sleutels altijd geteld zijn en tamper proof systemen moeten het ontdekken van ongeoorloofde toegang of kopiëren toelaten. One-time pads zijn vooral interessant in omstandigheden waar veiligheid op lange termijn essentieel is. One-time pad is niet geschikt voor vercijfering van informatie die niet meer van belang is na een korte periode die langer is dan de tijd die nodig is voor cryptoanalyse van normale algoritmes. Hoewel bruikbaar is zulke omstandigheden zullen de problemen van sleuteldistributie dan niet in verhouding zijn tot de vereiste veiligheid en zijn normale crypto algoritmes meer geschikt.
Hoewel OTP de perfecte vercijfering is heeft dit systeem twee belangrijke nadelen die het gebruik ervan bemoeilijken en soms 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 éénmalig gebruikt mag worden zijn er een grote aantal verschillende sleutels nodig en dienen deze op veilige - fysieke - wijze ter beschikking gesteld te worden van verzender en ontvanger van een bericht. Natuurlijk kan men de one-time pads niet verzenden door ze te vercijferen met bijvoorbeeld AES, IDEA of een ander sterk crypto-algoritme. Dit zou de onbreekbare veiligheid verlagen tot het veiligheidsniveau van het gebruikte crypto-algoritme. Daarom creëert de sleuteldistributie enorme logistieke en veiligheidsproblemen indien er veel communicatie beveiligd dient te worden onder veel deelnemers. De enorme kosten voor veilige productie, verspreiding, beheer en vernietiging van enorme aantallen one-time-tapes en pads kunnen enkel gedragen worden door overheidsinstanties zoals leger, inlichtingendiensten en diplomatie.
Een ander nadeel is dat one-time
vercijfering geen bericht-authenticatie of integriteit
biedt. Men weet natuurlijk dat de verzender authentiek is
omdat enkel hij met de juiste sleutel een ontcijferbaar
bericht kan zenden, maar je kunt niet nagaan of het
bericht fouten bevat of gecompromitteerd is, door
transmissiefouten of door tussenkomst van een
tegenstander. Een oplossing is het gebruik van een
hash-algoritme voor de klaartekst die, vercijferd, samen
met het bericht verzonden word. (een hash is een unieke
waarde met vaste lengte, afgeleid van een tekst). Enkel
de persoon met de juiste sleutel is in de mogelijkheid om
het bericht en de corresponderende hash correct te
vercijferen. De tegenstander kan het effect van zijn
manipulatie van de cijfertekst, noch van de hash,
voorzien. Bij ontvangst ontcijferd men het bericht en
vergelijkt men de ontvangen hash waarde met een hash die
berekend word van het ontvangen bericht. Helaas is een
computer nodige om zo'n hash te berekenen waardoor deze
methode van integriteitcontrole niet mogelijk is bij
volledig manuele vercijfering.
Vandaag vervangen moderne crypto-algoritmes zoals symmetrische blokcijfers en asymetrische publieke sleutel cryptografie de one-time pads vanwege hun eenvoud en hun oplossing van het probleem van sleuteldistributie. Hoewel deze nieuwe crypto algoritmes veilig zijn kunnen zij in de toekomst onbruikbaar worden door nieuwe hardware ontwikkelingen, een wiskundige doorbraak zoals het sneller splitsen van grote priemgetallen, een nieuw type van cryptografische aanval of de toekomstige kwantumcomputers om een brute-kracht aanval te versnellen. Moderne crypto-algoritmes bieden praktische veiligheid, essentiëel voor onze economie en het dagelijkse leven. Soms hebben we echter absolute veiligheid en privacy nodig, ook op lange termijn, en dat is enkel mogelijks met one-time vercijfering. Sommige experts argumenteren dat het genereren en de distributie van grote aantallen one-time sleutels onpraktisch is. Dit was inderdaad het geval in het tijdperk van rondrijden met spoelen perfo-tapes met sleutels. Vandaag zijn er echter elektronische oplossingen, zoals PC kaarten met hardware ruisgeneratoren om grote aantallen willekeurige data te genereren, en de huidige one-time software kan grote volumes date vercijferen op hoge snelheid. De huidige technologie voor dataopslag zoals USB sticks, DVD's, externe harde schijven of solid-state schijven maken transport van enorme volumes sleutels mogelijk. Firma's zoals Mils Electronic en IDQ bieden degelijke oplossingen voor one-time vercijfering en hardware true random generators aan.
Gevoelige geheime communicatie is meestal beperkt tot een klein aantal gebruikers. In zulke gevallen is één-op-één communicatie, met de bijhorende sleuteldistributie (mogelijk in combinatie met een ster-topologie) niet langer een praktisch probleem, vooral wanneer we rekening houden met de veiligheidsvoordelen. Door een zogenaamd sneakernet te gebruiken (data transferreren op verwijderbare opslagmedia via koerier) kan men een enorme doorvoer (volume data per tijdseenheid) van one-time sleutels verkrijgen die groter is dan wat een netwerk kan verwerken aan data. In andere woorden; het kan enkele uren duren om een terabyte aan sleuteldata, opgeslagen op externe media, met de auto naar iemand te rijden, maar het zal dagen of weken duren om dat volume aan sleutels te verbruiken op een breedbandnetwerk. Een sleutel ter grootte van een terabyte kan makkelijk als uw e-mailverkeer voor een gans jaar vercijferen, inclusief bijlagen (de meeste providers laten zoveel verkeers niet eens toe). Daarom blijft one-time vercijfering zeer geschikt is specifieke omstandigheden waar absolute veiligheid primeert op praktische overwegingen, ongeacht de kosten van veilig fysiek transport van sleutels via koerier.
Niettemin is de pen-en papier methode
nog steeds een praktische methode om kleine teksten te
vercijferen als verzender en/of ontvanger al het werk met
de hand dient te verrichten, zonder de hulp van een
computer. Gezien de vele veiligheidslekken in computers
en wijdverspreide virussen, spyware en Trojaanse paarden
is dit een belangrijk veiligheidsvoordeel als u geen
fysiek onafhankelijke of veilige computer ter beschikking
hebt. Men kan het de armeluis one-time pad noemen, maar
het werkt perfect. Een perfect crypto-algoritme op uw
computer is waardeloos als spyware uw toetsaanslagen
registreert en doorstuurt. Een zeer speciale vorm van
one-time pad vercijfering is mogelijk met Visual
Cryptography. Meer over het nut
van one-time encryptie in de wereld van vandaag is te
lezen in Is One-time Pad History?
Er zijn verschillende manieren om one-time pad toe te passen Ze zijn allen absoluut veilig en onbreekbaar indien de regels van one-time pad vercijfering strikt gevolgd worden. We kunnen one-time pad vercijfering uitvoeren met getallen. Dit is het meest flexibele systeem dat vele variaties toelaat. Gewoonlijk is de vercijfering het aftrekken van de willekeurige sleutel van de klare tekst en de ontcijfering het samentellen van de cijfertekst en de sleutel. Alvorens de berekeningen uit te voeren moeten we echter de tekst omzetten in getallen. Er zijn verschillende manieren om dit te doen. De meest eenvoudige methode is om tweecijferige waarden toe te kennen aan elke letter (A=01 tot Z=26).
Een populaire en zuiniger methode is het zogenaamde straddling checkerboard (vrij vertaald: spreidend schaakbord). Let wel, deze tekst-naar-cijfer omzetting is op zich geen cryptografische vercijfering en moet steeds gevolgd worden door een vercijfering met een sleutel. Een checkerboard zet de meeste frequente letters om in één cijfer en de andere letters in twee cijfers. Hierdoor wordt de cijfertekst aanzienlijk kleiner dan met het simpele A=01/Z=26 systeem. Er bestaan verschillende checkerboard varianten met verschillende karaktersets en symbolen, geoptimaliseerd voor verschillende talen. De eerste rij van het checkerboard bevat de meest frequente letters met enkele lege velden ertussen. De volgende rijen (zoveel als er lege velden in de eerste rij zijn) bevatten de overige letters. Deze volgende rijen zijn aangeduid met de cijfers uit lege velden in de bovenste rij. Checkerboards worden onthouden met de letters in de bovenste rij, die kunnen verschillen naargelang de taal waarvoor ze werden geoptimaliseerd. Enkele voorbeelden zijn "AT-ONE-SIR" en "ESTONIA---" (Engels), "DEIN--STAR" en "DES--TIRAN" (Duits), "SENORITA--" en "ENDIOSAR--" (Spaans), "RADIO-NET-" (Nederlands) of "ZA---OWIES" (Pools). Zulke woordcombinaties zijn eenvoudig te maken met een anagram-generator. Meer lege velden in de eerste rij maken meer bijkomende rijen mogelijk, en dus meer karakters. Het is niet noodzakelijk de tabel geheim te houden of de getallen of letters te scramblen omdat one-time pad vercijfering gebruikt zal worden. Meer voorbeelden van checkerboards zijn te vinden op deze pagina.
In dit voorbeeld gebruiken we een standaard checkerboard met het "AT-ONE-SIR" ezelfsbruggetje, geoptimaliseerd voor Engels.
| 0 1 2 3 4 5 6 7 8 9 +--------------------- | A T O N E S I R 2| B C D F G H J K L M 6| P Q U V W X Y Z .fig |
De letters van de bovenste rij worden omgezet naar de ééncijferige waarden net erboven. Alle andere letters worden omgezet naar tweecijferige waarden door de rijhoofding en vervolgens de kolomhoofding te nemen. Om getallen om te zetten gebruiken we "FIG" net voor en na getallen, waarbij we de cijfers drie maal uitschrijven om vergissingen bij het verzenden of ontcijferen te vermijden.
Laat ons de tekst "PLEASE CONTACT ME AT 1200 H." omzetten met het checkerboard
Klare tekst: P L E A S E C O N T A C T M E A T [fig] 1 2 0 0 [fig] H . Omzetting : 60 28 5 0 7 5 21 3 4 1 0 21 1 29 5 0 1 69 111 222 000 000 69 25 68 |
To encrypt, we complete the last group with zero's, write the one-time pad key underneath the plaintext . Since we use digits, the key are plaintext must be combined by modulo 10. This modulo 10 is essential to the security of the encryption!Therefore, we subtract the key without borrowing (e.g. 3 - 7 = 13 - 7 = 5, and don't borrow 10 from the digit's next-left neighbour).
Om te vercijferen vervolledigen we de laatste groep met nullen en schrijven de sleutel eronder. Aangezien we getallen gebruiken moeten we de cijfertekst berekenen met modulo 10. Deze modulo 10 bewerking is essentiëel voor de veiligheid van de vercijfering. Om dit te doen trekken we de sleutel van de klaartekst af, zonder overdracht (vb 3-7 = 13 - 7 = 5).
Klare tekst: 60285 07521 34102 11295 01691 11222 00000 06925 68000 OTP-Sleutel: (-) 50418 55297 01164 98769 26107 85944 36228 44985 25485 --------------------------------------------------------------------- Cijfertekst: 10877 52334 33048 23536 85594 36388 74882 62040 43625 |
Om het bericht te ontcijferen tellen we de cijfertekst en de one-time pad sleutel samen zonder overdracht (vb 5 + 7 = 2 en niet 12). Vervolgens zetten we de cijfers terug om in tekst. Het is eenvoudig om de ééncijferige en tweecijferige waarden te scheiden. Als een waarde start met een rijnummer 2 of 6 dan is het een tweecijferige omzetting en volgt er nog één cijfer. In alle ander gevallen is het een ééncijferige omzetting.
Soms gebruikt men een codeboek of codeblad om de lengte van de cijfertekst en de transmissietijd te verkleinen. Zo'n codeboek kan allerlei woorden en/of kleine zinnen bevatten over berichtbehandeling en operationele, technische of tactische uitdrukkingen. Een codeboek systeem moet niet altijd een groot boek zijn met duizenden uitdrukkingen. Zelfs één enkele codetabel kan genoeg praktische informatie bevatten om de lengte van een bericht enorm te reduceren. Hieronder enkele foto's van een Koreaans codeblad, de instructies voor het omzetten van de tabelinhoud in getallen en hoe men de cijfertekst berekend. Foto's © Detlev Freisleben Archief (klik om te vergroten)
|
|
|
Als kleine oefening zullen we een opname van een echt nummerstation ontcijferen (zie belangrijke opmerking onderaan). U kunt hieronder het geluidsbestand openen of downloaden (rechts-klikken en Doel opslaan als...). De uitzending begint met een herhaalde melodie en de roepnaam van de ontvanger "39715", gevolgd door zes tonen en het bericht zelf. Alle groepen van het bericht worden twee maal gespeld om vergissingen bij ontvangst te vermijden. Noteer elke groep één maal (sla de roepnaam over). Eens u het volledig bericht hebt genoteerd schrijft u onderstaande one-time pad sleutel eronder. Tel bericht en sleutel op, cijfer per cijfer, van links naar rechts, zonder overdracht (vb. 6 + 9 = 5 en niet 15). Zet tenslotte de cijfers terug om in tekst met behulp van het "AT-ONE-SIR" checkerboard van hierboven en u bekomt het oorspronkelijke bericht. Let er op dat u de één-cijferige en twee-cijferige karakters correct splitst.
Deze kleine oefening toont hoe geheimagenten berichten op een absoluut veilige wijze kunnen ontvangen met behulp van one-time pads, een kleine kortegolfontvangen en potlood en papier.
Nummerstation bericht
(1724 Kb)
De gebruikt one-time pad sleutel:
66153 77185 10800 54937 48159 83271 12892 07132 34987 53954 23074 |
Belangrijke opmerking: Hoewel het hier om een
originele opname gaat van een echt nummerstation
(Lincolnshire Poacher, E3 Voice) is de one-time pad
sleutel fictief en zodanig herberekend (sleutel = klare
tekst - cijfertekst) zodat een leesbaar doch fictief
bericht verkregen werd. In werkelijkheid iweten we niet
welke sleutel is gebruikt, of we moeten optellen of
aftrekken en is het absoluut onmogelijk het bericht te
ontcijferen Gezien een one-time pad volledig willekeurig
is kan men van een cijfertekst een eender welk leesbaar
bericht maken zolang men maar de "juiste"
verkeerde sleutel gebruikt. Dat is nu net waarom one-time
pad onbreekbaar is.
We kunnen tekst ook vercijferen met een one-time pad dat enkel uit willekeurige letters bestaat. Dit doen we met behulp van een Vigenere tabel. Om een letter te vercijferen nemen we de klaartekst letter en de kolomhoofding en de sleutelletter in de rijhoofding. De kruising tussen de twee is de cijfertekst. In de eerste letter van ons voorbeeld is de kruising tussen de klaartekst T en sleutel K de cijfertekst Q. Om te ontcijferen nemen we de sleutel letter in de rijhoofding en zoeken in die rij de cijfertekst letter. De klaartekst letter is de kolomhoofding boven de cijfertekst letter. In ons voorbeeld nemen we de X rij, zoeken Q in die rij en zijn bovenaan de klaartekst T. Om het makkelijker te onthouden kunnen we de horizontalen kolomhoofding als klaartekst aanzien, de verticale rijhoofding als sleutel en het lettervierkant als cijfertekst.
Een voorbeeld:
Klare tekst: T H I S I S S E C R E T OTP-sleutel: X V H E U W N O P G D Z ----------------------------------------- Cijfertekst: Q C P W C O F S R X H S In groepen : QCPWC OFSRX HS |
Het Vigenere vierkant (tabula recta):
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
+----------------------------------------------------
A | 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
B | 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 A
C | C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
E | E F G H I J K L M N O P Q R S T U V W X Y Z A B C D
F | F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G | G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H | H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I | I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J | J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K | K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L | L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M | M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N | N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O | O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P | P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q | Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R | R S T U V W X Y Z A B C D E F G H I J K L M N O P Q
S | S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T | T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U | U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V | V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W | W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X | X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y | Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z | Z 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
|
Er zijn verschillende praktische oplossingen voor de Vigenere tabel. Klik de links voor een Bigram tabel (txt bestand), triads tabel (txt bestand), Vigenere tabel kaart en zijn ASCII versie, Vigenere schijf en Vigenere schuiver. Alle afbeeldingen kunnen met rechtsklikken opgeslagen worden, en nadien afgedrukt en uitgeknipt.
Een andere maar omslachtiger methode om de letters te berekenen zonder Vigenere tabel is met modulo 26. We kennen elke letter een waarde toe (A=00 tot Z=25). Merk op dat we starten met A=0 en niet A=1 vanwege de modulo berekening. 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 ontcijferen 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).
Klare tekst T H I S I S S E C R E T
19 07 08 18 08 18 18 04 02 17 04 19
OTP-sleutel X V H E U W N O P G D Z
+23 21 07 04 20 22 13 14 15 06 03 25
------------------------------------
Resultaat 42 28 15 22 28 40 31 18 17 23 07 44
Mod 26 = 16 02 15 22 02 14 05 18 17 23 07 18
------------------------------------
Cijfertkest Q C P W C O F S R X H S
In groepen : QCPWC OFSRX HS
|
We kunnen een kleine hulptabel gebruiken voor de berekeningen. Om te vercijferen door optelling nemen we bijvoorbeeld T(19) + X(23). Het totaal is 42, wat zich onder de letter Q bevind in de omzettingstabel. Om te ontcijferen door aftrekken nemen we Q(16) - X(23). Indien het resultaat negatief zou zijn (wat hier het geval is) nemen we het grotere equivalent van Q(16), wat 42 is in de omzettingstabel. Q(42) - X(23) = T(19).
MODULO 26 HULPTABEL
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
-----------------------------------------------------------------------------
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
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 --
|
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 word opgeteld of omgekeerd. Voor meer details over de toepassing van one-time pad, ga naar de manuele one-time pads.
Er is een speciale manier om one-time pad te gebruiken waarbij de sleutel nooit vernietigd mag worden. Secret Splitting (geheim splitsen) is interessant als informatie enkel beschikbaar mag zijn wanneer twee personen instemmen om de informatie vrij te geven. De geheime informatie wordt vercijferd met één enkel one-time pad waarna men de originele klare tekst vernietigd. Eén gebruiker krijgt het vercijferde bericht en de andere gebruiker de sleutel. Het maakt niet uit wie wat krijgt aangezien we de beide kunnen zien als gelijke delen van de originele informatie. Beide delen worden sleutels genoemd en beiden zijn waardeloos zonder elkaar. Dit is secret splitting of geheim splitsen. We kunnen bijvoorbeeld de nummercombinatie voor een kluis vercijferen en geven de gesplitste cijfertekst aan twee verschillende personen geven. Enkel wanneer beide personen toestemmen om de kluis te openen zal het mogelijk zijn om de geheime combinatie te ontcijferen. Je kunt ook informatie in meer dan twee delen splitsen.
In onderstaand voorbeeld splitst Charlie de geheime combinatie 21 46 03 88 van zijn kluis. Een werkelijk willekeurige sleutel wordt cijfer per cijfer modulo 10 (zonder lenen) afgetrokken van de geheime combinatie. Alice en Bob ontvangen beiden een deel van deze informatie van Charlie. Het is rekenkundig onmogelijk voor Alice en Bob om de geheime combinatie te achterhalen tenzij ze hun delen aan mekaar bekend maken. Dit kan gedaan worden door beide delen eenvoudigweg samen te tellen modulo 10 (zonder overdracht)
Charlie's Combinattie 21 46 03 88
Random one-time sleutel - 25 01 77 61
-----------
06 45 36 27
Alice's sleutel = 25017761
Bob's sleutel = 06453627
|
Natuurlijk kunnen we secret splitting ook toepassen op tekst. Daarvoor zetten we de tekst eenvoudigweg om in cijfers (bijvoorbeeld A=1, B=02...Z=26). Om een geheim in méér dan twee delen te splitsen dien je enkel een bijkomende willekeurige sleutel toe te voegen voor elk extra deel. Voor drie personen dien je twee sleutels (zonder lenen) af te trekken van de geheime informatie (bvb 2 - 4 - 9 = 9 want 2 - 4 = 12 - 4 = 8 en 8 - 9 = 18 - 9 = 9). Eén enkel persoon kan nooit zelf de geheime informatie onthullen. Als groodvader, oud en ziek, de geheime combinatie van zijn kluis splitst en elk van zijn kinderen één geplitst deel geeft kunnen zij enkel aan zijn geld wanneer zij allen akkoord gaan (niet dat hij daardoor langer zal leven).
Aangezien het systeem echter onbreekbaar is zal alle informatie verloren gaan indien er één van de gesplitste delen verloren gaat. Er is absoluut geen weg terug als een deel verloren is of per ongeluk werd vernietigd. Het kan nuttig zijn een extra kopij van uw deel te bewaren op een veilige locatie.
Meer over Secret Splitting op deze pagina.
Modulair rekenen heeft interessante eigenschappen die een belangrijke rol spelen in cryptografie. Het is een essentieel onderdeel van one-time pad vercijfering. Het resultaat van een vercijfering kan informatie onthullen over de sleutel of de klare tekst. De codebreker kan deze informatie mogelijk gebruiken als hefboom om het vercijferde bericht als het ware open te breken. Door modulair rekenen te gebruiken kunnen we de getallen verhullen die gebruikt werden om het resultaat te berekenen.
Modulair rekenen is te vergelijken met rekenen met de uurwijzer van een klok. Er zijn 12 posities (0 tot 11) op de klok. Het getal 12 wordt aanzien als 0 (00:00 h) omdat modulair rekenen begint te tellen vanaf 0. Als de klok 9 uur aanwijst en we tellen er 7 uur bij dan is het resultaat 4 en niet 16. Dit komt omdat, zodra we rond de 0 gaan, we opnieuw beginnen tellen vanaf het begin. Dit is eigenlijk een modulo 12 berekening, geschreven als (9 + 7) mod 12 = 4. De modulus is de waarde waarrond we draaien. Bij modulo 30 word het resultaat 0 als we 30 bereiken of, anders gezegd, na 29 volgt 0. Het is belangrijk te bemerken dat wanneer de uurwijzer 4 uur aanduid we geen idee hebben van het originele uur noch hoeveel uren er bijgeteld werden. Het interessante aan modulair rekenen is dat we dit zowel bij optellen als aftrekken kunnen doen en, zelfs nog beter, we de berekening kunnen omkeren door respectievelijk modulair aftrekken en optellen.
In de rekenkunde is modulo x het restgetal na deling van een positief getal door x. Enkele voorbeelden: 16 modulo 12 = 4 want 16 gedeeld door 12 is 1 en er blijft 4 als rest over. 16 modulo 10 is 6 want 16 gedeeld door 10 is 1 met 6 als rest. Modulair rekenen is zeer waardevol in de cryptografie omdat het resultaat ervan absoluut niets vertelt over de twee getallen die werden opgeteld of afgetrokken. Als het resultaat van een modulo 10 berekening 4 is hebben we er geen idee van of dit het resultaat is van 0 + 4, 1 + 3, 2 + 2, 3 + 1, 4 + 0, 5 + 9, 6 + 8, 7 + 7, 8 + 6 of 9 + 5. Het getal 4 is dan het resultaat van een vergelijking met twee onbekenden, welke niet kan opgelost worden..
De modulus moet steeds dezelfde waarde hebben als het aantal elementen dat berekend moeten worden, met 0 als eerste element. Dus, voor bits (0 of 1) gebruiken we modulo 2 en voor bytes (8-bit waarden tussen 0 en 255) gebruiken we modulo 256 (in binaire rekenkunde noemen we dit een XOR operatie). Voor getallen (0 tot 9) gebruiken we modulo 10. In de praktijk is modulo 10 makkelijk uit te voeren door optelling zonder overdracht of door aftrekking zonder lenen, wat er eigenlijk op neer komt dat we alle cijfers van een getal negeren, uitgezonderd het meest rechtse cijfer. Voor one-time pad vercijfering met getallen kan het niet eenvoudiger.
Modulair rekenen met letters vergt wat extra uitleg. Men is geneigt om de getallen 1 tot 26 toe te wijzen aan de 26 letters en dan modulo 26 toe te passen. Echter, omdat het resultaat van een modulaire berekening nul kan zijn (26 mod 26 = 0) moet het eerste element steeds de waarde 0 hebben. Daarom wijzen we de getallen 0 tot 25 toe aan de letters A tot Z en gebruiken we modulo 26, want er zijn 26 letters (daarom gebruiken we ook 0 tot 11 voor de klok en niet 1 tot 12). Modulo 26 is een beetje moeilijker te berekenen dan modulo 10, maar de Vigenere tabel is bijvoorbeeld een praktische methode om modulo 26 te berekenen.
We zullen de noodzaak van modulair rekenen tonen met enkele kleine voorbeelden. Bij gewonen optelling kan het cijfertekst resultaat 0 enkel betekenen dat klare tekst en sleutel beiden 0 zijn. Een cijfertekst resultaat 1 betekend dat de twee onbekenden enkel 0 + 1 of 1 + 0 kunnen zijn. Met resultaat 2 kunnen de onbekenden enkel 0 + 2, 1 + 1 of 2 + 0 zijn. Het is duidelijk dat bij sommige resultaten we onmiddellijk de twee onbekenden binnen de vergelijking kunnen bepalen of zien welke onbekenden mogelijk of onmogelijk zijn. Veronderstel dat we de letter X (23) optellen bij de willekeurige sleutel Z (25). Met modulo 26 is het resultaat 22 want (23+25) mod 26 = 22. De waarde 22 vertelt ons niets over de klare tekst of de sleutel. Bij een gewone optelling zonder modulo is het resultaat echter 48. Hoewel klare tekst en willekeurige sleutel onbekend zijn kunnen we enkele belangrijke conclusies trekken uit het getal 48. Dit resultaat is enkel mogelijk met de combinaties X (23) + Z (25), Y (24) + Y (24) of Z (25) + X (23). Door enkel naar de vercijferde gegevens te kijken kunnen we dus alle letters van A tot W uitsluiten als kandidaten voor de klare tekst en sleutel. Dit is een belangrijke tip voor de codebreker. Natuurlijk zijn er veel verschillende manieren om een vercijferen onveilig te maken door geen gebruik te maken van modulair rekenen, en deze zullen steeds een bias (afwijking) creëren in de vercijferde gegevens. Voor codebrekers is een bias zo waardevol als goud.
Indien alle regels van one-time pad gevolgd worden? Ja! 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 TODAY vercijferen met de sleutel XVHEU bekomen we QJKES. Indien we QJKES echter ontcijferen met de foutieve sleutel FJRAB bekomen we als klaartekst het woord LATER. 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.
Het vercijferde woord TODAY:
Klare tekst: T O D A Y
OTP-sleutel: + X V H E U
---------
Cijfertekst: = Q J K E S
|
Het woord ontcijferd met achtereenvolgens één correcte en twee foute sleutels:
Cijfertekst: Q J K E S Q J K E S Q J K E S
OTP-sleutel - X V H E U - F J R A B - D F P A B
--------- --------- ---------
Klare tekst: = T O D A Y = L A T E R = N E V E R
|
Het one-time pad systeem zelf is mathematisch onbreekbaar. Iemand die het bericht wil breken dient zich dus te focussen op de sleutel in plaats van de cijfertext. Daarom is een echt willekeurige sleutel essentieel. Als de sleutel gegenereerd is door een deterministisch algoritme kan mogelijk een methode gevonden worden om de gegenereerde sleutel te voorspellen. Als bijvoorbeeld een cryptoalgoritme gebruikt is om de sleutel te genereren zal de veiligheid van de one-time pad vercijfering verlagen tot het niveua van het cryptoalgoritm en zal dus niet meer absoluut en onbreekbaar zijn. Als een sleutel meer dan eens gebruikt is kan eenvoudige cryptoanalyse de sleutel ontdekken. Inderdaad, hoewel de vercijfering met een echt willekeurige sleutel resulteert in een echt willekeurige cijfertekst zal het gebruik van dezelfde sleutel voor twee berichten resulteren in een relatie tussen de twee cijferteksten en dus ook tussen de twee sleutels. De sleutels zijn dus niet meer werkelijk willekeurig en de sleutel kan gevonden worden door heuristische analyse. Een ander onaanvaardbaar risico van dubbel gebruik van one-time pad sleutels is de gekende-klaartekst-aanval. Als de klare tekst van een bericht gekend is kan men zonder problemen de one-time pad sleutel berekenen. Dit betekend dat als de inhoud van één bericht gekend is alle berichten, vercijferd met dezelfde sleutel volledig gecompromitteerd zijn.
Een one-time pad meer dan éénmaal gebruiken zal steeds het one-time pad en alle cijfertekst, vercijferd met dat one-time pad compromitteren. We kunnen vercijferingen met hergebruikte one-time pads geheel of minstens gedeeltelijk ontcijferen met een heuristieke methode van trial-and-error. Dit is zelfs mogelijk met pen en papier, hoewel traag en omstandig. Het principe is als volgt: een crib, een vermoedde stukje leesbare tekst in de eerste cijfertekst wordt gebruikt om de sleutel omgekeerd te berekenen. Dit veronderstelde deel van de sleutel wordt vervolgens toegepast op dezelfde positie in de tweede cijfertekst. Indien de crib correct was zal men een leesbaar deel in de tweede cijfertekst bekomen met mogelijk bijkomende cribs. In onderstaand voorbeeld zullen we het breken van twee berichten demonstreren, enkel met de hulp van pen en papier.
We hebben twee totaal verschillende cijferteksten, "A" en "B". Ze zijn beiden vercijferd met hetzelfde one-time pad maar we hebben geen informatie van deze sleutel. Laat ons beginnen met aan te nemen dat de letter omgezet zijn in getallen met de waarden A=01 tot Z=26, dat de vercijfering uitgevoerd wordt door de sleutel van de cijfertekst af te trekken zonder overdracht (5 - 8 = 15 - 8 = 7) en ontcijfering uitgevoerd wordt door de cijfertekst en de sleutel samen te tellen zonder overdracht (7 + 6 = 3 and not 13). Dit is een standaard en onbreekbare uitvoering van one-time pad vercijferen, als ze toch maar dat one-time pad geen twee keer gebruikt hadden! De reden dat ik A=01 tot Z=26 gebruik is dat je dan mooi de scheiding tussen de letters ziet. De beschreven methode werkt evenwel net zo goed met een straddling checkerboard (een-cijfer en tweecijfer omzetting).
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 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 26 Cijfertekst A: 69842 23475 84252 16490 45441 18956 51010 4 Cijfertekst B: 55841 41281 75131 05995 61489 69256 61 |
We beginnen met het zoeken naar een geschikte crib. Een crib is een verondersteld stukje klare tekst dat overeen komt met een specifiek stukje cijfertekst. Dit kunnen veelgebruikte woorden, delen van woorden of frequent voorkomende trigrammen of bigrammen zijn. Enkele voorbeelden van veelgebruikte trigrammen in de Engelse taal zijn "THE", "AND", "ING", "HER" en "HAT". Enkele frequente bigrammen zijn "TH", "AN", "TO", "HE", "OF" en "IN". Vanzelfsprekend dient een crib zo lang mogelijk te zijn. Als men weet wie het bericht vercijferde en wat het vermoedelijke onderwerp is is er natuurlijk meer kans om meerdere en lange cribs te vinden.
In ons voorbeeld hebben we geen veronderstelde woorden ter beschikking dus moeten we een andere groep letters gebruiken. Laat ons de crib "THE" gebruiken die het meest frequente trigram is in het Engels. In ons voorbeeld hebben we slecht een zeer klein stukje tekst ter beschikking. In werkelijkheid zult u waarschijnlijk een paar honderd cijfers hebben voor het testen waardoor een succesvolle crib meer waarschijnlijk is.
We testen de letters "THE" op elke positie van cijfertekst "A" en trekken de cijfertekst van de crib af. Het resultaat is een veronderstelde stuk sleutel. In heuristieke termen is dit onze trial. Om deze crib te testen tellen we de veronderstelde sleutel en cijfertekst "B" samen om klare tekst "B" te achterhalen. Helaas zien we onder de eerste "THE" van ons voorbeeld onze heuristieke error. We teksten alle posities. Voor de eenvoud van het voorbeeld tonen we enkel drie posities van onze crib. Onze trial and error zal aantonen dat de negende letterpositie (17e cijfer) ons een mogelijk juiste klare tekst "B" oplevert, namelijk "OCU".
"THE" CRIB CONTROLEREN
Crib op A T H E T H E T H E
20 08 05 20 08 05 20 08 05
Cijfertekst A -69 84 22 34 75 84 25 21 64 90 45 44 11 89 56 51 01 04
-------------------------------------------------------------------------
Vermoedde sleutel 46 86 71 66 18 60 41 52 54
Cijfertekst B +55 84 14 12 81 75 13 10 59 95 61 48 96 92 56 61
-------------------------------------------------------------------------
20 90 83 15 03 21 33 08 15
Vermoedde klare B T ?? ?? O C U ?? H O
(impossible) (possible) (impossible)
|
Er zijn enkele, niet al te veel, mogelijkheden om "OCU" te vervolledigen. We dienen ze allemaal uit te proberen. Laat ons het voor de hand liggende "DOCUMENT" proberen. Deze veronderstelling dient weer onze trial and error te ondergaan. Daarom gebruiken we hieronder "DOCUMENT" als crib voor klare tekst "B" op dezelfde plaats. We trekken cijfertekst "B" af van de verondersteld klare tekst "DOCUMENT" om weer een nieuw stukje van de vermoedde sleutel te achterhalen. Onze sleutel is nu al uitgebreid tot 16 cijfers.
We tellen deze vermoedde sleutel op bij cijfertekst "A" om hopelijk iets leesbaar te achterhalen en inderdaad, "OTHESTAT" kan een correcte oplossing zijn, hiermee de crib bevestigend. Kunnen we deze crib nog langer maken? "THE STAT" kan een stuk zijn van "THE STATUS", "THE STATION" of "THE STATIC", en de "O THE" is wellicht "TO THE", aangezien "TP" een populair bigram is dat eindigt met de letter O. Ook nu moeten we deze oplossing weer testen door de gerelateerde sleutel te berekenen en deze uit te testen op de andere cijfertekst. Indien juist zal deze weer een klein stukje klare tekst onthullen. Denk eraan dat we begonnen met slechts de veronderstelling dat de cijfertekst "THE" kon bevatten en we nu reeds "DOCUMENT" en "ON THE STAT..." hebben na slechts twee heuristieke stappen!
"DOCUMENT" CRIB CONTROLEREN
Crib op B D O C U M E N T
04 15 03 21 13 05 14 20
Cijfertekst B -55 84 14 12 81 75 13 10 59 95 61 48 96 92 56 61
-------------------------------------------------------------------------
Vermoedde sleutel 94 66 18 60 75 19 22 74
Cijfertekst A +69 84 22 34 75 84 25 21 64 90 45 44 11 89 56 51 01 04
-------------------------------------------------------------------------
15 20 08 05 19 20 01 20
Vermoedde klare A . . . O T H E S T A T . . .
|
Dit proces dient telkens weer herhaald te worden. Sommige cribs zullen een dood straatje blijven en andere zullen leesbare woorden of delen van woorden onthullen. Meer klare tekst betekend betere veronderstellingen en de puzzel zal makkelijker en makkelijker worden. Dankzij de twee cijferteksten kunt u keer op keer een oplossing voor de ene cijfertekst steeds controleren met de andere cijfertekst, tot de ontcijfering compleet is.
Tenslotte geven we de volledige oplossing om het resultaat van onze trial and errors te controleren::
DE ORIGINELE BERICHTEN
Klare tekst A R E T U R N T O T H E S T A T I O N
18 05 20 21 18 14 20 15 20 08 05 19 20 01 20 09 15 14
Sleutel -59 21 08 97 43 30 05 94 66 18 60 75 19 22 74 58 14 10
------------------------------------------------------
Cijfertekst A 69 84 22 34 75 84 25 21 64 90 45 44 11 89 56 51 01 04
Klare tekst B D E L I V E R D O C U M E N T S
04 05 12 09 22 05 18 04 15 03 21 13 05 14 20 19
Sleutel -59 21 08 97 43 30 05 94 66 18 60 75 19 22 74 58
------------------------------------------------
Cijfertekst B 55 84 14 12 81 75 13 10 59 95 61 48 96 92 56 61
|
Een klein fragment zoals bijvoorbeeld "FORMA" is snel uitgebreid tot "INFORMATION", waardoor we 6 letter winnen als crib."RANSP" is zeer waarschijnlijk "TRANSPORT" of, met wat geluk "TRANSPORTATION", wat een crib van 9 extra letter oplevert. Soms geeft een reeds onthulde fragment hints naar de woorden die er aan voorafgaan of op volgen, of brengen ideeën aan voor worden op andere plaatsen in de cijfertekst. Het is een traag en vervelend karwei, maar het lappendeken zal langzaam groeien. Traag en omslachtig loont bij dit soort werk. Deze methode is ook geschikt wanneer tekst in cijfers werd omgezet met de straddling checkerboard of eender welk omzettingssysteem.
Dit voorbeeld is natuurlijk klein en eenvoudig. In werkelijkheid kunnen er allerlei complicaties optreden die veel meer testen vereisen. Welk systeem werd gebruikt voor de omzetting van letters naar cijfers? Welke taal werd gebruikt? Bevat de tekst dialecten, of afkortingen? Zij er woorden beschikbaar als crib of moeten we trigrammen of zelfs bigrammen bijeen zoeken om een woord te bekomen, nodig als crib? Worden er wel woorden gebruikt, of slechts codes uit een codeboek? Al deze problemen kunnen de heuristieke methode aanzienlijk vertragen en zeer veel testen vereisen. Succes is niet altijd gegarandeerd maar in de meeste gevallen zal het hergebruik van one-time pads resulteren in een succesvolle ontcijfering. Dit is zeker het geval met de computer van vandaag die zeer snelle heuristische testen mogelijk maken.
De geschiedenis heeft al veel voorbeelden getoond van slordig gebruik van one-time pads en het VENONA project is het meest beruchte. Dit is een mooi voorbeeld hoe belangrijk het is om de basisregels van one-time pad strikt te volgen. De Sovjet inlichtingendiensten vertrouwden historisch gezien zeer veel op one-time vercijfering en dit met goede reden. Sovjet communicaties bewezen steeds zeer veilig te zijn. Tijdens de Tweede Wereldoorlog dienden de Sovjets echter enorme hoeveelheden one-time pads te produceren en verdelen. Tijdsdruk en tactische omstandigheden leidden is sommige omstandigheden tot de distributie van meerdere kopijen van een one-time pad. In de jaren '40 werden door de Verenigde Staten en Groot Brittannië enorme hoeveelheden onderschepte berichten geanalyseerd en opgeslagen. Amerikaanse codebrekers ontdekten door cryptoanalyse dat een zeer klein deel van de duizenden KGB en GRU berichten tussen Moskou en Washington vercijferd waren met hergebruikte one-time pads. De inhoud was echter gecodeerd met codeboeken alvorens te worden vercijferd met one-time pads waardoor de codebrekers voor een enorme uitdaging stonden. Uitzoeken welke sleutel herbruikt was bij welk bericht, de reconstructie van de Sovjet codeboeken codeboeken en het zoeken naar de klare tekst was een titanenwerk dat jaren duurde. Uiteindelijk slaagden ze er in om meer dan 3000 KGB en GRU berichten te ontcijferen, enkel vanwege een distributiefout door de Sovjets. VENONA was cruciaal bij het oplossen van vele belangrijke spionagezaken. Hoewel men dikwijls naar VENONA verwijst als het project dat Russische one-time pads brak was dit echter niet het geval en buitte men slechts fouten uit bij het gebruik van one-time pads.
Vergis u niet! Het is zal nooit mogelijk zijn om one-time pad vercijfering te breken indien correct toegepast. Het voorbeeld hierboven toont enkel het uitbuiten van de dodelijkste van alle fouten: hergebruik van one-time pads.
Het gebruik van een
werkelijk willekeurige (random) sleutel met dezelfde
lengte als de te vercijferen gegevens is een essentieel
onderdeel van one-time pad. Als de sleutel niet werkelijk
willekeurig is zal het one-time pad niet langer
onbreekbaar zijn. Aangezien one-time vercijfering
rekenkundig onbreekbaar is zal het onmogelijk zijn voor
een aanvaller om de klare tekst te verkrijgen door het
onderzoeken van de vercijferde gegevens. Daarom zal het
ontleden van de sleutel zijn enige optie zijn. Als de
willekeurige getallen gegenereerd zijn door een
deterministisch mechanisme of algoritme kan het mogelijk
zijn om de uitgang van de generator te voorspellen.
Daarom is de selectie van een goede random nummer
generator het belangrijkste onderdeel van het systeem.
In de tijd voor er elektronica beschikbaar was, werd echt willekeur mechanisch of elektromechanisch gegenereerd. De meest curieuze toestellen werden uitgevonden om de willekeurige getallen te produceren. Vandaag zijn er verschillende mogelijkheden om echte willekeur te produceren. Hardware Random Number Generators (RNG's) zijn gebaseerd op de onvoorspelbaarheid van fysische fenomenen. Sommige halfgeleiders zoals de Zener diodes produceren onder bepaalde voorwaarden elektrische ruis. De amplitude van de ruis wordt gesampled of vaste tijdstippen en vertaald in nullen of enen. Een andere onvoorspelbare bron is de tolerantie van eigenschappen van elektronische componenten en hun gedrag bij veranderende elektrische en temperatuursomstandigheden. Enkele voorbeelden zijn ring oscillators die op hoge frequenties werken, drift van RC combinaties (weerstanden en condensators) in oscillators of tijdsdrift in computer hardware. fotons, onafhankelijke lichtdeeltjes, zijn ook een perfecte bron voor willekeur. In zulke systemen word één enkele foton door een filter gezonden en zijn staat gemeten. Controle van de kwaliteit van de RNG's is mogelijk met statistische tests. Zelfs bij hardware echt willekeurige RNG's is het soms nodig de uitgang te verbeteren, ook wel whitening genoemd, bijvoorbeeld bij ongelijke verdeling van nullen en enen in een reeks. Een eenvoudige oplossing is om twee opeenvolgende gegenereerde bits te testen. De waarden 01 geven dan als resultaat 0 en de waarden 10 geven uitgang 1. De repetitieve waarden 11 en 00 worden overgeslagen. Enkele voorbeelden van hardware RNG's de Mills Generator, met verschillende ringoscillators, de Quantis QRNG, gebaseerd op de onvoorspelbaare positie van fotons, de CPU klok drift gebaseerde ComScir PCQNG generator, en de VIA Nano processor met zijn geïntegreerde dubbele quantum RNG's.
Software
random number generators zijn nooit absoluut veilig
vanwege hun deterministisch karakter. Crypto Secure
Pseudo Random Number Generators (CSPRNG's) produceren een
willekeurige uitgang die is bepaald door een sleutel of
een seed (initialisatie). Een groot onbeperkt aantal
willekeurige getallen is dan afgeleid van sleutel of seed
met beperkte grootte, en sleutel en uitgang en sleutel
zijn aan elkaar gerelateerd. In feite gebruikt u dan niet
langer one-time vercijfering maar een vercijfering met
een sleutel van beperkte omvang. Brute forcing de sleutel
of analyse van de generator uitgang of een deel van de
uitgangswaarden kan de generator compromitteren. Er zijn
echter verschillende technieken om de eigenschappen van
een CSPRNG te verbeteren. Een werkelijk willekeurige en
zeer grote seed gebruiken is essentieel. Dit kan gebeuren
door nauwkeurige metingen van bewegingen door interactie
tussen mens en computer, bijvoorbeeld muisbewegingen, of
door de drift te meten van computer hardware processen
(een normale computer RND functie is totaal onveilig).
Een andere zeer effectieve techniek om de uitgang van
CSPRNG's te verbeteren is whitening, waarbij
verschillende generators gecombineerd worden. Dit maakt
analyse van de uitgang veel moeilijker. Hoewel een goede
CSPRNG theoretisch nooit Shannon's absolute veiligheid
bereikt zal hij in de praktijk bruikbaar zijn om one-time
pads te genereren. Op deze website kunt u Numbers 8.1
downloaden (zie afbeelding),
een programma om reeksen willekeurige nummers en letters
in verschillende formaten te genereren en printen.
Er is ook nog het probleem van veilige computers, gebruikt om gegenereerde willekeurige getallen te verwerken, opslaan of uit te printen. Hardware RNG's met echte willekeur gebruiken is nutteloos indien dit gebeurt op een onveilige computer. De enige absoluut veilige computer is een fysiek onafhankelijke computer met beperkte input/output periferie, nooit verbonden aan een netwerk en veilig bewaart met gecontroleerde toegang. Elke andere computerconfiguratie zal nooit absolute veiligheid garanderen.
Tenslotte is er nog een laatste oplossing: het manueel genereren van getallen. Natuurlijk is deze omslachtige methode enkel mogelijk voor kleine sleutels or key pads. Een goede bron voor willekeur zijn tien-zijdige dobbelstenen (zie foto). Met vijf zulke stenen kan je snel een groep van 5 cijfers maken. Deze dobbelstenen kan je kopen in speelgoedzaken of je kunt hem ook zelf maken (steen template, bron: www.puam.be). Gebruik nooit normale zes-zijdige dobbelstenen aangezien die statistisch ongeschikt zijn om waarden tussen 0 en 10 te produceren! Een andere methode is een lotto systeem met balletjes, genummerd van 0 tot 9. Na het trekken van een bal dient deze terug met de rest gemixt te worden alvorens de volgende te trekken. Als willekeurige bits nodig zijn kunt u één of meer muntstukken gebruiken, waarbij één zijde nul geeft en de ander zijde 1. Met 8 muntstukken kunt u een 8-bit waarde (byte) genereren in één worp. Verschillende andere methodes kunnen bedacht worden, zo lang de statistische willekeur verzekerd is. Deze eenvoudige maar effectieve methode is geschikt voor kleine one-time pads of kleine sleutels voor paswoorden of Secret Splitting.
U kunt hier het freeware CT-46 OTP tool
downloaden. Met dit kleine programma kunt u one-time pad
vercijfering oefenen. De omzettingstabel CT-46 wordt
gebruikt om de tekst om te zetten in getallen. De
software bevat tevens een hulpsectie met instructies om
one-time pad vercijfering met pen en papier uit te
voeren.
Geschikt voor Windows™ 98/ME/2000/XP/Vista/Win7. Werkt ook met WINE op Linux en met Parallels Desktop op MAC.
CT-46 OTP v1.0.1 Volledige installaties
inclusief run-time bestanden (Zip 1426 Kb)
CT-46 OTP v1.0.1 Programma zonder run-time
bestanden (Zip 31 Kb)
Gelieve het Readme bestand te lezen voor installatie.
Alternatieve download site:
http://www.esnips.com/web/CipherMachines
| Home Klassieke Cryptografie |