Compartición de secretos de Shamir
Divide una contraseña o frase de recuperación en N fragmentos de modo que M cualesquiera la reconstruyan, con el esquema de Shamir en GF(256), en tu navegador.
La división y la recombinación se hacen íntegramente en tu navegador. El secreto y los fragmentos nunca se envían a ningún sitio; los números aleatorios proceden de crypto.getRandomValues.
Dividir un secreto
Combinar fragmentos
Cómo dividir un secreto
- Escribe o pega el texto que quieres proteger en Secreto (texto): una frase de recuperación, una contraseña maestra, una clave de cifrado…
- Define el Número de fragmentos (N) y los Fragmentos necesarios para reconstruir (M). Por ejemplo, N = 5 y M = 3 significa que 3 fragmentos cualesquiera de los 5 reconstruyen el secreto, y que 2 fragmentos no revelan nada.
- Pulsa Dividir secreto. Cada fragmento aparece en su propia línea con un botón Copiar; también puedes usar Copiar todos los fragmentos o Descargar fragmentos (.txt).
- Pulsa Prueba: combinar los M primeros fragmentos para comprobar que funcionan antes de repartirlos.
- Entrega cada fragmento a una persona distinta o guárdalo en un lugar distinto. No los guardes todos juntos, o la división no servirá de nada.
Cómo reconstruir el secreto
- Pega al menos M fragmentos en Fragmentos, uno por línea, en cualquier orden. Las líneas en blanco se ignoran.
- Pulsa Combinar fragmentos. El texto aparece en Secreto recuperado y el mensaje de estado indica qué números de fragmento se han usado.
- Si un fragmento tiene una errata, procede de otra división o aparece dos veces con contenido distinto, la herramienta te dice cuál y por qué, en lugar de devolver datos sin sentido.
Cómo funciona el esquema de Shamir
Adi Shamir publicó el esquema en 1979. Para compartir un byte s con umbral M, se elige un polinomio aleatorio de grado M − 1 cuyo término independiente es s: f(x) = s + a₁x + … + a₍M−1₎x^(M−1). El fragmento número x es el valor f(x). M puntos cualesquiera determinan el polinomio, así que la interpolación de Lagrange en x = 0 devuelve s; con menos de M puntos, todos los valores de s son igual de probables, de modo que los fragmentos no filtran nada sobre el secreto.
Esta herramienta trabaja en el cuerpo finito GF(256) (el mismo que usa AES, con el polinomio de reducción x⁸ + x⁴ + x³ + x + 1), así que cada byte del secreto en UTF-8 recibe su propio polinomio y los fragmentos tienen exactamente la misma longitud que el secreto. Los coeficientes aleatorios proceden de crypto.getRandomValues, el generador aleatorio criptográfico del navegador. Todo se ejecuta localmente: ni el secreto ni los fragmentos salen de tu dispositivo.
Formato de los fragmentos
Un fragmento tiene este aspecto: 3-2-5f1c…, es decir, el umbral M, el número de fragmento X (de 1 a 255) y después datos en hexadecimal. Los datos contienen los valores del polinomio para el secreto seguidos de un CRC-32 de 4 bytes del secreto, y terminan con una suma de verificación CRC-32 de 4 bytes del propio fragmento. La suma de verificación detecta errores al copiar; el CRC interno revela si se han mezclado fragmentos de secretos distintos. Los fragmentos creados con otras herramientas de Shamir usan otros formatos y no se pueden combinar aquí.
Preguntas frecuentes
¿Cómo elijo N y M?
M es el número de personas o lugares que deben cooperar, y N − M es el número de fragmentos que te puedes permitir perder. 3 de 5 es una elección habitual: se pueden perder o destruir dos fragmentos, y ninguna pareja de titulares puede reconstruir el secreto por su cuenta.
¿Es seguro guardar un fragmento en la nube?
Un solo fragmento, o cualquier grupo de menos de M, no revela nada del secreto. Aun así, guarda menos de M fragmentos en una misma cuenta o lugar; si no, ese lugar por sí solo contiene el secreto.
¿Esta herramienta cifra el secreto?
No en el sentido habitual: no hay contraseña. La protección viene del umbral. Puedes combinar ambas cosas, por ejemplo dividiendo la frase de contraseña de un archivo cifrado.
¿Qué pasa si proporciono más de M fragmentos?
Los M primeros reconstruyen el secreto y los adicionales se comprueban contra ellos. Si alguno no encaja, se indica, lo que ayuda a detectar un fragmento dañado o ajeno.
¿Puedo dividir un archivo?
Esta herramienta divide texto de hasta 10 000 bytes. Para un archivo, cífralo con una frase de contraseña aleatoria y robusta y divide esa frase.
Herramientas relacionadas
- Generador de contraseñas Generador de contraseñas gratis que crea contraseñas seguras y aleatorias de 4 a 128 caracteres en tu navegador. No se guarda ni se envía nada.
- Generador de frases de contraseña Crea frases de contraseña seguras y fáciles de recordar con palabras aleatorias en inglés o francés, con la entropía en bits. Todo en tu navegador.
- Cifrar texto con contraseña Cifra y descifra texto con una frase de contraseña en tu navegador, con AES-256-GCM y PBKDF2 a 600.000 iteraciones. No se sube nada.
- Generador de códigos TOTP y HOTP Genera códigos 2FA TOTP y HOTP a partir de un secreto Base32 o una URI otpauth://, con SHA-1, SHA-256 o SHA-512, cuenta atrás y código QR.