Apuntes Criptografiamoderna
Apuntes Criptografiamoderna
Apuntes Criptografiamoderna
Fernando Virdia
Versión 0.0.1, junio 2024
AE CCA PKE
Figure 1: Mapa de los primitivos criptográficos que vamos a ver. En amarillo, primitivos sujetos
a postulado. En verde, primitivos que reciben una demostración matemática de seguridad. En
naranja, primitivos para los cuales no damos una demostración formal.
1
Clase 0: introducción
Fernando Virdia, versión: 0.0.1, junio 2024
2
Clase 1: preliminares matemáticos I
Fernando Virdia, versión: 0.0.1, junio 2024
1 Preliminares
1.1 Números y conjuntos
Usamos Z>0 para representar el conjunto de Números enteros positivos {1, 2, 3, . . . }. Dado n ∈ Z>0 ,
denotamos con [n] el conjunto {1, 2, . . . , n}.
Usamos ∅ para representar el conjunto vacı́o, ∅ = { }. Usamos |S| para representar la cardinalidad
de S.
Dado un valor lógico V definimos JV K := 1 si V es verdadero, y JV K ( := 0 si V es falso.
0 si b = c,
Dados dos bits b, c ∈ {0, 1}, escribimos b ⊕ c = b XOR c = Jb ̸= cK =
1 si b ̸= c.
ℓ
Usamos {0, 1} para representar el conjunto de cadenas de ℓ bits. Si ℓ = ∗, las cadenas pueden ser
arbitrariamente largas. Dada una cadena de bits c, denotamos |c| el numero de bits en c.
Si b = b1 b2 . . . bn y c = c1 c2 . . . cn son dos cadenas de n bits, escribimos b ⊕ c para representar la
cadena d = d1 d2 . . . dn donde di = bi ⊕ ci .
Lemma 1 (Desigualdad triangular) Dados x, y ∈ R, |x + y| ≤ |x| + |y|.
1.2 Probabilidad
Dado un conjunto finito S, usamos U (S) para representar la distribución de probabilidad uniforme
sobre S. Una variable aleatoria X distribuida según U (S), X ∼ U (S), es tal que
1
Pr[X = x] = ∀x ∈ S.
|S|
Dado un segundo conjunto S ′ , y una función f : S → S ′ , podemos definir una secunda variable
aleatoria Y = f (X). La distribución de Y no es necesariamente la misma de X. A veces escribimos
Pr [Y = y]
X∼U (S)
3
1.3 Aleatoriedad
Postulado 1 Dado un conjunto finito R, podemos tomar muestras ri de la distribución uniforme
sobre R, ri ∼ U (R).
Comentario 2 Generalmente, llamamos una tal muestra ri ∼ U (R), monedas (“coins”). A veces
$
escribimos ri ←
− R.
f (x)
1 : if L = ⊥ :
2 : L←[] // una tabla hash
3 : if x ̸∈ L :
$
4 : L[x] := y ←
−R
5 : return L[x]
Si D es un conjunto finito, esta definición coincide con la de una función muestreada uniforme-
mente del conjunto (finito) {f | f : D → R} de funciones de D a R.
Comentario 3 (Algoritmos “eficientes”) Durante este curso vamos a ver varios algoritmos
usados para cifrar y autenticar datos. Aunque no los tratamos de manera asintótica, vamos a
requerir implı́citamente que estos algoritmos sean eficientes. Cifrado y autenticado generalmente
tardan tiempo proporcional a |input|. Para un input de pocos bits, estas operaciones suelen tardar
pocos milisegundos o menos (en Linux, corran openssl speed para ver un ejemplo).
4
Clase 2: cifrado simétrico, secreto perfecto
Fernando Virdia, versión: 0.0.1, junio 2024
m∈M
c = Enc(k, m)
Enc Dec m′ ∈ M
Gen k∈K
Dada la sintaxis de un SKES, queremos encontrar definiciones que capturen la “seguridad” del
mensaje cifrado c = Enc(k, m).
PREGUNTA: Alguna idea de como definir la seguridad de c?
Definición 4 (Secreto perfecto, Shannon) Sea Π = (Gen, Enc, Dec) un SKES. Decimos que Π
ofrece secreto perfecto si dada la variable aleatoria k ∼ Gen(),
Comentario 6 Un SKES que otorga secreto perfecto leakea que m ∈ M. Por ejemplo, si M =
{0, 1}ℓ , leakea que |m| = ℓ.
5
Ejemplo 1 (Cifrario de Cesar) Sea K = {0, 1, . . . , 9}, M = {0, 1, . . . , 9}∗ . Supongamos m =
m0 , m1 , m2 ∈ M. Para cifrar m con llave k, sumamos mi +k mod 10 para i = 1, 2, 3. Por ejemplo,
m = 123, k = 3 =⇒ c = 456.
El cifrado de Cesar otorga secreto perfecto? No! Por ejemplo, dado m0 = 123, m1 = 555,
c = 567, podemos observar que
En nuestro ejemplo, ver C = 567 implica la imposibilidad de que M = 555, por lo cual aprendemos
algo sobre M viendo C, Pr[M = m | C = c] ̸= Pr[M = m].
Definición 5 (One-Time Pad) Sean n ∈ Z>0 , K = M = C = {0, 1}n . Π = (Gen, Enc, Dec) es
un one-time pad (OTP), si
= Pr[k = c ⊕ m0 ]
= 2−n (dado k ∼ U (K))
= Pr[k = c ⊕ m1 ]
= Pr[k ⊕ m1 = c]
= Pr[Enc(k, m1 ) = c].
Teorema 4 (Teorema de Shannon) Sea Π = (Gen, Enc, Dec) un SKES con secreto perfecto.
Entonces |K| ≥ |M|.
Demostración. Por contradicción, supongamos |K| < |M|. Idea: vamos a construir m0 , m1 , c, tales
que Pr[Enc(k, m0 ) = c] > 0 y Pr[Enc(k, m1 ) = c] = 0.
Fijemos k0 ← Gen(), m0 ∈ M, c = Enc(k0 , m0 ).
=⇒ Pr [Enc(k, m0 ) = c] ≥ Pr [k = k0 ] > 0.
k∼Gen() k∼Gen()
Ahora definamos el conjunto S := {Dec(k, c) | ∀k ∈ K} ⊂ M. Notamos que |S| ≤ |K| < |M|.
Dado que S ⊂ M y |S| < |M|, sabemos que M\S = {m | m ∈ M y m ̸∈ S} = ̸ ∅. Elijamos
m1 ∈ M\S. Supongamos que ∃k ∈ K tal que Enc(k, m1 ) = c. Si ası́ fuera, dado que Π es un
SKES, sabemos que Dec(k, c) = Dec(k, Enc(k, m1 )) = m1 , lo que implicarı́a que m1 ∈ S. Por lo
tanto ̸ ∃k ∈ K tal que Enc(k, m1 ) = c
=⇒ Pr [Enc(k, m1 ) = c] = 0.
k∼Gen()
Esto contradice la suposición que Π brinde secreto perfecto. Por lo tanto, |K| ≥ |M|. □
PREGUNTA: Por que “one-time”? Alguna idea? Vamos a ver la razón próximamente.
6
Comentario 7 El teorema de Shannon nos dice que para obtener secreto perfecto, se requiere
una llave secreta k grande al menos tanto cuanto el mensaje que se quiere ocultar. Esto nos
pondrı́a frente a la situación paradójica por la cual comunicar de manera segura un mensaje requiere
comunicar de manera segura una clave no mas breve.
La única ventaja del OTP es la a-sincronı́a. La clava puede ser comunicada de antemano, y el
mensaje determinado solo luego. Esto probablemente aun se usa en algunas embajadas.2
En la próxima clase vamos a ver nuevos postulados que nos van a permitir superar las limita-
ciones del teorema de Shannon.
2 https://archive.is/mmbtX#selection-1025.0-1025.238
7
Clase 3: seguridad computacional y pseudoaleato-
riedad
Fernando Virdia, versión: 0.0.1, junio 2024
Ahora vamos a ver relajaciones de la noción de secreto perfecto, y vamos a usar un nuevo
postulado para construir algoritmos de cifrado mas eficientes del OTP.
Comentario 10 Por que “one-time”? Supongamos que Alicia quiere comunicar con Bob, y com-
parte una clave de OTP k muestreada k ∼ Gen(). Alicia y Bob deciden de cifrar dos mensajes
usando la misma clave:
c1 = k ⊕ m1
c2 = k ⊕ m2 .
c1 ⊕ c2 = (k ⊕ m1 ) ⊕ (k ⊕ m2 )
= m1 ⊕ m2 .
c = c0 c1 . . . c9 = k0 k1 . . . k6 k7 k8 k9
⊕ 0 0 . . . 0 1 0 0,
m′ = k ⊕ c′ = $(1000000100)2 = $ 29 + 22 = $516,
Hemos visto como se puede relajar una definición de seguridad. Ahora vamos a introducir un
nuevo postulado.
8
3 PRGs, PRFs, PRPs
Ahora vamos a definir 3 familias de objetos criptográficos que vamos a utilizar para construir
mejores cifrados.
Definición 7 (PRG) Sea G : {0, 1}ℓ → {0, 1}m una función, implementable como un algoritmo
determinista eficiente. Generalmente ℓ < m. Dado un adversario aleatorio A y un bit b ∈ {0, 1},
definimos el siguiente experimento ExpPRG (A, b)
9
Clase 4: definiciones de seguridad “bit-guessing”
Fernando Virdia, versión: 0.0.1, junio 2024
Comentario 12 Este tipo de definición dice que A no logra distinguir el experimento “b = 0” del
experimento “b = 1”, si ε ≈ 0.
Esta intuición puede ser formalizada usando la equivalente definición de “bit-guessing”: bajo
las condiciones de Definition 7, G es un (ε, t)-PRG si dado el experimento ExpPRG ,
ExpPRG (A)
$
1 : b←
− {0, 1}
2 : b′ ← ExpPRG (A, b)
3 : return Jb = b′ K
1 ε
Adv(ExpPRG , A) := Pr[ExpPRG (A) ⇒ 1] − ≤ .
2 2
De consecuencia,
1
Adv(ExpPRG , A) = Pr[b′ = b] −
2
1 1
= (Pr[b′ = b | b = 0] + Pr[b′ = b | b = 1]) −
2 2
1 1
= 1 − Pr[ExpPRG (A, 0) ⇒ 1] + Pr[ExpPRG (A, 1) ⇒ 1] −
2 2
1
= Pr[ExpPRG (A, 1) ⇒ 1] − Pr[ExpPRG (A, 0) ⇒ 1]
2
1
= Adv(ExpPRG , A).
2
□
Comentario 13 Este misma equivalencia vale para la mayor parte de los experimentos que con-
sideramos en criptografı́a.
10
G
{0,1}ℓ
{0,1}2ℓ {0,1}2ℓ
distribución distribución
pseudoaleatoria uniforme
El output de G(·) ∈ {0, 1}m es muy lejano de ser uniforme en {0, 1}m , si uno puede ver “de
una” la distribución.
$
La definición de (ε, t)-PRG no dice que G(s ←− {0, 1}ℓ ) ∼ U ({0, 1}m ) si no que un adversario
A que corre en tiempo ≤ t no puede distinguirlas!
En otras palabras, si un “(ε, t)-atacante” es un adversario que termina en tiempo ≤ t con
ventaja > ε, un sistema (ε, t)-seguro es un sistema para el cual no existen (ε, t)-atacantes: un
atacante requiere correr por tiempo > t para obtener ventaja > ε, o si corre en tiempo ≤ t obtiene
solamente ventaja ≤ ε.
Contra un sistema (ε, t)-seguro pueden existir atacantes “triviales”.
• Por ejemplo, si G : {0, 1}ℓ → {0, 1}m con m = 2ℓ es un (ε, t)-PRG, el siguiente atacante
corre en tiempo ≈ 2ℓ y gana con ventaja ≈ 1 − 2ℓ :
11
Comentario 15 Generalmente, si un sistema ofrece algún tipo (ε, t)-“X-security”, decimos que
ofrece log2 (t/ε) “bits de seguridad X”. Dado λ = log2 (t/ε), obtenemos ε = 2−λ · t, indicando que
con λ bits de seguridad, es necesario trabajar ≈ 2λ tiempo para tener ventaja ≈ 1.
log 2 t
cones
128
126
hic sunt dra
124
log 2 (t/ε) = λ = 128
122
120
118
116
114
ε
0.0 0.2 0.4 0.6 0.8 1.0
Regresemos al problema del OTP: para cifrar mensajes m ∈ {0, 1}m precisamos transmitir
de manera segura una clave k ∼ U ({0, 1}m ).
PREGUNTA: Como podemos usar un PRG?
$
− {0, 1}m con una clave pseudoaleatoria k ← G(s),
Idea: Podemos remplazar la clave aleatoria k ←
$
− {0, 1}ℓ es mas corta que m.
donde s ←
Definición 8 (PR-OTP) Sean ℓ, m ∈ Z>0 con ℓ < m, K = {0, 1}ℓ , M = C = {0, 1}m . Sea
G : {0, 1}ℓ 7→ {0, 1}m un PRG. Π = (Gen, Enc, Dec) es un one-time pad pseudoaleatorio (PR-
OTP, “pseudorandom OTP”), si
Definición 9 (One-time (ε, t)-secrecy) Sea Π = (Gen, Enc, Dec) un SKES. Dado un adversario
A = (A1 , A2 ) y un bit b ∈ {0, 1}, definimos el experimento ExpOTS (A, b),
ExpOTS (A, b) m1 , m2
ExpOTS (A, b)
1 : k ← Gen()
c A
2 : m0 , m1 , σ ← A1 () k ← Gen()
3 : c ← Enc(k, mb ) c ← Enc(k, mb ) b′
′
4 : b ← A2 (c, σ)
5 : return b′
b′
12
Decimos que Π otorga one-time (ε, t)-secrecy3 si para cualquier adversario A que corre en
tiempo ≤ t y produce mensajes de igual de largo |m0 | = |m1 |, su ventaja (“advantage”) en distin-
guir b = 0 de 1 es
Pr[ExpOTS (A, 0) ⇒ 1] − Pr[ExpOTS (A, 1) ⇒ 1] ≤ ε.
13
Clase 5: “one-time-pad” pseudoaleatorio
Fernando Virdia, versión: 0.0.1, junio 2024
Lemma 4 Sea G un (ε, t)-PRG. Un PR-OTP ΠG que utiliza G, otorga (ε′ , t′ )-secrecy con ε′ = 2ε
y t′ ≈ t.
𝓑
m0, m1 ∈ {0, 1}m
ExpPRG(𝓑, b)
(|m0| = |m1|)
B(y ∈ {0, 1}m )
y ∈ {0, 1}m b←$ {0, 1}
c ← y ⨁ mb 𝓐
$
1 : b←
− {0, 1}
2 : m0 , m1 , σ ← A1 () c
3 : c ← y ⊕ mb b' ∈ {0, 1}
4 : b′ ← A2 (c, σ)
⟦b = b'⟧
5 : return Jb = b′ K
$
• Si B recibe y ←
− {0, 1}m , simula nuevamente ExpOTS para A, pero en este caso es con un
cifrado OTP!
Pr[ExpPRG (B, 1) ⇒ 1] = Pr[ExpOTS
OTP (A) ⇒ 1].
= Pr[(y ⊕ m1 ) ∈ A−1
2 (b) | R = r]
= Pr[A2 (y ⊕ m1 ; R) = b | R = r].
y
14
Sigue que,
Pr[b′ = 1 | b = 1] = Pr[A2 (y ⊕ m1 ) = 1]
= Pr[A2 (y ⊕ m0 ) = 1]
= Pr[b′ = 1 | b = 0],
Comentario 17 Otorgar (ε′ = 2ε, t′ ≈ t)-secrecy quiere decir que un atacante contra ΠG tiene
t
al máximo doble de la ventaja de un atacante contra G. En términos de bit-security, log2 ( 2ε )=
t
log2 ( ε ) − 1, i.e. solamente “un bit” de seguridad es perdido.
Si quisiéramos determinar la seguridad concreta en bits, necesitarı́amos una construcción conc-
reta de G, la cual determinarı́a (ε, t).
Ahora vamos a ver dos primitivas relacionadas al PRG, utilizadas para construir PRGs y mas.
Decimos que F es una familia de funciones (ε, t, q)-pseudoaleatoria indexada por k ∈ K (PRF,
“pseudorandom function family”), si dado cualquier adversario A que corre en tiempo ≤ t y hace
≤ q queries (consultas) a O(·), tiene ventaja
Comentario 18 Bajo el perfil teórico, un PRG requiere un input aleatorio, y retorna un solo
output pseudoaleatorio. Una PRF F (k, ·) : D → R tolera q inputs xi ∈ D no necesariamente
aleatorios, retornando siempre output pseudoaleatorio.
15
Clase 6: cifrados de bloque
Fernando Virdia, versión: 0.0.1, junio 2024
Definición 11 (PRP) Sean K, D dos conjuntos finitos. Sea π : K × D → D una función, tal que
∀k ∈ K, π(k, ·) : D → D tiene una inversa π −1 (k, ·) : D → D (tal que ∀x ∈ D, π(k, π −1 (k, x)) =
π −1 (k, π(k, x)) = x). Sean π y π −1 implementables como algoritmos deterministas eficientes.
Decimos que π es una familia de permutaciones (ε, t, q)-pseudoaleatoria indexada por k ∈ K (PRP,
“pseudorandom permutation family”), o un cifrado de bloques, si dado cualquier adversario A que
corre en tiempo ≤ t y hace ≤ q queries a O(·), tiene ventaja
Comentario 19 Una permutación π con D = {0, 1}d permuta cadenas en D, no bits en una
cadena. Por ejemplo, dado d = 3, π(k, 010) podrı́a ser 111, aunque estas cadenas tengan diferentes
números de bits = 1.
Comentario 20 Por motivos históricos y prácticos, los algoritmos de cifrado de bloque, o PRP,
son entre los componentes mas usados (correctamente y no) y estudiados de la criptologı́a. Hoy
en dı́a, el mas utilizado es el Advanced Encryption Standard (AES), que tolera D = {0, 1}128 y
presenta tres variantes: AES-128, con |k| = 128, AES-192, con |k| = 192, AES-256, con |k| = 256.
Se estima que AES-λ ofrece λ = log2 (t/ε) bits de seguridad (ε, t, q)-PRP.
k ∈ K, λ bits
16
3.1 De PRP a PRF
La idea de esta construcción es que una PRP es una PRF, si A observa pocos outputs. Para
demostrarlo, primero vemos dos lemas requeridos.
E1 ∧ Z ⇐⇒ E2 ∧ Z.
Demostración. Calculamos
q(q − 1)
Pr[∃i ̸= j : zi = zj ] ≤
2|R|
Demostración. Calculamos
_
Pr[∃i ̸= j : zi = zj ] = Pr zi = zj
i̸=j
X
≤ Pr[zi = zj ] (por la cota de la unión)
i̸=j
X 1 q 1 q(q − 1)
= = = .
|R| 2 |R| 2|R|
i̸=j
Comentario 22 El birthday bound es una cota superior “tight” o “ajustada”, o sea que el valor
efectivo de la probabilidad de colisión es muy cercano a la cota. Efectivamente, también se puede
demostrar una cota inferior muy cercana, de ≈ q(q−1)
4|R| [KL20, Lemma A.15].
1.0 p
q= |R| = 2 64
cota inferior de Pr[colisión]
0.8 cota superior de Pr[colisión]
0.6
|R| = 2 128
0.4
0.2
0.0 q
243 248 253 258 263 268 273 278 283
Figure 3: Visualizando
p las cotas en función de q, vemos que la probabilidad “salta” de ≈ 0 a ≈ 1
alrededor de q = |R|.
17
Clase 7: PRP ⇒ PRF
Fernando Virdia, versión: 0.0.1, junio 2024
Demostración. Supongamos que A sea un adversario contra π usado como una PRF con R = D,
y que evalúa O(·) sobre inputs distintos, sin perdida de generalidad. Observando ExpPRF (A, 0)
y ExpPRP (A, 0), notamos que del punto de vista de A son experimentos idénticos si F = π en
ExpPRF ,
⇒ Pr[ExpPRF (A, 0) ⇒ 1] = Pr[ExpPRP (A, 0) ⇒ 1].
Calculamos,
PRP
Adv(ExpPRF , A) = Pr[Exp
PRF
(A, 0) ⇒ 1] − Pr[ExpPRF (A, 1) ⇒ 1]
:
Ahora notamos que ExpPRP (A, 1) y ExpPRF (A, 1) son idénticos desde el punto de vista de A, dado
que el siguiente evento no sucede:
Dado que R(·) muestrea U (R) = U (D) de manera independiente si los inputs son distintos (en
cuanto π es una PRP), por la paradoja del cumpleaños Pr[Z] ≤ q(q−1)
2|R| , y de consecuencia
q(q − 1)
Adv(ExpPRF , A) ≤ Adv(ExpPRP , A) + .
2|D|
Comentario 23 El PRP-PRF switching lemma nos permite construir una PRF con R = D.
Existen construcciones con R =
̸ D, como la PRF “GGM”.
Lemma 8 (PRF ⇒ PRG) Sea F una (ε, t, q)-PRF con R = {0, 1}r . Sean x1 , . . . , xq ∈ D ele-
mentos distintos (xi ̸= xj , ∀i ̸= j). Definimos G : K → {0, 1}r·q ,
G(s ∈ K)
1 : for i = 1, . . . , q :
2 : yi ← F (k, xi )
3 : return y1 || · · · ||yq
Demostración. Supongamos un adversario A que juega ExpPRG (A, b). Sea B el siguiente adversario
contra la PRF.
18
BO
1 : for i = 1, . . . , q :
2 : yi ← O(xi )
′
3 : b ← A(y1 || · · · ||yq )
4 : return b′
=⇒ yi ∼ U ({0, 1}r )
=⇒ y ∼ U ({0, 1}r·q )
=⇒ Pr[ExpPRF (B, 1) ⇒ 1] = Pr[ExpPRG (A, 1) ⇒ 1].
=⇒ yi = F (k, xi )
=⇒ y = G(k)
=⇒ Pr[ExpPRF (B, 0) ⇒ 1] = Pr[ExpPRG (A, 0) ⇒ 1].
F (k, ·) F (k, ·)
y y
L L
F (k, y) ⊕ x
(a) Una ronda de Feistel, junto a su inversa.
Figure 4: PRF ⇒ PRP: Feistel network. Imagenes adaptadas de [Ros21, Constructions 6.9, 6.11],
usadas con permiso del autor.
19
Figure 5: PRG ⇒ PRF: construcción GGM (Goldreich-Goldwasser-Micali). Credito de ima-
gen: [Ros21].
Un resumen:
Inicialmente empezamos con el OTP: secreto perfecto, pero |k| = |m|.
Introducimos PRG/PRF/PRP: (ε, t)-secrecy, pero |k| < |m|.
Aun tenemos dos problemas:
• No podemos cifrar mas de un mensaje: c1 ⊕ c2 = m1 ⊕ m2 .
20
Clase 8: confidencialidad para mensajes múltiples
Fernando Virdia, versión: 0.0.1, junio 2024
Alicia 𝒜 Bob
c1
c2
Enc(k, · ) Enc(k, · )
c3
c4
c5
Dec(k, · ) Dec(k, · )
c6
Podrı́amos permitirle a A de ver c1 , . . . , cn . Vamos a hacer algo mas: le vamos a permitir pedir
el cifrado de mensajes arbitrarios! O sea: sin darle la clave k, le vamos a otorgar un oráculo que
calcula Enc(k, ·).
PREGUNTA: Esto podrı́a parecer insólito: como podrı́a A acceder a Enc(k, ·)? Ideas?
Decimos que Π otorga (ε, t, q)-indistinguibilidad bajo ataques de mensaje elegido (IND-CPA, “in-
distinguishibility under chosen-plaintext attacks”), si para todo adversario A que corre en tiempo
≤ t y hace ≤ q queries a O, su ventaja es
21
Comentario 26 Existen definiciones “intermedias” entre (ε, t)-secrecy y (ε, t, q)-IND-CPA. Como
referencia, vean [KL20] o [BS23].
Ejemplo 2
• El OTP no otorga IND-CPA, dado que A puede pedir O(0n , 0n ) ⇒ k, y obtenida k, puede
pedir O(0n , 1n ) ⇒ bn ⊕ k, y ası́ recuperar b.
• Ningún SKES donde Enc(k, ·) es determinista puede otorgar IND-CPA! En cuanto el siguiente
ataque aplica:
1. c1 ← O(0n , 0n )
2. c2 ← O(0n , 1n )
3. Si c1 = c2 , entonces b = 0. Si c1 ̸= c2 , entonces b = 1.
Definición 13 (PRF-CTR) Sea F : K×D → R una (ε, t, q)-PRF con D = {0, 1}d y R = {0, 1}r .
Definimos un SKES Π = (Gen, Enc, Dec) con M = {0, 1}ℓ·r y C = {0, 1}ℓ·r+d , para algún ℓ ≤ 2d /2.
m1 m2 m3 ···
$ +1 +1 +1
⊕ ⊕ ⊕
c0 c1 c2 c3 ···
Figure 6: Diagrama de Enc en PRF-CTR. Imagen adaptada de [Ros21, Construction 8.3], usada
con permiso del autor.
Comentario 27 El PRF-CTR puede ser paralelizado de manera simple, dado que los yi son
pueden ser calculados de manera independiente. Por lo tanto tiene muy buena eficiencia al cifrar
mensajes muy largos.
22
Clase 9: seguridad del cifrado “modo counter”
Fernando Virdia, versión: 0.0.1, junio 2024
Teorema 5 Sean F , Π como en Definition 13. Si F es una (ε, t, q)-PRF, Π es (ε′ , t′ , q ′ )-IND-CPA
con t′ ≈ t, q ′ = q/ℓ, ε′ = 2 · ε + 2 · q 2 · ℓ/|D|.
Demostración. Dado un adversario A que juega ExpCPA , definimos B que juega ExpPRF ,
O
B O(·) E(m0 , m1 ) Enc
g (m)
$ O
1 : b̂ ←
− {0, 1} 1 : c ← Enc
g (m )
b̂ Lo mismo de Enc en Π,
2 : b̂′ ← AE () 2 : return c pero remplazando F (k, ·)
′
3 : return Jb̂ = b̂K con O(·)
Notamos que el entorno de A en ExpPRF (B, 0) es idéntico a la variante “bit-guessing” ExpCPA (A).
Sigue que
Pr[ExpPRF (B, 0) ⇒ 1] = Pr[ExpCPA (A) ⇒ 1].
Lamentablemente, no es claro como calcular Pr[ExpPRF (B, 1) ⇒ 1] directamente. Por lo tanto,
definimos un nuevo experimento Exp(B),
g idéntico a ExpPRF (B, 1) pero donde remplazamos el
oráculo O que le viene dado a B:
• En ExpPRF (B, 1), O(·) = R(·), una función muestreada aleatoriamente.
$
• En Exp(B),
g remplazamos O(·) con un algoritmo aleatorio R̂(x) = “return $ ← − {0, 1}r ”
r
que retorna elementos muestreados de U ({0, 1} ), ignorando el valor x en input. Esto quiere
decir que mientras Pr[R(x) ̸= R(x)] = 0, Pr[R̂(x) ̸= R̂(x)] = 1 − 2−r , en cuanto R̂ no es
una función.
Sea G := Pr[ExpPRF (B, 1) ⇒ 1] − Pr[Exp(B)
g ⇒ 1] . Definir Exp
g nos permite calcular,
donde zi,j = c0,i + j − 1 mod 2d , y donde R̂(zi,j ) ∼iid U ({0, 1}r ). En particular, esta vista es
independiente de b̂ dado que
23
y de consecuencia
1
Adv(ExpCPA , A) = Pr[ExpCPA (A) ⇒ 1] − ≤ Adv(ExpPRF , B) + G.
2
Nos queda calcular G, la ventaja de distinguir ExpPRF (B, 1) de Exp(A). g Notamos que la sola
diferencia entre estos juegos es que R(·) es una función, por lo que R(x) es un valor fijo, y R̂ no.
Esta diferencia puede solo ser notada si O(·) viene llamado sobre un mismo input zi,j mas de una
vez durante el experimento.
Sea Z := “∃(i, j) ̸= (i′ , j ′ ) : zi,j = zi′ ,j ′ ” el evento por el cual O(·) viene llamado sobre un input
repetido durante el experimento. Notamos que ExpPRF (B, 1) y Exp(A) g son idénticos si Z no ocurre.
Por lo tanto, usando el lema de la diferencia,
Sea colli,i′ el evento “hay una colisión entre {zi,1 , . . . , zi,ℓ } y {zi′ ,1 , . . . , zi′ ,ℓ }”. En particular, sea
esta zi,j = zi′ ,j ′ .
Por suposición, ℓ ≤ 2d /2. Esto quiere decir que
Pr[colli,i′ | i′ = i] = 0,
dado que no puede haber una colisión en {zi,j = c0,i + j − 1 mod 2d }ℓj=1 en cuanto ℓ elementos no
son suficientes para circular modulo 2d y colisionar. Por lo tanto
′ :0
Pr[colli,i′ ] = Pr[coll i,i
′ |
i = i ] Pr[i = i′ ] + Pr[colli,i′ | i ̸= i′ ] Pr[i ̸= i′ ] ≤ Pr[colli,i′ | i ̸= i′ ].
Supongamos entonces que i ̸= i′ . Queremos calcular la probabilidad de una colisión entre
ℓ –1 posiciones de colision
ℓ posiciones de colision
Para que haya una colisión, zi,1 tiene que tener un valor que sobreponga las dos secuencias.
Solo hay 2 · ℓ − 1 tales valores posibles, lo que implica que Pr[colli,i′ | i ̸= i′ ] = 2·ℓ−1
2d
. Finalmente,
podemos calcular
q2 · ℓ
_ X q 2·ℓ−1 q · (q − 1) 2 · ℓ
Pr[Z] = Pr colli,i′ ≤ Pr[colli,i′ ] ≤ d
≤ · d ≤ d
′ ′
2 2 2 2 2
i̸=i i̸=i
q2 · ℓ
Adv(ExpCPA , A) = 2·Adv(ExpCPA , A) ≤ 2· Adv(ExpPRF , B) + Pr[Z] ≤ 2· Adv(ExpPRF , B) + d ,
2
2·q 2 ·ℓ
lo que nos da t′ ≈ t, q ′ = q/ℓ, y ε′ = 2 · ε + 2d
. □
24
Comentario 29 Nuevamente vemos una diferencia en ventaja relacionada a una probabilidad de
colisión. Este tipo de ataque es verosı́mil, como en el caso del ataque https: // sweet32. info .
Finalmente podemos cifrar múltiples mensajes de ℓ “bloques” de r bits de largo. Si un mensaje es
> ℓ bloques, se lo puede transmitir como dos mensajes. Formalmente, se lo puede demostrar como
un lema.
Lemma 9 (fixed-length IND-CPA ⇒ variable-length IND-CPA) Sea Π = (Gen, Enc, Dec)
un SKES que otorga seguridad (ε, t, q)-IND-CPA. Sea Π′ = (Gen′ , Enc′ , Dec′ ) un SKES con
• Gen′ = Gen,
25
Clase 10: adversarios activos e integridad de datos
Fernando Virdia, versión: 0.0.1, junio 2024
5 Integridad de mensajes
Hasta ahora pudimos garantizar la seguridad si A se limita a observar cifrados en transito. Ahora
consideren el siguiente escenario
Para saber si funciona, necesitamos una definición de seguridad. Que sintaxis queremos? Sirve
para verificar la autenticidad de un “mensaje” (que puede ser un cifrado).
26
m∈M
τ ← Tag(k, m)
Tag Ver 1/0
Gen k∈K
Definición 14 (MAC) Sean M, T conjuntos, K un conjunto finito. Decimos que Π = (Gen, Tag, Ver)
es un código de autenticación de mensajes (MAC, “message authentication code”) con espacio de
llave K, de mensajes M, y de etiquetas (tags) T , si
• Gen es un algoritmo aleatorio Gen : ∅ → K,
Comentario 30 Para proteger comunicaciones, va a ser necesario transmitir un tag τ junto a los
datos transmitidos. Por eso, idealmente queremos que τ sea lo mas corto posible. Posiblemente |τ |
seria independiente de |m|.
Comentario 31 Un sistema con Tag determinista tiene la ventaja de que Ver es muy simple:
Ver(k, m, τ ) := JTag(k, m) = τ K.
Dada la sintaxis arriba, cualquier Π = (Gen, Tag, Ver) es un MAC si Ver(k, m, τ ) := 1. Necesi-
tamos definir una noción de seguridad para que “1 ← Ver(k, m, τ )” tenga un significado.
Definición 15 (MAC security) Sea Π = (Gen, Tag, Ver) un MAC con espacios K, M, T .
• Al A le permitimos generar tags. Por que también no verificarlos? Podemos notar que para Π
con Ver(k, m, τ ) := JTag(k, m) = τ K, T (·) puede ser usado también para verificar. Usaremos
esta definición y tipo de MAC para simplificar la exposición. Mas allá de la estructura de
Ver, se puede demostrar que otorgarle oráculos de verificación al adversario no lo ayuda de
manera significativa [BS23, § 6.2].
27
• La noción le permite a A de mandar “replays” de mensajes previamente autenticados. Estas
no son falsificaciones, y de cualquier manera pueden si ser peligrosas para el usuario. Piensen
en el replay de una orden de compra.
Ahora si podemos demostrar que usar una PRF nos permite autenticar datos.
Lemma 10 (PRF ⇒ fixed-length MAC) Sea F : K × D → R una (ε, t, q)-PRF. Definimos un
MAC Π = (Gen, Tag, Ver)
B O () T (m)
∗ ∗ T
1 : (m , τ ) ← A () 1 : τ ← O(m)
∗ ∗
2 : if O(m ) = τ : 2 : return τ
3 : return 0 (“PRG′′ )
4 : else :
5 : return 1 (“random′′ )
Por definición de seguridad MAC, A retorna un par (m∗ , τ ∗ ) no visto antes. Dado que R tiene una
sola imagen de m∗ , A tiene que nunca haber evaluado R(m∗ ) para poderlo retornar. Por ende,
tuvo que adivinar el valor τ ∗ ∈ R. Dado que R es una función aleatoria, Pr[R(m∗ ) = τ ∗ ] = |R|
1
.
Ahora consideramos ExpPRF (B, 0). Aquı́ O = F (k, ·), una PRF. Por construcción, el entorno
de A dentro de B en ExpPRF (B, 0) es idéntico al de A en ExpMAC , cuando el Tag(k, ·) = F (k, ·).
Sigue que
Dado que A y B corren en tiempos parecidos, y que B hace una query mas a O que A a T , Π es
(ε′ , t′ , q ′ )-MAC con ε′ = ε + |R|
1
, t′ ≈ t, q ′ + 1 = q. □
Comentario 33 Un MAC con espacios de mensajes {0, 1}d con d < ∞ (“fixed-length”), puede
ser limitante en la mayor parte de los casos. Hay varias maneras de extender la amplitud de los
mensajes. Vamos a ver una técnica que utiliza funciones de hash.
28
Clase 11: seguridad informal y uso de funciones de
hash
Fernando Virdia, versión: 0.0.1, junio 2024
6 Funciones de hash
Las funciones de hash son el primitivo criptográfico probablemente mas conocido. Si alguna vez
intentarlo programar el login de una pagina web, probablemente las hayan encontrado (MD5,
SHA1–3 las mas conocidas). Son también un primitivo a menudo usado incorrectamente, poniendo
cuentas online en riesgo.
Definición 16 (Hash, informal) Una función H : {0, 1}∗ → {0, 1}ℓ se dice de “hash criptografico”
si satisface las siguientes propiedades:
• Puede ser implementada con un algoritmo determinista eficiente.
• “Preimage resistance”: dado h ∈ {0, 1}ℓ , es difı́cil encontrar x tal que H(x) = h.
• “Second preimage resistance”: dado (x, H(x)), es difı́cil encontrar x′ ̸= x tal que H(x′ ) =
H(x).
• “Collision-resistance” (CR): es difı́cil encontrar x ̸= x′ tal que H(x) = H(x′ ).
Comentario 34 Por que definiciones informales? Por que para cada propiedad, existen adver-
sarios eficientes! Por ejemplo:
• CR: dado que |{0, 1}∗ | > {0, 1}ℓ , colisiones existen necesariamente. Como H es una
función‘ fija, supongamos que x, x′ sean una colisión. A := return (x, x′ ) es un algoritmo
eficiente que retorna una colisión con probabilidad 1. Simplemente, no lo conocemos.
• Preimage resistance: es común que funciones de hash sean evaluadas en inputs de baja en-
tropı́a, predecibles. Por lo tanto es plausible que en una aplicación practica, dado h, un
algoritmo pueda retornar x tal que H(x) = h. Esta falta de entropı́a en entrada diferencia
“preimage resistance” de la definición de “seguridad PRG”.
• La falta de entropı́a en las entradas también impide una definición de second preimage resis-
tance.
Sin definiciones formales, demostrar seguridad de construcciones que las usan no es comple-
tamente posible. A menudo usamos el “modelo del oráculo aleatorio” (ROM, “random oracle
model”), que asume que H es una función completamente aleatoria. Alternativamente, algunos
textos asumen que el hash toma en input una clave, aunque en realidad no es ası́.
29
3. Sea B como arriba. El mismo razonamiento da una colisión, si elegimos nosotros x en primer
lugar.
4. Mas allá del punto 3., es posible construir funciones que son collision resistant y por lo
tanto “preimage resistant”, pero para las cuales si existe un adversario que rompe preimage
resistance sobre un subconjunto bien definido del espacio
( de input.
0||x si |x| = n,
Sea G una función de hash CR. Definimos H(x) := Por inspección, H
1||G(x) si |x| = ̸ n.
es CR dado que colisiones donde H(x) = 0 . . . son imposibles y colisiones con H(x) = 1 . . .
implican colisiones en G. Sin embargo, si h = H(x) = 0 . . . , |h| = n + 1, x puede ser
recuperado a partir de h.
□
x= x1 x2 x3 ··· xk |x|
Figure 7: Una manera común de construir funciones de hash es usando PRPs o PRFs iteradas
según el diseño de Merkle-Damgard (MD). Imagen tomada de [Ros21, Construction 11.2], usada
con permiso del autor.
BT O(m)
1 : Q ← { }, S ← { } 1 : h ← H(m)
∗ ∗ O : τ ← T (h)
2 : (m , τ ) ← A () 2
∗ ∗ : Q ← Q ∪ {(h, τ )}
3 : h ← H(m ) 3
∗ ∗ : S ← S ∪ {(m, τ )}
4 : if (h , τ ) ∈ Q : 4
Luego notamos que si (h∗ , τ ∗ ) ̸∈ Q, entonces B es un adversario valido para ExpMAC respecto a Π,
dado que retorna una nueva falsificación. Por lo tanto,
30
De otro modo, supongamos que (h∗ , τ ∗ ) ∈ Q. Por suposición de que A juega ExpMAC contra
Π′ , sabemos que retorna una nueva falsificación (m∗ , τ ∗ ) ̸∈ S = {(mi , τi )}i . Aplicando H a los
mensajes retornados y “quieriados” por A, sigue que
Lo que quiere decir que B encuentra una colisión en H, usando m∗ . =⇒ Pr[(h∗ , τ ∗ ) ∈ Q] ≤ Pr[coll].
Juntando las tres desigualdades,
usuario clave
[email protected] “messi10”
.. ..
. .
Cual es el problema? Probablemente Maria utiliza esa clave en otras paginas. Si el server
viene vulnerado y el DB es leakeado, A podrı́a obtener acceso a cuentas mas importantes.
• (Solución que se encuentra en muchos, pésimos, tutoriales):
usuario clave
[email protected] H(“03/14/1994”)
.. ..
. .
SHA-256(“03/14/1994”) = ac144fd70bcfcc4a2aa2cd97c4221b82ad03c5fe05c8347fa3e6f29b1e0a36ca,
y H es preimage- y collision-resistant, por lo cual recuperar la clave (o una equivalente) es
difı́cil. Cual es el problema?
31
• “salt and hash”,
$
Al registrar cada usuario, una nueva cadena aleatoria (salt) s ←− {0, 1}ℓ es generada. El
hash es hecho sobre “s||clave”, y el resultado es guardado junto al salt. De esta manera
el login puede ser verificado, pero cada usuario recibe una función de hash “diferente”. Es
improbable que el adversario haya precomputado H(s||x), para el s especifico del usuario,
volviendo el ataque mas improbable (aunque x tenga poca entropı́a, s||x tiene mucha).
Nota: esta es una estrategia “folclórica”. No hemos demostrado seguridad, en cuanto no
tenemos una definición de seguridad. Formalizaciones y demostraciones sobre este escenario
son muy recientes (Farshim & Tessaro [FT21], EUROCRYPT 2021).
• Aun mejor: “salt and hash”, donde el hash es una función diseñada para guardar contraseñas:
Argon2 (IETF RFC9106).
Comentario 36 No hay salt and hash bueno lo suficiente para protegerte del usar una clave
previsible como “dragonball”. De otra parte, las soluciones de password managing pueden ser
complicadas para el usuario común. Por esa razón, soluciones “multi-factor” son recomendables.
32
Clase 12: confidencialidad e integridad, el cifrado
autenticado
Fernando Virdia, versión: 0.0.1, junio 2024
7 Cifrado Autenticado
Resumen: hemos conseguido
• cifrados para mensajes múltiples y arbitrariamente largos
• MACs para cadenas de bits arbitrariamente largas
Que nos falta: integrar ambos mecanismos.
Vamos a protegernos de ambos escenarios limitando la posibilidad de A de modificar cifrados.
Definición 17 (INT-CTXT) Sea ⊥ un sı́mbolo que indica rechazo. Sea Π = (Gen, Enc, Dec) un
SKES con ⊥ ∈ M, tal que Dec puede retornar ⊥ si recibe un cifrado no valido.
Decimos que Π otorga (ε, t, q)-integridad de cifrado (INT-CTXT, “ciphertext integrity”), si cualquier
adversario A que corre en tiempo ≤ t y hace ≤ q queries a O, y que retorna c∗ ̸∈ Qc , tiene ventaja
33
Lemma 13 Sean Π, Σ, Π′ como en Definition 19. Supongamos que Π otorga (εCPA , t, q)-IND-
CPA y Σ otorga (εMAC , t, q)-MAC. Entonces Π′ otorga (ε′CPA , ε′CTXT , t′ , q ′ )-AE con ε′CPA = εCPA ,
ε′CTXT = εMAC , t′ ≈ t, q ′ = q.
B E () O(m0 , m1 )
Σ
1 : km ← Gen () 1 : ce ← E(m0 , m1 )
′ O : τ ← Tag(km , ce )
2 : b ← A () 2
′ 3 : c ← (ce , τ )
3 : return b
4 : return c
Del punto de vista de AO , el ambiente dentro de B es idéntico al de ExpCPA (A, b). Dado que B
retorna el output de A,
B T () O(m)
Π
1 : ke ← Gen () 1 : ce ← Enc(ke , m)
∗ O : τ ← T (ce )
2 : c ← A () 2
3 : (c∗e , τ ∗ ) ← c∗ 3 : c ← (ce , τ )
4 : // c∗e es el mensaje “tagueado” 4 : return c
5 : return (c∗e , τ ∗ )
Por definición de m = Dec′ (km , c = (ce , τ )), ‘Ver(km , ce , τ ) = 0’ ⇒ ‘m = ⊥’. Por contra-positivo,
es equivalente que ‘m ̸= ⊥’ ⇒ ‘Ver(km , ce , τ ) = 1’. Sigue que
34
Comentario 40 Si definiéramos la seguridad MAC de manera que a A le fuera permitido generar
nuevos tags τ ′ a partir de un mensaje ya etiquetado por T (·) (o sea, el MAC no serı́a “fuertemente”
infalsificable), el resultante cifrado EtM no otorgarı́a AE. Esto es porque A podrı́a ver un valido
cifrado c = (ce , τ ) y generar un nuevo cifrado c′ = (ce , τ ′ ). Esto podrı́a ser un problema en el
caso especifico de EtM, pero la definición de IND-CTXT es general, y no tendrı́a que solamente
funcionar para EtM.
Comentario 42 En algunas aplicaciones a nivel de red, puede ser necesario transmitir datos cifra-
dos, junto a meta-datos (e.g., “packet headers”) públicos. Por ejemplo, los meta-datos podrı́an
ser útiles para “routear” los paquetes de datos. En esta situación, una primitiva conocida como
“authenticated encryption with associated data” (AEAD) puede ser útil. Esta garantiza confiden-
cialidad de datos, e integridad del cifrado y de los meta-datos. Los dos AEAD mas famosos son
AES-GCM y Chacha20-Poly1305.
Definición 20 (Un AEAD de ejemplo) Sean Π = (GenΠ , Enc, Dec) un SKES, Σ = (GenΣ , Tag, Ver)
un arbitrary-length MAC. Definimos un AEAD
Con esto terminamos la componente simétrica. Hemos aprendido a cifrar y transmitir cifrados
de manera segura entre dos partes Alicia y Bob que comparten una misma clave secreta k. Pero
como pueden llegar Alicia y Bob a compartir tal clave? Claro, podrı́an compartirla de antemano de
persona, de manera de estar seguras que ningún adversario A pueda verla, pero esto no es conve-
niente. Todos los dı́as navegamos a paginas web, posiblemente por la primera ves, y hacemos pagos
online con diferentes entidades. Pre-compartir claves con todas seria prácticamente imposible.
En la segunda parte del curso vamos a ver como transmitir mensajes de manera segura a
entidades con las cuales no nos hemos nunca comunicado.
35
Clase 13: preliminares matemáticos II
Fernando Virdia, versión: 0.0.1, junio 2024
Definición 23 (grupo cı́clico) Un grupo G = (G, ×) se dice cı́clico si existe g ∈ G tal que el
grupo ⟨g⟩ “generado” g,
⟨g⟩ := ({g n | n ∈ Z}, ×),
es G, o sea G = ⟨g⟩.
Lemma 14 Dado un grupo G = (G, ×) de orden primo |G| = p, G es cı́clico y generado por
cualquier elemento no neutro.
1 es un generador 2 es un generador
1 mod 3 = 1 2 mod 3 = 2
1+1 mod 3 = 2 2+2 mod 3 = 4 mod 3 = 1
1+1+1 mod 3 = 3 2+2+2 mod 3 = 6 mod 3 = 0
1 + 1 + 1 + 1 mod 3 = 4 mod 3 = 1 2+2+2+2 mod 3 = 8 mod 3 = 2
36
Aquı́ podrı́amos adentrarnos en mas detalles sobre los grupos usados en criptografı́a, pero se
vuelve muy matemático. En su lugar, vamos a definir tres problemas matemáticos relacionados, y
un postulado. En criptografı́a, usamos familias de grupos que satisfacen el postulado.
$
Definición 25 (CDH, informal) Sea G un grupo cı́clico finito con generador g. Sean x ←
− [|G|],
$
y←− [|G|] muestreados independientemente. El problema computacional de Diffie-Hellman (CDH,
“computational Diffie-Hellman”) requiere, dados (g, g x , g y ), calcular g xy = (g x )y = (g y )x .
Comentario 46 CDH no puede ser mas difı́cil de DLOG (o sea, resolver DLOG ⇒ resolver
CDH). Supongamos que O es un oráculo que calcula (g, g x ) 7→ x. Dados (g, g x , g y ), calculamos
x
(g y )O(g,g ) = (g y )x = g xy .
Lemma 15 Sea G = ⟨g⟩ un grupo finito. Dada la variable aleatoria z ∼ U ([|G|]), g z es una
variable aleatoria g z ∼ U (G).
Demostración.
1
∀h ∈ G, Pr [g z = h] = Pr[z = logg h] = .
z∼U ([|G|]) |G|
□5
Definición 26 (DDH) Sea G = ⟨g⟩ un grupo cı́clico. Para simplificar notación, supongamos que
g es un “parámetro publico”, o sea un elemento fijo y disponible públicamente. Definimos el juego
ExpDDH .
ExpDDH (A, b)
$
1 : x←
− [|G|]
$
2 : y←
− [|G|]
3 : if b = 0
4 : z ←x·y
5 : else
$
6 : z←
− [|G|]
7 : b′ ← A(g x , g y , g z )
8 : return b′
Decimos que DDH es (ε, t)-difı́cil en G si cualquier adversario A que corre en tiempo ≤ t tiene
ventaja
A(ExpDDH , A) := Pr[ExpDDH (A, 0) ⇒ 1] − Pr[ExpDDH (A, 1) ⇒ 1] ≤ ε.
Comentario 47 Por motivos criptoanalı́ticos, es generalmente deseable que G tenga orden primo.
37
Clase 14: intercambio de claves de Diffie–Hellman
Fernando Virdia, versión: 0.0.1, junio 2024
38
Clase 15: cifrado de clave publica “one-time”
Fernando Virdia, versión: 0.0.1, junio 2024
donde Gen, Enc y Dec son “eficientes” (corren en tiempo ≈ log2 (|m|)).
Comentario 48 Al definir SKES, requerimos que fueran δ-correcto con δ = 0. No es ası́ con
PKES, porque varias técnicas para construir PKE resulta en sistemas eficientes si δ ≳ 0 pero
menos eficientes con δ = 0. En el curso vamos a ver solo sistemas con δ = 0.
Muchas de las ideas desarrolladas para SKE pueden ser adaptadas a PKE. Una diferencia
crucial es que A recibe pk, al ser una clave publica, y esto le permite cifrar mensajes sin requerir
un oráculo.
Decimos que Π otorga one-time (ε, t)-indistinguibilidad bajo ataques de mensaje elegido (OT-IND-
CPA, “one-time indistinguishibility under chosen-plaintext attacks”), si cualquier adversario A que
corre en tiempo ≤ t tiene ventaja
Comentario 51 Aunque esta definición le ofrece a A un solo cifrado para distinguir b, a menudo
la preferimos a una definición que ofrezca q ≥ 1 cifrados. Esto es porque demostrar OT-CPA es
mas fácil, y porque OT-IND-CPA ⇒ IND-CPA.
39
Vamos ahora a definir el PKES de ElGamal. Puede ser visto como una versión no interactiva
del KEX de Diffie-Hellman.
Definición 29 (ElGamal PKE) Sea G = (G, ×) un grupo cı́clico generado por g. Sean Ks =
[|G|], Kpk = M = C = G.
2 : sk ← x 2 : c0 ← g y
2 : return m′
3 : pk ← g x 3 : c1 ← (g x )y × m
4 : return (sk, pk) 4 : c ← (c0 , c1 )
5 : return c
m′ = c1 × c−x
0 =
x
(g )y × m × y −x
(g ) = m ∀x, y ∈ [|G|].
Lemma 16 (ElGamal PKE + (ε, t)-DDH ⇒ OT-IND-CPA) Sea G = ⟨g⟩ un grupo cı́clico
tal que DDH es (ε, t)-difı́cil. Sea Π el PKES de ElGamal definido sobre G con generador g.
Entonces Π otorga (ε′ , t′ )-OT-IND-CPA con ε′ = 2 · ε, t′ ≈ t.
B(g x , g y , g z ) O(m0 , m1 )
1 : disabled ← 0 1 : if disabled = 1 :
2 :
$
b̂ ←
− {0, 1} 2 : return ⊥
3 : disabled ← 1
3 : b̂′ ← AO (g x )
4 : c∗ ← (g y , g z · mb̂ )
4 : if b̂′ = b̂ :
5 : return c∗
5 : return 0 //“z = x · y”
6 : else
7 : return 1 //“z ∼ U ([|G|])”
ExpOT-CPA (A)
$
1 : b̂ ←
− {0, 1}
2 : b̂′ ← ExpOT-CPA (A, b̂)
3 : return Jb̂′ = b̂K
Por inspección, podemos ver que el entorno de A en ExpDDH (B, 0), es idéntico al de A en ExpOT-CPA (A)
si pk = g x y c∗0 = g y . Por ende,
40
Al ser el valor b̂′ retornado por A independiente de b̂, y al ser b̂ ∼ U ({0, 1}), sigue que
1
Pr[b̂′ ̸= b̂] = Pr[ExpDDH (B, 1) ⇒ 1] = .
2
Finalmente,
Adv(ExpOT-CPA , A) = 2 · Adv(ExpOT-CPA , A)
1
= 2 · Pr[ExpDDH (B, 0) ⇒ 1] −
2
= 2 · Pr[ExpDDH (B, 0) ⇒ 1] − Pr[ExpDDH (B, 1) ⇒ 1]
= 2 · Adv(ExpDDH , B).
41
Clase 16: cifrado de clave publica multi-mensaje
Fernando Virdia, versión: 0.0.1, junio 2024
Decimos que Π otorga (ε, t, q)-indistinguibilidad bajo ataques de mensaje elegido (IND-CPA, “in-
distinguishibility under chosen-plaintext attacks”), si cualquier adversario A que corre en tiempo
≤ t y usa ≤ q queries a O, tiene ventaja
3 : return b′ 3 : c ← Enc(pk, m0 )
4 : elseif cnt = i :
5 : c ← E(m0 , m1 )
6 : else :
7 : c ← Enc(pk, m1 )
8 : return c
Inspeccionemos el patrón de como los Bi les responden queries a A dentro de ExpOT-CPA (Bi , b).
En lo siguiente escribimos E(m) en lugar de Enc(pk, m).
numero de query
adversario b 1 ... i−1 i i+1 ... q
B1 1 E(m1 ) ... E(m1 ) E(m1 ) E(m1 ) ... E(m1 )
B1 0 E(m0 ) ... E(m1 ) E(m1 ) E(m1 ) ... E(m1 )
..
.
Bi−1 1 E(m0 ) ... E(m1 ) E(m1 ) E(m1 ) ... E(m1 )
Bi−1 0 E(m0 ) ... E(m0 ) E(m1 ) E(m1 ) ... E(m1 )
Bi 1 E(m0 ) ... E(m0 ) E(m1 ) E(m1 ) ... E(m1 )
Bi 0 E(m0 ) ... E(m0 ) E(m0 ) E(m1 ) ... E(m1 )
Bi+1 1 E(m0 ) ... E(m0 ) E(m0 ) E(m1 ) ... E(m1 )
..
.
Bq 0 E(m0 ) ... E(m0 ) E(m0 ) E(m0 ) ... E(m0 )
42
Notamos el siguiente patrón:
también notamos que del punto de vista de A, ExpCPA (A, 1) es idéntico a ExpOT-CPA (B1 , 1), y
ExpCPA (A, 0) es idéntico a ExpOT-CPA (Bq , 0). Por lo tanto,
Pr[ExpOT-CPA (Bq , 0) ⇒ 1]
− Pr[ExpOT-CPA (Bq , 1) ⇒ 1] + Pr[ExpOT-CPA (Bq−1 , 0) ⇒ 1]
= | {z }
= 0 por (⋆)
− Pr[ExpOT-CPA (B1 , 1) ⇒ 1]
Pr[ExpOT-CPA (Bq−1 , 0) ⇒ 1]
− Pr[ExpOT-CPA (Bq−1 , 1) ⇒ 1] + Pr[ExpOT-CPA (Bq−2 , 0) ⇒ 1]
OT-CPA
≤ Adv(Exp , Bq ) + | {z }
= 0 por (⋆)
− Pr[ExpOT-CPA (B1 , 1) ⇒ 1]
Notamos que Bi y A corren en tiempo parecido, por lo que t′ ≈ t, y que si A usa ≤ q queries,
ε′ ≤ q · ε. Por lo tanto, si Π es (ε, t)-OT-IND-CPA, entonces también es (q · ε, ≈ t, q)-IND-CPA. □
Comentario 53 La técnica que acabamos de usar se llama argumento hı́brido (“hybrid argu-
ment”), porque requiere definir experimentos “ibridos” entre ExpCPA (A, 0) y ExpCPA (A, 1) con los
cuales calculamos la ventaja total, utilizando la ventaja de distinguir pares de hı́bridos.
43
Clase 17: cifrado hı́brido, el modelo KEM-DEM
Fernando Virdia, versión: 0.0.1, junio 2024
k m
c c′
Una técnica mas común hoy en dı́a es remplazar el PKES con un mecanismo de encapsulamiento
de claves (KEM, “key-encapsulation mechanism”). Se puede pensar un KEM cono un sistema
de cifrado de “mensajes al azar”. Esta restricción generalmente le permite a un KEM ser mas
compacto y eficiente que un PKES que ofrece similar seguridad.
k
pk Encaps SKE Enc’
c c′
Un sistema hı́brido que utiliza un KEM se lo llama también KEM-DEM, donde el cifrado
simétrico tiene el rol de mecanismo de encapsulamiento de datos (DEM, “data-encapsulation mech-
anism”).
En la próxima clase, vamos a definir que es un KEM, y vamos a proponer definiciones de
seguridad PKE y KEM cercanas a AE, o sea “IND-CCA”. Vamos a ver un KEM que ofrece OT-
IND-CCA, y utilizarlo para construir un PKE “KEM-DEM” que ofrece seguridad IND-CCA.
44
Ası́ como en el caso de la criptografı́a simétrica, la noción de IND-CPA no nos protege de
un adversario capaz de manipular cifrados. Por ejemplo, si c = (c0 , c1 ) = (g y , g xy · m1 ) cifra un
elemento m1 ∈ G, un adversario puede generar c′ = (c0 , c1 · m2 ) para obtener un cifrado de m1 · m2 ,
de manera parecida a como se modifican cifrados simétricos CTR.
En el caso de SKES, definimos la noción de cifrado autenticado (AE), para capturar este tipo
de ataque. En este caso, definimos una nueva noción, de indistinguibilidad bajo ataques de cifrado
elegido (IND-CCA), donde le otorgamos al adversario un nuevo oráculo D(c) que dado un cifrado
c retorna Dec(sk, c) al adversario.
Una similar noción es posible con SKES también, pero innecesaria dado que AE ⇒ IND-CCA.
Cifrados elegidos son una mayor preocupación en el caso de PKE, dado que cualquiera con la clave
publica puede cifrar, y que las claves publicas pueden quedar en uso mas tiempo de las claves
secretas de los cifrados simétricos.
En la practica, un oráculo de descifrado podrı́a suceder en sistemas de cifrado de email, donde
un proveedor de correo electrónico “Daniel” podrı́a modificar un correo “De Alicia para Bob:
Enc(pkBob , m)” en “De Dan para Bob: Enc(pkBob , m)”. Al responderle a Dan, Bob podrı́a citar
los contenidos originales de m, resultando en un oráculo de descifrado.
Del punto de vista mas teórico, otorgar un oráculo D(c) y de cualquier manera obtener seguridad
IND-CCA captura la noción de que A no puede obtener c = Enc(pk, mb ), modificarlo en c′ ̸= c y
recuperar mb ← D(c′ ), por lo que aunque el cifrado no está “autenticado” de la misma manera
de que un cifrado simétrico AE si lo está, modificar cifrados en transito no le otorga al adversario
ninguna ventaja respecto a extrapolar información sobre el mensaje cifrado.
Decimos que Π otorga (ε, t, qe , qd )-indistinguibilidad bajo ataques de cifrado elegido (IND-CCA, “in-
distinguishibility under chosen-ciphertext attacks”), si cualquier adversario A que corre en tiempo
≤ t, realiza ≤ qe queries a O ( one-time: qe = 1) y realiza ≤ qd queries a D, tiene ventaja
Lemma 18 (OT-IND-CCA ⇒ IND-CCA) Sea Π = (Gen, Enc, Dec) un PKES que ofrece (ε, t, 1, qd )-
IND-CCA (i.e. OT-IND-CCA). Entonces ofrece (qe · ε, ≈ t, qe , qd )-IND-CCA con qe ∈ Z>0 .
45
Comentario 55 En el resto del curso, consideramos solamente KEMs 0-correctos.
3 : k1 ←
$
−M 3 : k ← Decaps(sk, c)
4 : return k
4 : b′ ← AD (pk, kb , c∗ )
5 : return b′
Decimos que Π otorga “one-time” (ε, t, qd )-indistinguibilidad bajo ataques de cifrado elegido (KEM
IND-CCA, “indistinguishibility under chosen-plaintext attacks”), si cualquier adversario A que
corre en tiempo ≤ t, y realiza ≤ qd queries a D, tiene ventaja
46
Clase 18: transformada de Fujisaki-Okamoto
Fernando Virdia, versión: 0.0.1, junio 2024
Definición 34 (KEM FO) Sea M un conjunto finito. Sean Π = (GenΠ , EncΠ , DecΠ ) un PKES
donde Π.R es el espacio de monedas de EncΠ , Π.M es el de mensajes, y Π.C es el de cifrados, G
una función de hash G : Π.M → Π.R, H una función de hash H : Π.M × Π.C → M. Definimos
el KEM Π′ = (Gen, Encaps, Decaps) con espacio de claves a encapsular M,
Demostración. Una demostración formal de esta variante FO puede obtenerse combinando Teore-
mas 3.2 y 3.3 en [HHK17]. □
Comentario 57 La intuición de por que FO otorga IND-CCA es que el paso de re-cifrado dentro
de Decaps garantiza de que cualquier cambiamiento aportado a un cifrado en transito c resultarı́a
en c′ ̸= c que no pasarı́a decapsulación.
47
Si Π otorga KEM OT-IND-CCA y Π′ otorga AE, entonces Πhy otorga PKE OT-IND-CCA.
Una demostración de Item 1 se encuentra en [BS23, Theorem 9.1]. Para demostrar Item 2, la idea
es de asumir un adversario A que juega una variante Exp de ExpOT-IND-CCA contra Πhy con dos
parámetros, Exp(A, b, b̂). A tiene que adivinar b dado un cifrado
$
(c0 , Enc′ (kb̂ , mb )), donde (k0 , c0 ) ← Encaps(pk) y k1 ←
− Π.M = Π′ .K.
Enchy (m0 ) ′
queremos Πhy ′
Enchy (m1 )
X0,0 := c0 , Enc (k0 , m0 ) X0,1 := c0 , Enc (k0 , m1 )
PKE OT-IND-CCA
indistinguibles por
X1,0 := c0 , Enc′ (k1 , m0 ) X1,1 := c0 , Enc′ (k1 , m1 )
′
Π OT-IND-CCA
Notamos que:
1. Si b̂ = 0, entonces (c0 , Enc′ (k0 , mb )) = Enchy (mb ), por lo que para demostrar el resultado,
queremos una cota superior para la distancia entre los {Exp(A, b, 0)}b .
2. Xb,b̂ es una función de la variable aleatoria Yb̂ := (c0 , kb̂ ) (la función es fmb (x, y) 7→ (x, Enc′ (y, mb ))).
3. Por Π ser un IND-CCA KEM, Yb,0 y Yb,1 son indistinguibles. Por data processing inequality
(Theorem 2), también lo tienen que ser Xb,0 y Xb,1 .
4. Enc′ (k1 , m0 ) y Enc′ (k1 , m1) son indistinguibles por ser Π′ un OT-IND-CCA SKES.
La semejanza de X0,0 con X0,1 , de X0,1 con X1,1 y X1,1 con X0,1 nos da el resultado.
Comentario 59 Con los cifrados del curso, Podrı́amos realizar un IND-CCA PKE combinando
un FO KEM basado sobre ElGamal PKE, junto a un AE obtenido como EtM. Un cifrado parecido
y que también otorga IND-CCA es parte del estándar ISO/IEC 18033-2 para cifrado de claves pub-
licas, bajo el nombre de DHIES (ECIES si G es una curva elı́ptica). El próximo-de-ser-estándar-
FIPS ML-KEM para cifrados post-cuánticos, llamado también Kyber, es un OT-IND-CCA KEM
obtenido de un tipo de postulado similar a DDH, a través de una variante de FO parecida a la que
nosotros vimos.
48
Clase 19: autenticado de clave publica
Fernando Virdia, versión: 0.0.1, junio 2024
10 Firmas digitales
Finalmente Alicia y Bob pueden comunicar de manera segura, sin tener que intercambiar y proteger
una clave secreta intercambiada de antemano: solo requieren la clave publica del otro.
Por ejemplo, Bob podrı́a publicar pkB en un directorio publico, tipo la guı́a telefónica. Alicia
bajarı́a pkB , y mandarı́a Enc(pkB , “De Alicia: esta es mi clave: pkA ”) a Bob, para poder intercam-
biar mensajes.
• Como hace Bob para saber que fue justamente Alicia a mandarle el mensaje? 7→ Alicia
podrı́a publicar su clave en la guı́a.
• Sobre todo, como hace Alicia para saber que pkB le pertenece a Bob?
Para resolver este problema, necesitamos dos componentes mas: firmas digitales, y una in-
fraestructura de claves publicas. En esta sección, vamos a construir firmas digitales.
Las firmas digitales sirven para comprobar la autenticidad de un mensaje m, sin requerir una
clave secreta compartida. Pueden pensarlo como una versión publica de los MACs, y por eso
sintaxis y noción de seguridad son parecidas.
m∈M
σ ← Sign(sk, m)
Sign Ver 1/0
Gen sk ∈ Ks
pk ∈ Kp
Las firmas pueden solo ser generadas con sk, y pueden solo ser verificadas con pk.
Definición 35 (DSS) Sean Kp , Ks , M, Σ conjuntos. Sea Π = (Gen, Sign, Ver) una tripla de
algoritmos eficientes, tales que
• Gen es un algoritmo aleatorio, Gen : ∅ → Ks × Kp que retorna una tupla (sk, pk);
• Sign es un algoritmo posiblemente aleatorio, Sign : Ks × M → Σ que retorna una firma σ;
• Ver es un algoritmo determinista Ver : Kp × M × Σ → {0, 1}, que retorna 1 si la firma es
“valida” y 0 si no.
Decimos que Π es un esquema de firma digital (DSS, “digital signature scheme”) δ-completo si
49
Definición 36 (SUF-CMA) Sea Π = (Gen, Sign, Ver) un DSS. Definimos un experimento ExpSUF .
Decimos que Π es (ε, t, q)-fuertemente infalsificable bajo ataques de mensaje elegido (SUF-CMA,
“strongly unforgeable under chosen-message attacks”) si cualquier A que corre en tiempo ≤ t,
realiza ≤ q queries a S, y retorna (m∗ , σ ∗ ) ̸∈ Q, tiene ventaja
Existen principalmente cuatro maneras de realizar DSS: con protocolos de identificación, con
funciones de puerta trasera, con funciones de hash y con “MPC-in-the-head”. Nosotros vamos a
cubrir el segundo método, en su forma clásica a través permutaciones de puerta trasera, que es
comúnmente utilizado en practica.
La idea es la siguiente: dado un conjunto D finito, f : D → D es una permutación (o biyección)
públicamente computable, tal que f −1 : D → D es difı́cil de computar, a menos de no conocer una
“puerta trasera”.
Para firmar un mensaje, podrı́amos usar f como clave publica, t como clave secreta, y generar
firmas σ de mensajes invirtiendo f , y calculando f (σ) como verificación.
Definición 37 (TDP) Sean T , F dos conjuntos. Sea Π = (Gen, Eval, Invert) una tripla de algo-
ritmos, tales que
• Gen es un algoritmo aleatorio, Gen : ∅ → T ×F que retorna una tupla (t, f ), con f : Df → Df
una permutación sobre un conjunto finito Df , que puede depender de f .
La dificultad de invertir una TDP se la puede “capturar” con una definición de seguridad.
Definición 38 (OW TDP) Sean Π = (Gen, Eval, Invert) una TDP. Definimos ExpOW ,
50
ExpOW (A)
1 : (t, f ) ← Gen()
$
2 : y←
− Df
3 : x ← A(f, y)
4 : return Jf (x) = yK
Decimos que Π es (ε, t)-unidireccional (OW, “one-way”), si cualquier A que corre en tiempo ≤ t
tiene ventaja
Adv(ExpOW , A) := Pr[ExpOW (A) ⇒ 1] ≤ ε.
51
Clase 20: firmas “full-domain hash”
Fernando Virdia, versión: 0.0.1, junio 2024
Vamos ahora a definir un DSS que utiliza TDPs y funciones de hash para firmar m ∈ {0, 1}∗ .
Definición 39 (TDP-FDH, o “hash-then-invert”) Sea Π = (Gen, Eval, Invert) una TDP, y
sea {Hf }f una familia de funciones de hash Hf := {0, 1}∗ → Df , donde f : Df → Df . Definimos
el DSS Π′ = (Gen′ , Sign′ , Ver′ ) de hash de dominio completo (FDH, “full-domain hash” o “invert-
then-sign”),
Comentario 63 Mas allá del tipo de primitiva usado, la mayorı́a de los DSS efectivamente firman
hashes de un mensaje, no el mensaje directamente (“hash-then-sign”). “Deshacer” la estructura
algebraica de m puede ser útil para obtener seguridad. Por ejemplo, esto es necesario si se usa la
famosa TDP de Rivest, Shamir y Adleman (RSA).
Comentario 64 Usamos m ∈ {0, 1}∗ , pero uno podrı́a definir TDP-FDH sobre cualquier dominio
R tal que H : R → Df es una función de hash.
Comentario 65 Como habrán notado, el esquema es muy parecido a usar una PRF para realizar
un MAC, remplazando la PRF (o PRP!) con la TDP.
Finalmente, demostramos que una TDP-FDH otorga SUF-CMA.
Teorema 8 (OW TDP + ROM ⇒ SUF-CMA) Sea Π una TDP, y sea Π′ el resultante DSS
obtenido como TDP-FDH. Supongamos que la familia {Hf }f es compuestas de funciones total-
mente aleatorias. Sea qS ≥ 1 el numero de queries a S(·) que le permitimos a un adversario A
contra Π′ . Si Π es (ε, t)-OW entonces Π′ es (ε′ , t′ , q ′ )-SUF-CMA con t′ ≈ t, q ′ = qS , y ε ≈ e · qS · ε,
donde e = 2, 71828 . . . es la constante de Napier.
Demostración. Sea A un adversario contra TDP-FDH. Para simplificar la demostración, vamos a
suponer que A retorna una posible firma falsificada σ ∗ sobre un mensaje m∗ solo luego de calcular
H(m). Si no fuera de ser ası́, podrı́a falsificar una firma correctamente solamente con probabilidad
1
|Df | . Sea p ∈ (0, 1) una constante, el cual valor determinaremos mas tarde. Vamos a definir B, un
adversario que juega ExpOW contra la TDP. Dado que suponemos la función H ser completamente
aleatoria, vamos a suponer que cuando A requiere H(m), calcula este valor a través de un oráculo,
que nosotros vamos a remplazar.
(f, y)
pk pk B
Algo sucede. . . m
A A
Ĥ(m)
Algo sucede. . .
H(·) B Ĥ(·)
m
Algo sucede. . .
H(m)
(m∗ , σ ∗ ) (m∗ , σ ∗ )
52
Esto puede parecer raro, pero puede ser pensado de la siguiente manera. Supongamos que A
es un programa en C, y precisa calcular un hash H(m). Posiblemente, A obtenga H a través de
una librerı́a de enlace dinámico (una DLL) contra la cual viene compilado, dado que es improbable
que la estructura de la función de hash tenga un impacto sobre la dificultad de falsificar una firma
(es común suponer que los hashes son “preimage resistant”).
Obtenido A, el adversario B decide de re-compilarla contra una diferente DLL, que implementa
otra función aleatoria Ĥ(·). La intuición es que esto no tendrı́a que reducir la probabilidad de A
de retornar una falsificación (m∗ , σ ∗ ) respecto al DSS TDP-FDH con hash Ĥ, dado que A es un
algoritmo aleatorio, y H es una función aleatoria, por lo que la distribución de la variable aleatoria
AĤ (f, y) es la misma que la de AH (f, y).
Decimos que este tipo de demostración se encuentra en el modelo del oráculo aleatorio (ROM,
“random oracle model”). Mucho ha sido debatido sobre el ROM. [KM15] cubre los aspectos mas
importantes del debate. A menudo este modelo nos permite demostrar la seguridad de esquemas
mas eficientes [BR93], que resisten la “prueba del tiempo” una ves desplegados. Por ejemplo, la
demostración de que FO es IND-CCA, también se encuentra en el ROM.
Observamos el punto de vista de A “dentro” de B. Al calcular Ĥ(m), dos cosas pueden pasar:
• Si r < p, generamos σ ∼ U (Df ), y retornamos h := f (σ). Dado que f es una permutación,
h = f (σ) también es uniformemente aleatorio, h ∼ U (Df ).
1
∀y ∈ Df , Pr [f (σ) = y] = Pr [σ = f −1 (y)] =
σ∼U (D) σ∼U (D) |Df |
53
1. Como B retorna el output de A,
Pr[ExpOW (B) ⇒ 1 | E ∧ Ĥ(m∗ ) = y] ≥ Pr[A falsifica la firma de m∗ dentro de B | E ∧ Ĥ(m∗ ) = y] (por hecho 1)
SUF
= Pr[Exp (A) ⇒ 1]. (por hecho 2)
Finalmente, observamos que los eventos E y Ĥ(m∗ ) = y son independientes, dados como B
muestrea r dentro de Ĥ, y dado que por suposición A nunca pide S(m∗ ). Por lo tanto,
p0
g ′′ (p0 ) < 0
54
qS +1 qS +1
1 − qS1+1 1 1 − 1
qS +1 1
= · = ·
1
1 − qS +1 q + 1 q +1 1 qS +1
qS +1 − qS +1
S S
qS +1
1 1
= 1− ·
qS + 1 qS
n
1 − n1 = 1/e y que qS ≫ 1,
Dado que limn→∞
1 1
g(p0 ) ≈ · .
e qS
1
Por lo tanto, si dentro de B asignamos p ← p0 = 1 − qS +1 ,
Adv(ExpOW , B)
Adv(ExpSUF , A) ≤ ≲ e · qS · Adv(ExpOW , B),
g(p0 )
y t′ ≈ t, q ′ = qS y ε′ ≈ e · qS · ε. □
Comentario 66 Notamos que las propiedades de H como función de hash no juegan un rol directo
en la demostración. Esto es porque ignoramos ser H un hash, y la consideramos una oráculo de
función aleatoria. De manera sutil, decidimos suponer que los ataques no van a ser causados
por un adversario A que invierta o ataque la estructura interna de H, y como esta posiblemente
interactúe con la estructura de la TDP.
55
Clase 21: infraestructuras de claves publicas
Fernando Virdia, versión: 0.0.1, junio 2024
56
References
[BR93] Mihir Bellare and Phillip Rogaway. Random oracles are practical: a paradigm for de-
signing efficient protocols. In Proceedings of the 1st ACM Conference on Computer and
Communications Security, CCS ’93, page 62–73, New York, NY, USA, 1993. Association
for Computing Machinery.
[BS23] Dan Boneh and Victor Shoup. A Graduate Course in Applied Cryptography. Self-
published, January 2023. Version 0.6, https://toc.cryptobook.us.
[FT21] Pooya Farshim and Stefano Tessaro. Password hashing and preprocessing. In Advances in
Cryptology – EUROCRYPT 2021: 40th Annual International Conference on the Theory
and Applications of Cryptographic Techniques, Zagreb, Croatia, October 17–21, 2021,
Proceedings, Part II, page 64–91, Berlin, Heidelberg, 2021. Springer-Verlag.
[HHK17] Dennis Hofheinz, Kathrin Hövelmanns, and Eike Kiltz. A modular analysis of the
fujisaki-okamoto transformation. In Theory of Cryptography Conference, pages 341–371.
Springer, 2017.
[KL20] Jonathan Katz and Yehuda Lindell. Introduction to Modern Cryptography. Chapman
and Hall/CRC, December 2020.
[KM15] Neal Koblitz and Alfred J Menezes. The random oracle model: a twenty-year retrospec-
tive. Designs, Codes and Cryptography, 77:587–610, 2015.
[Ros21] Mike Rosulek. The Joy of Cryptography. Self-published, January 2021. https:
//joyofcryptography.com.
57