Está en la página 1de 38

Protocolos

criptográficos
PID_00255021

Jordi Herrera Joancomartí


Cristina Pérez Solà

Tiempo mínimo de dedicación recomendado: 3 horas


© FUOC • PID_00255021 Protocolos criptográficos

Jordi Herrera Joancomartí Cristina Pérez Solà

Licenciado en Matemáticas por la Doctora en Informática por la Uni-


Universidad Autónoma de Barcelo- versidad Autónoma de Barcelona y
na y doctor por la Universidad Po- la Universidad Católica de Lovaina.
litécnica de Cataluña. Sus ámbitos Actualmente es profesora de los Es-
de investigación son la criptografía, tudios de Informática, Multimedia
las criptomonedas y la tecnología y Telecomunicaciones de la Univer-
blockchain. Ha publicado numero- sitat Oberta de Catalunya. Sus ám-
sos textos docentes y más de cien bitos de investigación son las cripto-
artículos de investigación en revistas monedas basadas en blockchain y,
y congresos nacionales e internacio- en especial, los aspectos relaciona-
nales. Ha dirigido nueve tesis docto- dos con la seguridad y la privacidad
rales y ha sido investigador principal de estas. También está interesada
de varios proyectos de investigación en los problemas de privacidad que
nacionales. Ha participado como surgen a raíz del uso de las redes so-
evaluador para agencias de investi- ciales y en la adaptación de técnicas
gación de varios países europeos y de minería de datos a la naturaleza
también para la Comisión Europea. específica de este tipo de redes.
Actualmente es profesor agregado
del departamento de Ingeniería de
la Información y las Comunicaciones
en la Universidad Autónoma de Bar-
celona.

El encargo y la creación de este recurso de aprendizaje UOC han sido coordinados


por la profesora: Helena Rifà Pous

Segunda edición: febrero 2021


© de esta edición, FUOC, 2021
Av. Tibidabo, 39-43, 08035 Barcelona
Autoría: Jordi Herrera Joancomartí, Cristina Pérez Solà
Producción: FUOC
Todos los derechos reservados

Ninguna parte de esta publicación, incluido el diseño general y la cubierta, puede ser copiada,
reproducida, almacenada o transmitida de ninguna forma, ni por ningún medio, sea este eléctrico,
mecánico, óptico, grabación, fotocopia, o cualquier otro, sin la previa autorización escrita
del titular de los derechos.
© FUOC • PID_00255021 Protocolos criptográficos

Índice

Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

1 El protocolo de tres pasos de Shamir . . . . . . . . . . . . . . . . . . . . . . . . . . 7


1.1 El cifraje de Vernam y el protocolo de tres pasos de Shamir . . . 8
1.2 El criptosistema de exponenciación . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Esquemas de compartición de secretos . . . . . . . . . . . . . . . . . . . . . . . . 10


2.1 Esquema de compartición de secretos polinómico . . . . . . . . . . . . 11
2.2 Problemáticas de los esquemas de compartición de secretos . . 13

3 Firmas ciegas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1 Firma ciega con RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Aplicaciones de las firmas ciegas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3 Protección contra abusos en las firmas ciegas . . . . . . . . . . . . . . . . . 16

4 Pruebas de conocimiento nulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19


4.1 Prueba del conocimiento del logaritmo discreto . . . . . . . . . . . . . . 21
4.2 Aplicaciones de las pruebas de conocimiento nulo . . . . . . . . . . . . 23

5 Protocolo de transferencia inconsciente . . . . . . . . . . . . . . . . . . . . . . 24


5.1 Protocolo de Even, Goldreich y Lempel . . . . . . . . . . . . . . . . . . . . . . . 24
5.2 Aplicaciones de la transferencia inconsciente . . . . . . . . . . . . . . . . . 26

6 Protocolo multiparte seguro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27


6.1 El problema del millonario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.2 El problema del millonario socialista. . . . . . . . . . . . . . . . . . . . . . . . . . 29

Resumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

Ejercicios de autoevaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

Solucionario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

Glosario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
© FUOC • PID_00255021 5 Protocolos criptográficos

Introducción

Más allá de los mecanismos para cifrar y descifrar mensajes, lo cierto es que la
criptografía permite construcciones más elaboradas que continúan teniendo
el mismo objetivo que los criptosistemas: proteger la información. Así, nos
podemos encontrar diferentes situaciones donde necesitemos protocolos que
nos garanticen una serie de propiedades de seguridad que los criptosistemas
por sí solos no pueden proporcionar. Es en este punto donde intervienen los
protocolos criptográficos, protocolos entre dos o más usuarios que utilizan
mecanismos criptográficos para proteger la información.

En este módulo didáctico estudiaremos varios protocolos criptográficos, cada


uno de ellos con un propósito diferente. Salvo el esquema de compartición de
secretos, los protocolos descritos en este módulo didáctico son protocolos en
los que intervienen dos usuarios y no se contempla la existencia de ninguna
tercera parte de confianza. Así, las operaciones se realizan, a menudo de forma
conjunta, entre los dos usuarios para conseguir el objetivo del protocolo. La
suposición que se hace en todo momento es que los usuarios pueden actuar
deshonestamente, de forma que es importante que los propios protocolos in-
corporen los mecanismos de seguridad necesarios para que, en caso de que
una parte actúe de forma maliciosa, la otra parte no se vea afectada o, como
mínimo, pueda detectar el engaño.
© FUOC • PID_00255021 6 Protocolos criptográficos

Objetivos

Los materiales didácticos de este módulo tienen que permitir lograr los obje-
tivos siguientes:

1. Entender que las aplicaciones de la criptografía no se restringen a propor-


cionar secreto y autenticidad.

2. Conocer los esquemas de compartición de secretos.

3. Entender el concepto de prueba de conocimiento nulo y su aplicabilidad.

4. Ver cómo hay que desarrollar protocolos en contextos en los que no hay
confianza entre las partes que participan en el protocolo.
© FUOC • PID_00255021 7 Protocolos criptográficos

1. El protocolo de tres pasos de Shamir


.

El protocolo de tres pasos de Shamir fue propuesto por Adi Shamir, a pesar de
que no lo publicó nunca. El protocolo permite establecer una comunicación
secreta entre dos partes sin ningún intercambio previo de claves. La base del
protocolo es una función de cifraje conmutativa respecto a las claves. Es decir,
será lo mismo cifrar un mensaje m con una clave k1 y el resultado volverlo
a cifrar con una clave k2 que cifrarlo primero con la clave k2 y el resultado
cifrarlo con la k1 :

Ek1 (Ek2 (m)) = Ek2 (Ek1 (m))

Pasamos a describir el protocolo de tres pasos de Shamir en el cual Alice


quiere hacer llegar el mensaje m a Bob. Para hacerlo, Alice dispondrá de una
clave para cifrar, keA y una clave para descifrar kdA y Bob también tendrá una
clave para cifrar keB y una para descifrar kdB . Denotaremos por EkeA (m) la acción
de cifrar el mensaje m con la clave de cifraje keA de Alice. Igualmente, deno-
taremos por Dkd (c) el descifraje del mensaje c con la clave de descifraje kdA de
A

Alice.

En el esquema de la tabla 1 se pueden ver los diferentes pasos del protocolo y


la información que se intercambian los usuarios que participan en él.

Tabla 1. Esquema de tres pasos de Shamir


Paso Alice Bob
c1
1. Calcula c1 = Eke (m) ––→
A
c
2. ←–2– Calcula c2 = Eke (c1 ) = Eke (Eke (m))
B B A

3. Calcula c3 = Dkd (Eke (Eke (m))) =


A B A
c 3
= Dkd (Eke (Eke (m))) = Eke (m) ––→
A A B B

4. Calcula m = Dkd (c3 ) = Dkd (Eke (m))


B B B

Como podemos ver, al final del protocolo Alice ha hecho llegar a Bob el men-
saje m de manera segura, puesto que en ninguno de los mensajes que se han
intercambiado en cada uno de los tres pasos el mensaje m no ha viajado en
claro. Así, un atacante que esté analizando las comunicaciones entre A y B
no podrá extraer ninguna información de m. Notad, además, que en ningún
momento se ha producido un intercambio de claves. Alice solo conoce keA y
kdA y Bob solo keB y kdB .

En los subapartados 1.1 y 1.2 veremos algunos criptosistemas que tienen la


propiedad de conmutatividad de claves y qué resultados presentan cuando se
utilizan como esquema de cifraje en el protocolo de tres pasos de Shamir.
© FUOC • PID_00255021 8 Protocolos criptográficos

1.1 El cifraje de Vernam y el protocolo de tres pasos de Shamir

Uno de los criptosistemas que hemos visto a lo largo del curso es el criptosis-
tema de Vernam, que sería el criptosistema más seguro, puesto que, utilizan-
do una buena clave, nos aporta seguridad incondicional. Recordamos que el
mecanismo tanto de cifraje como de descifraje de este criptosistema es muy
simple. Dado un mensaje m expresado en bits y una clave k del mismo tama-
ño que el mensaje también expresada en bits, la función de cifraje consiste en
hacer una XOR entre el mensaje y la clave, es decir, Ek (m) = m ⊕ k = c. Por otro
lado, para descifrar el mensaje c simplemente tendremos que hacer de nuevo
una XOR con la misma clave k con la cual hemos cifrado Dk (c) = c ⊕ k = m.

Si nos fijamos, este criptosistema presenta conmutatividad de claves, puesto


que si tenemos dos claves k1 y k2 se cumple que:

Ek1 (Ek2 (m)) = (m ⊕ k2 ) ⊕ k1 = (m ⊕ k1 ) ⊕ k2 = Ek2 (Ek1 (m))

Esto pasa porque la operación XOR es conmutativa.

Así, si utilizamos el criptosistema de Vernam para el protocolo de tres pasos


de Shamir entre A y B, tenemos que las claves de cifrar y descifrar para cada
usuario son la misma, es decir, keA = kdA = kA y keB = kdB = kB . Así mismo, en
los tres intercambios de información del protocolo se generarán los mensajes
mostrados en el esquema de la tabla 2.

Tabla 2. Esquema de tres pasos de Shamir con el cifraje de Vernam


Paso Alice Bob
c
1. Calcula c1 = m ⊕ kA ––→
1

c
2. ←–2– Calcula c2 = c1 ⊕ kB
c3
3. Calcula c3 = c2 ⊕ kA = m ⊕ kB ––→
4. Calcula m = c3 ⊕ kB

A pesar de que aparentemente hemos conseguido desarrollar el protocolo co-


rrectamente utilizando uno de los criptosistemas más seguros que hay, el pro-
blema lo encontramos en el hecho de que a un atacante que está viendo la
comunicación le basta con tomar nota de los tres mensajes cifrados que se in-
tercambian Alice y Bob, puesto que una vez intercepta c1 ,c2 y c3 para obtener
el mensaje cifrado m solo necesita hacer una suma XOR de los tres:

