Funciona 100% en tu navegador mediante Web Crypto — el secreto y sus participaciones nunca salen de tu dispositivo.
Write a Python implementation of Shamir's Secret Sharing over GF(256) that interoperates with these share strings: each share is the two-digit hex x-coordinate, a dash, then one hex byte per secret byte (e.g. "01-a3b2c1"). It must split a secret into 5 shares with threshold 3, and reconstruct from any 3 of them. Use the AES reduction polynomial 0x11B and rejection-free crypto-random coefficients.
Qué hace
La compartición de secretos de Shamir divide un secreto en N participaciones (shares) de modo que cualquiera K de ellas lo reconstruye - y menos de K no revelan absolutamente nada, ni siquiera una pista parcial. Es la base matemática para dividir la frase semilla de un monedero de criptomonedas, una contraseña maestra o una clave de cifrado entre varias personas o ubicaciones, de forma que ningún poseedor individual (y ninguna coalición menor que K) pueda actuar solo. Los usos reales incluyen la custodia de criptomonedas (copia de seguridad de monedero multiparte), el depósito de claves, los códigos de lanzamiento nuclear, la planificación sucesoria (abogado + cónyuge + caja de seguridad) y los sobres de recuperación ante desastres.
La herramienta ejecuta todo el esquema en tu navegador sobre GF(256) - el mismo campo de Galois que usa AES - con coeficientes de polinomio procedentes de Web Crypto. Nada de lo que escribes, y ninguna participación que pegues, sale nunca de tu dispositivo.
Cómo usarlo
- Elige un modo con el conmutador Split / Reconstruct de la parte superior.
- Split: introduce el secreto, ajusta Total shares (N) (2-255) y Threshold (K) (2-N, el mínimo necesario para recuperar) y pulsa Split secret.
- Copia cada participación numerada a su poseedor (cada una tiene su propio botón Copy; Copy all shares las toma todas). La nota del escudo te lo recuerda: cualquier K de las N participaciones recuperan el secreto; K-1 no revelan nada.
- Reconstruct: pega una participación por campo (Add share para más) y pulsa Reconstruct secret. El secreto recuperado aparece en la salida verde con un botón de copia; las participaciones inválidas o incongruentes producen un error claro.
Ejemplos
Dividir una frase semilla 3-de-5
Secreto: river vacuum lamp fiber quiz noise border mind smile crouch tuna — con N=5, K=3 obtienes cinco participaciones, cada una así:
01-9f3ac27e1b84d05c…
02-4b19e7a2c83f5d16…
03-c7e02f9a45b6138d…
04-2ad673f1e09b85c4…
05-85d31c6b7a49f0e2…
(Tus valores serán distintos - los coeficientes del polinomio son aleatorios nuevos en cada división, así que dos divisiones del mismo secreto no se parecen entre sí.)
Recuperar con cualesquiera 3 de las 5
Pega las participaciones 01-…, 03-…, 05-… en tres campos y pulsa Reconstruct secret - la frase semilla original vuelve exacta. Las participaciones 1+2, 2+4+5, cualquier combinación de tres funciona; dos participaciones solas solo reconstruyen basura.
Un emparejamiento erróneo falla ruidosamente
Mezclar participaciones de dos divisiones distintas (o dos participaciones que reclaman la misma posición) da Two different shares both claim x=01 - they cannot come from the same split, en lugar de devolver silenciosamente un secreto equivocado.
Buen saber
- Por qué K-1 participaciones no revelan nada: cada byte del secreto se convierte en el término constante de un polinomio aleatorio de grado (K-1). K-1 puntos son compatibles con todo término constante posible - el secreto queda oculto desde la teoría de la información, no solo computacionalmente. Esto se mantiene incluso frente a capacidad de cálculo ilimitada.
- La matemática en una línea: las participaciones son evaluaciones del polinomio f(1)…f(N) sobre GF(256); la reconstrucción es interpolación de Lagrange en x=0. La suma es XOR y la multiplicación usa el polinomio de reducción de AES (0x11B).
- Aleatoriedad nueva en cada división: dividir el mismo secreto dos veces produce participaciones completamente distintas; ambos conjuntos lo reconstruyen de forma independiente.
- Trata las participaciones como claves: una participación es la mitad (o un tercio, o un quinto) de tu secreto. Guárdalas en lugares separados - si un atacante reúne K de ellas, posee el secreto.
- Privado: se ejecuta 100% en el cliente; el enlace para compartir transporta solo tus ajustes N/K, nunca el secreto.
- Herramientas relacionadas: Password Strength Analyser, Secure Token Generator, HMAC Generator.