Vaak zegt een beeld meer dan duizend woorden. Dat is letterlijk het geval voor deze foto.

klas van 1918
Afstudeerfoto van de eerste codekrakersklas die William Friedman en zijn vrouw Elizebeth in 1918 gaven aan een groep soldaten van de U.S. Army. In de groep van 5 zwart geklede personen centraal op de foto herken je centraal Elizebeth Friedman en rechts William Friedman.

William Frederick Friedman1 — vader van de moderne Amerikaanse cryptologie — was dol op een geheimschrift2 dat bedacht was door Francis Bacon3. Het is zo vernuftig dat je er onopvallend geheime boodschappen mee kunt verbergen in foto's, tekeningen, stukken bladmuziek of een andere alledaagse dingen. Bacon omschreef het zelf als "anything can be made to signify anything".

In 1918 gebruikte Friedman (rechts in de groep van 5 zwart geklede personen centraal op de foto) het om een geheime boodschap te verbergen in bovenstaande afstudeerfoto van de eerste codekrakersklas die hij samen met zijn vrouw Elizebeth (centraal in de groep van 5 zwart geklede personen centraal op de foto) had gegeven aan een groep soldaten van de U.S. Army4. Het zal je misschien niet opgevallen zijn, maar sommige studenten kijken recht naar de camera, terwijl anderen opzij kijken.

klas van 1918 (detail)
Studenten die recht naar de camera kijken, coderen voor karakterklasse $$a$$. Studenten die opzij kijken, coderen voor karakterklasse $$b$$. Op die manier vormt de eerste groep van vijf soldaten het patroon abaab dat codeert voor de hoofdletter K.

Hierdoor coderen ze Friedman's favoriete citaat van Francis Bacon: KNOWLEDGE IS POWER. Maar blijkbaar keek de eerste soldaat in de laatste W-groep de verkeerde kant op (hij had opzij moeten kijken in plaats van recht in de camera) en waren er niet genoeg personen om de R-groep te vervolledigen.

klas van 1918 (ontcijferd)
De afstudeerfoto codeert Friedman's favoriete citaat van Francis Bacon: KNOWLEDGE IS POWER. Maar blijkbaar keek de eerste soldaat in de laatste W-groep de verkeerde kant op (hij had opzij moeten kijken in plaats van recht in de camera) en waren er niet genoeg personen om de R-groep te vervolledigen.

Voor de rest van zijn carrière nam deze foto een prominente plaats in op Friedman's bureau. Na zijn dood in 1969 liet Elizebeth het citaat ook op zijn grafsteen graveren, in een ontwerp dat ze zelf bedacht had:

knowledge is power
Elizebeth Friedman liet dit favoriete citaat van haar man op zijn grafsteen graveren. De inscriptie is samengesteld uit schreefletters en schreefloze letters, waardoor ze een geheime boodschap vormen van de initialen WFF van haar man: William Frederick Friedman.

In 2017 merkte cryptograaf Elonka Dunin5 op dat de inscriptie samengesteld is uit schreefletters en schreefloze letters6. Blijkbaar zat er in deze gravure ook een geheime boodschap verborgen die Elizebeth gebruikt had om William's initialen WFF te verbergen. Dunin noemt het "een passend eerbetoon aan het leven en werk van een koppel dat zo toegewijd was aan codes en cijferschriften."

Opgave

Bij Baconversleuteling wordt elk symbool uit de klare tekst7 voorgesteld door een patroon van vijf a's en b's in de cijfertekst8. Omdat er in totaal $$2^5 = 32$$ verschillende patronen kunnen gevormd worden, kunnen er dus 32 symbolen gecodeerd worden. Die sleutel van het geheimschrift leggen we vast in een tekstbestand met 32 regels. Elke regel van het bestand bestaat uit één symbool (één karakter), gevolgd door een tab en het unieke patroon waardoor het symbool gecodeerd wordt. Zo'n tekstbestand ziet er bijvoorbeeld als volgt uit:

