AES-256-GCM en 600.000 PBKDF2-rondes uitgelegd
Wat de getallen in de functielijst van een fotokluis echt betekenen, en een eerlijk verhaal over wat ze niet afdekken.
AES-256-GCM is de versleutelingsmethode AES met een sleutel van 256 bits, gebruikt op een manier die GCM heet. Let vooral op het GCM-deel: het controleert de gegevens en versleutelt ze, zodat een bestand waarmee is geknoeid niet opent in plaats van stilletjes verkeerd terug te komen. PBKDF2 met 600.000 rondes zet je wachtwoord bewust langzaam om in een sleutel, zodat elke gok van een aanvaller 600.000 rondes werk kost. Dat getal is een openbare aanbeveling van OWASP, niet van ons.
Niets hiervan beschermt een telefoon die wordt gehackt terwijl de kluis open is, of een wachtwoord dat iemand anders kent. De details en de grenzen staan hieronder.
Functielijsten van fotokluizen staan vol getallen: AES-256, GCM, 600.000 rondes, PBKDF2. Ze worden gepresenteerd alsof ze de vraag beantwoorden, en de meeste lezers slaan ze heel begrijpelijk over. Ze verdienen tien minuten van je tijd. Als je weet wat elk getal doet, kun je een concrete bewering onderscheiden van een die alleen indrukwekkend klinkt. Deze pagina legt elke term in gewone taal uit. Daarna, in deel 8, staat waar versleuteling niet tegen beschermt. Juist dat deel is van belang voor je keuze.
1. De korte versie
| Term | Wat het doet |
|---|---|
| AES | De versleutelingsmethode. Een openbare standaard om gegevens met een sleutel te versleutelen. |
| 256 | De sleutellengte, in bits. Groot genoeg dat het uitproberen van elke sleutel niet haalbaar is. |
| GCM | Een manier om AES te gebruiken die ook controleert op knoeien. Gewijzigde gegevens worden opgemerkt in plaats van stilletjes geaccepteerd. |
| Nonce | Een getal dat bij elke versleuteling één keer wordt gebruikt. Het mag nooit herhaald worden met dezelfde sleutel. |
| PBKDF2 | Het proces dat een wachtwoord omzet in een sleutel, bewust langzaam. |
| 600.000 rondes | Hoe langzaam. Elke gok van een aanvaller kost 600.000 rondes werk. |
| Salt | Bijgemengde willekeurige gegevens, zodat aanvallers niet vooraf antwoorden kunnen klaarzetten en hergebruiken voor alle gebruikers. |
2. Wat AES-256 is
AES staat voor Advanced Encryption Standard. Het is een versleutelingsmethode die in 2001 is gepubliceerd door het Amerikaanse National Institute of Standards and Technology, na een openbare wedstrijd die een paar jaar duurde. Ze is niet geheim en niemand is eigenaar. Het ontwerp is openbaar. Experts aan universiteiten en in het bedrijfsleven bestuderen haar al meer dan twintig jaar en hebben geen praktische manier gevonden om de volledige methode te kraken.
De 256 is de sleutellengte in bits. Elke mogelijke sleutel van die lengte uitproberen betekent 2 tot de macht 256 mogelijkheden doorzoeken. Dat is geen kwestie van wachten op snellere computers. Het ligt ver buiten alles wat gewone computers ooit kunnen bereiken. Daarom is de methode zelf in de praktijk bijna nooit het deel dat faalt.
Juist daarom zegt ‘wij gebruiken AES-256’ minder dan het lijkt. Het is zo’n beetje het minimum. De interessante vragen zijn wat er wordt versleuteld, hoe de methode wordt gebruikt en hoe de sleutel wordt gemaakt.
3. Wat GCM toevoegt
Versleuteling op zichzelf houdt gegevens geheim: zonder de sleutel zijn ze niet te lezen. Op zichzelf belooft ze niet dat de gegevens intact zijn. Ze kan je niet vertellen dat wat je opent ook is wat erin is gestopt.
Dat gat is echt. Bij een methode die niet controleert, kan iemand die het opgeslagen bestand kan veranderen, de versleutelde gegevens wijzigen. Openen zou dan andere, verkeerde gegevens opleveren, zonder foutmelding. Je krijgt gegevens terug. Het zijn alleen niet de gegevens die erin gingen, en niets vertelt je dat.
GCM voegt de controle toe. Naast de versleutelde gegevens maakt het een controlewaarde, en die waarde wordt elke keer gecontroleerd als de gegevens worden geopend. Uit ons eigen beveiligingsdocument:
“Eén gewijzigde byte op de schijf laat de ontsleuteling duidelijk mislukken, in plaats van subtiel verkeerde platte tekst op te leveren. Daardoor betekent ‘ontsleuteld’ hetzelfde als ‘ongewijzigd sinds de versleuteling’.”
Dit is het nuttigste om naar te zoeken in een functielijst, omdat je daar precisie ziet. ‘AES-256’ noemt een methode. ‘AES-256-GCM’ noemt een methode en een manier om die te gebruiken, en juist daar zit de controle op knoeien, of niet.
4. Nonces en de klassieke fout
Elke versleuteling in een GCM-systeem gebruikt een nonce, een getal dat één keer wordt gebruikt. Het hoeft niet geheim te zijn. Het moet uniek zijn voor een bepaalde sleutel.
Herhaal je een nonce met dezelfde sleutel, dan valt de bescherming van GCM ernstig weg. Dit is geen zeldzaam randgeval. Het is de meest voorkomende manier waarop echte systemen met GCM zijn gekraakt, en het komt doordat er bij het bouwen bochten zijn afgesneden, niet door een zwakte in AES.
Er zijn twee degelijke manieren om ervoor te zorgen dat een nonce nooit wordt herhaald. De ene is een nieuw willekeurig getal voor elke versleuteling. Dat doet Obscura Photo Vault voor losse bestanden: elke keer een nieuw willekeurig getal van 96 bits, met een controlewaarde van 128 bits. De andere is een teller die aantoonbaar nooit wordt herhaald. Die gebruikt ons formaat voor grote video’s. Het combineert een willekeurig getal dat per bestand wordt gekozen met het nummer van het stuk, zodat geen twee stukken in welk bestand dan ook dezelfde nonce hebben.
Geen van beide is juister dan de andere. Waar het om gaat, is dat de app bewust een keuze heeft gemaakt. Dat is het soort ding dat een gepubliceerd ontwerpdocument laat zien en een functielijst niet.
5. Je wachtwoord is de zwakke schakel
Een sleutel van 256 bits heeft 256 bits willekeur. Je wachtwoord niet. Zelfs een goede wachtzin heeft misschien 60 tot 80 bits, en een gewoon wachtwoord veel minder. Als het wachtwoord direct als sleutel werd gebruikt, zou de enorme sleutellengte niets uitmaken. Een aanvaller zou wachtwoorden raden, geen sleutels.
Het proces dat een wachtwoord omzet in een sleutel, is de brug. PBKDF2 neemt het wachtwoord en een salt en haalt ze steeds opnieuw door een hashfunctie, een vast aantal keren, om een sleutel te maken. Het herhalen dient één doel: kosten. Jij maakt de sleutel één keer per ontgrendeling en merkt nauwelijks de seconde die dat kost. Een aanvaller die miljoenen gokken test, betaalt die kosten bij elke gok.
Dit is het getal om naar te zoeken, en het getal dat het vaakst wordt weggelaten. Een app kan naar waarheid zeggen dat hij AES-256 gebruikt en tegelijk je wachtwoord in één stap omzetten in een sleutel. Dan staat hij open voor precies de offline raadaanval die dit proces moet voorkomen.
6. Waarom 600.000
Het getal is niet willekeurig, en het komt niet van ons. De OWASP Password Storage Cheat Sheet is de meest gebruikte openbare bron hiervoor. Die beveelt PBKDF2 met HMAC-SHA-256 aan met 600.000 rondes of meer. Dat is het aantal dat Obscura Photo Vault gebruikt voor kluiswachtwoorden.
Er horen twee eerlijke kanttekeningen bij.
Het is een bewegend doel. Aanbevolen aantallen rondes gaan omhoog naarmate hardware sneller wordt. Het huidige getal komt uit tests met de grafische chips van nu. Een getal dat een paar jaar geleden prima was, is dat nu niet meer, en het getal van nu blijft ook niet altijd goed. Zie een gepubliceerd aantal rondes als een bewering met een datum eraan.
Het vermenigvuldigt je wachtwoord. Het vervangt het niet. Rondes maken elke gok veel duurder. Ze veranderen niet hoeveel gokken er nodig zijn. Een wachtwoord uit een kleine set mogelijkheden is na 600.000 rondes nog steeds zwak, omdat een aanvaller alleen die kleine set hoeft af te werken. Het proces koopt tijd in verhouding tot hoe moeilijk je wachtwoord al te raden was.
Het praktische advies voor elke versleutelde kluis is dus saai en juist: gebruik een lange wachtzin van losse woorden en schrijf hem op een veilige plek op. In een app waarin de sleutel echt uit je wachtwoord wordt gemaakt, is die opgeschreven kopie de enige kopie die bestaat. Daarover gaat onze gids wat er gebeurt als je je kluiswachtwoord vergeet.
7. Salts
Een salt is willekeurige data die met het wachtwoord wordt gemengd voordat het een sleutel wordt. Hij wordt naast de versleutelde gegevens bewaard. Hij is niet geheim, en dat hoeft ook niet.
Zijn taak is voorkomen dat aanvallers zich vooraf voorbereiden. Zonder salts zou een aanvaller één keer de sleutels voor een lijst met veelgebruikte wachtwoorden kunnen berekenen, en die lijst daarna tegen elke gebruiker van een app kunnen inzetten. Met een unieke, willekeurige salt per kluis moet dat werk voor elk doelwit opnieuw vanaf nul worden gedaan. Werk dat voor alle gebruikers tegelijk geldt, is dan niet meer mogelijk.
Obscura Photo Vault gebruikt per kluis een willekeurige salt van 32 bytes, bewaard in de eigen header van het kluisbestand.
8. Waar dit allemaal niet tegen beschermt
Alles hierboven gaat over gegevens in rust: bestanden die in de opslag staan en niet worden gebruikt. Dat is echte, nuttige bescherming. Maar het is ook beperkt. Deel 11 van ons beveiligingsdocument noemt wat erbuiten valt. In gewone woorden:
- Een gehackte telefoon terwijl de kluis open is. Om je een foto te laten zien, moet de app hem ontsleutelen. De sleutel en de leesbare foto staan dus in het geheugen. Alles wat op dat moment binnen de app draait, kan bij allebei. Geen versleuteling op app-niveau lost een gehackte telefoon op.
- Iedereen die je wachtwoord heeft. Versleuteling kan de eigenaar niet onderscheiden van iemand die meekeek tijdens het typen, of aan wie het is verteld.
- Schermafbeeldingen, schermopnamen en meekijken over je schouder. Wat op het scherm staat, is al ontsleuteld. Dit valt buiten wat versleuteling dekt.
- Kopieën die je elders hebt gemaakt. Het origineel dat nog in je filmrol staat, de versie die je in een bericht hebt gestuurd, de reservekopie in de cloud van voordat je hem verplaatste. Eén kopie versleutelen doet niets met de andere.
- Het feit dat de app bestaat. Versleuteling verbergt de inhoud. Ze verbergt niet dat er iets te verbergen is.
Waarom we dit noemen op een pagina die verder vooral gaat over hoe goed de bouwstenen zijn: bij een echte fout is de versleutelingsmethode bijna nooit wat er misging. Meestal is het een van de vijf hierboven.
9. Over ‘militaire kwaliteit’
De term heeft geen technische betekenis. Meestal wordt AES bedoeld, een openbare standaard die iedereen mag gebruiken en die niet voor het leger is gereserveerd. Elk groot besturingssysteem, elke browser en elke berichtenapp gebruikt hem.
Het probleem is niet dat de term onwaar is. Het probleem is dat hij niets belooft. Hij noemt geen methode, geen manier om die te gebruiken, geen sleutellengte en geen proces om een wachtwoord in een sleutel om te zetten. Een app die elk bestand versleutelt, kan hem dus naar waarheid gebruiken, en een app die alleen zijn instellingen versleutelt ook.
Dit is geen klacht over de term zelf. Een beschrijving kan hem gebruiken en je toch iets vertellen. Wat een bewering bruikbaar maakt voor iemand die hem wil controleren, is wat erna komt: de methode, de modus, het sleutelproces, het aantal rondes en wat er wordt gedekt. Een beschrijving die bij de term ophoudt, heeft niets beloofd. Een beschrijving die die dingen daarna noemt, kun je controleren, ongeacht waarmee ze begon.
10. Veelgestelde vragen
Wat betekent AES-256-GCM?
AES is een openbare versleutelingsmethode. AES-256 is de versie met een sleutel van 256 bits. GCM is een manier om de methode te gebruiken die ook controleert of er niet met de gegevens is geknoeid. Die controle is in de praktijk het belangrijkste deel. Een bestand dat is gewijzigd, opent niet, in plaats van stilletjes als verkeerde data te openen.
Wat is het verschil tussen AES-256 en AES-256-GCM?
De tweede noemt hoe de methode wordt gebruikt, niet alleen de methode. GCM voegt een controle op knoeien toe, zodat gewijzigde gegevens bij het openen worden opgemerkt in plaats van stilletjes verkeerd terug te komen.
Waarom gebruiken fotokluis-apps 600.000 PBKDF2-rondes?
Een wachtwoord is kort en te raden. Een versleutelingssleutel niet. Het wachtwoord moet dus in een sleutel worden omgezet met een proces dat bewust traag is. Elke ronde voegt werk toe aan elke gok van een aanvaller. 600.000 rondes is het aantal dat de OWASP Password Storage Cheat Sheet aanbeveelt voor deze methode, PBKDF2 met HMAC-SHA-256.
Is AES-256-versleuteling veilig?
AES-256 is een openbare standaard. Experts bestuderen hem al meer dan twintig jaar en hebben geen praktische manier gevonden om de volledige methode te kraken. In echte apps is de methode zelden het zwakke punt. Een fout in hoe hij wordt gebruikt, een te raden wachtwoord of iemand die bij de telefoon komt terwijl die ontgrendeld is, zijn allemaal waarschijnlijkere problemen.
Is AES-256 beter dan AES-128?
De grotere sleutel geeft meer marge. Beide worden als veilig beschouwd tegen het uitproberen van elke sleutel met de methoden en hardware van nu. In de praktijk is het heel onwaarschijnlijk dat de keuze tussen de twee bepaalt of een app standhoudt.
Wat betekent ‘versleuteling van militaire kwaliteit’?
Het heeft geen technische betekenis. Meestal wordt AES bedoeld, een openbare standaard die iedereen mag gebruiken en die niet voor het leger is gereserveerd. Omdat de term geen methode, geen modus en geen sleutellengte noemt, kan een app die alles versleutelt hem gebruiken, en een app die bijna niets versleutelt ook.
Kunnen quantumcomputers AES-256 kraken?
De bekende quantumaanpak, het algoritme van Grover, halveert ruwweg de sterkte van een sleutel als deze. Bij een sleutel van 256 bits blijft er dan nog een heel grote marge over. Dat is een van de redenen dat sleutels van 256 bits als verstandige keuze voor de lange termijn worden gezien. Het soort versleuteling waarmee sleutels via internet worden uitgewisseld, heeft een veel groter quantumprobleem dan AES.
Is ontgrendelen met 600.000 rondes traag?
Het duurt op een moderne iPhone ongeveer een seconde, één keer per ontgrendeling. Die ongelijkheid is precies de bedoeling: één keer nauwelijks merkbaar, miljoenen keren verlammend.
Kan ik met meer rondes een zwakker wachtwoord gebruiken?
Nee, en dit is het meest voorkomende misverstand. Meer rondes maken elke gok duurder. Ze verminderen niet hoeveel gokken er nodig zijn voor een zwak wachtwoord. Een kort wachtwoord blijft zwak.
Bronnen
- OWASP Password Storage Cheat Sheet, over de werkfactor van PBKDF2
- NIST FIPS 197, de Advanced Encryption Standard
- Beveiligingsdocument van Obscura Photo Vault, delen 2 tot en met 4 over bouwstenen en sleutelhiërarchie
- Beveiligingsdocument, deel 11, over wat buiten het dreigingsmodel valt
Obscura Photo Vault
Een versleutelde fotokluis voor iPhone. Foto’s en video’s worden op je apparaat versleuteld met AES-256-GCM. Er zijn geen accounts, geen servers en geen analytics, en de app heeft geen netwerkverbinding nodig. Als je je wachtwoord vergeet, kan niemand de inhoud herstellen, ook wij niet.
Bekijk in de App Store →