Cet outil implémente le partage de secret à seuil de Shamir sur GF(256) : un secret est divisé en n parts, dont k (le seuil) suffisent à le reconstruire, tandis que k-1 ou moins ne révèlent rien — secret garanti par la théorie de l'information.
Deux modes :
- Diviser : collez un secret (tout texte UTF-8 — mot de passe, clé API, phrase seed, phrase de récupération), réglez le seuil
k et le total n (2 ≤ k ≤ n ≤ 255), et vous obtenez n parts. Distribuez chaque part à un détenteur distinct.
- Combiner : collez
k parts ou plus (une par ligne) pour reconstruire le secret original par interpolation de Lagrange en x=0.
Comment ça marche. Chaque octet du secret est le terme constant d'un polynôme aléatoire de degré k-1 sur GF(256). La part i est le polynôme évalué en x=i. La récupération exige k points pour déterminer uniquement un polynôme de degré k-1. Les coefficients proviennent de crypto.randomBytes() (CSPRNG de l'OS), jamais Math.random().
Limites — à lire :
- Confidentialité seulement, pas d'intégrité. Quiconque détient une part peut soumettre une valeur falsifiée lors de la récupération ; le calcul produira un secret plausible mais faux, indétectable. Pour détecter la falsification, signez le secret (ou son hachage) avant de diviser et vérifiez après combinaison.
- Bornes de GF(256).
n est plafonné à 255 (taille du corps) et k doit être ≥ 2.
- Format de part. Chaque part est
sss: + base64url de [coordonnée x, y-octet₁, y-octet₂, …]. Conservez la chaîne entière ; tronquer casse la récupération.
Cas d'usage. Custodie/récupération de clés (diviser une clé maîtresse entre dirigeants), récupération sociale pour portefeuilles auto-détenus, distribuer une phrase afin que personne ne la détienne seule, récupération de type « dead man's switch ».