Elke taal heeft bepaalde kenmerken. Sommige letters komen
meer voor dan andere letters. Bepaalde combinaties van tekens komen niet voor,
weinig voor of juist vaak voor. Kortom, elke taal heeft zo zijn eigen
statistische wetmatigheden.
Een goed geëncrypte tekst (cipher text) daarentegen laat
chaos zien. De eerste letter ‘a’ van de oorspronkelijk tekst is bijv. vervangen
door ‘Z’ en de tweede letter ‘a’ door ‘%’. Voor de substitutie staan 256
karakters ter beschikking. In ieder geval: de confusion (Shannon) moet maximaal zijn.
In de symmetrische
cryptografie gebruik je één-en-de-zelfde sleutel om te encrypten en te
decrypten (en dus ook hetzelfde wachtwoord). Het volgende laat zien hoe dat op byte-niveau gaat:
origineel
01011100
92
sleutel 00101011 43
geheim 01110111 135
sleutel
00101011
43
origineel 01011100 92
Bij de bit-presentatie wordt 2 keer XOR* gebruikt. Bij de ASCII-waarden wordt voor encryptie opgeteld en voor decryptie
afgetrokken**.
Bij AES (Advanced Encryption Standard) bestaat de sleutel
(blockcipher) uit 16 bytes. Het proces gaat als volgt: de sleutel wordt
berekend, de eerst volgende 16 bytes van de (geheime) tekst worden versleuteld
resp. ontsleuteld, er wordt een nieuwe sleutel gegenereerd, de volgende 16
bytes….. En zo schuiven we door de originele tekst of de geheime tekst.
De input voor de sleutel is:
1.
Het (geheime) wachtwoord (hooguit 16 bytes).
2.
De tijd in secondes en millisecondes, gemeten
vanaf 1 jan. 1970 en een random getal. Het betekent wel, dat als je een tekst 2
keer encrypt de resultaten zeer verschillend zijn. Deze data (nonce) zijn niet
geheim. Ze staan leesbaar bovenaan in het document met de geheime tekst. Bij
het ontcijferen worden deze data eerst ingelezen.
3.
Het bloknummer***. Het eerste ‘blok’ –een stukje
tekst van 16 bytes- heeft nummer 0, het tweede 1 etc. Zelfs een verschil van 1
bit levert al (ceteris paribus) een heel andere sleutel op! Dat geldt trouwens ook
voor de kleinste verandering in het wachtwoord. Daarmee is aan de eis van diffusion (Shannon) voldaan.
Per aangemaakte sleutel gebeurt veel: er wordt geroteerd, geschoven en
gemixt, er wordt gesubstitueerd (m.b.v. de look-up table van S-box) en er wordt
veel gewerkt met XOR. Een volledig deterministisch
proces dus. Maar kun je dan ook terugredeneren en bij het wachtwoord uitkomen? Praktisch
onmogelijk, alleen al vanwege de vele XOR’s (ik kom op 1136 per sleutel). Wat gaat er bijv. aan een 1
vooraf? 1 XOR 0 of 0 XOR 1? En wat gaat er dan weer vooraf aan die nullen en
énen?
*XOR=eXclusief or. Alleen
0 òf 1 en 1 òf 0 leveren 1 op.
**Levert optelling 300 op
dan 256 ervan aftrekken en de rest nemen. 300 mod 256= 44 en bijv. -5 mod 256=
251 (-5= -1.256 + 251).
***Voor data (nonce) en
bloknummers zijn 2x8 bytes gereserveerd. Dit totaal wordt het counterblock
genoemd.
rkh, 24-12-2018