A	aaaaa
B	aaaab
C	aaaba
D	aaabb
E	aabaa
F	aabab
G	aabba
H	aabbb
I	abaaa
K	abaab
…
 	bbaba
.	bbabb
,	bbbaa
'	bbbab
?	bbbba
!	bbbbb

Om de klare tekst KNOWLEDGEISPOWER te coderen, vervangen we bij Baconversleuteling elk symbool door het corresponderende patroon:

abaab abbaa abbab babaa ababa aabaa aaabb aabba
  K     N     O     W     L     E     D     G

aabaa abaaa baaab abbba abbab babaa aabaa baaaa
E I S P O W E R

Op die manier is de lengte van de cijfertekst altijd een veelvoud van vijf. Een cijfertekst kan dan gedecodeerd worden door elk patroon van vijf a's en b's te vervangen door het corresponderende symbool in de klare tekst.

Een gecodeerd bericht dat enkel uit a's en b's bestaat zou echter direct laten opvallen dat er Baconversleuting gebruikt werd. Om dat te verdoezelen, zullen we een klare tekst coderen onder de vorm van een directorystructuur met bestanden en subdirectories waarvan de namen enkel uit letters bestaan (hoofdletters en kleine letters). We hebben bijvoorbeeld met sleutel key04.txt9 de klare tekst KNOWLEDGEISPOWER gecodeerd in deze directorystructuur (dir0410):

dir04/11
├──  AeNQsmmq   (103 bytes; 01001 -> K)
├──  BpSJIVLc/
├──  CIclBuot   (38 bytes)
├──  DPMFdONC/
├──  DovmSRmN   (63 bytes)
├──  IEwpyPbD   (212 bytes; 01100 -> N)
├──  IhmfTogf   (189 bytes; 01101 -> O)
├──  JAOzPBzX   (200 bytes; 10100 -> W)
├──  JECEnLBo   (252 bytes; 01010 -> L)
├──  JLbPQbTn   (104 bytes; 00100 -> E)
├──  LEeHuHVX   (47 bytes)
├──  LaGvJmwN   (93 bytes)
├──  NGewEGZN/
├──  NLTjiQHW/
├──  NQhDngvp/
├──  NtJqIJZE   (125 bytes; 00011 -> D)
├──  TMvWnrlh   (72 bytes)
├──  TrfKQrUF   (241 bytes; 00110 -> G)
├──  ZIMxvXhD   (161 bytes; 00100 -> E)
├──  cApuGyKg   (170 bytes; 01000 -> I)
├──  dlaqOkaX   (99 bytes)
├──  gTPoCHRT   (227 bytes; 10001 -> S)
├──  hJpNGJZg/
├──  kMTTyJqo/
├──  loGwFIkp   (100 bytes; 01110 -> P)
├──  lxwwCCGK/
├──  nTpJiHGV   (74 bytes)
├──  wCGPtGXs   (200 bytes; 01101 -> O)
├──  xMajMVIa   (100 bytes; 10100 -> W)
├──  xoLVHdHu   (157 bytes; 00100 -> E)
├──  yIYmcZpf   (90 bytes)
└──  zIoRIKgH   (205 bytes; 10000 -> R)

Om het gecodeerd bericht in deze directorystructuur te ontcijferen, moeten alle directories (aangeduid in rood) en hun onderliggende bestanden genegeerd worden. Verder moeten ook alle gewone bestanden waarvan de grootte minder dan 100 bytes bedraagt (aangeduid in blauw) genegeerd worden. Elk gewoon bestand met minstens 100 bytes dat rechtstreeks onder de directory dir04 staat, codeert één symbool uit de klare tekst. Die bestanden moeten in lexicografische volgorde verwerkt worden, rekening houdend met het verschil tussen hoofdletters en kleine letters. De eerste 5 bits van een bestand worden gebruikt om het symbool dat met dit bestand correspondeert te decoderen, waarbij een 0-bit correspondeert met een letter a in de patronen van de Baconversleuting en een 1-bit met de letter b. De eerste vijf bits van het gewoon bestand dir04/AeNQsmmq (met een grootte van 103 bytes) zijn bijvoorbeeld 01001. Dit correspondeert met patroon abaab dat volgens de sleutel key04.txt12 staat voor symbool K in de klare tekst.

