Tijdens de Vietnamoorlog maakte het Amerikaanse leger gebruik van het Diana Cryptosystem: een techniek om berichten te coderen en te decoderen die in theorie onmogelijk kan gekraakt worden als ze volgens de regels van de kunst gebruikt wordt. De versleuteling is gebaseerd op twee technieken.

In eerste instantie wordt er gebruikgemaakt van een trigraph om twee letters om te zetten naar een derde letter. Deze omzetting gebeurt aan de hand van een vaste tabel — zie onderstaand voorbeeld — waarmee twee zwarte letters omgezet worden naar een rode letter. Typisch aan deze omzetting is dat voor elk drietal letters geldt dat twee van de drie letters door de trigraph telkens omgezet worden naar de derde letter. Als we bijvoorbeeld weten dat B en K omgezet worden naar O, dan worden ook K en B omgezet naar O, maar worden ook K en O omgezet naar B, en ook O en B naar K. Eigenlijk heb je zelfs helemaal geen tabel nodig, want de omzetting kan ook makkelijk berekend worden. Als we de twee gegeven letters in het alfabet terugvinden op posities $$p_1$$ en $$p_2$$ (waarbij A op positie 0 staat, B op positie 1, enzoverder), dan vinden we de derde letter in het alfabet terug op positie \[ (25 - p_1 - p_2)\ \textrm{mod}\ 26 \] waarbij de operator $$m\ \textrm{mod}\ n$$ staat voor de rest na gehele deling van $$m$$ door $$n$$, wat steeds een natuurlijk getal uit het interval $$[0, n[$$ oplevert.

trigraph
Trigraph die gebruikt wordt bij clandestiene communicatie.

Daarnaast wordt gebruikgemaakt van een one-time pad, wat eigenlijk niets anders is dan een willekeurige opeenvolging van letters. Voor de leesbaarheid worden deze letters vaak weergegeven in groepen van vijf letters, maar elk karakter dat geen letter is moet genegeerd worden in het one-time pad (dus ook de spaties). Als voorbeeld beschouwen we het volgende one-time pad.

WHTVI AUCFU RETFK OMSAL
MYMNE ZIEGP UKVTF WZHOK
GORWY WETFR COYET OOWHY
ZPDDA CMMXT VYTJI RRQGU
VAXPM IPIXU QUXIP MAXIU

Om dan bijvoorbeeld de klare tekst ATTACK AT DAWN te coderen, gaan we als volgt te werk. Eerst wordt er een willekeurig fragment van een vooraf afgesproken lengte gekozen uit het one-time pad. Stel bijvoorbeeld dat we kiezen voor de tien letters UKVTF WZHOK. De letters van de klare tekst (alle karakters die geen letter zijn worden genegeerd) worden dan onder de letters van het one-time pad geschreven die volgen op het willekeurig gekozen fragment. Daarna wordt elk paar letters (een letter uit het one-time pad en een letter uit de klare tekst op dezelfde positie) omgezet naar een derde letter door gebruik te maken van een trigraph. Deze laatste letters leveren uiteindelijk de cijfertekst op.

one-time pad:  UKVTF WZHOK GORWY WETFR COYET OOWHY
klare tekst:               ATTAC KATDA WN
               -----------------------------------
cijfertekst:               TSPDZ TVNRI BY

Het bericht UKVTF WZHOK TSPDZ TVNRI BY wordt dan verstuurd in morsecode. Hierbij wordt dus eerst het willekeurige fragment van tien letters in niet-gecodeerde vorm verstuurd, gevolgd door de cijfertekst zelf. Omwille van de symmetrie van de trigraph werkt het decoderen van een bericht volgens exact dezelfde procedure als het coderen. Eerst zoekt de ontvanger de eerste tien letters van het bericht op in het one-time pad (de ontvanger moet hiervoor hetzelfde one-time pad gebruiken als de verzender), en decodeert de resterende cijfertekst door opnieuw gebruik te maken van een trigraph.

one-time pad:  UKVTF WZHOK GORWY WETFR COYET OOWHY
cijfertekst:               TSPDZ TVNRI BY            
               -----------------------------------
klare tekst:               ATTAC KATDA WN

Een soldaat die meestreed tijdens de Vietnamoorlog verwoordde het gebruik van het Diana Cryptosystem op de volgende manier:

Special Forces were one of (if not the only) units in Vietnam to utilize Morse code on a regular basis. We used a method of encryption called the Diana Cryptosystem.

The basis of these
one-time pads, is that there were only two matching pads in existence, and they would only be used one time. They were booklets that contained randomly generated groups of 5-letter words, 30 words to a page. The person sending a message would first write the letters to the message, over these random groups of words. Included in the front of each one-time pad was a one-page encryption table. If I wanted to send the letter P, and the letter under the P was an A, then I would send a K. The person listening on the frequency at the other end, would have the other matching pad. They would write the letter they received (a K) over the letter in their one-time pad (an A), and decipher it based on the table, yielding the original letter P.

Each communication site in Vietnam (we had over 100 A-Camps along the Cambodian / Laotian border, and some 20 B-detachment sites spread over the country) had a different pad, depending on the location they were having the commo-check with. It obviously was very important that both people were using the appropriate matching pads, or the deciphered messages would not make any sense.

After a while, most of us became so proficient with the system, that we actually learned the deciphering matrix by heart. No matter what pads anyone had, the combinations always were the same. i.e. any 3 letters always went together, regardless of the order; BKO/KOB/OBK/BOK. After listening to thousands and thousands of transmissions, it really got quite simple. If I was listening to code, and a letter B was sent (now remember, we usually sent around 20-25
words (5 letters per word) a minute, hence the importance of the speed keys!), and the letter it was associated with was an O, most of us would decipher as we heard it, and just write the K. That may sound like quite a yarn, but it is absolutely true.

De combinatie trigraph en one-time pad levert een zeer sterke vorm van encryptie op. In de veronderstelling dat de letters van het pad echt willekeurig gegenereerd worden, nooit hergebruikt worden en niet gecompromiteerd zijn, kan aangetoond worden dat de code onbreekbaar is. Het is daarom niet verwonderlijk dat heel wat inlichtingendiensten gebruikmaakten en maken van deze vorm van encryptie. De KGB gaf aan haar agenten bijvoorbeeld vaak one-time pads mee die gedrukt waren op flash paper — papier dat chemisch omgezet werd naar nitrocellulose, waardoor het bijna onmiddellijk verbrandt zonder as na te laten.

Opgave

Definieer een klasse Diana waarmee berichten kunnen gecodeerd en gedecodeerd worden volgens het Diana Cryptosystem met een vooraf vastgelegd one-time pad. Bij het aanmaken van een nieuwe codec (Diana) moet een one-time pad (String) doorgegeven worden. Naast letters mag het one-time pad ook nog extra karakters bevatten die geen letter zijn. Deze extra karakters moeten echter genegeerd worden bij het coderen en decoderen.

Op een codec $$\mathcal{D}$$ (Diana) moet je minstens de volgende methoden kunnen aanroepen:

Voorbeeld

> const diana = new Diana("WHTVI AUCFU RETFK OMSAL MYMNE ZIEGP UKVTF WZHOK GORWY WETFR COYET OOWHY ZPDDA CMMXT VYTJI RRQGU VAXPM IPIXU QUXIP MAXIU");

> diana.trigraph("Q", "K")
"Z"
> diana.trigraph("t", "f")
"B"

> diana.index("UKVTF WZHOK")
40
> diana.index("CMMXT VYTJI RRQGU")
80
> diana.index("ABCDE FGHIJ")
Error: ongeldige prefix

> diana.codeer("UKVTF WZHOK attack at dawn")
"TSPDZTVNRIBY"
> diana.codeer("CMMXT VYTJI RRQGU meet at ten tonight", 15)
"SVYRNYRNPMVSULDU"
> diana.codeer("ABCDE FGHIJ zero dark thirty")
Error: ongeldige prefix
> diana.codeer("VAXPM IPIXU zero dark thirty")
Error: one-time pad is te kort

> diana.decodeer("UKVTF WZHOK TSPDZ TVNRI BY")
"ATTACKATDAWN"
> diana.decodeer("CMMXT VYTJI RRQGU SVYRN YRNPM VSULD U", 15)
"MEETATTENTONIGHT"
> diana.decodeer("ABCDE FGHIJ zero dark thirty")
Error: ongeldige prefix
> diana.decodeer("VAXPM IPIXU zero dark thirty")
Error: one-time pad is te kort