Hoe LifeVeil je bestanden beschermt
Deze pagina legt in gewone woorden uit wat LifeVeil doet, en ook wat het niet kan. We willen liever dat je de grenzen kent dan dat je vertrouwt op een belofte die te groot is.
In het kort
- Alle versleuteling gebeurt op je telefoon. Er is geen LifeVeil-server en geen account.
- Je bestanden worden versleuteld met een willekeurige sleutel. Alleen je patroon, je herstelzin of je vingerafdruk kan die sleutel ontgrendelen.
- Wij, de ontwikkelaars, hebben nooit je patroon, je zin of je sleutels. We kunnen je bestanden niet openen en we kunnen je patroon niet resetten.
- We gebruiken de versleuteling die in Android zit en de bekende libsodium-bibliotheek. We hebben geen eigen versleuteling geschreven.
- LifeVeil heeft nog geen onafhankelijke beveiligingsaudit gehad.
Van je patroon naar een sleutel
Je tekent een patroon op een raster van 5×5, met minstens 6 punten en geen punt twee keer. LifeVeil maakt van het patroon een sleutel met Argon2id, uit libsodium (versie 1.0.20 op Android).
- Instellingen: 64 MiB geheugen, 3 doorgangen, 1 lane, sleutel van 256 bits.
- Argon2id is met opzet traag en heeft voor elke gok veel geheugen nodig. Daardoor wordt raden met grafische kaarten veel duurder.
- Op onze testtelefoons duurt één keer ontgrendelen ongeveer 0,6 tot 0,9 seconden.
- Het patroon wordt gemengd met een willekeurige apparaatsalt van 16 bytes. De salt wordt in de app bewaard, versleuteld met een sleutel in de Android Keystore, die niet van de telefoon gekopieerd kan worden.
- Er wordt geen kopie van het patroon bewaard. De app controleert een patroon door te proberen de sleutel te ontgrendelen.
- Na 5 verkeerde patronen achter elkaar moet je 30 seconden wachten. Na elke volgende fout wordt de wachttijd verdubbeld, tot 16 minuten.
Hoe bestanden worden versleuteld
- Elke kluis heeft een willekeurige hoofdsleutel van 256 bits. Je patroonsleutel en herstelsleutel "verpakken" (versleutelen) alleen deze hoofdsleutel.
- Bestanden, miniaturen en de lijst van je items (oorspronkelijke bestandsnamen, datums, groottes) worden versleuteld met AES-256-GCM, via de versleuteling die in Android zit. GCM merkt ook op als een bestand is gewijzigd of verwisseld.
- Bestanden in de app hebben willekeurige namen. Grote bestanden worden versleuteld in stukken van 1 MiB, zodat video's afspelen zonder dat er ooit een onversleutelde kopie in de opslag komt.
- Bij JPEG-foto's worden de verborgen gegevens (EXIF, zoals camera en datum) apart bewaard, ook versleuteld.
- Als de app vergrendelt, overschrijft hij de sleutels in het geheugen met nullen.
Herstelzin
- Als je een kluis maakt, kiest de veilige generator voor willekeurige getallen van de telefoon 9 Engelse woorden. Ze komen uit twee lijsten van 1024 gewone woorden, in een van 4 vaste volgordes. Dat is 92 bits aan willekeur. De woorden zijn Engels in elke taal van de app.
- De zin gaat door dezelfde Argon2id-instellingen en ontgrendelt de hoofdsleutel op zichzelf. Hij heeft de apparaatsalt niet nodig, dus hij werkt ook als het patroon niet meer werkt.
- Een kopie van de zin wordt op de telefoon bewaard, twee keer versleuteld: één keer met de hoofdsleutel en één keer met een sleutel uit de Android Keystore. Je kunt hem zien in Instellingen nadat je je patroon opnieuw hebt getekend.
- Als je je patroon wijzigt of de zin gebruikt om weer binnen te komen, krijg je een nieuwe zin. De oude werkt dan niet meer.
Vingerafdruk
Ontgrendelen met vingerafdruk is optioneel. Android controleert de vingerafdruk, niet LifeVeil; de app krijgt je vingerafdruk nooit. Een sleutel in de Android Keystore die alleen direct na een sterke biometrische controle werkt, ontgrendelt de hoofdsleutel. Als iemand een nieuwe vingerafdruk aan de telefoon toevoegt, werkt deze sleutel niet meer en moet je je patroon weer gebruiken.
Back-upbestand
- Een back-up is één
.lvb-bestand. Het bevat je items precies zoals ze al versleuteld zijn, plus twee verpakte kopieën van de hoofdsleutel: één voor het patroon dat je tekende toen je de back-up maakte, en één voor de herstelzin die je toen had. - De patroonkopie gebruikt voor elke back-up een nieuwe willekeurige salt, niet de apparaatsalt. Daardoor kun je de back-up op een nieuwe telefoon openen.
- De header van het bestand is beschermd, zodat wijzigingen of verwisselde delen worden opgemerkt.
- Je kiest zelf waar je het opslaat, via het opslagscherm van Android. Het gaat nooit via ons.
- Om terug te zetten open je het bestand met het bijbehorende patroon of de bijbehorende zin. Daarna teken je een nieuw patroon en krijg je een nieuwe herstelzin.
Andere bescherming in de app
- Screenshots, schermopnamen en het voorbeeld in de lijst met recente apps zijn op elk scherm geblokkeerd.
- Standaard vergrendelt de app zodra je hem verlaat. Je kunt in plaats daarvan 30 seconden of 1 minuut kiezen.
- De eigen cloudback-up van Android en de overdracht van telefoon naar telefoon nemen de gegevens van LifeVeil niet mee. Gebruik in plaats daarvan het back-upbestand.
- De app vraagt niet om toegang tot je locatie, je contacten of "alle bestanden".
- Lege kluis bij onjuist patroon. Een patroon dat geen kluis opent, toont een lege kluis in plaats van een foutmelding. Iemand die je dwingt de app te openen, kan zo niet zien wat er verder is. Mislukte pogingen tellen nog steeds mee, er worden nog steeds indringersfoto's gemaakt en de wachttijden blijven gelden. Je kunt dit uitzetten via Instellingen > Beveiliging > Lege kluis bij onjuist patroon.
AI en het raden van patronen
- AI kan de berekening niet overslaan. Elke gok moet nog steeds Argon2id uitvoeren met 64 MiB geheugen. AI kraakt Argon2id of AES niet, dus geen enkele gok wordt goedkoper.
- Wat AI verandert, is de volgorde van de gokken. AI kan leren welke vormen mensen graag gebruiken (letters, vierkanten, favoriete beginhoeken) en die eerst proberen. AI kan ook helpen een patroon af te lezen van een video die over je schouder is gemaakt, of van vegen op het scherm.
- De verdediging zit dus in het patroon, niet in de berekening. De sterktemeter waarschuwt voor veelgebruikte vormen. Patroon + pincode voegt een pincode van 4–6 cijfers toe, zodat een patroon dat op video is gezien niet genoeg is. Patroonlijn verbergen laat geen lijn achter om te filmen. De apparaatsalt in de Android Keystore voorkomt raden buiten de telefoon.
Grenzen die je moet kennen
Geen enkele app kan tegen alles beschermen. Dit zijn de eerlijke grenzen van LifeVeil.
Eenvoudige patronen zijn te raden
Korte of veelgebruikte vormen (een L, een Z, een rechte lijn) zijn te raden door je te bekijken, door vegen op het scherm, of in een paar pogingen. Echte patronen zijn veel makkelijker te raden dan het aantal mogelijke patronen doet denken. Gebruik meer punten en meer bochten. De app waarschuwt je voor heel eenvoudige patronen.
Hoe lang raden kan duren
In de app duurt elke poging ongeveer een seconde, en na 5 fouten worden de wachttijden langer. Maar iemand die je back-upbestand heeft, of die de apparaatsalt van een geroote telefoon heeft gehaald, kan in plaats daarvan op een computer raden, zonder wachttijden. Argon2id remt dit af, maar een patroon heeft veel minder mogelijkheden dan een lang wachtwoord. Ruwe schattingen voor één krachtige grafische kaart (klasse RTX 4090) met ongeveer 1000 gokken per seconde:
| Wat wordt geraden | Mogelijkheden | Tijd, één grafische kaart |
|---|---|---|
| De 10.000 meest gebruikte patronen | 104 | ongeveer 10 seconden |
| Alle patronen met 6 punten | 1,28 × 108 | ongeveer 1,5 dag |
| Alle patronen met 7 punten | 2,42 × 109 | ongeveer 28 dagen |
| Alle patronen met 8 punten | 4,36 × 1010 | ongeveer 1,4 jaar |
| Herstelzin (92 bits) | 4,95 × 1027 | ongeveer 1,6 × 1017 jaar |
Dit zijn schattingen, geen metingen. De aantallen patronen zijn bovengrenzen; echte patronen zijn er veel minder. Meer of snellere hardware maakt raden naar verhouding sneller.
Houd je back-upbestand privé
Het back-upbestand bevat de apparaatsalt niet, dus iedereen die het in handen krijgt, kan offline patronen proberen, zoals hierboven. Bewaar het alleen op een plek waar alleen jij bij kunt, zoals je eigen cloudaccount, en gebruik een langer patroon.
Geroote of geïnfecteerde telefoons
Als iemand code kan uitvoeren met de rechten van de app (bijvoorbeeld op een geroote telefoon, of met malware die volledige controle heeft), kan die persoon de apparaatsalt ontgrendelen en offline raden. Terwijl de kluis open is, staan de sleutels in het geheugen en kunnen ze worden gelezen met roottoegang of een debugger. Sommige kopieën die in Android en Flutter worden gemaakt, en foto's die op het scherm staan, kunnen niet meteen uit het geheugen worden gewist.
Sommige informatie is zichtbaar
Het aantal versleutelde bestanden in de opslag van de app, hun globale grootte, en wanneer ze zijn gemaakt of gewijzigd, zijn niet verborgen. Ook het feit dat LifeVeil is geïnstalleerd niet.
De lege kluis misleidt alleen het scherm
Wie de bestanden van de app kan lezen (bijvoorbeeld op een geroote telefoon), kan de kluismappen tellen en zien dat deze instelling aan staat. En na 5 onjuiste patronen moet je wachten, waaruit blijkt dat de eerdere patronen niets openden.
De vermomming verandert alleen het startscherm
- Alleen het pictogram en de naam in de launcher veranderen. De lijst in Instellingen > Apps van de telefoon, de app-info en de opslagschermen tonen nog steeds LifeVeil.
- Schermlezers kunnen nog steeds "LifeVeil" zeggen. De launcher van Samsung One UI geeft TalkBack bijvoorbeeld de echte app-naam, en de app kan dat niet veranderen.
- Het deelmenu van Android toont altijd de echte app-naam, dus LifeVeil verdwijnt daaruit als je het pictogram wijzigt. Je kunt het weer aanzetten.
- Toestemmingsverzoeken van Android tonen de echte naam, dus de app vraagt om toestemmingen voordat je het pictogram wijzigt.
- Zolang het pictogram gewijzigd is, stuurt de app geen meldingen.
- De vermommingscode (4 tot 8 cijfers) toont alleen het vergrendelscherm. Hij opent je bestanden niet. Hij wordt bewaard als hash met salt, maar met zo weinig mogelijkheden is hij makkelijk te vinden als iemand het bestand in handen krijgt.
Vingerafdruk is een zwakkere route
Ontgrendelen met vingerafdruk slaat Argon2id over. De sterkte hangt af van de vingerafdruksensor van je telefoon en de Android Keystore. Je kunt het op elk moment uitzetten in Instellingen.
Foto's van indringers
De app speelt geen sluitergeluid af, maar telefoons die in sommige landen worden verkocht, zoals Japan en Korea, spelen er altijd een af. Er wordt geen foto gemaakt als een andere app de camera gebruikt of als er geen camera aan de voorkant is. Totdat je de eerste kluis ontgrendelt die je hebt gemaakt, worden de foto's afgesloten met een sleutel uit de Android Keystore.
Fotogegevens
- Bij HEIC-, PNG- en WebP-foto's blijven de verborgen gegevens (EXIF) in het bestand. Het hele bestand is nog steeds versleuteld.
- Op Android 10 en hoger haalt Android de gps-locatie weg uit foto's die LifeVeil leest, omdat de app niet om toegang tot je locatie vraagt. Als het origineel uit de galerij wordt verwijderd, is die locatie weg.
- Foto's die je toevoegt via de fotokiezer van Android krijgen nieuwe namen op basis van de datum, omdat de kiezer de oorspronkelijke naam niet doorgeeft.
Vergrendelen wacht tijdens systeemschermen
Zolang er een systeemscherm open is (toestemmingsverzoek, bevestiging van verwijderen, foto- of bestandskiezer, vingerafdrukvraag) en zolang er een import of export loopt, wacht de app met vergrendelen. Als je de app hebt verlaten, vergrendelt hij 2 seconden nadat dat klaar is.
Kluizen delen één apparaatsalt
Alle kluizen op een telefoon gebruiken dezelfde apparaatsalt. Als iemand die salt heeft, test één gok alle kluizen tegelijk. De moeite om één kluis aan te vallen blijft hetzelfde.
Wat geen enkele app kan tegenhouden
Iemand die meekijkt terwijl je je patroon tekent, of een camera die je scherm filmt.
Ben je beide kwijt, dan kan niemand helpen
Als je zowel je patroon als je herstelzin kwijtraakt, kan niemand je bestanden terughalen. Ook wij niet.