v0.5.2-pre.004

This commit is contained in:
2026-08-10 16:43:19 +02:00
parent ef630e3123
commit b8e6751747
15 changed files with 1489 additions and 89 deletions

View File

@@ -1,5 +1,5 @@
<!-- file: docs/plans/V0_5_2_KS_WALLET_RESTRUCTURING_PLAN.md -->
<!-- version: 6 -->
<!-- version: 7 -->
# Plan `0.5.2` — restructuration de `ks-wallet`
@@ -142,9 +142,9 @@ Le format binaire devra au minimum permettre d'identifier sans ambiguïté :
- ciphertext v1 : exactement 80 octets avec le tag AEAD ;
- taille totale v1 : 193 à 256 octets selon la longueur de l'alias ;
- paramètres KDF acceptés : mémoire 64 à 256 MiB, 3 à 10 passes, 1 à 8 lanes, avec les relations Argon2 de mémoire validées ;
- données authentifiées réservées pour `pre.004` : header complet + alias + sel + nonce.
- données authentifiées : header complet + alias + sel + nonce.
Le layout normatif exact est documenté dans `docs/NATIVE_FORMAT.md`. `pre.003` décode et valide strictement ces champs pour le scan mais n'encode encore aucun vrai wallet persistant et n'effectue aucune dérivation de clé ni aucun chiffrement réel avec un mot de passe ; la création/écriture reste strictement dans `pre.004`.
Le layout normatif exact est documenté dans `docs/NATIVE_FORMAT.md`. `pre.003` a fermé la lecture/validation structurelle ; `pre.004` active l'encodage, la publication, la dérivation Argon2id, le chiffrement XChaCha20-Poly1305 et l'ouverture authentifiée sans modifier ce wire.
## 4. Caractérisation du legacy actuel
@@ -501,19 +501,25 @@ Le préambule d'identification introduit ici ne définit pas encore le payload p
- [x] alias du header vérifié contre le nom `<alias>.kswallet` ;
- [x] `WalletFileHandle` enrichi de la pubkey déclarée et de la version sans exposer le chemin ;
- [x] validation des permissions privées à la lecture ;
- [ ] encodage de création et publication atomique/no-clobber `pre.004` ;
- [x] encodage de création et publication atomique/no-clobber explicitement reportés à `pre.004` ;
- [x] tests du wire v1, truncation, trailing bytes, KDF hors bornes, alias mismatch et réouverture bornée.
Aucune vraie keypair n'est encore chiffrée par cette tranche : le password, la dérivation Argon2id, l'appel AEAD et la capacité de signature ouverte restent `pre.004`.
La tranche `pre.003` reste structurelle ; le cycle de vie protégé est activé par `pre.004` ci-dessous.
### `0.5.2-pre.004` — password et cycle de vie persistant
- création persistante avec password ;
- ouverture/déverrouillage ;
- fermeture/verrouillage selon le modèle runtime retenu ;
- changement de mot de passe ;
- signature après ouverture ;
- non-divulgation et zéroïsation.
- [x] `WalletPassword` possédé, non clonable, redacted et consommé par une opération ;
- [x] création persistante avec password et publication atomique/no-clobber ;
- [x] dérivation Argon2id et XChaCha20-Poly1305 effectifs hors du runtime async ;
- [x] ouverture/déverrouillage par alias ;
- [x] ouverture authentifiée d'un `WalletFileHandle` sélectionné hors store ;
- [x] `UnlockedWallet` comme capacité de signature non clonable ;
- [x] fermeture/verrouillage par consommation explicite ou fin de portée de `UnlockedWallet` ;
- [x] changement de mot de passe après authentification de l'ancien, avec nouveau sel/nonce et même keypair/pubkey ;
- [x] contrat explicite : la rotation du mot de passe reprotège le fichier mais ne révoque pas une `UnlockedWallet` déjà remise à un consommateur ;
- [x] vérification de la pubkey déchiffrée contre le header authentifié avant exposition du signer ;
- [x] zéroïsation des buffers secrets possédés et activation de la zéroïsation du cipher ;
- [x] tests d'ancien/nouveau mot de passe, signature, ouverture externe, AAD altéré et canaris de non-divulgation.
### `0.5.2-pre.005` — migration, import et export
@@ -603,7 +609,7 @@ Le plan est désormais centré sur les décisions suivantes :
14. le format keypair JSON des binaires Solana est obligatoire en import et en export dans `0.5.2` ;
15. une matrice officielle des formats Phantom/Solflare/Backpack/Trust/Coinbase-Base et autres cibles pertinentes sera finalisée avant les adaptateurs ;
16. un seul adaptateur wallet tiers est implémenté dans `0.5.2` comme exemple, les autres formats faisables étant reportés au TODO sans version déterminée ;
17. le format v1 utilise Argon2id v19 et XChaCha20-Poly1305 selon `docs/NATIVE_FORMAT.md`, tandis que le modèle runtime dun wallet ouvert reste à fermer en `pre.004` ;
17. le format v1 utilise Argon2id v19 et XChaCha20-Poly1305 selon `docs/NATIVE_FORMAT.md`, et `pre.004` ferme le modèle runtime avec `WalletPassword` + `UnlockedWallet` ;
18. le scan automatique reste limité au répertoire configuré, tandis qu'un consommateur peut fournir explicitement un autre chemin `.kswallet` à `ks-wallet` sans modifier le store ni enregistrer ce fichier automatiquement.
Ces décisions ont permis d'ouvrir `0.5.2-pre.002`.