c1 ⊕ c2 ⊕ c3 = (m ⊕ kA ) ⊕ (m ⊕ kA ⊕ kB ) ⊕ (m ⊕ kB ) = m

Por lo tanto, podemos concluir que a la hora de utilizar un criptosistema para


el protocolo de tres pasos de Shamir no será suficiente que nos aseguremos que
cumpla la conmutatividad de las claves, sino que habrá que ir con cuidado con
la relación que tienen los mensajes una vez han sido cifrados.

Este hecho nos hace ver que, más allá de este ejemplo concreto, en la creación
de protocolos criptográficos no solo es importante que cada una de las herra-
mientas criptográficas que se utiliza sea segura, sino que, además, su combi-
nación lo continúe siendo, hecho que, como hemos visto, no siempre sucede.
© FUOC • PID_00255021 9 Protocolos criptográficos

1.2 El criptosistema de exponenciación

Otro esquema con conmutatividad de claves lo propuso el mismo Adi Shamir.


Este sistema se basa en la exponenciación y su seguridad recae en la dificultad
del cálculo del logaritmo discreto. Es un criptosistema parecido al del RSA pero
no deben confundirse, puesto que en este caso las dos claves que se utilizan,
una para cifrar y la otra para descifrar, son dos claves secretas que únicamente
están en posesión de un solo usuario.

En primer lugar, se elige un parámetro para el intercambio, un primo p grande.


Todas las operaciones se realizarán en el cuerpo Zp . Alice genera sus claves
de la manera siguiente. Elige como clave de cifraje keA un valor aleatorio y
como clave de descifraje calcula el valor kdA tal que keA · kdA = 1 (mod p – 1). La
e
función de cifraje para un mensaje m será EkeA (m) = mkA (mod p). La función
d
de descifraje de un mensaje c será Dkd (c) = ckA (mod p). Del mismo modo,
A

Bob generará sus claves keB y kdB y utilizará las mismas funciones de cifraje y
descifraje. Con estas condiciones el protocolo queda descrito en el esquema
de la tabla 3.

Tabla 3. Esquema de tres pasos de Shamir con el cifraje de exponenciación


Paso Alice Bob
kAe c1
1. Calcula c1 = m (mod p) ––→
c e
2. ←–2– Calcula c2 = (c1 )kB mod p
kAd kBe c3
3. Calcula c3 = (c2 ) mod p = m mod p ––→
d
4. Calcula m = (c3 )kB mod p

Fijaos que, en este caso, un atacante que intercepte los tres mensajes de la co-
municación, c1 ,c2 y c3 no podrá obtener ninguna información sobre el men-
saje transmitido, puesto que las claves para cifrar solo las conocen A y B.

Ejemplo de protocolo de tres pasos de Shamir con el cifraje


de exponenciación

En este ejemplo supondremos que los dos usuarios trabajan con el parámetro p = 131.
Además, el usuario A dispondrá de la clave de cifraje keA = 21 y de la clave de descifraje
kdA = (keA )–1 (mod p – 1) = 31. Por otro lado, el usuario B también tendrá su par de claves.
La de cifraje será keB = 27 y la de descifraje kdB = (keB )–1 (mod p – 1) = 53.

Con estos parámetros, el usuario A quiere enviar en secreto el mensaje m = 15 a B y para


hacerlo los pasos del protocolo serán los que se muestran en la tabla 4.

Tabla 4. Esquema de envío del mensaje


Paso Alice Bob
125
1. c1 = 1521 (mod 131) = 125 ––––→
27
2. ←––– c2 = (125)27 mod 131 = 27
129
3. c3 = (27)31 mod 131 = 129 ––––→
4. m = (129)53 mod 131 = 15
© FUOC • PID_00255021 10 Protocolos criptográficos

2. Esquemas de compartición de secretos


.

Cuando queremos almacenar un secreto se debe tener en cuenta que hay si-
tuaciones en las que el secreto no puede ser guardado de manera centralizada
porque existe el peligro de que esta centralización suponga un punto débil en
la seguridad. En estas situaciones el concepto de centralización puede tener
diferentes vertientes. Por ejemplo, imaginémonos que tenemos el código de
apertura de una caja fuerte pero no queremos que esté custodiado por una so-
la persona, porque existe el peligro de que esta persona pueda marcharse con
todo el dinero. Querríamos poder distribuir este código de forma que fuera
necesaria más de una persona para la apertura de la caja fuerte.

Otra situación, quizás más cotidiana, es el almacenamiento de contraseñas. Si


almacenamos la contraseña en un único lugar, si este lugar sufriera algún in-
cidente perderíamos la clave. Podríamos solucionar este problema guardando
la misma clave en diferentes lugares, pero esto implicaría una reducción de la
seguridad, puesto que las probabilidades de que alguien la encuentre son ma-
yores. Tal como hemos hecho con la caja fuerte, podríamos repartir el valor
de la clave en diferentes fragmentos. Fijaos que, en este caso, la posibilidad de
poder recuperar la clave solo con algunos fragmentos (y no necesariamente
con todos) es importante, puesto que si los necesitamos todos para recuperar-
la, volvemos a estar en el punto de partida: si uno de los lugares en los que
hay uno de los fragmentos de la clave sufriera algún incidente no podríamos
recuperar la clave y también la habríamos perdido.

Para resolver este tipo de situaciones tenemos los esquemas de compartición


de secretos. Estos esquemas fueron propuestos de forma independiente en
1979 por Adi Shamir y George Blakley.

.
Un esquema de compartición de secretos umbral (m,n) (en inglés
(m,n)-threshold secret sharing scheme) es un esquema que permite distri-
buir un secreto en n fragmentos diferentes, de forma que si se juntan
m o más fragmentos se puede recuperar el secreto, pero no es posible
obtener ninguna información del secreto si se dispone de menos de m
fragmentos.

Si asumimos el escenario en el cual queremos repartir un secreto S entre di-


ferentes usuarios, un esquema de compartición de secretos umbral (m,n) está
formado por n usuarios, u1 , · · · ,un . Cada usuario tiene su fragmento si del se-
creto S. Además, es necesario que se cumplan las propiedades siguientes:
© FUOC • PID_00255021 11 Protocolos criptográficos

1) Para todo i = 1, · · · ,n, el usuario ui solo conoce su fragmento si .

2) El secreto S se puede obtener a partir de m valores si diferentes para cual-


quier i ∈ {1, · · · ,n}.

3) Dados m–1 valores diferentes, si , no se puede obtener ninguna información


de S.

2.1 Esquema de compartición de secretos polinómico

Un esquema para compartir secretos umbral (m,n) bastante utilizado es el pro-


puesto por Adi Shamir basado en la interpolación polinómica.

Supongamos que queremos compartir el secreto S utilizando un esquema de


umbral (m,n). Esto quiere decir que tenemos que crear n fragmentos y que es
suficiente teniendo m para reconstruirlo, pero que menos de esta cantidad no
nos será suficiente. En este tipo de esquema habrá un superusuario, el gestor,
que será el encargado de, partiendo del secreto S, generar los n fragmentos. Co-
mo parámetros públicos tendremos un número primo p tal que p > n y p > S.

Para construir los fragmentos, el gestor construye un polinomio a(x) de grado


m – 1 con coeficientes ai en Zp , es decir, a(x) ∈ Zp [x]. Este polinomio tendrá
como coeficientes valores aleatorios, salvo el término independiente, que será
exactamente el valor secreto S, es decir, podemos expresar el polinomio de la
manera siguiente:

a(x) = S + a1 x + a2 x2 + · · · + am–1 xm–1 (mod p)

La generación de los fragmentos se realizará de la manera siguiente: el gestor


elige n valores aleatorios de Zp , {x1 , · · · ,xn }, y para cada valor calcula su eva-
luación por el polinomio, es decir, a(xi ) = S + a1 xi + a2 x2i + · · · + am–1 xm–1
i (mod p);
el polinomio a(x) se mantiene en secreto y solo lo conoce el gestor, pero se
puede eliminar una vez se han generado los fragmentos.

Cada participante recibe como fragmento del secreto el par {xi ,a(xi )}, es decir,
un valor xi y su evaluación en el polinomio a(xi ). Podremos recuperar el secre-
to si tenemos m fragmentos planteando el sistema de ecuaciones siguiente.

a(x1 ) = S + a1 x1 + a2 x21 + · · · + am–1 xm–1


1 (mod p)

a(x2 ) = S + a1 x2 + a2 x22 + · · · + am–1 xm–1


2 (mod p)
.. ..
. .

a(xm ) = S + a1 xm + a2 x2m + · · · + am–1 xm–1


m (mod p)

Si nos fijamos, en este sistema tenemos m incógnitas, correspondientes a los


m coeficientes de los polinomios S,a1 ,a2 , · · · ,am–1 y también hay m ecuaciones,
por lo cual al resolverlo obtendremos el valor de las incógnitas y en particu-
lar la que nos interesa, que es el valor secreto S. Además, este sistema siem-
pre tendrá solución, un solución única, porque interviene el determinante de
Vandermonde.
© FUOC • PID_00255021 12 Protocolos criptográficos

Ejemplo de protocolo de compartición de secretos umbral (3,5)

Supongamos que tenemos cinco usuarios u1 ,u2 ,u3 ,u4 ,u5 que quieren repartirse el valor
secreto S = 673. Para hacerlo utilizarán el esquema de compartición de secretos polinó-
mico de Shamir y trabajarán con el primo p = 1931. Describiremos los dos procesos de un
esquema de compartición de secretos: la generación de los fragmentos y la recuperación
del secreto.

Generación de los fragmentos

Dado que con tres usuarios será suficiente para recuperar el secreto, el gestor construirá
un polinomio de grado 2 con coeficientes en Z1931 donde el término independiente sea
el secreto S = 673. Así, el gestor elegirá dos valores aleatorios para crear el polinomio,
por ejemplo, 436 y 806 y construirá el polinomio a(x) = 673 + 806x + 436x2 . Con este
polinomio, procederá a construir los fragmentos de cada usuario evaluando el polinomio
en un componente x para cada participante. Si suponemos que u1 tiene el componente
x = 1 y u2 el componente x2 = 2, y así para cada usuario, tendremos las evaluaciones
siguientes:

a(1) = 673 + 806 · 1 + 436 · 12 = 1915 (mod 1931)


2
a(2) = 673 + 806 · 2 + 436 · 2 = 167 (mod 1931)
2
a(3) = 673 + 806 · 3 + 436 · 3 = 1222 (mod 1931)
2
a(4) = 673 + 806 · 4 + 436 · 4 = 1218 (mod 1931)
2
a(5) = 673 + 806 · 5 + 436 · 5 = 155 (mod 1931)

