Esta herramienta implementa reparto de secreto umbral de Shamir sobre GF(256): un secreto se divide en n partes, y cualquier k de ellas (el umbral) puede reconstruirlo, mientras que k-1 o menos no revelan nada — secreto con garantía de teoría de la información.
Dos modos:
- Dividir: pega un secreto (cualquier texto UTF-8 — contraseña, clave API, frase semilla, frase de recuperación), define el umbral
k y el total n (2 ≤ k ≤ n ≤ 255), y obtienes n partes. Distribuye cada parte a un titular distinto.
- Combinar: pega
k o más partes (una por línea) para reconstruir el secreto original mediante interpolación de Lagrange en x=0.
Cómo funciona. Cada byte del secreto es el término constante de un polinomio aleatorio de grado k-1 sobre GF(256). La parte i es el polinomio evaluado en x=i. La recuperación requiere k puntos para determinar unívocamente un polinomio de grado k-1. Los coeficientes se toman de crypto.randomBytes() (CSPRNG del SO), nunca Math.random().
Limitaciones — léelo:
- Solo confidencialidad, sin integridad. Quien tenga una parte puede enviar un valor falsificado durante la recuperación; el cálculo producirá un secreto plausible pero erróneo sin que lo detectes. Si necesitas detectar manipulación, firma el secreto (o su hash) antes de dividir y verifica tras combinar.
- Límites de GF(256).
n se limita a 255 (tamaño del cuerpo) y k debe ser ≥ 2.
- Formato de parte. Cada parte es
sss: + base64url de [coordenada x, y-byte₁, y-byte₂, …]. Conserva la cadena completa; truncar rompe la recuperación.
Casos de uso. Custodia/recuperación de claves (dividir una clave maestra entre directivos), recuperación social para carteras autocustodiadas, distribuir una frase para que nadie la tenga sola, recuperación tipo "dead man's switch".