Cryptology Academy · Lección

Secret Sharing de Shamir: matemáticas polinómicas

Construya polinomios sobre cuerpos finitos para dividir y recuperar secretos.

Lección 2 de 413 pasos

Secret Sharing de Shamir: matemáticas polinómicas es una lección gratuita de Cryptology Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Cryptology Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Cryptology Academy incluye 4 lecciones en total.

Idea clave

La compartición de secretos de Shamir (1979) codifica el secreto como la intersección con el eje y (f(0)) de un polinomio aleatorio de grado (k-1) sobre un campo finito. Cualquier k puntos determina unívocamente el polinomio (interpolación de Lagrange); menos de k puntos no revelan nada.

Construcción del polinomio

Para compartir el secreto S con un umbral k entre n partes: elija un primo p > S y n. Escoja coeficientes aleatorios a_1, ..., a_{k-1}. Defina f(x) = S + a_1*x + a_2*x^2 + ... + a_{k-1}*x^{k-1} (mod p). La parte i recibe la participación (i, f(i)).

Ejemplo: esquema 2-de-3

Secreto S=7, p=17, k=2 (polinomio lineal). Elija a_1=3. f(x)=7+3x mod 17. Partes: (1,10), (2,13), (3,16). Cualquier dos puntos determina la recta. f(0)=7. Un solo punto: infinitas rectas posibles, cero información sobre S.

Interpolación de Lagrange

Dado k puntos (x_1,y_1),...,(x_k,y_k), reconstruya f(0) mediante Lagrange: S = sum_i y_i * prod_{j≠i} (0-x_j)/(x_i-x_j) mod p. Toda la aritmética es modular. No se utilizan números de coma flotante: la reconstrucción exacta se realiza sobre el campo finito.

Implementación en Python

from functools import reduce def lagrange(shares, p): xs = [s[0] for s in shares] ys = [s[1] for s in shares] result = 0 for i, (xi, yi) in enumerate(shares): num = reduce(lambda a,b: a*b%p, [(-xj)%p for j,xj in enumerate(xs) if j!=i], 1) den = reduce(lambda a,b: a*b%p, [(xi-xj)%p for j,xj in enumerate(xs) if j!=i], 1) result = (result + yi * num * pow(den, p-2, p)) % p return result

Esbozo de la demostración de seguridad perfecta

Para k-1 partes, existe exactamente un polinomio de grado k-1 que pasa por esos k-1 puntos para cada valor posible del secreto S. Por lo tanto, al conocer k-1 partes, todos los valores de S en [0, p-1] son igual de probables: no se revela ninguna información.

Elección del primo

p debe ser mayor que el secreto y que n. Una elección habitual es p = 2^127-1 (primo de Mersenne) para secretos de 128 bits. Esto garantiza que todas las partes quepan en 128 bits y que la aritmética sea eficiente. Como alternativa, puede utilizarse p=2^521-1 para secretos de 512 bits.

Verificación de partes

El SSS básico no ofrece integridad de las partes: un participante malicioso puede enviar una parte falsa y provocar una reconstrucción incorrecta del secreto. Feldman VSS (Verifiable Secret Sharing) publica compromisos g^{a_i} mod p, lo que permite verificar las partes sin revelar el polinomio.

Compartición proactiva de secretos

Las partes pueden renovarse periódicamente: se genera un polinomio nuevo con el mismo secreto S y se distribuyen nuevas partes; las partes antiguas dejan de ser válidas. Un atacante que comprometa a un participante después de la renovación obtiene una parte antigua que ya no sirve. Este mecanismo se utiliza en sistemas de gestión de claves de larga duración.

Implementaciones

ssss (línea de comandos de Linux), python-secret-sharing, hashicorp/vault utiliza SSS para su mecanismo de sellado y la billetera de hardware Trezor utiliza SSS para la copia de seguridad de la semilla de la billetera (SLIP-39). Todas operan sobre cuerpos finitos de gran tamaño.

Limitaciones

SSS requiere un distribuidor de confianza que genere y distribuya las partes; el distribuidor conoce el secreto. Un escenario sin distribuidor requiere DKG (Distributed Key Generation). La reconstrucción revela el secreto a quien posea k partes; MPC y las firmas de umbral eliminan este problema.

Comprobación rápida

En la compartición de secretos de Shamir (3,5), ¿cuál es el número mínimo de partes necesarias para reconstruir el secreto?

Resumen

El SSS de Shamir codifica los secretos como interceptos con el eje y de un polinomio. La interpolación de Lagrange recupera el secreto a partir de k partes. Ofrece seguridad perfecta e incondicional para menos de k partes. A continuación: compartición visual y aditiva de secretos.

Gratis para empezar

Aprende Cryptology Academy con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
67
Lecciones
261

Preguntas frecuentes

¿La lección «Secret Sharing de Shamir: matemáticas polinómicas» es gratis?

Sí — el texto completo de «Secret Sharing de Shamir: matemáticas polinómicas» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Cryptology Academy, actualiza a CoddyKit PRO. El curso de Cryptology Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Secret Sharing de Shamir: matemáticas polinómicas»?

Construya polinomios sobre cuerpos finitos para dividir y recuperar secretos. Practicas Cryptology Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Cryptology Academy?

No se requiere experiencia previa. Cryptology Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Secret Sharing de Shamir: matemáticas polinómicas»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Cryptology Academy?

Sí. Cada lección de Cryptology Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. El problema de compartir secretos
  2. Secret Sharing de Shamir: matemáticas polinómicas
  3. Secret Sharing visual y esquemas aditivos
  4. Firmas de umbral y casos de uso reales
← Volver a Cryptology Academy