Por lo tanto, el usuario u1 recibirá el fragmento [1,1915], el usuario u2 el fragmento


[2,167], el usuario u3 el fragmento [3,1222], el usuario u4 el fragmento [4,1218] y el
usuario u5 el fragmento [5,155].

Recuperación del secreto

Supongamos ahora que tres de los cinco usuarios se reúnen para recuperar el secreto. Su-
pongamos que son los usuarios u1 , u4 y u5 (pero habríamos podido elegir tres usuarios
cualesquiera). Los fragmentos de estos usuarios son [1,1915], [4,1218] y [5,155], respec-
tivamente. Como estos valores son puntos del polinomio utilizado para generar los frag-
mentos, podemos plantear el sistema de ecuaciones siguiente:

S + a1 · 1 + a2 · 1 2 = 1915 (mod 1931)

S + a1 · 4 + a2 · 4 2 = 1218 (mod 1931)

S + a1 · 5 + a2 · 5 2 = 155 (mod 1931)

Como solo nos interesa resolver el sistema para la variable S, que es el secreto, podemos
aplicar el método de Kramer. Así pues, obtenemos lo siguiente:

1915 1 1
1218 4 16
155 5 25 352
= = 352 · 161 = 673 (mod 1931)
12
1 1 1
1 4 16
1 5 25
© FUOC • PID_00255021 13 Protocolos criptográficos

2.2 Problemáticas de los esquemas de compartición de secretos

En la práctica, los esquemas de compartición de secretos tienen una serie de


restricciones que hacen que su uso requiera construcciones mucho más com-
plejas que las que hemos presentado aquí.

El primer punto que hay que tener en cuenta en un esquema de compartición


de secretos es la confianza que se deposita en el gestor del sistema. Fijaos que
el gestor es el que se encarga de generar el polinomio que permitirá crear los
fragmentos de cada participante y, para hacerlo, necesita el valor del secreto.
Por lo tanto, es necesario que el gestor sea una tercera parte de confianza o
bien que este proceso se realice con las garantías de seguridad necesarias.

Por otro lado, también nos podríamos preguntar qué pasaría si uno de los par-
ticipantes diera un valor aleatorio en vez de su fragmento. Lo cierto es que el
secreto no se recuperaría y, más aun, no sabríamos quién ha sido el culpable.
Y todavía peor, el atacante podría utilizar el secreto recuperado erróneamen-
te, su fragmento falso y su fragmento correcto para recuperar el secreto real
sin la ayuda del resto de participantes, mientras que el resto de participantes
continuarían sin poder recuperar el secreto.

Para resolver estos problemas hay esquemas de compartición de secretos más


elaborados que resisten este tipo de ataques, pero su discusión se escapa del
alcance de esta asignatura.

Fijaos, sin embargo, en que todas estas problemáticas no se aplican cuando


solo queremos utilizar el esquema de compartición de secretos para almacenar
una contraseña de manera distribuida y segura, puesto que en este caso, tanto
el gestor como los usuarios que proporcionarán los fragmentos son todos el
mismo.
© FUOC • PID_00255021 14 Protocolos criptográficos

3. Firmas ciegas
.

Otro de los protocolos interesantes en criptografía son las firmas ciegas, un


protocolo que se utiliza para firmar digitalmente mensajes de manera especial.

.
En un protocolo de firma ciega (en inglés, blind signature) el usuario
A consigue la firma de un mensaje m por parte del usuario B sin que B
sepa qué mensaje ha firmado.

El concepto de firma ciega lo propuso David Chaum en 1982 para usarlo en


esquemas de pago anónimo.

Para imaginarnos cómo funciona un protocolo de firma ciega es interesante


utilizar una analogía en términos de papeles y firmas manuscritas. La idea es
que el usuario A tiene el documento que debe firmar B y en vez de propor-
cionárselo directamente (hecho que haría que B pudiera ver el contenido), A
lo pone dentro de un sobre. La peculiaridad de este sobre es que está hecho
de papel carbón, es decir, si escribimos algo fuera del sobre se calcará en el
interior. En particular, si B hace una firma manuscrita fuera del sobre, cuando
posteriormente saquemos el documento del interior del sobre tendremos el
documento firmado por las propiedades de calca del sobre de papel carbón.
Además, B no habrá podido ver el contenido del documento que ha firmado.

Igual que con otros protocolos criptográficos, no es obvio qué utilidad puede
tener que un usuario pueda firmar un documento sin saber lo que firma. Aun
así, a lo largo de este apartado veremos en qué situaciones tienen aplicabilidad
las firmas ciegas.

3.1 Firma ciega con RSA

Dado que un protocolo de firma ciega pretende generar la firma digital de


un mensaje, este protocolo siempre incluirá un esquema de firma digital en
concreto. A continuación, veremos un protocolo de firma ciega basado en
RSA. Este mismo protocolo lo ideó David Chaum cuando propuso el concepto
de firma ciega.

Denotaremos por m el mensaje que A quiere tener firmado por B. B firmará


digitalmente sus mensajes con un esquema RSA. Para hacerlo utilizará su clave
privada d. La clave pública correspondiente a esta clave privada la denotare-
mos por (e,n). El protocolo se desarrollará en los pasos siguientes:
© FUOC • PID_00255021 15 Protocolos criptográficos

1) A elige un valor aleatorio r en Zn , que sea invertible, y lo cifra con la clave


pública de B, es decir, calcula t = r e (mod n). El valor t es el valor que utilizará
para tapar el mensaje m que B tiene que firmar. Para hacerlo, A calculará m′ =
m · t (mod n) y enviará el valor m′ a B.

2) Al recibir m′ , B simplemente realizará la firma sobre este valor de mane-


ra estándar, utilizando su clave privada d. Así obtendrá s′ = (m′ )d (mod n) y
enviará el valor s′ a A.

3) A destapará la firma hecha por B simplemente dividiendo la firma que ha


s′
recibido de B, s′ , por el valor aleatorio r generado en el primer paso, s = r .

Veamos el esquema del protocolo gráficamente en la tabla 5.

Tabla 5. Esquema gráfico del protocolo


Paso Alice Bob
1. Elige r ∈R Zn
Calcula t = r e mod n
Tapado :
m′
calcula m′ = m · t mod n –––→
2. Firma el valor m′ calculando:
s′
←–– s′ = (m′ )d mod n
3. Obtiene la firma de m calculando
s′
s= r
(destapado)

Fijaos que el valor s destapado por A en el paso 3 efectivamente corresponde


a la firma del mensaje original m. Esto es así porque:

s′ (m′ )d (m · t)d md · t d md · (r e )d md · r
s= = = = = = = md (mod n)
r r r r r r

Ejemplo de protocolo de firma ciega con RSA

Supongamos que el usuario A quiere que el usuario B le firme el mensaje m = 15. El


usuario B utiliza para realizar firmas digitales el criptosistema RSA. La clave pública de B
es (e,n) = (19,551) y la correspondiente clave privada d = 451. Con estos parámetros, el
protocolo de firma ciega entre A y B será el que se muestra en la tabla 6.

Tabla 6. Esquema gráfico del protocolo


Paso Alice Bob
1. Elige 25 ∈R Z551
Calcula t = 2519 = 310 mod 551
Tapado :
m′ =242
calcula m′ = 15 · 310 = 242 mod 551 –––––––––→

2. Firma el valor m′ = 242 calculando:
s′ =14
←––––––– s′ = 242451 = 14 mod 551
3. Obtiene la firma de m calculando
14
s= 25
= 14 · 529 = 243 (mod 551)

Fijaos que el valor s = 243 es efectivamente la firma del mensaje original m = 15, puesto
que s = 15451 = 243 mod 551.
© FUOC • PID_00255021 16 Protocolos criptográficos

3.2 Aplicaciones de las firmas ciegas

Hay múltiples escenarios en que las firmas ciegas son interesantes de utilizar
y la mayoría de ellos tienen que ver con la protección del anonimato. Vea-
mos cómo se pueden usar en el escenario siguiente para tener identificadores
anónimos.

Suponed un sistema con una autoridad central que tiene identificados a sus
usuarios. Para permitir utilizar los recursos del sistema de forma anónima, los
usuarios pueden obtener unos seudónimos por parte de la autoridad central.
Estos seudónimos están firmados digitalmente por la autoridad central una
vez ha comprobado que el usuario tiene suficientes privilegios para utilizar los
correspondientes recursos. La firma de la autoridad central sobre el seudónimo
tiene que permitir su validación por una tercera parte cuando el usuario quiere
utilizar el seudónimo ante alguno de los recursos del sistema donde se quiere
autenticar.

Con este escenario, si la autoridad central firma los seudónimos de los usua-
rios de manera estándar, los usuarios obtendrán anonimato ante los terceros
con quienes se autentifiquen utilizando el seudónimo. Ahora bien, no conse-
guirán anonimato ante la autoridad central, puesto que la autoridad central,
cuando firma el seudónimo, sabe la identidad real del usuario y, por lo tan-
to, la correspondencia entre la identidad real y el seudónimo, con lo cual se
rompe el anonimato.

Una opción para resolver este problema es que la autoridad central firme el
seudónimo pero utilizando un protocolo de firma ciega. De este modo, la au-
toridad central daría validez al seudónimo pero no sabría a quién corresponde
el seudónimo.

3.3 Protección contra abusos en las firmas ciegas

A pesar de que las firmas ciegas son interesantes de utilizar en algunos esce-
narios, lo cierto es que la posibilidad de que un usuario firme un valor sin
saber exactamente lo que firma puede comportar también algunos problemas
de seguridad. Por ejemplo, como ya hemos estudiado anteriormente, la reali-
zación de una firma digital es equivalente al descifraje de un mensaje. Por lo
tanto, un usuario A que hubiera interceptado un mensaje cifrado c dirigido a
B podría utilizar un protocolo de firma ciega para tapar c, hacerlo firmar por B
y, de este modo, obtener el mensaje descifrado.

Así mismo, en escenarios más complejos, el contenido de lo que firma B puede


ser relevante y A puede quererlo modificar para sacar provecho. Por ejemplo,
imaginémonos el caso descrito en el subapartado 3.2 en el cual el usuario A
quiere obtener un seudónimo para autenticarse. B solo le proporcionará el
seudónimo en función de los privilegios que tenga A en el sistema. Además,
© FUOC • PID_00255021 17 Protocolos criptográficos

el seudónimo tiene que incluir esta información para que A lo pueda usar.
Un posible ataque de A sería presentar un seudónimo con unas atribuciones
diferentes de las que el sistema le permite. Si B tiene que realizar una firma
ciega, no podrá verificar estas condiciones y podría llegar a firmar condiciones
no deseadas.

