Alguien te llama al trabajo y dice: "no se lo cuentes a nadie, pero...". Como la mayoría de la gente, se lo vas a pasar a una o dos personas con la misma advertencia. De hecho, esa persona probablemente lo está repitiendo a partir de otra y tú ya estás en su lista de dos. Así que para secretos realmente grandes, necesitas una forma de distribuirlo de modo que ninguna persona aislada tenga información real sobre el secreto, pero que cierto número de personas reunidas sí lo pueda decodificar. Como explica [neeaj] en una publicación reciente sobre Shamir's Secret Sharing, [Adi Shamir] (la S en la sigla RSA) ideó en 1979 una forma muy buena de hacerlo, y el concepto central es sencillo de entender.

¿Cómo funciona con geometría?

La explicación arranca con geometría. La ecuación de una recta es y = mx + b, donde m es la pendiente y b es el intercepto en el eje Y (el punto donde la recta toca el eje Y cuando X vale 0). Existen infinitas rectas que cruzan el eje Y en, por ejemplo, 10. La recta y = 3x + 10 lo hace, y también lo hace y = -1,41x + 10. No puedes adivinar el valor de b solo a partir de la pendiente, porque cualquier pendiente puede satisfacer la ecuación.

Supongamos entonces que el número secreto es 10. Puedo elegir una pendiente al azar y generar puntos sobre esa recta. Igual que con el intercepto, cualquier cantidad de ecuaciones puede satisfacer ese punto. Tomemos una pendiente aleatoria de 2 para simplificar la matemática. Nuestra ecuación real es y = 2x + 10. Elijo una X aleatoria de 100 y le digo a una persona que su parte del secreto es (100, 210). Eso encaja con nuestra ecuación, pero también encaja con y = 4x - 190 y con y = x + 110, además de infinitas otras rectas.

¿Por qué se necesitan al menos dos puntos?

Para conocer la ecuación verdadera, necesitas al menos dos puntos. Elijamos x = 25 y le decimos a otra persona que su parte del secreto es (25, 60). Ahora, si ambas personas comparan notas, pueden encontrar el número secreto resolviendo el par de ecuaciones:

210 = 100m + b y 60 = 25m + b

La segunda ecuación es equivalente a 240 = 100m + 4b, y de ahí se puede restar la primera para despejar.

Puedes entregar cualquier cantidad de puntos a cualquier cantidad de personas. Dos cualesquiera de ellas pueden recuperar el número secreto. Si necesitas exigir más personas para abrir el secreto, simplemente subes de grado. Una parábola requiere tres puntos. Una cúbica requiere cuatro, y así sucesivamente.

¿Dónde se usa en la práctica?

En la realidad, las implementaciones prácticas trabajan sobre un polinomio en un cuerpo finito, no sobre el gráfico cartesiano de toda la vida, pero la idea elegante es la misma. No es la primera vez que hablamos de este algoritmo en Hackaday. Recuerda a cómo el lanzamiento nuclear requiere múltiples llaves.

¿Para qué sirve hoy?

Shamir Secret Sharing es la base del esquema 2-de-3 usado por varias billeteras de criptomonedas multisig (incluyendo BitGo y Casa) para resguardar llaves privadas: una llave en una caja fuerte física, otra en custodia, una tercera en posesión del usuario, y se necesitan dos cualesquiera para gastar. También aparece en sistemas de cifrado de respaldo corporativo y en gestores de contraseñas distribuidos como Vault de HashiCorp, donde el secreto raíz se reparte entre 5 administradores con umbral 3 para iniciar el cluster después de un reboot. Para hackers en LatAm: implementaciones open source en Python (secretsharing) o en Rust (vsss-rs) corren en cualquier Raspberry Pi y permiten armar el esquema en un fin de semana para backup de credenciales personales sin depender de un servicio cloud.