feat(android): un coffre telecharge n'est plus lisible sans rien demander
Sans biometrie utilisable et sans code pose, le cache s'ouvrait sans rien demander - or il CONTIENT le mot de passe de sync. Qui tenait le telephone deverrouille obtenait donc le coffre ET le secret du depot. Il est desormais scelle sous le mot de passe qui vient de le rapporter : celui-ci est deja dans ce fichier, donc rien de neuf n'est expose, et l'utilisateur le connait puisqu'il vient de le taper. C'est aussi la seule forme de cache qui survive a une reinitialisation du verrouillage d'ecran. Pas quand l'appareil sait authentifier : VER_PIN et VER_WRAP s'excluent, et imposer une frappe a qui a une empreinte serait un recul. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+22
-1
@@ -2604,11 +2604,32 @@ begin
|
||||
|
||||
// Ecrit APRES un dechiffrement reussi seulement, et avec son ETag :
|
||||
// les deux doivent rester coherents.
|
||||
// AUCUNE PROTECTION ICI VEUT DIRE AUCUNE, ET C'EST TROP.
|
||||
//
|
||||
// Sans biometrie utilisable et sans code pose, le cache s'ouvrait sans
|
||||
// rien demander - or il CONTIENT le mot de passe de sync. Qui tient le
|
||||
// telephone deverrouille obtenait donc le coffre ET le secret du depot.
|
||||
//
|
||||
// On le scelle sous le mot de passe qui vient de rapporter le coffre :
|
||||
// il est deja dans ce fichier, donc cela n'expose rien de neuf, et
|
||||
// l'utilisateur le connait puisqu'il vient de le taper. C'est aussi la
|
||||
// seule forme de cache qui survive a une reinitialisation du
|
||||
// verrouillage d'ecran.
|
||||
//
|
||||
// PAS quand l'appareil sait authentifier : VER_PIN et VER_WRAP
|
||||
// s'excluent, et imposer une frappe a qui a une empreinte serait un
|
||||
// recul. Retirable en deux appuis depuis les reglages.
|
||||
var LSeal := FPinSealed;
|
||||
if (not LCanAuth) and (LSeal = '') then LSeal := APwd;
|
||||
try
|
||||
// Le mot de passe part avec le coffre : c'est lui qui permettra au
|
||||
// prochain lancement de rafraichir sans rien demander.
|
||||
SaveVault(LPlain, FETag, APwd, LCanAuth, False, FPinSealed,
|
||||
SaveVault(LPlain, FETag, APwd, LCanAuth and (LSeal = ''), False, LSeal,
|
||||
FKey, FKeySalt, FKeyIters);
|
||||
// SANS CETTE LIGNE LES ECRITURES SUIVANTES SERAIENT REFUSEES : le
|
||||
// garde de SaveVault interdit de resceller un cache a code sans le
|
||||
// code, et il le lirait ici comme absent.
|
||||
if VaultNeedsPin then FPinSealed := LSeal;
|
||||
Log(' cache now holds sha: ' + FETag);
|
||||
if VaultNeedsAuth then
|
||||
Log(' cache written - protected by biometrics/PIN')
|
||||
|
||||
Reference in New Issue
Block a user