Para evitar este tipo de acciones hay diferentes estrategias. La primera es utili-
zar una clave específica para las firmas ciegas. Es decir, una clave pública que
incorporara la misma semántica de la autorización. Por ejemplo, cualquier
S1 ,S2
seudónimo firmado con la clave pública que tuviera el valor concreto PKCA
solo serviría para autenticarse ante los recursos S1 y S2 . Para autenticarse ante
el recurso S3 , por ejemplo, habría que tener el seudónimo firmado con la cla-
S3
ve pública PKCA . Además, estas claves públicas de firmas ciegas solo se usarían
en este contexto y nunca se utilizarían para cifrar mensajes, de forma que el
ataque para el descifraje no sería posible.

A pesar de que esta protección que asocia una semántica a una clave es facti-
ble, en la práctica puede comportar la gestión de un volumen de claves muy
grande. Para evitarlo, otra opción es utilizar el procedimiento de “revolver y
elegir” para asegurar que B no firma nada fraudulento. El proceso funciona
como se muestra en la figura 1.

Figura 1. Esquema del mecanismo de revolver y elegir


© FUOC • PID_00255021 18 Protocolos criptográficos

El usuario A, en vez de enviar un único valor tapado m′ a B, calcula múltiples


valores tapados m′1 ,m′2 , · · · ,m′n . Es importante que cada valor se haya tapado
con un elemento diferente, es decir, para cada m′i tendremos un valor ti dife-
rente, siguiendo la nomenclatura que hemos utilizado en el esquema de firma
ciega. Cada uno de estos valores tapados m′1 ,m′2 , · · · ,m′n contiene cierta infor-
mación que B debe poder validar antes de firmar y otra información diferente
para cada uno de los valores m′i . Por ejemplo, en el caso de los seudónimos
para la autenticación, la parte que tiene que poder validar B es la parte que
indica a qué recursos permite acceder el seudónimo. Esta parte tiene que ser
la misma para todos los valores. La parte que es diferente para cada valor m′i
es la que indicará el seudónimo que A usará.

Una vez A ha enviado los n valores tapados m′1 ,m′2 , · · · ,m′n a B, B pedirá a A
que destape n – 1 valores, es decir, A proporcionará los correspondientes ti
para n – 1 valores que B habrá elegido aleatoriamente. Una vez destapados,
B podrá comprobar que la parte que tiene que validar coincide en todos y
cada uno de los n – 1 valores que ha destapado. Si es así, asumirá que el valor
que le falta para destapar (el cual no puede destapar porque A mantiene el
correspondiente ti para hacerlo) también cumple las condiciones estipuladas.
Por lo tanto, puede proceder a firmar ciegamente este valor.

Fijaos que cada uno de los valores que ha destapado A puede contener un
seudónimo diferente, de forma que B no sabe qué seudónimo habrá en el
valor que ha firmado. Por otro lado, la probabilidad de que A pueda engañar a
B para conseguir que firme algún contenido que no quiera se puede hacer tan
pequeña como se quiera, puesto que su valor es de 1n .
© FUOC • PID_00255021 19 Protocolos criptográficos

4. Pruebas de conocimiento nulo


.

Uno de los usos de la criptografía es la gestión de la información secreta. En


ocasiones la gestión de esta información puede comportar que nos interese
convencer a alguien de que conocemos cierta información secreta pero sin
revelar esta información. Dicho de otro modo, nos interesa un mecanismo
para poder demostrar que sabemos un secreto sin revelarlo. Este concepto,
bautizado con el nombre de pruebas de conocimiento nulo, lo introdujeron
S. Goldwasser, S. Micali y C. Rackoff en 1985.

Una prueba de conocimiento nulo (en inglés, zero-knowledge proof) es


un protocolo entre dos usuarios por el cual el usuario que actúa de
probador, P, permite demostrar que conoce un cierto valor secreto s
ante un usuario verificador, V, sin proporcionar el valor s. Al final del
protocolo, V estará convencido de que P conoce el valor s y a la vez V
no habrá obtenido ninguna información sobre este valor.

Por lo tanto, una prueba de conocimiento nulo tiene que cumplir las propie-
dades siguientes:

1) Corrección: si el probador conoce el valor s tiene que poder convencer al


verificador de que efectivamente lo conoce.

2) Robustez: la probabilidad de que el probador engañe al verificador tiene


que ser muy pequeña, es decir, si el probador no conoce el valor secreto s, la
probabilidad de que la prueba de conocimiento nulo se ejecute correctamente
es muy pequeña.

3) Conocimiento nulo: una vez realizada la prueba de conocimiento nulo, el


verificador no tiene ninguna información sobre el valor secreto s que el pro-
bador conoce. En particular, el verificador no puede probar ante una tercera
persona, ni por medio de una prueba de conocimiento nulo, que conoce el
secreto.

Un ejemplo gráfico para entender la mecánica de la mayoría de las pruebas


de conocimiento nulo es el que propusieron J. J. Quisquater y L. Guillou.
Como vemos en la figura 2, se basaron en una cueva con una entrada con un
único camino. En un punto de la cueva, el camino se bifurca y da una vuelta
hasta volverse a unir con la otra parte del camino. Ahora bien, el camino está
cerrado por una puerta que se abre por medio de una palabra secreta.
© FUOC • PID_00255021 20 Protocolos criptográficos

Figura 2. Gráfico de la cueva del ejemplo

Pepe (P) conoce esta palabra secreta y quiere convencer a Vicente (V) de que
la conoce, pero no quiere darle esta clave. Para hacerlo ejecutan la prueba
siguiente de conocimiento nulo:

1) Vicente se queda en la entrada de la cueva (punto A del gráfico) mientras


que Pepe entra dentro y elige uno de los dos caminos hasta llegar a la puerta.
Por lo tanto, puede estar en el punto C o bien en el punto D dependiendo de
la elección que haya hecho.

2) Una vez Pepe haya llegado ante la puerta, Vicente avanzará hasta la bifur-
cación (punto B). Desde allí elige uno de los dos caminos, el de la derecha o el
de la izquierda y llama a Pepe para que salga por el camino que ha elegido.

3) Como Pepe conoce la clave que abre la puerta no tendrá ningún problema
para salir por el lado que Vicente le ha pedido.

Comprobamos ahora si con este ejemplo se cumplen las tres propiedades que Ejemplo rebuscado
hemos indicado anteriormente.
Como veremos más adelante,
este ejemplo ilustra cómo
funciona una prueba de
1) Si Pepe conoce la clave siempre podrá salir por el lado que Vicente le pide conocimiento nulo, pero,
y, por lo tanto, podrá demostrar que tiene el conocimiento que quiere probar. obviamente, para nuestro
propósito sería suficiente con
Si volviéramos a hacer el experimento y lo repitiéramos tantas veces como hacer entrar a Pepe por la
derecha y hacerlo salir por la
quisiéramos, Pepe saldría siempre por el lado que Vicente le pidiera, puesto izquierda.
que conoce la clave que abre la puerta y, por lo tanto, no tendría ningún
problema.

2) Si Pepe no conoce la clave de la puerta no tendría que poder convencer a


Vicente de que sí la conoce. Fijaos que si no conoce la clave, al hacer la prueba
Pepe tendría una probabilidad de 1/2 de acertar el camino que le pedirá más
tarde Vicente, puesto que si al adentrarse en la cueva lo acierta, después podrá
salir por el mismo lado y no tendrá que utilizar la clave de la puerta que de
hecho no sabe. Ahora bien, si el proceso lo repetimos otra vez, Pepe solo tiene
© FUOC • PID_00255021 21 Protocolos criptográficos

1/4 de probabilidad de engañarlo. Ya se ve que si repetimos la prueba n veces


la probabilidad de que Pepe engañe a Vicente es de 1/2n . Así pues, si Vicente
quiere estar seguro con probabilidad 0,999023 de que Pepe sabe la palabra
secreta que abre la puerta solo es necesario que realice la prueba diez veces.

3) Una vez Vicente haya podido validar que Pepe conoce la clave, Vicente
no habrá obtenido ninguna información de la clave y tampoco puede utilizar
información de la prueba que ha hecho con Pepe, a pesar de que la haya
repetido diez veces, para poder demostrar ante un tercero que conoce la clave.

En general, las pruebas de conocimiento nulo funcionan de este modo, es de-


cir, son iterativas de forma que en cada iteración hay una probabilidad del
50% de acertar. Además, estos tipos de protocolos utilizan la técnica llamada
challenge and response, en que el verificador da al probador una información
que él ha generado aleatoriamente para que el probador la complete utilizan-
do el secreto que conoce. Esta técnica también se denomina a menudo cut
and choose, puesto que hace referencia al típico protocolo de repartir un pastel
entre dos personas, en el que una hace las partes (corta) y la otra escoge.

4.1 Prueba del conocimiento del logaritmo discreto

A continuación veremos un ejemplo concreto de una prueba de conocimien-


to nulo aplicada al conocimiento del logaritmo discreto de un valor, prueba
que fue propuesta por D. Chaum, J. Evertse y J. Van de Graaf en 1987. Ya he-
mos comentado anteriormente que el cálculo del logaritmo discreto tiene una
complejidad elevada, es decir, dados unos valores y,g y p es difícil encontrar
para qué valor x se cumple que y = g x (mod p). Por lo tanto, esta prueba de
conocimiento nulo permite al probador demostrar que conoce el valor x que
cumple la ecuación y = g x (mod p) sin necesidad de revelar este valor.

El protocolo funciona de la manera siguiente. En primer lugar, el protocolo


establece tres parámetros públicos (p,g,y), en los que p es un número primo
grande, y es un número entero tal que y < p y g es un generador del grupo
multiplicativo Zp . El probador tiene que demostrar al verificador que conoce
el valor x que satisface la ecuación y = g x (mod p). Para hacerlo, el protocolo
hace los pasos de la tabla 7.

Tabla 7. Esquema gráfico del protocolo


Paso Provador (P) Verificador (V)
1. Elige r ∈R Zp \ {0,1}
c
Calcula c = gr (mod p) –→
b
2. ←– Elige un bit aleatorio b ∈R {0,1}
h
3. Calcula h = r + b · x (mod p – 1) –→
4. Verifica que:
c · y b = gh (mod p)
© FUOC • PID_00255021 22 Protocolos criptográficos

El protocolo consiste en repetir n veces los cuatro pasos descritos anteriormen-


te. Comprobamos que se cumplen las propiedades de una prueba de conoci-
miento nulo.

1) Corrección: en el supuesto de que P conozca el valor x siempre podrá


calcular el valor h en el tercer paso del protocolo, de forma que la validación
que hará V en el paso cuatro será correcta.