Gevraagd wordt om een bash shell script bacon te schrijven waarmee berichten kunnen ontcijferd worden die met Baconversleuteling gecodeerd zijn onder de vorm van een directorystructuur. Aan het shell script moeten twee argumenten doorgegeven worden: i) de padnaam van de directorystructuur waarin het bericht gecodeerd zit en ii) de padnaam van een tekstbestand met de sleutel die bij de Baconversleuteling gebruikt werd. Het script moet de klare tekst van het bericht dat in de gegeven directorystructuur gecodeerd zit uitschrijven naar stdout. Daarbij mag het script ervan uitgaan dat er enkel geldige argumenten aan doorgegeven worden, zonder dat dit expliciet moet gecontroleerd worden.

Tip

Gebruik het commando xxd met optie -b om de binaire voostelling van een bestand te genereren. Daarmee kan je rechtstreeks de eerste 5 bits van het bestand bepalen.

Voorbeeld

Onderstaande voorbeeldsessie toont hoe het shell script bacon moet kunnen gebruikt worden. Hierbij gaan we ervan uit dat de huidige directory de bestanden uit het ZIP-bestand bacon.zip13 bevat.

$ bacon data/dir01/14 keys/key01.txt15
F
$ bacon data/dir02/16 keys/key02.txt17
W
$ bacon data/dir03/18 keys/key03.txt19
WFF
$ bacon data/dir04/20 keys/key04.txt21
KNOWLEDGEISPOWER
$ bacon data/dir05/22 keys/key05.txt23
KNOWLEDGE IS POWER

Epiloog

William Friedman (1891–1969) studeerde genetica aan Cornell University24 voor hij bij de U.S. Army aan de slag ging als cryptoloog. Het mag dan ook niet verbazen dat hij een tekening van een zonnebloem gebruikte om te illustreren hoe je woorden kunt verbergen met Baconversleuteling.

zonnebloem
Tekening van een zonnebloem waarin een aantal Bacon-gecodeerde woorden verborgen zitten (Bacon Cipher Collection, Manuscripts and Archives Division, New York Public Library).
zonnebloem
Negen woorden die aan de hand van Baconversleuteling in de tekening van een zonnebloem verborgen zitten. Er zitten woorden verborgen in de bloem (Shakespeare), in de bladeren (Burton, Anat, Melan, Peele, Spenser, Marlowe, Greene) en in de wortels (Bacon). De handgeschreven en getekende uitleg van Friedman maakt het nog altijd niet makkelijk om de code te ontcijferen. (Bacon Cipher Collection, Manuscripts and Archives Division, New York Public Library).

Het wordt nog ingewikkelder als we naar deze afbeelding van een kasteel kijken.

kasteel
Tekening van een kasteel waarin met Baconversleuteling een geheime boodschap verstopt zit.

Dit is niet makkelijk te ontcijferen, zelfs als je weet dat er een gecodeerd bericht in verstopt zit. De stenen met en zonder schaduw coderen deze tekst:

My business is to write prescriptions
And then to see my doses staken
But now I find I spend my time
Endeavoring to out-Bacon Bacon

Tot slot geeft het bijschrift aan de onderkant van deze muziekpartituur weg dat er een geheime boodschap in verstopt zit die met behulp van Baconversleuteling kan ontcijferd worden.

muziek
Muziekpartituur waarin met Baconversleuteling een geheime boodschap verstopt zit.

Deze keer gaf Friedman geen tips weg. Zodra je echter doorhebt dat sommige muzieknoten een intact stokje hebben (klasse $$a$$) en andere een onderbroken stokje (klasse $$b$$), duurt het niet lang om de geheime boodschap te ontcijferen: ENEMY ADVANCING RIGHT / WE MARCH AT DAYBREAK.

Epiloog

France is Bacon
France is Bacon.

Bronnen