Utilia

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

    1. Escribe o pega el texto que quieres proteger en Secreto (texto): una frase de recuperación, una contraseña maestra, una clave de cifrado…
    2. 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.
    3. 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).
    4. Pulsa Prueba: combinar los M primeros fragmentos para comprobar que funcionan antes de repartirlos.
    5. 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

    1. Pega al menos M fragmentos en Fragmentos, uno por línea, en cualquier orden. Las líneas en blanco se ignoran.
    2. Pulsa Combinar fragmentos. El texto aparece en Secreto recuperado y el mensaje de estado indica qué números de fragmento se han usado.
    3. 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.