2) Robustez: para verificar la propiedad de robustez, analizaremos cómo lo


haría P para intentar hacer creer a V que conoce x sin realmente saberlo. Para
hacerlo, P tiene que poder calcular el valor h del paso 3 sin conocer r. Fijaos
que en caso de que V le envíe a P el valor b = 0 en el paso 2, P calculará
h = r + b · x (mod p – 1) = r (mod p – 1) sin necesidad de saber x y este valor
será correcto y, por lo tanto, superará la validación del paso 4. Ahora bien, si
V elige b = 1 en el paso 2, entonces P no puede calcular el valor h correcto
(le falta el conocimiento de x), de forma que no podrá concluir el protocolo
correctamente. Fijaos que la probabilidad de que esto pase es de 1/2, puesto
que es la probabilidad que tiene V en el paso 2 de elegir un 0 o un 1. Por lo
tanto, si repetimos el protocolo n veces, la probabilidad de que P engañe a V
1
es de 2n .

Llegados a este punto, podríamos pensar que no parece que tenga sentido que
V en el paso 2 envíe un 0, puesto que en este caso, P no necesita conocer x.
Por lo tanto, podríamos concluir, erróneamente, que en el paso 2, V podría
enviar siempre un 1, forzando a P a conocer x. Ahora bien, esta estrategia no
es correcta. Fijémonos que si V siempre elige b = 1, P puede generar un valor
gr
r en el paso 1, pero en vez de enviar c = g r (mod p) a V puede enviar c′ = y
(mod p). Entonces, en el paso 3, P envía r en vez de r + x, pero la verificación
gr
del paso 4 será correcta porque c′ · y = y · y = gr = gh.

Por lo tanto, fijaos que si P no sabe si le llegará un 0 o un 1 en el paso 2 (y P


no conoce el secreto) no sabe qué estrategia de engaño tiene que seguir en el
gr
paso 1, es decir, si tiene que enviar c = g r (mod p) o bien c′ = y (mod p). Por
lo tanto, de una forma o de otra tiene una probabilidad de 1/2 de engañar.

3) Conocimiento nulo: el protocolo también tiene la propiedad de cono-


cimiento nulo, puesto que después de ejecutarlo, V solo conoce el valor g r
recibido en el paso 1, valor que no tiene ninguna relación con el secreto x.
Además, el valor h recibido en el paso 3 tanto puede corresponder al valor r
como al valor r + x y ambos se presentan como valores aleatorios para V y, por
lo tanto, no pueden proporcionar ninguna información de r.
© FUOC • PID_00255021 23 Protocolos criptográficos

Ejemplo de protocolo de prueba de conocimiento nulo del logaritmo discreto

Supongamos que los parámetros del protocolo son p = 89 y g = 3. El probador P conoce


el logaritmo discreto de y = 14 (mod 89), que es x = 9. Supondremos que V elige el valor
b = 1 en el paso 2. De este modo el protocolo tendría los valores de la tabla 8.

Tabla 8. Esquema gráfico del protocolo


Paso Probador (P) Verificador (V)
1. Elige r = 20 ∈R Z89 \ {0,1}
c=73
Calcula c = 320 = 73 (mod 89) ––––––→
b=1
2. ←–––– Elige un bit aleatorio b = 1
h=29
3. Calcula h = 20 + 1 · 9 = 29 (mod 88) ––––––→
4. Verifica que:
c · y b = 73 · 141 = 43 (mod 89)
gh (mod p) = 329 = 43 (mod 89)

4.2 Aplicaciones de las pruebas de conocimiento nulo

Las pruebas de conocimiento nulo tienen diferentes campos de aplicación.


El primer campo se encuentra en los sistemas de autenticación. El tradicio-
nal método de contraseña empieza a ser insuficiente para ciertas aplicaciones,
puesto que tanto si esta, de manera incorrecta, se guarda en claro como si
se guarda como imagen de una función hash en algún momento el usuario
tiene que introducirla en claro y es entonces cuando puede ser interceptada.
Además, la utilización de la misma información para diferentes procesos de
autenticación puede dar lugar a ataques de repetición en los que un atacante
utiliza información de una autenticación anterior para autenticarse posterior-
mente. Utilizando pruebas de conocimiento nulo, dado que el verificador no
puede obtener ninguna información sobre el valor secreto que tiene el proba-
dor, la posibilidad de ataques de repetición desaparece.

Otro campo en el que las pruebas de conocimiento nulo son importantes es


en la verificación de parámetros en protocolos criptográficos más complejos.
Por ejemplo, en protocolos de votación electrónica, los votantes tienen que
proporcionar ciertos parámetros para poder realizar la votación. Algunos de
estos parámetros tienen que ser secretos, para preservar el anonimato del voto,
pero a la vez deben tener ciertas características para que el protocolo funcione
correctamente. Las pruebas de conocimiento nulo se utilizan para probar que
un usuario conoce un parámetro del protocolo con ciertas características sin
tener que revelar ninguna información del parámetro en cuestión.
© FUOC • PID_00255021 24 Protocolos criptográficos

5. Protocolo de transferencia inconsciente


.

Los protocolos de transferencia inconsciente permiten que un usuario emi-


sor “transmita” información a otro usuario receptor de forma que al final de
la transmisión, el usuario receptor solo obtiene una parte de la información
“transmitida”. Además, la particularidad de estos esquemas es que, por un la-
do, el emisor no sabe qué información finalmente ha recibido el receptor y,
por el otro, el receptor no obtiene ninguna información de la información
que no le ha llegado.

El concepto de protocolo de transferencia inconsciente fue presentado por M. 0-1 OT


O. Rabin en 1981. La propuesta de Rabin era un protocolo en el cual el emi-
Este protocolo se basa en la
sor tiene un secreto y, con probabilidad 1/2 lo envía al receptor. Al final del dificultad de calcular raíces
cuadradas modulares y en la
protocolo, el receptor puede tener el secreto o no tenerlo (con probabilidad
relación de esta operación y
1/2), pero el emisor no puede saber si lo ha recibido o no. Este sería lo que se la factorización de enteros.
conoce como protocolo de transferencia inconsciente 0-1. En este apartado,
sin embargo, nos centraremos en los protocolos de transferencia inconscien-
te 1-2.

En un protocolo de transferencia inconsciente 1-2 (en inglés, 1-2 obli-


vious transfer) el usuario A tiene dos secretos s0 y s1 . Al final de la eje-
cución del protocolo entre A y B, B obtiene uno de los dos secretos con
igual probabilidad. Además, A no puede saber qué secreto ha recibido B
y B no obtendrá ninguna información sobre el secreto que no ha reci-
bido.

A continuación veremos un ejemplo concreto de este tipo de protocolo.

5.1 Protocolo de Even, Goldreich y Lempel

Este protocolo fue propuesto en 1985 por los criptógrafos Shimon Even, Oded
Goldreich y Abraham Lempel. La propuesta utiliza el criptosistema RSA para
cifrar los valores secretos que intervienen en el mismo. El protocolo permite
el intercambio inconsciente 1-2 de los secretos s0 y s1 entre el usuario A, que
es quien conoce los dos valores, y el usuario B, que es quien recibirá uno de
los dos. El funcionamiento del protocolo, así como las acciones y los mensajes
que se intercambian en el protocolo se muestra gráficamente en el esquema
de la tabla 9.
© FUOC • PID_00255021 25 Protocolos criptográficos

Tabla 9. Esquema gráfico del protocolo


Paso Alice Bob
1. Secretos s0 y s1 .
Generación de la clave:
n = p · q con p,q primos
e · d = 1 (mod ϕ (n))
(e,n,x ,x )
Genera x0 ,x1 ∈R Zn –––––––––0–––1–→
2. Elige un bit aleatorio b
Genera k ∈R Zn
v
←– Calcula v = xb + ke (mod n)
3. Calcula k0 = (v – x0 )d (mod n)
Calcula k1 = (v – x1 )d (mod n)
Calcula s0′ = s0 + k0 (mod n)
(s′ ,s′ )
Calcula s1′ = s1 + k1 (mod n) ––––0–––1–→
4. Conociendo el valor b,
calcula sb = sb′ – k (mod n)

En el paso 1, A genera el par de claves pública-privada y dos valores aleatorios,


y envía la clave pública y los valores aleatorios a B. En el paso 2, B elegirá uno
de los dos valores aleatorios y lo esconderá utilizando una clave. Fijaos que
la clave que utiliza para esconder el valor aleatorio elegido es ke . Como k ha
sido elegido aleatoriamente, ke también es un valor aleatorio y el resultado
v también aparenta un valor aleatorio para A, puesto que no conoce ni k ni
ke . En el paso 3, A calcula dos claves k0 y k1 que utilizará para esconder los
secretos s0 y s1 de la transferencia inconsciente obteniendo los valores s′0 y
s′1 . El punto importante está en cómo se calculan estas claves k0 y k1 . Si nos
fijamos, por ejemplo, en k0 , en el supuesto de que B haya elegido el valor x0
en el paso 2 tenemos que:

k0 = (v – x0 )d = (x0 + ke – x0 )d = (ke )d = k

Es decir que A habrá escondido el valor s0 con la clave k que B ha elegido en


el paso 2. Por lo tanto, B podrá descubrir el valor s0 en el paso 3 simplemente
restando el valor k. En el supuesto de que B haya elegido x1 en vez de x0 en el
paso 2, podrá recuperar el secreto s1 , puesto que k1 será igual a k. Fijaos que
en este segundo caso (B ha elegido x1 ) B no puede hacer nada con el valor s′0
para intentar averiguar s0 , porque no tiene ninguna información de k0 , puesto
que:

k0 = (v – x0 )d = (x1 + ke – x0 )d ̸= k

Ejemplo de protocolo de transferencia inconsciente 1-2

Supongamos que Alice quiere hacer una transferencia inconsciente 1-2 a Bob de los se-
cretos s0 = 22 y s1 = 34. El protocolo tendría la estructura de la tabla 10.
© FUOC • PID_00255021 26 Protocolos criptográficos

Tabla 10. Esquema gráfico del protocolo


Paso Alice Bob
1. Secretos s0 = 22 y s1 = 34.
Generación de la clave:
n = 19 · 29 = 551
e = 19 y d = 451
(e=19,n=551,x =130,x =525)
Genera x0 = 130,x1 = 525 aleatorios. ––––––––––––––––––––0––––––––––1–––––––→
2. Elige un bit aleatorio b = 0
Genera k = 174
v
←– Calcula v = 130 + 17419 = 304 (mod 551)
3. Calcula k0 = (304 – 130)451 = 174 (mod 551)
Calcula k1 = (304 – 525)451 = 26 (mod 551)
Calcula s0′ = 22 + 174 = 196 (mod 551)
(s′ =196,s′ =60)
Calcula s1′ = 34 + 26 = 60 (mod 551) –––0–––––––––––1–––––→
4. Conociendo el valor b = 0,
calcula s0 = 196 – 174 = 22 (mod 551)

