Base64: geen encryptie
Stel: iemand stuurt je SGV5LCBnZWhlaW0h. Dat ziet eruit als een
code. Het is ook een code — maar er is geen sleutel, geen wachtwoord, geen
geheim. Iedereen kan het in één klik terugdraaien. Dit is het verschil
tussen anders opschrijven en echt verbergen,
en dat verschil is de reden dat dit hoofdstuk eerst komt.
Woorden die je zo nodig hebt
- Byte
- Alles in een computer — een letter, een pixel, een noot in een liedje —
is uiteindelijk een getal van 0 tot 255. Zo'n getal heet een byte. De
letter
Ais byte 65, een spatie is 32. - Coderen
- Dezelfde informatie op een andere manier opschrijven. Zoals "vijf" en "5" en "V" hetzelfde getal zijn. Er gaat niets verloren en er wordt niets verborgen.
- Base64
- Een manier om bytes op te schrijven met alleen letters, cijfers,
+en/. Elke drie bytes worden vier tekens. Daardoor wordt alles een derde langer. In een webadres neemt men een variant met-en_, omdat+en/daar al iets anders betekenen. - Hexadecimaal
- Nog een manier om bytes op te schrijven, nu met de cijfers 0–9 en de
letters a–f. Elke byte wordt twee tekens:
41is de letterA. Je ziet dit straks in de demo.
Waarom bestaat dat dan?
Vroeger konden e-mailprogramma's alleen gewone tekst versturen. Stuurde je een foto mee, dan kwam die aan de andere kant beschadigd aan, omdat er bytes in zaten die de mailserver niet begreep. De oplossing: zet die bytes om in tekens die elk programma wél begrijpt, en draai het aan de andere kant terug. Dat is base64.
Alles wat op een computer staat, kan je in base64 zetten: een foto, een liedje, een PDF, een heel programma. Wat eruit komt is gewone tekst — letters, cijfers en een paar leestekens, meer niet. En tekst kan je overal kwijt.
In een webadres. Als bijlage bij een mail. In een berichtje dat je gewoon
selecteert, kopieert en ergens anders plakt. Onderweg gaat er niets stuk, want
geen enkel programma gaat aan een A of een 7 zitten
prutsen. Met rauwe bytes loopt dat wél mis: één regeleinde dat onderweg
omgezet wordt, of één byte die als "hier stopt het bestand" gelezen wordt, en
je foto is onherstelbaar. Dat is de hele afweging — je bestand wordt een derde
langer, en in ruil overleeft het elke reis.
Daarom zit het vandaag nog overal: in de foto op je identiteitskaart als die uitgelezen wordt, in de sleutels die je straks zelf gaat maken, en in elke bijlage die je meestuurt met een mail.
Probeer het zelf
Alles gebeurt in je browser. Er wordt niets naar de server gestuurd.
- Klik op Naar base64. Je ziet je zin als bytes én als base64.
- Plak het base64-resultaat in het vak en klik Terug naar tekst. Je zin komt terug. Zonder wachtwoord.
- Plak nu
SGV5LCBnZWhlaW0hen klik Terug naar tekst.
Kijk naar de regel Bytes (hex). Dat zijn de echte getallen waaruit je zin bestaat. Base64 en hexadecimaal zijn allebei gewoon een manier om die getallen op te schrijven — zoals je een getal in cijfers of in woorden kan schrijven. Geen van beide verbergt iets.
De test die je vanaf nu altijd kan doen
Zie je iets dat er onleesbaar uitziet, stel dan één vraag: is er een sleutel nodig om het terug te draaien? Nee? Dan is het codering, en dan is het niet geheim, hoe raar het er ook uitziet. Ja? Dan pas is het encryptie. Alles wat volgt op deze site gaat over dat "ja".
Je gaat dit de hele site terugzien. Bijna elk hoofdstuk hierna toont zijn resultaat in base64: het versleutelde pakket in hoofdstuk 4, je publieke sleutel in hoofdstuk 6, het bericht dat je via WhatsApp verstuurt in hoofdstuk 8.1, je pasfoto als je ze uit de chip haalt in hoofdstuk 8.2. Telkens om de reden hierboven: er moeten bytes door iets dat alleen tekst aankan. En telkens geldt hetzelfde — wat daar geheim is, zit in de bytes. Nooit in de base64 eromheen.
Dit is wiskunde: tellen in een ander grondtal
Jij telt in tientallen: 10 cijfers, van 0 tot 9. Een computer telt in tweeën: 0 en 1. Hexadecimaal telt in zestientallen, base64 in vierenzestigtallen. Het is allemaal hetzelfde getal, anders geschreven. De vraag "hoeveel tekens heb je nodig om een getal op te schrijven?" is een kwestie van logaritmen — en dat is precies waarom 3 bytes altijd 4 base64-tekens worden: 224 = 644. Reken maar na.