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 (sleutel.txt9):

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. Het is echter toegelaten om maximaal vier a's op het einde van de cijfertekst weg te laten. Dit is dus ook een geldige cijfertekst voor de klare tekst KNOWLEDGEISPOWER (vier a's op het einde weggelaten):

abaababbaaabbabbabaaababaaabaaaaabbaabbaaabaaabaaabaaababbbaabbabbabaaaabaab

Als de lengte van de cijfertekst geen veelvoud van vijf is, dan kan die dus achteraan aangevuld worden met één tot vier a's om tot een lengte te komen die wel een veelvoud van vijf is. Daarna kunnen we de cijfertekst terug decoderen door elk patroon van vijf a's en b's te vervangen door het corresponderende symbool in de klare tekst.

Een gecodeerd bericht dat voorgesteld wordt door een reeks die enkel uit a's en b's bestaat, zou direct laten opvallen dat er Baconversleuting gebruikt werd. Om te verdoezelen dat er een gecodeerd bericht in de voorstelling zit, kunnen $$a$$ en $$b$$ ook twee verschillende klassen voorstellen: letters die er anders uitzien (verschillende lettertypes; vette en gewone tekst), verschillende soorten muzieknoten, of personen die op een andere manier naar de camera kijken.

In deze opgave zullen we voor de klassen $$a$$ en $$b$$ werken met twee verschillende groepen karakters in de cijfertekst. Als we kleine letters gebruiken voor klasse $$a$$ en hoofdletters voor klasse $$b$$, dan kan de klare tekst KNOWLEDGEISPOWER bijvoorbeeld gecodeerd worden als:

tZsyFqBHyprHDoMVhVzkhVfGgeyVqvvjbDTfkRLmsgEgkvKforNmjiXhRLDwgSKnMFpQutrcCbeUwrzf

Als klasse $$a$$ personen voorstelt die recht naar de camera kijken (=) en klasse $$b$$ personen die naar links (<) of naar rechts (>) kijken, dan kan dezelfde klare tekst bijvoorbeeld gecodeerd worden als:

=>==>=>>===>>=>>=>===<=<===<=====<<==>>===>===>===>===<=<<<==<<=<<=<====>==<====

Definieer een klasse Bacon om codecs voor te stellen waarmee berichten kunnen gecodeerd en gedecodeerd worden volgens een Baconversleuteling met een gegeven sleutel. Bij het aanmaken van een codec (Bacon) moet de locatie (str) van een tekstbestand met de sleutel van het geheimschrift doorgegeven worden. Op een codec (Bacon) moeten minstens de volgende methoden kunnen aangroepen worden:

Deze klasse en al haar methoden mogen ervan uitgaan dat er enkel geldige sleutels, klare teksten, cijferteksten aan doorgegeven worden, zonder dat dit expliciet moet gecontroleerd worden.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het tekstbestand sleutel.txt10 zich in de huidige directory bevindt.

>>> codec = Bacon('sleutel.txt11')

>>> codec.opvallend_coderen('F')
'aabab'
>>> codec.opvallend_coderen('W')
'babaa'
>>> codec.opvallend_coderen('WFF')
'babaaaababaabab'
>>> codec.opvallend_coderen('KNOWLEDGEISPOWER')
'abaababbaaabbabbabaaababaaabaaaaabbaabbaaabaaabaaabaaababbbaabbabbabaaaabaabaaaa'

>>> codec.opvallend_decoderen('aabab')
'F'
>>> codec.opvallend_decoderen('bab')
'W'
>>> codec.opvallend_decoderen('babaaaababaabab')
'WFF'
>>> codec.opvallend_decoderen('abaababbaaabbabbabaaababaaabaaaaabbaabbaaabaaabaaabaaababbbaabbabbabaaaabaab')
'KNOWLEDGEISPOWER'

>>> codec.verborgen_coderen('F')
'chLqM'
>>> codec.verborgen_coderen('W', a='=', b='<>')
'<=>=='
>>> codec.verborgen_coderen('WFF')
'RkUkjvvVcNuqKkE'
>>> codec.verborgen_coderen('KNOWLEDGEISPOWER')
'tZsyFqBHyprHDoMVhVzkhVfGgeyVqvvjbDTfkRLmsgEgkvKforNmjiXhRLDwgSKnMFpQutrcCbeUwrzf'
>>> codec.verborgen_coderen('KNOWLEDGEISPOWER', a='=', b='<>')
'=>==>=>>===>>=>>=>===<=<===<=====<<==>>===>===>===>===<=<<<==<<=<<=<====>==<===='

>>> codec.verborgen_decoderen('chLqM')
'F'
>>> codec.verborgen_decoderen('<=>', a='=', b='<>')
'W'
>>> codec.verborgen_decoderen('RkUkjvvVcNuqKkE')
'WFF'
>>> codec.verborgen_decoderen('tZsyFqBHyprHDoMVhVzkhVfGgeyVqvvjbDTfkRLmsgEgkvKforNmjiXhRLDwgSKnMFpQutrcCbeU')
'KNOWLEDGEISPOWER'
>>> codec.verborgen_decoderen('=>==>=>>===>>=>>=>===<=<===<=====<<==>>===>===>===>===<=<<<==<<=<==<====>==<', a='=', b='<>')
'KNOWLEDGEISPOEER'

Epiloog

William Friedman (1891–1969) studeerde genetica aan Cornell University12 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