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.