ADR-0003 — libsodium pour toute signature financière
| Statut | Accepté |
|---|---|
| Date | 2025-09-15 |
| Auteurs | Julien Jorry |
Contexte
Les primitives openssl_* de PHP imposent des choix de courbes, paddings et formats (PEM, DER, PKCS#1, PKCS#8) qui sont historiquement source de vulnérabilités (padding oracle, courbes faibles, mauvais nonce). libsodium fournit des APIs misuse-resistant : une seule signature (Ed25519), un seul chiffrement authentifié (XChaCha20-Poly1305), pas de choix possible de paramètres dangereux. Kohinos a besoin de signer chaque Operation pour le hash chain et de chiffrer les IBAN.
Décision
libsodium uniquement pour toute primitive cryptographique financière : signatures (Ed25519), chiffrement symétrique authentifié (XChaCha20-Poly1305 / secretbox), KDF (Argon2id), hash (BLAKE2b ou SHA-256 selon contexte).
Conséquences positives
- API minimale : presque impossible d'utiliser une primitive faible.
- Compatible Reticulum / LoRa offline (roadmap mesh).
- Performances : Ed25519 plus rapide que RSA, signatures 64 octets.
- Pas de PEM/DER à parser : tout est binaire fixe.
Conséquences négatives
- Chiffrement IBAN historique encore en
openssl_*— migration prévue (ADR-0019). - Moins universel que OpenSSL pour les échanges avec banques (banques imposent PKCS).
Alternatives examinées
- openssl_sign() RSA-2048 — rejeté : PEM fragile, clés trop grosses.
- ECDSA P-256 — rejeté : nonce piège mortel si mal généré.
- HMAC-SHA256 — insuffisant : pas une signature à clé publique.