fix(security): require a fresh PIN or biometric check for sensitive actions

An unlocked phone was enough to read the 24-word recovery phrase. The
phrase, backup export and import, the duress PIN, a longer auto-lock,
turning off screen security, enabling biometrics and deleting the
account now ask for the PIN (or biometrics with biometricOnly) every
time. The duress session never shows the phrase. PIN checks outside the
lock screen count towards the same failure throttle.
This commit is contained in:
Julius Joska
2026-10-23 10:50:16 +02:00
parent 5b237c82f2
commit 2f6b542f24
19 changed files with 1442 additions and 45 deletions
+27 -1
View File
@@ -486,5 +486,31 @@
"profilePhotoPick": "Foto auswählen",
"profilePhotoRemove": "Foto entfernen",
"profilePhotoHint": "Nur deine Chatpartner sehen es — Ende-zu-Ende-verschlüsselt wie Nachrichten. Standort und Fotodaten werden nicht gesendet.",
"profilePhotoFailed": "Foto konnte nicht gesetzt werden: {error}"
"profilePhotoFailed": "Foto konnte nicht gesetzt werden: {error}",
"reauthTitle": "Bestätige, dass du es bist",
"reauthPinRequired": "Diese Aktion erfordert eine PIN. Lege zuerst eine fest.",
"reauthSetPin": "PIN festlegen",
"reauthReasonSeed": "24 Wiederherstellungswörter anzeigen",
"reauthReasonBackupExport": "Backup exportieren",
"reauthReasonBackupImport": "Aus Backup wiederherstellen",
"reauthReasonDecoyPin": "Notfall-PIN ändern",
"reauthReasonAutoLock": "Automatische Sperre verlängern",
"reauthReasonScreenSecurity": "Bildschirmschutz ausschalten",
"reauthReasonDeleteAccount": "Konto und alle Daten löschen",
"reauthReasonBiometrics": "Biometrie einschalten",
"contactRequestName": "{name} (unbekannt)",
"pushMessageRequest": "Nachrichtenanfrage von unbekanntem Absender",
"requestTitle": "Nachrichtenanfrage",
"requestBody": "„{name}“ ist nicht in deinen Kontakten. Name und Foto hat die Person selbst gewählt, sie ist also vielleicht nicht, wer sie vorgibt zu sein. Bis du annimmst, sieht sie nicht, dass du die Nachricht gelesen hast, und kann dich nicht anrufen.",
"requestLookalikeWarning": "Achtung: Dein Kontakt {name} heißt genauso. Das ist ein anderer Schlüssel, also ein anderes Telefon oder eine andere Person. Prüfe das auf anderem Weg, bevor du antwortest (anrufen, persönlich treffen).",
"requestAccept": "Annehmen",
"requestAcceptTitle": "Als Kontakt annehmen",
"requestAcceptBody": "Benenne den Kontakt selbst. Der vom Absender gewählte Name wird nicht automatisch übernommen.",
"requestAcceptNameLabel": "Kontaktname",
"requestNameEmpty": "Gib einen Namen ein.",
"requestNameTaken": "Ein anderer Kontakt heißt schon so (oder fast so). Wähle einen Namen, der nicht verwechselt werden kann.",
"noticeIdentityChanged": "Der Sicherheitscode von {name} hat sich geändert. Unter dieser Adresse meldet sich ein anderer Schlüssel: neues Telefon, Neuinstallation oder Fälschung. Die Verifizierung wurde aufgehoben. Vergleicht den Code erneut, bevor du etwas Sensibles sendest.",
"noticeLookalikeRequest": "Ein unbekannter Absender nennt sich „{claimed}“, was nach deinem Kontakt {name} aussieht. Es ist nicht dieser Kontakt, die Nachricht kam von einem anderen Schlüssel. Du findest sie in den Chats als Nachrichtenanfrage.",
"noticeVerifyAction": "Code prüfen",
"noticePreview": "Sicherheitshinweis"
}