One-time Pad
Vernam begreep
dat de encryptie met een korte sleuteltape (inf feiten
een eenvoudige poly-alfabetische 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" (Melvin Klein, NSA
Vanwege de praktische en logistieke problemen qua sleuteldistributie is het gebruik van de pen-en-papier one-time pads beperkt. One-time pads werden tot de jaren '80 veel gebruikt door coderingspersoneel van overheidsdiensten zoals ministeries van Buitenlandse Zaken en andere diplomatieke diensten, dikwijls in combinatie met codeboeken. Zo'n codeboek bevatte allerlei woorden, uitdrukkingen en volledige standaardzinnen, die omgezet werden in een getal van drie of vier cijfers. Er was een codeboek om te vercijferen, gerangschikt volgens alfabet of categorie, en een codeboek om te ontcijferen, gerangschikt volgens de cijfers. Deze boeken waren geldig voor langere periodes en dienden niet enkel om het bericht te coderen - wat op zichzelf een zwakke vercijfering zou zijn - maar vooral om de lengte van het bericht te reduceren voor verzending over commerciële kabel of Telex. Eens het bericht geconverteerd was naar cijfers werden deze cijfers gecodeerd met het one-time pad systeem. Gewoonlijk was er een set van twee
verschillende pads, één voor binnenkomende en één
voor uitgaande berichten. Hoewel er normaal slechts twee
kopijen zijn van een one-time pad bestaan er systemen
waarbij er meer dan twee kopijen zijn voor meerdere
ontvangers. De one-time pads leken op noteblocks met
willekeurige nummers op elke pagina waarvan de bladranden
verzegeld waren. Men kon de volgende reeks getallen van
de sleutel slechts aflezen als de vorige pagina
afgescheurd was. Elke pagina werd slechts één keer
gebruikt en onmiddellijk vernietigd. Dit systeem maakte
absoluut veilige communicatie mogelijk. Een goede
beschrijving van gebruik van one-time pads door de
Canadese Buitenlandse diensten vindt u op Jerry Proc's website 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 computerprogramma'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.
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. Meer details over het gebruik van
one-time pads en het samenstellen en gebruik van
codeboeken is te lezen in de Guide to
Secure Communications with the One-time Pad Cipher Hieronder links een one-time pad met reciproke vercijferingstabel, 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 (gepreserveerd in een 35 mm dia frame) 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 (tevens 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. Bovenstaande foto's zijn gemaakt van de
Detlev Vreisleben collectie.
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 Sommige andere codeermachines die het
principe van one-time pad gebruikten waren de Amerikaanse
TELEKRYPTON
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 de Crypto Museum
Er zijn verschillende manieren om one-time pad vercijfering toe te passen. Ze zijn allen absoluut veilig en onbreekbaar indien de regels van one-time pad vercijfering strikt gevolgd worden. We kunnen letters of getallen gebruiken. In ons eerste voorbeeld demonstreren we het gebruik van letters. Het resultaat van zo'n encryptie is altijd enkel uit letters en de OTP sleutels worden ook wel OTLP (One-Time Letter Pad) genoemd. Dit systeem is minder flexibel dan one-time pad met getallen maar er is slechts één vercijferingsstap waardoor het vrij snel is. Daarom is het ideaal voor berichten die grotendeels uit letters bestaan en er zelden letters of leestekens gespeld moeten worden. Voor one-time pad met letters hebben we een Vigenère tabel of tabula recta nodig:
Om een letter te vercijferen schrijven we de sleutel onder de klare tekst. We nemen we de klaartekst letter bovenaan en de sleutelletter rechts. De kruising tussen de twee is de cijfertekst. In de eerste letter van ons voorbeeld hieronder is de kruising tussen de klaartekst T en sleutel X de cijfertekst Q.
Om te ontcijferen nemen we de sleutel letter in de linkse rij en zoeken in die rij de cijfertekst letter. De klaartekst letter is de letter boven de kolom waarin de cijfertekst letter is gevonden. 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. Het vinden van de juiste kruising tussen sleutel en letter in zo'n grote tabel kan moeilijk zijn. Er zijn verschillende praktische oplossingen voor de Vigenere tabel zoals de Vigenère schijf, de Vigenère schuiver en Vigenère tabel kaart. Alle afbeeldingen kunnen met rechtsklikken opgeslagen worden, en nadien afgedrukt en uitgeknipt. Een andere maar meer omslachtige methode om de letters te berekenen zonder Vigenère 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).
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).
Er zijn echter eenvoudige en snellere
methodes om letters te vercijferen. Een zo'n systeem is
een tabel met reciproke alfabetten. Dit is veel sneller
dan Vigenère en daarom ideaal voor het vercijferen van
grotere volumes. Het manuele DIANA crypto systeem,
gebruikt door U.S. Special Forces tijdens de Vietnam
Oorlog is een voorbeeld van een systeem dat reciproke
vercijfering gebruikt. Zie ook NSA's History of
Communications Security, pagina 22 Voor elke sleutel-letter is er een ander alfabet waarvan de vercijferde versie omgekeerd is en een letter verschoven tegenover het vorige alfabet. Dankzij dit formaat zijn de handelingen voor vercijfering en ontcijfering identiek. Er zijn verschillende versies van reciproke tabellen maar zij gebruiken allemaal hetzelfde systeem. Opgelet, deze tabel is niet compatibel met de gewone Vigenère tabel! U kunt de reciproke one-time pad tabel downnloaden als .txt bestand (rechts-klikken en opslaan).
Om te vercijferen schrijven we de sleutel onder de klare tekst of omgekeerd. In tegenstelling tot Vigenère speelt de volgorde van sleutel en klare tekst geen rol en mogen verzender en ontvanger zelfs een verschillende volgorde gebruiken. Voor elke combinatie van sleutel en klare letter nemen we de tabel kolom die overeen komt met de eerste letter en zoeken in die kolom naar de tweede letter. De letter rechts daarvan is het resultaat. In het voorbeeld hieronder schreven we de sleutel boven de klare tekst. We kiezen de kolom die overeen komt met de sleutel-letter X en zoeken daaronder naar de klare letter T en vinden rechts daarvan de cijfertekst letter j. Dankzij het reciproke systeem speelt het geen rol of we X met T of T met X combineren. Bemerk dat een DIANA cijfertekst totaal verschilt van een Vigenère cijfertekst en daarom niet compatibel zijn.
Voor ontcijfering nemen we de kolom voor sleutel-letter X, zoeken nu daaronder de cijfertekst letter J en vinden rechts daarvan klare letter t, maar u kunt net zo goed in kolom J de letter X zoeken en rechts daarvan de klare letter t vinden. Het mooie aan dit systeem is de snelheid, het makkelijke combineren en de identieke handelingen voor zowel vercijferen als ontcijferen. Denk eraan dat dit systeem niet compatibel is met de Vigenère tabel en verzender en ontvanger beiden steeds dezelfde tabel moeten gebruiken! Er is ook een methode om de reciproke tabel te memoriseren en het vercijferingsproces nog meer te versnellen. De volgorde van klare letter, sleutel en cijferletter is van geen belang in een reciproke tabel. Dus, A vercijfert met G geeft T en ontcijfert als T met G geeft A, maar ook G met T geeft A. We noemen dit de trigram combinatie AGT. Vanwege de reciproke eigenschap kunnen we dit trigram gebruiken in elke mogelijke combinatie, zijnde AGT, ATG, GAT, GTA, TAG en TGA. Als we dus een letter van het trigram vercijferen of ontcijferen met een andere letter uit dat trigram is het resultaat steeds de overblijvende letter. We moeten dus enkel het trigram AGT onthouden en weten meteen alle afgeleide trigrammen. Dit reduceert het aantal combinaties van 676 naar 126 en je mag spelen met de volgorde. Elke gebruiker kan zijn eigen lijst van ezelsbrugjes maken om de 126 mogelijke trigrammen te onthouden in eender welke volgorde. AGT kan makkelijk onthouden worden door het woord "GAT". Enkele andere voorbeelden zijn AVE (avé maria), HRB (HR-Bureau), GPE (Grand Prix Engeland), GGN (goed ge-noeg), WTK (wa-ter-kraan) of HZT (huis zonder tuin). Ieder kiest zijn eigen connotatie om de trigrammen makkelijk te onthouden. Een geoefend operator kan zeer snel on-the-fly vercijferen en ontcijferen zonder tabel. U kunt de volledige lijst van reciproke one-time pad trigrammen downloaden als .txt bestand (rechts-klikken en opslaan) De volledige lijst van 126 trigrammen, te onthouden in eender welke volgorde (bv. ABY is ook AYB, BAY, BYA, YAB and YBA)
One-time pad vercijfering met nummers 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" ezelsbruggetje, geoptimaliseerd voor Engels.
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 driemaal uitschrijven om vergissingen bij het verzenden of ontcijferen te vermijden. Laat ons de tekst "PLEASE CONTACT ME AT 1200 H." omzetten met het checkerboard
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 essentieel 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 = 6).
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 Vreisleben Archief (klik om te vergroten)
Als oefening zullen we een opname van een echt nummerstation ontcijferen (zie belangrijke opmerking onderaan). U kunt hieronder het geluidsbestand beluisteren of downloaden (rechts-klik en Audio 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 erop 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 kortegolfontvanger en potlood en papier.
De gebruikt one-time pad sleutel:
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
weten 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. Je zal
nooit weten of je de juiste of verkeerde sleutel
gebruikte, tenzij je de originele sleutel hebt. Dat is nu
net waarom one-time pad onbreekbaar is. Soms gebruikt men one-time letter pads, maar moet men een bericht verzenden met een apparaat dat enkel cijfers accepteert, zoals bijvoorbeeld een burst encoder, een speciale digitale drager of steganografie op basis van cijfers. Dan moeten we de letters van het vercijferde bericht vervolgens nog omzetten in cijfers. Dit kan met een eenvoudige omzettingstabel. Zulke berichten lijken op het eerste zicht omgezet te zijn van letters naar cijfers en dan vercijferd met one-time cijfer pads, maar zijn dat niet! Met de tabel hieronder kan je eenvoudig de cijfertext letters omzetten naar cijfers per twee letter, bigrammen genoemd, van EK in 411 of TL in 942. Zoek altijd de eerste letter in de bovenste rij en de tweede letter in de linkse kolom. Het is net zo eenvoudig om 411 en 942 terug om te zetten in de cijfertext bigrammen aangezien we met cijferreeksen werken. Nadien wordt het bericht ingedeeld in groepen van vijf cijfers. Weet dat de letters-naar-cijfers tabel absoluut geen type vercijfering is of deel uitmaakt van de vercijfering, en de tabel geen enkele bijkomende veiligheid geeft. Het is slechts een omzetting van letters naar cijfers. Omdat de tabel letterparen omzet naar
driecijferige getallen zal er een bias zijn in de
spreiding van de cijfers, hoe willekeurig de letterparen
ook mogen zijn, omdat er meer (ongebruikte) mogelijke
cijfercombinaties zijn dan lettercombinaties (676
letterparen t.o.v. 1000 getallen). In bovenstaande tabel
komt bijvoorbeeld het getal 9 maar 104 keer voor, en het
getal 1 komt 256 keer voor. Men kan zelfs een tabel
ontwerpen waar een cijfer ontbreekt. Deze bias heeft
echter totaal geen effect op de veiligheid van het
bericht omdat dit reeds absoluut veilig werd vercijferd
met een one-time letter pad. 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).
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 grootvader, oud en ziek, de geheime combinatie van zijn kluis splitst en elk van zijn kinderen één gesplitst 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 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 geneigd 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 Vigenère tabel is bijvoorbeeld een praktische methode om modulo 26 te berekenen. We zullen de noodzaak van modulair rekenen tonen met enkele kleine voorbeelden. Bij gewone 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.
Is one-time pad vercijfering absoluut onbreekbaar als alle regels correct worden toegepast? Ja! Het is ook eenvoudig aan te tonen omdat het systeem simpel en transparant is. Het komt neer op één feit dat makkelijk te begrijpen is. Het one-time pad systeem is een vergelijking met twee onbekenden, waarvan één volledig willekeurig is. Dit is wiskundig onoplosbaar. Elke letter van een bericht kan immers vercijferd worden door elke willekeurige letter, met telkens een willekeurige letter als resultaat. Er is ook geen enkele wiskundige, statistische of taalkundige relatie tussen de individuele cijfertekst tekens of tussen verschillende berichten omdat elke individuele sleutel-teken of cijfer willekeurig is. Deze eigenschappen maken alle bestaande cryptanalytische technieken onbruikbaar die beschikbaar zijn voor de codebreker. Men kan hier ook niet alle mogelijke sleutels 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 woord ontcijferd met achtereenvolgens één correcte en twee foute sleutels:
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 niveau 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).
We beginnen met het zoeken naar een geschikte crib. Een crib is een verondersteld stukje klare tekst dat overeenkomt 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".
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 "TO THE STAT..." hebben na slechts twee heuristieke stappen!
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:
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 eraan 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 toonde al veel voorbeelden van slechte uitvoering van one-time pad encyptie. De Duiste ambassades hadden de eersten kunnen zijn om het veilige one-time pad intensief te gebruiken maar beslisten echter om de sleutels te genereren met een eenvoudige mechanische machine. Door dit te doen negeerden ze de belangrijkste regel van one-time pad, dat de sleutel steeds werkelijk willekeurig moet zijn. Het Amerikaanse ASA heeft nooit one-time pad vercijferde berichten echt gebroken maar exploiteerde een fatale fout in de productie van pseudo-willekeurige sleutels uit. Project VENONA project is ongetwijfeld het meest beruchte en bekendste voorbeeld van 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 erin 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 zenerdiodes 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. fotonen, onafhankelijke lichtdeeltjes, zijn ook een perfecte bron voor willekeur. In zulke systemen wordt éé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 zijn
de Quantis QRNG Het is ook mogelijk manueel echt willekeurige getallen of letters te genereren. Natuurlijk is deze omslachtige methode enkel mogelijk voor kleine sleutels of key pads. Een goede bron voor willekeur zijn tienzijdige dobbelstenen (foto rechts). Met vijf zulke stenen kan je snel een groep van 5 cijfers maken. Deze dobbelstenen kan je kopen in speelgoedzaken.
Men kan ook de letters A tot Z en de nummers 0 tot 9 toekennen aan alle 36 combinaties. Op deze manier kan men one-time pads creëren met zowel letters als nummers. Zulke one-time pads kunnen gebruikt worden in combinatie met een Vigenère tabel, vergelijkbaar met de tabel hierboven beschreven, maar met een 36 x 36 raster waarbij elke rij het complete alfabet en alle nummers bevat. Dit systeem produceert een cijfertekst met zowel letters als nummers. Een voordeel hiervan is dat men getallen kan gebruiken in de klaartekst. 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 zeer effectieve en veilige manuele methodes zijn geschikt voor kleine one-time pads of kleine sleutels voor paswoordbeveiliging door Secret Splitting. 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 verschillende technieken om de eigenschappen van een
CSPRNG aanzienlijk 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. Meer
informatie over veilig genereren van willekeur is te
vinden in de RFC 4086 Randomness
Requirements for Security Er
is echter nog het belangrijke 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. Helaas zijn gewone
computers totaal onveilig voor het gebruik van
cryptografische toepassingen. 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.
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 uitwisselen, fysiek via koerier of elektronisch via een perfect veilig systeem zoals kwantum sleutel distributie. 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, mogelijk vele jaren. One-time pads zijn vooral interessant in omstandigheden waar veiligheid op lange termijn essentieel is. Eenmaal vercijferd met one-time pad en de sleutel vernietigd, kan geen enkele cryptanalytische methode of toekomstige technologie de gegevens ooit ontcijferen. Gegevens die daarentegen vercijferd worden met de beste moderne computeralgoritmes zullen niet weerstaan aan toekomstige cryptoanalyse-technieken en kunnen mensen en organisaties jaren later nog compromitteren. Hoewel one-time pad perfecte vercijfering biedt heeft dit systeem twee belangrijke nadelen die het gebruik ervan compliceren voor sommige toepassingen. Een eerste probleem is het produceren van grote aantallen willekeurige getallen of tekens voor de sleutel. Om absolute willekeurigheid te maken kan men deze sleutels niet creëren met behulp van eenvoudige mechanische toestellen of eenvoudige computeralgoritmes. Hardware true random generators, gebaseerd op ruis zijn de enige veilige optie. Het tweede probleem is de sleuteldistributie. De hoeveelheid sleutelmateriaal, nodig voor encryptie, dient gelijk te zijn aan de hoeveelheid data en kan slechts eenmaal gebruikt worden. Daarom moeten soms grote hoeveelheden sleutelmateriaal op voorhand op een zeer veilige manier uitgewisseld worden. Natuurlijk kan men de one-time pads niet verzenden door ze eerst 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. Dit zijn praktische problemen waarvoor evenwel technische oplossingen bestaan, afhankelijk van de gebruikte toepassing. 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 waarvan het resultaat samen met het bericht vercijferd en verzonden wordt (een hash is een unieke waarde met vaste lengte, afgeleid van een tekst). Enkel de persoon met de juiste sleutel kan het bericht en de corresponderende hash correct te vercijferen en daarmee de tekst controleren. De tegenstander kan het effect van zijn manipulatie van de cijfertekst, noch van de hash, voorzien. Bij ontvangst ontcijfert men het bericht en vergelijkt men de ontvangen hash waarde met een hash die berekend wordt 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. One-time pad-encryptie is niettemin belangrijke voor de toekomst. Uiteindelijk zullen rekenkracht en technologische vooruitgang de wiskundige mogelijkheden overtreffen om sterke vercijfering te bieden en alleen informatietheoretisch veilige vercijfering zal de evolutie van cryptologie overleven. Net zoals klassieke potlood-en-papiercijfers onbruikbaar werden met de komst van de computer, zo zullen de huidige computeralgoritmen, gebaseerd op wiskundige complexiteit, het slachtoffer worden van de evolutie van technologie. En dat moment zou ons veel sneller kunnen overvallen dan we verwachten. One-time pad is dus enige vercijfering die elke evolutie zal overleven. Technologie en wetenschap moeten dan praktische oplossingen bieden voor de distributie van grote volumes van sleutels. Dit kan een moderne massaopslagversie zijn van de aktentas met handboeien, waarbij men gemakkelijk vele terabytes aan sleutels kunnen uitwisselen. Maar er is ook al kwantumsleuteldistributie (QKD) die tegenwoordig al in gebruik is voor kleinere hoeveelheden sleutels. ECOQC in Wenen, Oostenrijk, was in 2008 het allereerste QKD-beveiligde netwerk. Het huidige DARPA Quantum-netwerk heeft tien knooppunten. ID Quantique, QuintessenceLabs en SeQureNet zijn enkele van de commerciële bedrijven die momenteel QKD-netwerken aanbieden. Versturen van grote volumes one-time pad sleutels via QKD zou in de toekomst een oplossing kunnen bieden, ook om cryptanalyse met kwantumcomputers te weerstaan, aangezien het veilig delen van kleinere sleutels voor vercijfering met de huidige traditionele algoritmes niet zal volstaan, net zoals de huidige publieke-sleutels algoritmens, gebaseerd op wiskundige complexiteit, niet veilig zullen blijven. De huidige precaire staat van
internetbeveiliging is waar het beperkte gebruik van
one-time pad vercijfering voor specifieke doeleinden in
het spel komt. Je zou het misschien belachelijk hebben
gevonden in onze high-tech wereld, ware het niet dat onze
privacy zich tegenwoordig in desastreuze toestand
bevindt. Zelfs one-time pad met potlood en papier biedt
nog steeds een praktisch vercijferingssysteem voor kleine
hoeveelheden kritieke privécommunicatie. De
correspondenten kunnen alle eenvoudige berekeningen met
de hand uitvoeren, hun vercijferd bericht veilig over elk
onveilig kanaal sturen en niemand zal het ooit kunnen
ontcijferen, zelfs niet de drieletter-organisaties. Het
is ook het enige crypto-algoritme dat we vandaag echt
kunnen vertrouwen, omdat het niet de inherent onveilige
computers van vandaag vereist, verbonden met
onbetrouwbare netwerken.
Meer over op SIGINT Chatter
(off-site, opent in nieuwe tab)
Meer informatie (off-site,
opent in nieuwe tab)
|