5.2 Aplicaciones de la transferencia inconsciente

Como ya hemos dicho antes, este protocolo por sí solo puede no tener mucho
interés, pero es la base de otros esquemas como la firma de contratos. Supon-
gamos el escenario en el cual dos usuarios A y B quieren firmar digitalmente
un contrato pero ninguno de ellos quiere enviar primero la firma al otro para
no estar en desventaja. Veamos cómo se puede aplicar la transferencia incons-
ciente 1-2 para solucionar esta situación.

El usuario A descompone su firma en 2n trozos de m bits cada uno, que deno-


taremos por {ai ,1 ≤ i ≤ 2n}. El usuario B hace lo mismo con su firma y obtiene
los trozos {bi ,1 ≤ i ≤ 2n}. Así pues, veamos el proceso:

1) A divide sus 2n trozos de su firma en n pares, por ejemplo, (a2j–1 ,a2j ) para
j = 1, · · · ,n y envía a B un elemento de cada par utilizando una transferencia
inconsciente 1-2, por lo cual B recibe a2j–1 o bien a2j , por j = 1, · · · ,n, pero A
no sabe cuál de los elementos ha recibido B (recordamos que cada elemento
del par tiene un 50% de probabilidad de ser enviado).

2) Simultáneamente en el paso 1, B hace exactamente lo mismo con sus 2n


trozos de su firma: los divide en pares y envía un elemento de cada par a A
utilizando una transferencia inconsciente 1-2.

3) A y B se envían el uno al otro el primer bit de todos sus trozos ai y bi para


i = 1, · · · ,2n, después el segundo bit, y así hasta el final. Si A quiere engañar a
B, solo tiene la probabilidad de 1/2n de conseguirlo, puesto que B ya tiene n
de los 2n números secretos del paso 1 y A no sabe cuáles son. Simétricamente,
se puede aplicar lo mismo si B quiere engañar a A.

Fijaos que de este modo, A y B pueden intercambiar la firma del contrato y


ninguno de ellos no está nunca en ventaja de más de un bit.
© FUOC • PID_00255021 27 Protocolos criptográficos

6. Protocolo multiparte seguro


.

En algunas aplicaciones nos puede interesar que un conjunto de usuarios reali-


ce un determinado cálculo, de forma que, a pesar de que cada usuario aporta
una entrada para la realización del cálculo, al final del proceso cada usuario
solo podrá obtener el resultado del cálculo, pero no podrá obtener los valo-
res de entrada de otros usuarios. Estos tipos de protocolos se conocen como
protocolos multiparte seguros.

En un protocolo multiparte seguro (en inglés, multiparty computation)


un conjunto de n participantes cooperan para evaluar el valor de una
función f sobre un conjunto de valores (v1 , · · · ,vn ) aportados por los
participantes. Como salida del protocolo, cada usuario ui obtiene la eva-
luación de la función f (v1 , · · · ,vn ) pero no obtiene ninguna información
sobre el contenido de los valores vj para j ∈ [1,n] y j ̸= i.

Como en la mayoría de protocolos criptográficos, una solución simple en este


escenario es la utilización de una tercera parte de confianza en la cual todo el
mundo confía. Esta tercera parte es la que puede realizar la evaluación de la
función f y, como todo el mundo confía en ella, todo el mundo está seguro
de que una vez cada usuario le ha entregado su trozo de información, no lo
mostrará en ninguna otra parte.

Justamente, lo que proporcionan los protocolos multiparte seguros es un me-


canismo para poder prescindir de la tercera parte de confianza. En los subapar-
tados 6.1 y 6.2 veremos dos ejemplos concretos de protocolo multiparte seguro.

6.1 El problema del millonario

Un ejemplo de un protocolo de cálculo seguro a múltiples bandas, en este caso


a dos bandas, es el protocolo propuesto por C. Yao en 1982, conocido como
el problema del millonario. En este escenario, dos millonarios, A y B, quieren
saber quién es el más rico pero no quieren revelar el valor de su fortuna. Es
decir, la función que queremos evaluar de manera segura es una comparación
del tamaño de dos valores en que cada uno de los dos participantes aporta un
valor.
© FUOC • PID_00255021 28 Protocolos criptográficos

Para simplificar un poco el problema (de hecho, sería equivalente a acotar


la fortuna que tienen los participantes) transformaremos este problema en
un problema equivalente que consistirá en lo siguiente: Alice y Bob quieren
saber quién es mayor sin decir qué edad tienen. Supondremos que los dos son
honestos y que utilizan sus edades reales.

Supondremos que Alice tiene x años y Bob y, y ninguno de los dos no tiene
más de 100, es decir, 1 ≤ x,y ≤ 100. Para realizar este protocolo utilizaremos
un criptosistema de clave pública. Así, tanto A como B tendrán cada uno de
ellos un par de claves pública y privada que serán (EA ,DA ) y (EB ,DB ), respec-
tivamente. Por otro lado, también asumiremos que los dos usuarios conocen
la clave pública del otro participante. Además, A y B también se ponen de
acuerdo en el tamaño máximo que tendrán dos de los valores utilizados en el
protocolo, ta y tb . Así pueden asegurar que los valores pa y pb elegidos en el
paso 6 son más pequeños que estos dos valores.

El protocolo funciona tal como se describe en el esquema de la tabla 11.

Tabla 11. Protocolo del millonario


Paso Alice Bob
1. Elige ta ∈R Z Elige tb ∈R Z
2. Calcula: Calcula:
ka = EB (ta ) kb = EA (tb )
Ka = k a – x Kb = kb – y
K
3. –a
––→
K
4. ←––b–
5. Calcula: Calcula:
fi = DA (Kb + i) para 1 ≤ i ≤ 100 fi′ = DB (Ka + i) para 1 ≤ i ≤ 100
6. Elige pa < tb Elige pb < ta
Calcula: Calcula:
gi = fi (mod pa ) para 1 ≤ i ≤ 100 gi′ = fi′ (mod pb ) para 1 ≤ i ≤ 100
asegurando que |gi – gj | ≥ 2 asegurando que |gi′ – gj′ | ≥ 2
para i ̸= j,1 ≤ i,j ≤ 100 para i ̸= j,1 ≤ i,j ≤ 100
Crea la secuencia: Crea la secuencia:
G = {g1 , · · · ,gx ,gx+1 + 1,gx+2 + 1, · · · ,g100 + 1,pa } G′ = {g1′ , · · · ,gy′ ,gy+1
′ ′
+ 1,gy+2 ′
+ 1, · · · ,g100 + 1,pb }
G
7. –→

G′
8. ←–––
9. Comprueba: Comprueba:
Sí G′x = ta (mod pb ), entonces y ≥ x, Sí Gy = tb (mod pa ), entonces x ≥ y,
sino y < x sino x < y

Como se puede ver en el protocolo, la idea es que tanto A como B crean una
secuencia de valores, en este caso 100, que es el máximo de la edad de los par-
ticipantes. La particularidad de estas secuencias es que, por ejemplo, tomando
la secuencia G que genera el usuario A, para índices inferiores o iguales al ín-
dice que determina la edad del usuario A, los valores son congruentes con el
valor aleatorio que ha elegido B, si la edad de A es más grande que la de B.

Las conclusiones sobre quién tiene más edad que cada usuario obtiene en el
paso 9 son correctas. Por ejemplo, el razonamiento respecto a la comproba-
© FUOC • PID_00255021 29 Protocolos criptográficos

ción del usuario B sería la siguiente: si A tiene más edad que B, es decir, x ≥ y,
entonces el valor de la posición y de la secuencia que A envía a B en el paso 7
es Gy = gy . Por lo tanto, Gy = fy (mod pa ). Como fy = DA (Kb + y) = DA (kb – y + y) =
DA (kb ) y kb = EA (tb ) nos queda que fy = DA (EA (tb )) = tb y, por lo tanto, Gy = tb
(mod pa ).

Por otro lado, si x < y, entonces el valor Gy verifica que:

Gy = gy + 1 ̸= gy = fy = tb (mod pa )

6.2 El problema del millonario socialista

En este segundo protocolo, A y B tienen cada uno su fortuna, representada


por los valores x y y, respectivamente, pero en vez de saber quién es más
rico, lo que quieren saber es si su fortuna es igual o no. La ejecución de este
protocolo es más elaborada que la del ejercicio anterior, puesto que el número
de mensajes que se intercambian es más elevado, debido a que el protocolo
utiliza como subprotocolo, en varias etapas, el protocolo de intercambio de
claves de Diffie y Hellman.

Tabla 12. Protocolo del millonario socialista


Paso Alice Bob
1. Elige a1 ,a2 ∈R Zp Elige b1 ,b2 ∈R Zp
2. Calcula: Calcula:
ha1 (mod p) hb1 (mod p)
ha2 (mod p) hb2 (mod p)
(ha1 ,ha2 )
3 –––––––––––→

(hb1 ,hb2 )
4. ←––––––––––––
5. Verifica que: Verifica que:
hb1 ̸= 1 (mod p) ha1 ̸= 1 (mod p)
hb2 ̸= 1 (mod p) ha2 ̸= 1 (mod p)
6. Calcula: Calcula:
g = (hb1 )a1 (mod p) g = (ha1 )b1 (mod p)
f = (hb2 )a2 (mod p) f = (ha1 )b2 (mod p)
7. Elige r ∈R Zp Elige s ∈R Zp
8. Calcula: Calcula:
Pa = f r (mod p) Pb = f s (mod p)
Qa = hr g x (mod p) Qb = hs gy (mod p)
(Pa ,Qa )
9 –––––––––→
(P ,Q )
10. ←––b–––––b––
11. Comprueba que: Comprueba que:
Pa ̸= Pb (mod p) Pa ̸= Pb (mod p)
Qa ̸= Qb (mod p) Qa ̸= Qb (mod p)
12. Calcula: (Qa Qb–1 )a2 Calcula: (Qa Qb–1 )b2
(Qa Qb–1 )a2
13. –––––––––––––→
(Qa Q–1 )b2
14. ←–––––––b––––––
15. Calcula: Calcula:
c = ((Qa Qb–1 )b2 )a2 (mod p) c = ((Qa Qb–1 )b2 )a2 (mod p)
16. Comprueba que: Comprueba que:
c = Pa Pb–1 (mod p) c = Pa Pb–1 (mod p)
© FUOC • PID_00255021 30 Protocolos criptográficos

El protocolo define dos parámetros generales: un número primo p y un valor


