maandag, december 24, 2018

AES: Hoe uit determinisme chaos wordt


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


donderdag, december 06, 2018

Nepnieuws

We lezen dat Brussel zich wapent tegen nepnieuws (VK, Ten Eerste 6/12). Dus aan Brussel de schone taak te bewijzen, dat het nieuws nep is én dat het nieuws echt nieuw is. Dat laatste lijkt mij een probleem.
Brussel wil vooroordelen bestrijden. Maar voor een bevooroordeeld persoon is nepnieuws nu juist geen nieuws. Hij weet het immers al!

rkh, 06-12-2018

zaterdag, december 01, 2018

Een hacker haalt de miner nooit in

Zo ongeveer om de 10 minuten wordt een blok aan de blockchain toegevoegd. Dit nieuwe blok bevat de hash van het laatste blok van de blockchain. In de hash van het nieuwe blok is dus de hash van het laatste blok van de blockchain verdisconteerd. Zo zijn de blokken aan elkaar geketend. Hash op hash.

Het berekenen van de hash van een blok is een kwestie van secondes, maar om de juiste hash te vinden heb je –naar mijn inschatting- momenteel zo 500 uur processortijd nodig. Men spreekt van een Proof of Work. Waarom is deze energie verslindende hindernis opgeworpen? Twee redenen.

De miner die wint krijgt 12.5 bitcoin. Gaat deze creatie van bitcoins te snel dan krijg je inflatie en werkt het systeem niet. Ten tweede: je moet het hackers moeilijk maken. Dat doe je dus met deze Proof of Work. Hackers moeten zich net als de miners inspannen.

Is de hacker bezig met het vinden van de nieuwe hash van het laatste blok van de blockchain (alleen zo kan hij sporen uitwissen) dan zijn miners alweer bezig met het creëren van een nieuw blok dat de niet-gecorrumpeerde hash van het laatste blok van de blockchain bevat.
Kortom, een hacker kan het nooit van de miners winnen. Althans, dit geldt in de wereld van bitcoins.

rkh, 01-12-2018