ARGON2ID WASM — ACTIF NON INSTALLE (constat honnete, 2026-07-30) ================================================================== Reference : 10_PLATEFORME/11_PLATEFORME_EN_LIGNE/NOTE_SPEC_IMPORT_PHOTO_MONOTYPE.md §2.2 Mission : porter la derivation de cle a l'etat de l'art (Argon2id) dans le navigateur pour l'import photo du monotype papier. CE QUI A ETE FAIT CETTE SESSION -------------------------------- 1. Etat de l'art verifie par recherche web (pas suppose) : - OWASP Password Storage Cheat Sheet : Argon2id, plancher recommande m=19 MiB, t=2, p=1 (le jeu de parametres retenu par la note). - RFC 9106 : deux profils recommandes (m=2 GiB/t=1/p=4 "confort" et m=64 MiB/t=3/p=4 "contraint") -- aucun des deux ne vise un mobile d'entree de gamme ; le plancher OWASP p=1 reste le bon choix pour ce contexte (cf notes ci-dessous). - NIST SP 800-63B : exige une KDF a cout reglable, memory-hard SHOULD ; cite PBKDF2/Balloon comme exemples, sans trancher Argon2id -- compatible avec, mais moins directif que, OWASP/RFC 9106. => Verdict : Argon2id (m=19 Mo, t=2, p=1) reste le bon choix retenu par la note. Rien dans l'etat de l'art ne justifie de rester sur PBKDF2 par choix — seulement une contrainte d'outillage (ci-dessous). 2. Bibliotheque identifiee et recuperee : hash-wasm, version 4.11.0, fichier dist/argon2.umd.min.js, MIT, auteur Dani Biro (https://github.com/Daninet/hash-wasm). Recuperee via le CDN unpkg (lequel sert le contenu exact du tarball npm publie) et confirmee disponible avec la meme version sur le registre npm officiel (https://registry.npmjs.org/hash-wasm/4.11.0, licence "MIT", integrite tarball sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ==). 3. ECHEC DE TRANSCRIPTION CONSTATE ET MESURE (pas suppose) : le fichier dist/argon2.umd.min.js embarque deux blobs WebAssembly en base64. Celui du module blake2b (sous-primitive utilisee par Argon2id, fonction H' du RFC 9106) est un code de compression deroule tres repetitif (memes motifs de bits sur des centaines de lignes), donc visuellement quasi-indiscernable d'un caractere a l'autre. Deux tentatives independantes de report de ce blob dans un fichier de ce depot ont chacune produit une corruption differente, detectee a chaque fois par un test automatique reel (WebAssembly.compile() echoue avec une erreur de structure -- pas une supposition, une execution) : - tentative 1 : "Compiling function #2 failed: i32.rotr[0] expected type i32, found local.tee of type i64 @+6196" - tentative 2 : "section was shorter than expected size (7251 bytes expected, 6789 decoded) @+6967" Le blob du module argon2 lui-meme a compile correctement dans les deux tentatives (seul blake2b a echoue) -- ce n'est donc pas un probleme d'entete WASM (les deux blobs demarrent par le bon magic number 00 61 73 6d 01 00 00 00, verifie par decodage base64 direct) mais une fidelite de transcription caractere-a-caractere sur un contenu fortement repetitif. CAUSE RACINE : ce bac a sable ne fournit aucun chemin de telechargement binaire-sûr. Seul un outil de "lecture de page web" est disponible (rendu en texte dans le contexte du modele qui ecrit ensuite ce fichier) -- aucun acces reseau direct en shell (curl/wget/npm/pip vers l'exterieur repondent tous en echec de connexion, verifie). Le trajet "page web -> texte lu par un modele de langage -> retype dans un fichier" n'offre pas de garantie d'exactitude bit-a-bit sur un blob binaire de ~7,4 Ko fortement repetitif, verifie empiriquement par deux echecs distincts. CE QUI RESTE A FAIRE (geste humain ou agent avec acces reseau reel) -------------------------------------------------------------------- 1. Sur un poste avec acces internet normal (navigateur, ou curl/npm) : curl -o hash-wasm-argon2.min.js \ https://unpkg.com/hash-wasm@4.11.0/dist/argon2.umd.min.js ou : npm install hash-wasm@4.11.0 puis copier node_modules/hash-wasm/dist/argon2.umd.min.js ici, sous le nom hash-wasm-argon2.min.js (remplacer ce fichier .txt). 2. Calculer l'empreinte : sha256sum hash-wasm-argon2.min.js -- inscrire le resultat dans ce fichier (ou son successeur) ET dans NOTE_SPEC_IMPORT_PHOTO_MONOTYPE.md §2.2. 3. Verifier IMMEDIATEMENT avec le banc fourni : node -e "require('./hash-wasm-argon2.min.js').argon2id({password:'test', salt:Buffer.alloc(16,1), parallelism:1, iterations:2, memorySize:19456, hashLength:32, outputType:'hex'}).then(console.log)" Si une valeur hex de 64 caracteres s'affiche sans erreur de compilation WASM, le fichier est correct. 4. Brancher dans app/photo.php::fxp_photo_script_client() (et dans 10_PLATEFORME/11_PLATEFORME_EN_LIGNE/_banc_photo/fxp_photo_client.reference.js, la source de verite transcrite) : la fonction fxpPhotoDeriverCle() est DEJA ecrite pour detecter et utiliser Argon2id automatiquement des que `window.hashwasm.argon2id` existe (cf fxpPhotoArgon2idDisponible() dans la reference) -- point d'extension unique, deja cable, rien d'autre a modifier. 5. Charger le script dans public/espace/photo.php ET dans le rendu lecteur (photo_rendu.php / v.php) via une balise