h ∈ Zp tal que h ̸= 1. El valor de p tiene que ser mayor que la fortuna tanto de
Alice como de Bob, es decir, x < p y y < p. El funcionamiento del protocolo se
muestra en el esquema de la tabla 12.

Como se puede ver en el protocolo, los primeros seis pasos corresponden a un


intercambio de claves de Diffie-Hellman que permiten que A y B compartan
dos valores f y g. La verificación final podría ser errónea en caso de que los
valores a1 ,a2 ,b1 ,b2 fueran 0, por este motivo se realiza la validación del paso 5.

Al final del protocolo, en caso de que la última comprobación del valor sea
correcta, tanto A como B pueden estar convencidos de que los dos tienen la
misma fortuna, puesto que:

Pa Pb–1 = f r (f s )–1 = f r–s = ha2 b2 (r–s) (mod p)

Por otro lado, sin embargo:

c = ((Qa Qb–1 )b2 )a2

= ((hx g x )(hs g s )–1 )a2 b2

= (h(r–s) g (x–y) )a2 b2

= (h(r–s) (ha1 b1 )(x–y) )a2 b2

= ha2 b2 (r–s) ha1 b1 a2 b2 (x–y)

= Pa Pb–1 (ha1 b1 a2 b2 (x–y) ) (mod p)

Así mismo, como los valores a1 ,a2 ,b1 ,b2 han sido elegidos aleatoriamente por
A y B, la única posibilidad de que c = Pa Pb–1 (mod p) está en el supuesto de que
x = y, es decir, que A y B tengan la misma fortuna.

En caso de que la comprobación no sea correcta querrá decir que las fortunas
no son iguales, pero ninguno de los dos sabrá quién tiene una fortuna mayor.
© FUOC • PID_00255021 31 Protocolos criptográficos

Resumen

En este módulo didáctico hemos estudiado diferentes protocolos criptográfi-


cos que permiten lograr diferentes objetivos, todos ellos relacionados con la
seguridad de la información. En primer lugar, hemos visto que dos usuarios se
pueden intercambiar un mensaje de manera secreta sin haber intercambiado
previamente ninguna clave, utilizando el protocolo de tres pasos de Shamir.
También hemos visto cómo funcionan los esquemas de compartición de se-
cretos que permiten que un secreto se descomponga en diferentes fragmentos,
de forma que con la unión de un número fijado de fragmentos se puede recu-
perar el secreto pero con menos sea imposible.

En segundo lugar, hemos estudiado también otros protocolos en los que su


aplicación directa puede no ser del todo obvia. Un ejemplo son las firmas
ciegas, en las que el signatario no conoce el mensaje que está firmando y
este hecho se puede aprovechar para protocolos de autenticación anónima.
Otro ejemplo estudiado son las pruebas de conocimiento nulo, en las que un
usuario puede demostrar ante otro que conoce un secreto sin revelar infor-
mación. También hemos visto cómo funciona un protocolo de transferencia
inconsciente en el que la comunicación entre dos usuarios se hace de forma
probabilística; así el emisor envía dos mensajes y el receptor solo recibe uno.
Ahora bien, ni el emisor sabe qué mensaje ha recibido el receptor ni el recep-
tor puede elegir cuál de los dos recibir, puesto que tiene una probabilidad del
50% de recibir uno de los dos.

Finalmente, hemos analizado dos ejemplos de protocolos multiparte seguros.


En los protocolos multiparte seguros, n usuarios quieren obtener la evaluación
de una función f (x1 ,x2 , · · · ,xn ) proporcionando cada uno de ellos una entra-
da de la función xi . El punto clave del protocolo es que todos los usuarios
tienen que obtener el resultado de la evaluación de la función, pero no pue-
den obtener ninguna información sobre las entradas que han proporcionado
el resto de usuarios. Los ejemplos estudiados han mostrado protocolos en los
que intervenían dos usuarios, uno de ellos permite evaluar la función “menor
o igual” y el otro permite evaluar la función de igualdad.
© FUOC • PID_00255021 32 Protocolos criptográficos

Ejercicios de autoevaluación

1. Reproducid el protocolo de tres pasos de Shamir para que A envíe el mensaje m = 20 a B


utilizando el criptosistema de exponenciación en que la clave de cifraje de A vale keA = 19, la
clave de descifraje de A vale kdA = 79 y las correspondientes claves de cifraje y descifraje de B
valen keB = 13 y kdB = 77, respectivamente. Supondremos, también, que utilizan p = 101.

2. Utilizad un esquema de compartición de secretos de Shamir para generar los fragmen-


tos de un sistema con umbral (3,5) para compartir el número secreto 11. Tomad como pri-
mo p = 13.

3. En un esquema de compartición de secretos polinómico de Shamir con umbral (3,6) los


participantes reciben los fragmentos (58,137),(11,48),(50,99),(80,50),(104,33),(39,114). Te-
niendo en cuenta que trabajan en Z149 , recuperad el secreto.

4. En un esquema de compartición de secretos polinómico de Shamir con umbral m = 3,


construido sobre Z13 , el usuario A tiene la evaluación del polinomio para x = 1, el usuario
B, x = 2, y el usuario C, x = 3. Los tres usuarios se reúnen para poder encontrar la clave
del sistema. Los tres usuarios hacen trampa; los usuarios A y C suman 2 a la evaluación del
polinomio en su punto, pero la clave que recuperan es la correcta. ¿Cuál es la trampa que ha
hecho el usuario B?

5. En un sistema de autentificación anónima, el usuario A tiene acceso a un recurso S. Para


poder acceder, la autoridad de certificación CA le generará una credencial que consistirá en
la firma de un mensaje m que contendrá una clave pública generada por el usuario A y el
identificador del recurso S. Para que la credencial sea anónima, la CA realizará una firma
ciega, de forma que no tendrá manera de saber cuál es la clave pública que certifica y por lo
tanto cuando A acceda al recurso la CA no podrá saberlo. Ahora bien, para asegurarse de que
A no accede a un recurso diferente, la firma ciega la realizarán con un protocolo de elegir
y revolver. Así, A preparará cinco mensajes diferentes mi tales que mi = (PKi ||S), en que PKi
será una clave pública de la cual A conoce la correspondiente clave privada y el símbolo ||
denota la concatenación. Explicitad todos los mensajes que se intercambiarán A y la CA en
este protocolo. Suponed que trabajan en Z899 y que el criptosistema de clave pública que
usamos es la RSA. Suponed que el valor S = 5 y que el par de claves (pública y privada) de
la CA son PKCA = 19,SKCA = 619. Para simplificar, no hay que indicar las correspondientes
claves privadas de las cinco claves públicas elegidas.

6. Queréis realizar una prueba de conocimiento nulo para demostrar que conocéis el loga-
ritmo discreto en base 7 de y = 94 en Z97 , es decir, el valor x tal que y = 7x (mod 97). El
problema es que realmente no conocéis el valor x pero queréis engañar a un usuario hacien-
do una prueba de conocimiento nulo y que se pueda convencer de que sí que lo conocéis.
Afortunadamente para vosotros, el generador seudoaleatorio que usa el probador tiene una
vulnerabilidad y vosotros podéis saber el valor de los bits que genera en el paso 2 del protoco-
lo. El usuario en cuestión quiere hacer una prueba de conocimiento nulo que le asegure que
conocéis el valor con probabilidad superior a 0,75. Desarrollad todo el protocolo de prueba
de conocimiento nulo asumiendo que el generador aleatorio de V produce los bits siguien-
tes: 010011100... Dad el detalle de las operaciones y valores que se intercambian los usuarios
en cada paso del protocolo.

7. Alice y Bob han tenido suerte y les ha tocado la lotería, que reparte como máximo 5
millones. Alice ha tenido más suerte que Bob y le han tocado 4 millones, mientras que a
Bob le han tocado 2. Como ninguno de ellos quiere decir qué cantidad le ha tocado, deciden
saber quién es más rico utilizando el protocolo del millonario. Desarrollad el protocolo para
que los dos puedan saber quién ha ganado más dinero sin saber cuánto dinero le ha tocado
al otro. Supondremos que utilizamos como sistema de clave pública el RSA y el par de claves
pública-privada de A vale [(eA = 2573,nA 5911),(dA = 197,nA = 5911)], mientras que el par de
B vale [(e = 3109,nB = 5191),(dB = 1795,nB = 5191)].
© FUOC • PID_00255021 33 Protocolos criptográficos

Solucionario
1. Con estos parámetros, el usuario A enviará en secreto el mensaje m = 20 a B con el
protocolo de la tabla 13.

Tabla 13. Protocolo del ejercicio 1


Paso Alice Bob
30
1. c1 = 2019 (mod 101) = 30 –––→
77
2. ←––– c2 = (30)13 mod 101 = 77
9
3. c3 = (77)79 mod 101 = 9 –→
4. m = (9)77 mod 101 = 20

2. El polinomio para generar los fragmentos estará compuesto por el término independiente
11, tendrá como grado m – 1 = 3 – 1 = 2 y como coeficientes podemos elegir aleatoriamente,
por ejemplo, los números x1 = 8 y x2 = 7. De este modo el polinomio nos queda determinado
por a(x) = 7x2 + 8x + 11 mod 13.

Para generar los fragmentos tomamos cinco valores cualquiera más pequeños que p y calcu-
lamos sus imágenes para el polinomio a(x). Tomando como valores {1,2,3,4,5} tendremos:

a(1) = 7 + 8 + 11 = 0 (mod 13)

a(2) = 28 + 16 + 11 = 3 (mod 13)

a(3) = 63 + 24 + 11 = 7 (mod 13)

a(4) = 112 + 32 + 11 = 12 (mod 13)

a(5) = 175 + 40 + 11 = 5 (mod 13)

Por lo tanto, los fragmentos de los participantes son: (1,0),(2,3),(3,7),(4,12),(5,5).

3. Dado que tenemos un sistema de compartición umbral con m = 3 podemos elegir, de entre
los diferentes fragmentos, (58,137),(11,48),(50,99),(80,50),(104,33),(39,114), cualquier con-
junto de 3 puntos para recuperar el secreto. Por ejemplo, si elegimos (50,99),(80,50),(39,114)
podemos plantear el sistema de ecuaciones siguiente:

S + a1 · 50 + a2 · 502 = 99 (mod 149)

S + a1 · 80 + a2 · 802 = 50 (mod 149)

S + a1 · 39 + a2 · 392 = 114 (mod 149)

Como solo nos interesa resolver el sistema para la variable S, que es el secreto, podemos
aplicar el método de Kramer y obtenemos:

99 50 116
50 80 142
114 39 31 36
= = 36 · 113 = 45 (mod 149)
120
1 50 116
1 80 142
1 39 31
© FUOC • PID_00255021 34 Protocolos criptográficos

