De beveiliging van Cryptile, laag voor laag
Cryptile versleutelt elk bestand, elke miniatuur en elke index met AES-256-GCM, met sleutels die op je telefoon worden gemaakt uit het patroon dat je tekent. Er is geen account en geen server, en de ontwikkelaar heeft nooit sleutels.
Download Cryptile in de App Store
De eenvoudige samenvatting staat op de beveiligingspagina.
Wat moet ik weten?
- Je patroon is de bron van elke sleutel. Zonder het patroon wordt niets leesbaars bewaard.
- Groottes en aantallen kluizen zijn vervaagd. Bestanden worden opgevuld en lokplekken verbergen hoeveel kluizen er zijn.
- Je kunt het controleren. De versleutelingskern is gepubliceerd zodat iedereen hem kan controleren (source-available), met een dreigingsmodel en testvectoren: github.com/jasonbrelsford/cryptile-core.
Hoe wordt een patroon een sleutel?
- Het patroon wordt vastgelegd als de rastergrootte, gevolgd door de cellen die je aanraakte, op volgorde.
- Het wordt gemengd met een toestelgeheim van 32 bytes dat alleen voor dit toestel in de Sleutelhanger van de iPhone staat.
- PBKDF2-HMAC-SHA512 draait er 600.000 keer overheen. Elke gok kost evenveel werk.
- HKDF-SHA256 splitst het resultaat in een opzoeksleutel en een omhulsleutel.
- De opzoeksleutel geeft de naam van het indexbestand van de kluis. De omhulsleutel opent het.
In de index zit de willekeurige 256-bit hoofdsleutel van de kluis. HKDF leidt daaruit aparte subsleutels af voor bestanden, miniaturen en de index. Geen sleutel wordt voor twee doelen gebruikt.
Hoe worden bestanden versleuteld?
Kleine items, zoals miniaturen en de index, worden in één stuk verzegeld met AES-256-GCM en een willekeurige nonce.
Grote bestanden gebruiken een STREAM-indeling in blokken van 1 MB. Elk blok heeft een eigen nonce en legt zijn positie vast en of het het laatste is. Blokken wegknippen, herschikken of verwisselen laat de ontsleuteling mislukken.
GCM authenticeert ook elke header, dus een gewijzigd bestand wordt geweigerd in plaats van getoond.
Hoe worden groottes en aantallen kluizen verborgen?
Elke kleine blob en elk laatste bestandsblok wordt opgevuld tot een veelvoud van 64 KiB. Wie kopieert, ziet ruwe groottes, geen exacte.
Er is geen kluislijst. De app houdt minstens 8 plekken in de vorm van een index aan, echt en lokplek, en schudt de lokplekken bij elke schrijfactie opnieuw. Een patroon dat geen plek aanwijst, opent een lege kluis.
Hoe werkt herstel?
Elke kluis krijgt een herstelzin van 9 woorden, goed voor 96 bits willekeur. Die opent een aparte herstelkopie van de kluis, verzegeld onder een sleutel die uit de zin wordt gemaakt.
De iCloud-back-up spiegelt de versleutelde bestanden zoals ze zijn. Het toestelgeheim zit er standaard niet in, dus met alleen een back-up kun je geen patronen raden.
Wat is versleuteld, en wat niet?
Versleuteld: foto's, video's, bestanden, notities, miniaturen, namen, mappen, favorieten, herkende tekst en fotolocaties. Het kleine bestand dat lokplekken en de tellingen van het gratis abonnement bijhoudt, is verzegeld met een toestelsleutel.
Niet versleuteld door Cryptile:
- Instellingen. De tijd voor automatisch vergrendelen, de sorteervolgorde en de back-upschakelaar bevatten geen geheimen.
- Gedeelde items die nog moeten worden toegevoegd. Die staan onder de bestandsbeveiliging van iOS tot je een kluis opent.
- De totale grootte van de container en de schrijftijden. Een kluis van 10 GB ziet er niet uit als 10 MB.
- Alles wat je exporteert. Een kopie die je in Foto's of Bestanden bewaart, staat buiten de kluis.
Waartegen beschermt dit?
- Iemand die de bestanden van de app kopieert zonder je Sleutelhanger. Die krijgt versleutelde tekst en kan geen patronen proberen.
- Apple, of een datalek bij Apple. iCloud bevat versleutelde tekst en geen sleutels.
- Knoeien. Gewijzigde of herschikte gegevens laten zich niet ontsleutelen.
- Ons. We draaien geen server en hebben geen sleutels, dus we kunnen geen toegang resetten.
Waartegen beschermt dit niet?
- Korte patronen. Een patroon is zwakker dan een wachtwoordzin. Met je bestanden en je Sleutelhanger valt een patroon van 6 cellen op een raster van 4×4 binnen minuten op een GPU. Gebruik 8 of meer cellen.
- Malware op een ontgrendelde telefoon. Code die het geheugen leest terwijl een kluis open is, valt buiten wat een app kan doen.
- Iemand die meekijkt als je tekent. Teken waar niemand je hand kan zien.
- De telefoon en de zin kwijtraken. Dan is de kluis weg. Er is geen reset.
Het paniekpatroon in Plus vernietigt het toestelgeheim, dus geen kluis op de telefoon gaat open tot hij is hersteld.