A conoce Sa
B conoce Sb
Objetivo: probar Sa == Sb
Dada una función unidireccional H con las siguientes propiedades:
H(x, y) = H(y, x) (conmutativo)
H(H(x, y), z) = H(x, H(y, z)) (asociativo)
C genera k , l , m , n
C comparte k a A solo y l a B solo, entonces:
A calcula Saₖ = H(Sa, k)
B calcula Sbₗ = H(Sb, l)
A comparte Saₖ públicamente
B comparte Sbₗ públicamente
A ahora sabe Sa , k , Saₖ , Sbₗ
B ahora sabe Sb , l , Saₖ , Sbₗ
C calcula Saₖₘ = H(Saₖ, m)
C calcula Sbₗₙ = H(Sbₗ, n)
C comparte Saₖₘ y Sbₗₙ públicamente
A ahora sabe Sa , k , Saₖ , Sbₗ , Saₖₘ , Sbₗₙ
B ahora sabe Sb , l , Saₖ , Sbₗ , Saₖₘ , Sbₗₙ
A calcula Sbₗₙₖ = H(Sbₗₙ, k)
B calcula Saₖₘₗ = H(Saₖₘ, l)
A comparte Sbₗₙₖ públicamente
B comparte Saₖₘₗ públicamente
A ahora sabe Sa , k , Saₖ , Sbₗ , Saₖₘ , Sbₗₙ , Saₖₘₗ , Sbₗₙₖ
B ahora sabe Sb , l , Saₖ , Sbₗ , Saₖₘ , Sbₗₙ , Saₖₘₗ , Sbₗₙₖ
C calcula Saₖₘₗₙ = H(Saₖₘₗ, n)
C calcula Sbₗₙₖₘ = H(Sbₗₙₖ, m)
C compara Saₖₘₗₙ y Sbₗₙₖₘ deben ser iguales.
Debido a la conmutatividad y la asociatividad, sabemos que Saₖₘₗₙ == Sbₗₙₖₘ si Sa y Sb son iguales.
Esto está inspirado en n-ways Diffie-Hellman-Mekrle Key Exchange , pero la forma en que se juntan las cosas es de mi propia invención hace unas pocas horas sin hacer pruebas matemáticas o un análisis adecuado, probablemente haya un agujero evidente que no se me ocurrió.
La función H en Diffie-Hellman probablemente sería utilizable aquí, con un poco de modificación.
Suposiciones:
-
A y B no pueden compartir
Sa y Sb entre sí
-
A y B no pueden compartir
k y l entre sí
-
C tiene una manera de verificar que A y B están haciendo sus cálculos utilizando el archivo correcto (no pueden unirse para usar ambos archivos) en lugar de
Sa y Sb para engañar a C )
-
C tiene una manera de hacer imposible que A y B se filtren
k , l entre sí. Por ejemplo, k , l puede almacenarse en un token de hardware que puede desbloquearse con una contraseña conocida solo por C .
-
A , B y C no tienen que estar todos en el mismo lugar al mismo tiempo
Descargo de responsabilidad: no soy matemático ni criptógrafo, y no juego como uno en la televisión. Inventar su propio esquema de criptografía puede ser perjudicial para su seguridad. Usted acepta asumir todos los riesgos derivados del uso de este material y me exime de cualquier responsabilidad por cualquier daño causado, real o imaginado. Ninguna representación o garantía, expresa o implícita, con respecto a la integridad, exactitud, idoneidad para un propósito en particular, o la utilidad de estos materiales o cualquier información u opinión contenida en este documento.