4. El gestor ha utilizado el polinomio a(x) = S + a1 x + a2 x2 , en el que S es la clave del sistema.

Cuando los tres usuarios se reúnen pueden escribir el sistema siguiente:

f1 + 2 = S + a1 + a2

f2 + x = S + 2a1 + 4a2

f3 + 2 = S + 3a1 + 9a2

En este sistema f1 ,f2 ,f3 son los fragmentos respectivos de A, B y C, y x es la trampa que ha
hecho el usuario B.

La solución para la incógnita S en este sistema es la misma que la del sistema en el que
ningún participante hace trampa, puesto que el enunciado indica que han recuperado el
mismo secreto, por lo tanto:

f1 = S + a1 + a2

f2 = S + 2a1 + 4a2

f3 = S + 3a1 + 9a2

Así pues, podemos plantear la igualdad siguiente:

f1 + 2 1 1 j 1 1
f2 + x 2 4 m 2 4
f3 + 2 3 9 s 3 9
=
1 1 1 1 1 1
1 2 4 1 2 4
1 3 9 1 3 9

Además, si realizamos las operaciones de los determinantes, nos queda que 6x = 3 y, final-
mente, x = 3 · 6–1 = 7, siempre trabajando en Z13 . Por lo tanto, la trampa que ha hecho el
usuario B ha sido sumar 7 a su fragmento.

5. La solución del ejercicio se muestra a la tabla 14.

6. Como A quiere hacer creer a B que conoce el logaritmo discreto con una probabilidad de
0,75 esto quiere decir que habrá que ejecutar de manera satisfactoria tres veces del protocolo.
Como A conoce el generador seudoaleatorio, sabe que en la primera ejecución del protocolo,
en el paso 2, V elegirá b = 0, en la segunda ejecución del protocolo elegirá b = 1 y en la
tercera ejecución elegirá b = 0. Por lo tanto, para engañar a V:

• En la primera ejecución del protocolo, en el paso 1 elegiremos cualquier valor aleatorio,


por ejemplo, r = 45, que será el mismo valor que devolveremos en el paso 3, h = 45. La
validación del paso 4 hecho por V será correcta.

• En la segunda ejecución del protocolo, en el paso 1 elegiremos, por ejemplo, r = 5.


r 5
Pero enviaremos a V el valor c = gy mod p = 94 7
mod 97 = 56. Entonces en el paso 3
enviaremos h = r = 5 y la validación que hará V en el paso 4 también será correcta,
puesto que c · yb = 56 · 941 = 26 mod 97 y g h = 75 = 26 mod 97.

• En la tercera ejecución, aplicará la misma estrategia que en la primera.

7. La solución de este ejercicio se muestra en la tabla 15.


© FUOC • PID_00255021 35 Protocolos criptográficos

Tabla 14. Solución del exercicio 5


Paso Alice Bob
1. Genera 5 claves públicas: (3,8,10,11,14)
Prepara los cinco mensajes para firmar:
m1 = (3||5) = (35),m2 = (85)
m3 = (105),m4 = (115),m5 = (145)
Genera los cinco valores para taparlos: (5,8,15,23,4)
t1 = 519 = 718 (mod 899)
t2 = 819 = 872 (mod 899)
t3 = 1519 = 773 (mod 899)
t4 = 2319 = 895 (mod 899)
t5 = 419 = 473 (mod 899)
Tapa los cinco mensajes:
t
m1 ––→
1
m′1 = 35 · 718 = 857 (mod 899)
t
m2 ––→
1
m′2 = 85 · 872 = 402 (mod 899)
t
m3 ––→
1
m′3 = 105 · 773 = 255 (mod 899)
t
m4 ––→
1
m′4 = 115 · 895 = 439 (mod 899)
t (m′ ,m′ ,m′ ,m′ ,m′ )
m5 ––→
1
m′5 = 145 · 473 = 261 (mod 899) ––––––1––––2–––––3–––––4–––––5→
i=2
2. ←–––– Elige i = 2 ∈R Z5
3. Envía los valores tj
(t ,t ,t ,t )
menos el t2 seleccionado. –––1––––3–––4–––5–→
4. Destapa los valores y comprueba que
el servicio solicitado sea S = 5 (último dígito)
t
m′1 ––→
1
m1 = 35
t
m′3 ––→
3
m3 = 105
t
m′4 ––→
4
m4 = 115
t
m′5 ––→
5
m5 = 145
Firma el valor no destapado:
s2′ =371
←––––––––– s2′ = 402619 = 371 (mod 899)
5. Destapa el valor para obtener la firma de m2 :
t
s2′ ––→
2
s2 = 371
8
= 833
Como se puede ver coincide 85619 = 833 (mod 899)
© FUOC • PID_00255021 36 Protocolos criptográficos

Tabla 15. Solución del ejercicio 7


Paso Alice (x = 4) Bob (y = 2)
1. Elige ta = 1349 ∈R Z Elige tb = 1547 ∈R Z
2. Calcula: Calcula:
ka = EB (ta ) = 1465 kb = EA (tb ) = 2212
Ka = ka – x = 1461 Kb = kb – y = 2210
K =1461
3. –––a––––––––→
K =2210
4. ←––b–––––––––
5. Calcula: Calcula:
f1 = DA (Kb + 1) = 4217 f1′ = DB (Ka + 1) = 1177
f2 = DA (Kb + 2 = 1547) f2′ = DB (Ka + 2) = 573
f3 = DA (Kb + 3) = 3556 f3′ = DB (Ka + 3) = 4426
f4 = DA (Kb + 4) = 3569 f4′ = DB (Ka + 4) = 69
f5 = DA (Kb + 5) = 884 f5′ = DB (Ka + 5) = 674
6. Elige pa = 239 < tb Elige pb = 739 < ta
Calcula: Calcula:
g1 = f1 (mod pa ) = 154 g1′ = f1′ (mod pb ) = 438
g2 = f2 (mod pa ) = 113 g2′ = f2′ (mod pb ) = 573
g3 = f3 (mod pa ) = 210 g3′ = f3′ (mod pb ) = 731
g4 = f4 (mod pa ) = 223 g4′ = f4′ (mod pb ) = 69
g5 = f5 (mod pa ) = 167 g5′ = f5′ (mod pb ) = 674
Crea la secuencia: Crea la secuencia:
G = {154,113,210,223,168,239} G′ = {438,573,732,70,675,739}
G
7. –→

G′
8. ←–––
9. Como: Como:
G′4 = 70 ̸= 1349 = ta (mod 739), entonces G2 = 113 = 1547 = tb (mod 239), entonces
y < x y, por lo tanto, A tiene más dinero que B. x ≥ y y, por lo tanto, A tiene tanto o más dinero que B.
© FUOC • PID_00255021 37 Protocolos criptográficos

Glosario
cifraje de Vernam m Esquema de cifraje que consigue seguridad perfecta.

compromiso de bit m Herramienta criptográfica que permite a un usuario A comprometerse


con un valor b ante alguien B. B no podrá saber el valor b al que A se ha comprometido, pero,
posteriormente, A podrá abrir el compromiso para mostrar b a B.

esquema de compartición de secretos m Esquema por el cual se puede dividir un secreto en


diferentes fragmentos de forma que con un subconjunto de fragmentos se puede recuperar
el secreto.

esquema de compartición de secretos de interpolación polinomial m Esquema de com-


partición de secretos en el cual los fragmentos del secreto son puntos del plano y el secreto
se obtiene haciendo una interpolación polinómica de un cierto número de puntos.

esquema de compartición de secretos de umbral (m,n) m Esquema de compartición de


secretos en el cual el secreto se divide en n fragmentos y se necesitan m de ellos para recupe-
rarlo. Además, conocer m – 1 fragmentos no da ninguna información del secreto.

firma ciega f Protocolo criptográfico en el cual un usuario firma un mensaje sin que pueda
conocer el contenido del mensaje firmado.

protocolo de tres pasos de Shamir m Protocolo que permite a dos usuarios intercambiar
información cifrada sin necesidad de compartir ninguna clave.

protocolo multiparte seguro m Protocolo que permite a un conjunto de n participantes


cooperar para evaluar el valor de una función f sobre un conjunto de valores (v1 , · · · ,vn )
aportados por los participantes. Como salida del protocolo, cada usuario ui obtiene la eva-
luación de la función f (v1 , · · · ,vn ) pero no obtiene ninguna información sobre el contenido
de los valores vj para j ∈ [1,n] y j ̸= i.

prueba de conocimiento nulo f Protocolo criptográfico por el cual un participante P de-


muestra a otro V el conocimiento de alguna información sin revelar ningún detalle de esta.

probador m Parte encargada de demostrar que conoce una información en una prueba de
conocimiento nulo.

transferencia inconsciente f Protocolo criptográfico por el cual A emite mensajes en direc-


ción a B pero desconoce cuáles recibirá.

transferencia inconsciente 0-1 f Protocolo criptográfico por el cual A manda un mensaje a


B y B lo recibe con probabilidad 1/2 pero A desconoce si lo ha recibido o no.

transferencia inconsciente 1-2 f Protocolo criptográfico por el cual A envía dos mensajes a
B y B solo recibe uno de los dos con probabilidad 1/2 pero A desconoce cuál de los dos ha
recibido.

verificador m Parte encargada de verificar una prueba de conocimiento nulo.


© FUOC • PID_00255021 38 Protocolos criptográficos

Bibliografía
Brassard, G.; Crepeau, C.; Chaum, D. (1988). “Minimum Disclosure Proofs of knowled-
ge”. Journal of Computer and System Sciences (vol. 37, núm. 2).

Chaum, D. (1983). “Blind signatures for untraceable payments”. Advances in Cryptology Pro-
ceedings of Crypto (vol. 82, núm. 3, págs. 199-203). Boston: Springer-Verlag.

Chaum, D.; Evertse, J. H.; Graaf, J. van de (1988). “An improved protocol for de-
monstrating possession of discrete logarithms and some generalizations”. Proceedings of Eu-
rocrypt’87. Berlín: Springer.

Even, S.; Goldreich, O.; Lempel, A. (1985). “A Randomized Protocol for Signing Con-
tracts”. Communications of the ACM (vol. 28, núm. 6, págs. 637-647). Nueva York: Association
for Computing Machinery.

Jakobsson, M.; Yung, M. (1996). “Proving without knowing: On oblivious, agnostic and
blindfolded provers”. Advances in Cryptology - CRYPTO ’96 (vol. 1109, págs. 186-200). Berlín:
Springer.

Shamir, A. (1979). “How to Share a Secret”. Communications of the ACM (vol. 24, núm. 11,
págs. 612-613). Nueva York: Association for Computing Machinery.

También podría gustarte