El intercambio secreto de Shamir es un buen algoritmo para dividir un valor secreto en varias partes y permitir la recuperación con un umbral ; lo que significa que divide (por ejemplo) el secreto en diez acciones , de modo que cualquiera de las tres acciones son suficientes para reconstruir el secreto.
Esto requiere dos comentarios:
-
La principal ventaja del algoritmo es su mecanismo de umbral; no tiene mucho sentido si se necesitan todas las acciones para reconstruir el secreto. En el escenario descrito, con las claves SSH, no está claro qué significaría este mecanismo de umbral. Existe es un escenario en el que desea algo como eso (lo he visto implementado en producción; vea más abajo) pero involucra a varios propietarios clave.
-
Aunque los recursos compartidos están separados, el proceso de reconstrucción debe ocurrir, por necesidad, en una sola máquina que obtiene, en algún momento, el secreto mismo. En particular, si realiza el reensamblaje en una máquina que es mala (es decir, que está bajo el control de un atacante a través de un malware subrepticioso), el atacante aprende la clave privada SSH y usted pierde.
El escenario donde el mecanismo de umbral con SSH tiene sentido es el siguiente: hay un servidor muy sensible en algún lugar (una Autoridad de Certificación ), que nunca debe ser administrado por un solo administrador sin ningún testigo. Sin embargo, el servidor es remoto y aún debe realizarse alguna administración remota. Entonces, la idea es tener una clave privada especial, autorizada para el inicio de sesión de root (la clave pública está en /root/.ssh/authorized_keys
). La clave privada correspondiente debe ser accesible solo en una máquina que se supone segura (una máquina dedicada a la tarea y que se mantiene segura mediante un mecanismo normal, en ese caso, un sistema Linux con procedimientos de administrador de sistemas). Cuando debe realizarse la administración remota, un quórum de propietario de clave colabora, ingresa sus "recursos compartidos" en la máquina y, por lo tanto, desbloquea la clave privada. Mantienen el administrador de sistemas bajo control de la vista durante toda la duración del procedimiento de administración.
En ese escenario, un esquema de intercambio secreto tendría sentido. Sin embargo, las "acciones" son valores numéricos grandes, que deben almacenarse en dispositivos físicos, no en cerebros humanos; Esto fue un inconveniente. Además, el software cliente SSH habitual no permite la conexión de sistemas de intercambio de secretos arbitrarios (al menos no fácilmente). Así que la solución práctica fue la siguiente: la clave privada se almacenó varias veces, cada vez protegida por una contraseña dividida en dos mitades; cada humano conocía solo una mitad. Si hay n propietarios de acciones, entonces la clave privada debe estar encriptada con contraseña n (n-1) / 2 veces (por lo tanto, con n = 5 , esto significa 10 copias de la clave privada, cada una cifrada con una combinación de dos mitades de contraseña). Cuando debe realizarse la administración remota, dos propietarios de clave seleccionan el archivo de clave privada cifrada correspondiente; cada propietario escribe la mitad de su contraseña y se produce la conexión.
El sistema funciona en la práctica. No se escala bien (con n propietarios de claves y un quórum de t , requiere O (n t ) archivos cifrados, para todas las combinaciones), pero para valores pequeños es perfectamente viable.