Logo Passei Direto
Buscar

cripto

Ferramentas de estudo

Questões resolvidas

seguro, pode ser remediada usando um protocolo para que ambos usem um canal inseguro (aberto) para estabelecer uma chave privada a ser usada em suas comunicações, sem que outros tenham acesso à chave. A comunicação subsequente poderá se dar usando apenas esta chave, e o canal seguro estará, então, estabelecido. De�niremos segurança para protocolos de estabelecimento de chaves antes de apresentar o protocolo de Di�e e Hellman. Começamos com o experimento KE_EAV (�key establishment / eavesdropping�), que identi�ca a probabilidade com que o segredo (chave) comum pode ser capturado por um adversário. Experimento 9.1 (KE_EAV(Π,A, n)). 1. Duas entidades A e B, ambas conhecendo n, executam o protocolo Π. Todas as mensagens trocadas entre A e B são guardadas em uma listaM . Ambos devem calcular uma chave k (que não é incluída na lista M). 2. Um bit aleatório b é escolhido. Se b = 0, k′ é escolhida uniformemente ao acaso. Se b = 1, k′ = k. 3. A lista de mensagens M e a chave k′ são enviadas ao adversário A. 4. A envia um bit b′ 5. O resultado do experimento é um se b = b′ ou zero em caso contrário. � De�nição 9.2 (Segurança para protocolo de estabelecimento de chaves). Um protocolo de estabelecimento de chaves Π é seguro se para todo adversário polinomial A existe uma função desprezível negl tal que Pr[KE_EAV(Π,A, n) = 1] ≤ 1 2 + negl(n). � Esta noção de segurança é adequada a protocolos de estabelecimento de chaves: como há apenas dois atores e presumimos que há con�ança mútua, só temos que nos preocupar com a possibilidade de obtenção da chave por um adversário que não participa do protocolo. 9.3 Protocolo Di�e-Hellman para estabelecimento de chaves O protocolo de estabelecimento de chaves de Di�e e Hellman usa um algoritmo G que, dado um parâmetro n, retorna a descrição de um grupo cíclico G de ordem q tal que q tem n bits, e um gerador g de G. Construção 9.3 (Protocolo de Di�e e Hellman para estabelecimento de chaves). Dois participantes, A e B, estabelecem uma chave simétrica da seguinte maneira: • A usa G para obter (G, q, g) • A escolhe x ∈R Zq e calcula h1 = gx 9.3. PROTOCOLODIFFIE-HELLMAN PARA ESTABELECIMENTODE CHAVES153 • A envia (G, q, g, h1) para B • B escolhe y ∈R Zq e calcula h2 = gy. • B envia h2 para A e determina a chave secreta kB = hy1. • A recebe h2 e determina a chave secreta kA = hx2 . � Ao �nal da execução do protocolo, A como B tem chaves secretas kA e kB . Estas chaves são iguais, porque kA = hx2 = (gy)x = gxy kB = hy1 = (gx)y = gxy. É importante observar que o protocolo não especi�ca nada a respeito do grupo, exceto que q deve ter n bits. Com isso é possível usar diferentes grupos na construção prática do protocolo. Um exemplo é o ECDH (Elliptic Curve Di�e-Hellman), onde são usados pontos em uma curva elíptica. Um requisito evidente do Di�e-Hellman é que o problema do Logaritmo Discreto seja difícil � caso contrário qualquer um que observe as mensagens trocadas poderá inferir a chave. Este é, no entanto, apenas necessário. Podemos identi�car outro problema, relacionado ao logaritmo discreto, que captura a essência da di�culdade do protocolo. Este problema leva o mesmo nome do protocolo. De�nição 9.4 (Problema de Di�e-Hellman). Dados um grupo cíclico G e um gerador g gerados por um algoritmo G(1n), denotamos DHg(a, b) = gab. O problema Di�e-Hellman computacional (ou CDH, �Computational Di�e- Hellman�) consiste em calcular DHg(a, b) dados ga e gb escolhidos ao acaso em G. O problema Di�e-Hellman decisional (ou DDH, �Decisional Di�e-Hellman�) consiste em reconhecer se um elemento x foi escolhido ao acaso em G ou se é igual a DHg(a, b) para algum a e algum b gerados aleatoreamente. Dizemos que CDH e DDH são difíceis com relação a um algoritmo G se não houver algoritmo polinomial que os resolva quando os grupos são gerados por G. � Há algoritmos G para os quais não se conhece algoritmo e�ciente para resolver CDH ou DDH (mas não há tampouco prova de que não existam). O que demonstramos então é que o protocolo de Di�e-Hellman é seguro se o problema é difícil para um algoritmo G. Teorema 9.5. Se o problema Di�e-Hellman decisional é difícil para um algo- ritmo G, o protocolo Di�e-Hellman (Construção 9.3) é seguro de acordo com a De�nição 9.2 quando G é usado. Demonstração. Supomos que o grupo G usado no experimento 9.1 foi gerado por um algoritmo G. O bit b é escolhido ao acaso, então Pr[b = 0] = 1/2. Pr[KE_EAV(Π,A, n) = 1 ] = 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 1 ] + 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 0 ]. No experimento KE_EAV o adversário recebe k′, que pode ser um elemento ale- atório do grupo ou a chave. Assim, A pode ter, com igual probabilidade: • (G, q, g, h1, h2, g xy), ou • (G, q, g, h1, h2, k ′), sendo que k′ foi escolhida aleatoreamente. Distinguir entre ambos é exatamente resolver o problema Di�e-Hellman decisi- onal: Pr[KE_EAV(Π,A, n) = 1 ] = 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 1 ] + 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 0 ] = 1 2 Pr[A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 Pr[A(G, q, g, gx, gy, gz) = 0 ] = 1 2 Pr[A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 1− Pr [A(G, q, g, gx, gy, gz) = 1 ] = 1 2 Pr[A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 1− Pr [A(G, q, g, gx, gy, gz) = 1 ] = 1 2 + 1 2 ( Pr[A(G, q, g, gx, gy, gxy) = 1 ] − Pr [A(G, q, g, gx, gy, gz) = 1 ]) ≤ 1 2 + 1 2 ∣∣∣Pr[A(G, q, g, gx, gy, gxy) = 1 ] − Pr [A(G, q, g, gx, gy, gz) = 1 ]∣∣∣. Como g é gerador de G, gz é distribuído uniformemente no grupo se z for uniformemente distribuído em Zq. Se o problema Di�e-Hellman decisional é difícil para G, então existe negl desprezível tal que∣∣∣Pr[A(G, q, g, gx, gy, gxy) = 1 ] − Pr [A(G, q, g, gx, gy, gz) = 1 ]∣∣∣ ≤ negl(n). Concluímos que Pr[KE_EAV(Π,A, n) = 1 ] ≤ 1 2 + 1 2 negl(n). � Note que esta demonstração parece ter um pequeno problema: quando b = 0, o adversário recebe um elemento aleatório do grupo G, e não uma cadeia alea- tória de bits. Para que a diferença �que clara, suponha que tenhamos escolhido o grupo Zq e que a ordem do grupo seja q = 257, que é representado por 100000001 em binário. Apenas um elemento do grupo tem o primeiro bit igual a um: 256 = 100000000. Este não é um problema com a demonstração, mas um fato a que o implementador deve dar atenção: não se pode usar números diretamente para representar elementos de G; ao invés disso deve

Queremos 1 < b < 200 coprimo com 200 = 2352, e escolhemos b = 7 (que não é divisível por 2 nem por 5, e portanto pertence a Z∗200). Assim, a = 7−1 (mod φ(N)) = 7−1 (mod 200) = 143. Temos então pk = (N, b) = (303, 7) sk = (N, a) = (303, 143) Para encriptar 53 (que pertence a Z∗303), fazemos Encpk(53) = 537 (mod 303) = 275. Para decriptar 37, Decsk(275) = 275143 (mod 303) = 53. Da mesma forma que identificamos a essência da dificuldade do protocolo Diffie-Hellman, também o faremos com o RSA, definindo o problema RSA. Definição 9.21. Seja N o produto de dois primos, ambos com n bits. Seja e > 0 tal que gcd(e,N) = 1 e x ∈ Z∗N. O problema RSA computacional consiste em calcular y = x1/e (mod N). Não se conhece qualquer algoritmo eficiente para resolver o problema RSA. Sabemos que o RSA deve ser pelo menos tão difícil quanto a fatoração de inteiros: se for possível fatorar N, basta então calcular φ(N) = (p − 1)(q − 1), calcular d = e−1 (mod φ(N)) e y = xd (mod N) (é importante observar que φ(N) e e−1 não são públicos, e devem ser calculados por um adversário que pretenda quebrar o RSA). Aspectos de segurança do RSA. Esta Seção descreve alguns ataques ao RSA. Estes ataques não caracterizam qualquer fraqueza do criptossistema, e somente são possíveis quando o RSA é usado de maneira ingênua (ou incorreta). Fatoração do módulo n em p, q. A fatoração do módulo em p e q deve ser mantida em segredo. Se um atacante obtiver estes dois números, ele pode usar o algoritmo estendido de Euclides para calcular o exponente de decriptação d. De acordo com a identidade de Bézout, existem X e Y tais que mdc (e, φ(n)) = eX + φ(n)Y 1 = eX + φ(n)Y (Identidade de Bézout) eX ≡ 1 (mod φ(n)) (def. de congruência) Evidentemente, X = d. O valor φ(n). O valor de φ(n) também deve ser mantido em segredo. Vemos o que um atacante poderá fazer tendo φ(n). φ(n) = (p− 1)(q − 1) φ(n) = pq − p− q + 1 φ(n) = (n+ 1)− (p+ q) (p+ q) = (n+ 1)− φ(n) q = (n+ 1)− φ(n)− p. Conseguimos uma descrição de q em função de n, φ(n) e p (que o atacante conhece). Observe que n = pq n = p [ (n+ 1)− φ(n)− p ] n = −p2 + p(n+ 1− φ(n)) Rearranjando, vemos que p é solução de uma equação do segundo grau, p2 − (n+ 1− φ(n))p+ n = 0, com a = 1, b = −(n+ 1− φ(n)) e c = n. Módulo comum. Suponha que ao distribuir chaves para um grupo de pessoas usemos sempre o mesmo módulo N: a i-ésima pessoa recebe (ai, N) e (bi, N). Como aibi ≡ 1 (mod φ(N)), qualquer uma destas pessoas pode fatorar N e consequentemente calcular aj a partir de bj. Ainda que se suponha que no grupo com estas chaves haja confiança mútua e que o fato de um conhecer as chaves privadas de todos os outros não seja um problema, o módulo comum permite que um adversário externo ao grupo decifre mensagens sem precisar de qualquer chave privada. Suponha que m é enviada a duas pessoas com chaves (b1, N) e (b2, N): c1 = mb1 (mod N) c2 = mb2 (mod N). Como b1 e b2 são co-primos com N, são também co-primos entre si, e existem x, y tais que xb1 +yb2 = 1, facilmente computáveis. Um adversário que conheça c1, c2 e N pode decifrar a mensagem porque cx1c y 2 = mxb1myb2 = mxb1+yb2 = m1 = m (mod N). b e m pequenos. Se b usado na chave pública e m são pequenos um adversário pode decriptar m. Por exemplo, se b = 5 e m < N1/5, não há redução modular na encriptação porque m5 < N. Observando c = m5 (mod N), e sabendo que b e m são pequenos, um adversário pode calcular c1/5 em Z (sem aritmética modular) e obter m. Versão segura do RSA: OAEP. Da mesma forma que tornamos cifras de fluxo seguras inserindo nelas elementos de aleatoriedade, tornaremos o RSA seguro modificando-o para que passe a ser um algoritmo probabilístico. A modificação que fazemos é adicionar uma cadeia de bits aleatórios à mensagem antes de encriptá-la. Descrevemos a seguir o OAEP (Optimal Asymmetric Encryption Padding). Se trocarmos o algoritmo Enc da Construção 9.19 pelo algoritmo Enc′ a seguir obteremos uma versão do RSA com segurança IND-CCA-2. O algoritmo Enc′ usa duas funções de hash, G e H. Zeros são adicionados à mensagem m para que tenha tamanho fixo; r é escolhido aleatoriamente. Enc′pk(m) = Encpk(m⊕G(r)||r ⊕H(m⊕G(r))) Observe que o algoritmo original é usado pelo novo. A próxima figura ilustra o algoritmo e deixa claro também que sua estrutura é a de uma rede de Feistel, para que possamos calcular a inversa ao decriptar a mensagem. Notamos também que a função G deve ser usada de forma a expandir os k bits de r para n bits, e que H deve comprimir n bits em k bits. A segurança IND-CCA-2 do esquema depende de tratarmos as duas funções de hash como oráculos aleatórios. Informalmente, podemos fazer algumas observações: se as duas funções de hashing G e H tem saída indistinguível de bits aleatórios e resistência de segunda pré-imagem, então m ⊕ G(r) deveria ter o mesmo efeito que o one-time pad. Mas usar apenas este valor (m⊕G(r)) não daria certo, porque não seria possível decriptar. Por isso usamos também a segunda função H. Goldwasser-Micali. O criptossistema de Goldwasser-Micali fundamenta-se na dificuldade do problema do resíduo quadrático. Teorema 9.22. Seja p primo. Se y é resíduo quadrático módulo p, então y tem exatamente duas raízes quadradas módulo p. Demonstração. Seja x tal que (±x)2 = y. Suponha que x ≡ −x (mod p). Teríamos 2x ≡ 0 (mod p), e p|2x. Como p é primo, teríamos que p|2 ou p|x. Mas p > 2 e p > x, e portanto x ≠ −x (mod p). Consequentemente y deve ter necessariamente duas raízes quadradas distintas módulo p. Teorema 9.23. Seja n = pq, com p e q primos. Então y é resíduo quadrático módulo n se e somente se y (mod p) é resíduo quadrático módulo p e y (mod q) é resíduo quadrático módulo q. Demonstração. O resultado segue imediatamente do Teorema B.16. Teorema 9.24. Seja n = pq, com p e q primos. Se y é resíduo quadrático módulo n, então y tem exatamente quatro raízes quadradas módulo n. Demonstração. Sejam a, b as raízes quadradas de y módulo p, e c, d as raízes quadradas de y módulo q. Pelo Teorema B.16, temos que y (mod p) ≡ y (mod q) ≡ y (mod pq). As raízes de y módulo p devem ser distintas das raízes de y módulo q, porque p e q são primos. Definição 9.25. O conjunto J+ n cont

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

seguro, pode ser remediada usando um protocolo para que ambos usem um canal inseguro (aberto) para estabelecer uma chave privada a ser usada em suas comunicações, sem que outros tenham acesso à chave. A comunicação subsequente poderá se dar usando apenas esta chave, e o canal seguro estará, então, estabelecido. De�niremos segurança para protocolos de estabelecimento de chaves antes de apresentar o protocolo de Di�e e Hellman. Começamos com o experimento KE_EAV (�key establishment / eavesdropping�), que identi�ca a probabilidade com que o segredo (chave) comum pode ser capturado por um adversário. Experimento 9.1 (KE_EAV(Π,A, n)). 1. Duas entidades A e B, ambas conhecendo n, executam o protocolo Π. Todas as mensagens trocadas entre A e B são guardadas em uma listaM . Ambos devem calcular uma chave k (que não é incluída na lista M). 2. Um bit aleatório b é escolhido. Se b = 0, k′ é escolhida uniformemente ao acaso. Se b = 1, k′ = k. 3. A lista de mensagens M e a chave k′ são enviadas ao adversário A. 4. A envia um bit b′ 5. O resultado do experimento é um se b = b′ ou zero em caso contrário. � De�nição 9.2 (Segurança para protocolo de estabelecimento de chaves). Um protocolo de estabelecimento de chaves Π é seguro se para todo adversário polinomial A existe uma função desprezível negl tal que Pr[KE_EAV(Π,A, n) = 1] ≤ 1 2 + negl(n). � Esta noção de segurança é adequada a protocolos de estabelecimento de chaves: como há apenas dois atores e presumimos que há con�ança mútua, só temos que nos preocupar com a possibilidade de obtenção da chave por um adversário que não participa do protocolo. 9.3 Protocolo Di�e-Hellman para estabelecimento de chaves O protocolo de estabelecimento de chaves de Di�e e Hellman usa um algoritmo G que, dado um parâmetro n, retorna a descrição de um grupo cíclico G de ordem q tal que q tem n bits, e um gerador g de G. Construção 9.3 (Protocolo de Di�e e Hellman para estabelecimento de chaves). Dois participantes, A e B, estabelecem uma chave simétrica da seguinte maneira: • A usa G para obter (G, q, g) • A escolhe x ∈R Zq e calcula h1 = gx 9.3. PROTOCOLODIFFIE-HELLMAN PARA ESTABELECIMENTODE CHAVES153 • A envia (G, q, g, h1) para B • B escolhe y ∈R Zq e calcula h2 = gy. • B envia h2 para A e determina a chave secreta kB = hy1. • A recebe h2 e determina a chave secreta kA = hx2 . � Ao �nal da execução do protocolo, A como B tem chaves secretas kA e kB . Estas chaves são iguais, porque kA = hx2 = (gy)x = gxy kB = hy1 = (gx)y = gxy. É importante observar que o protocolo não especi�ca nada a respeito do grupo, exceto que q deve ter n bits. Com isso é possível usar diferentes grupos na construção prática do protocolo. Um exemplo é o ECDH (Elliptic Curve Di�e-Hellman), onde são usados pontos em uma curva elíptica. Um requisito evidente do Di�e-Hellman é que o problema do Logaritmo Discreto seja difícil � caso contrário qualquer um que observe as mensagens trocadas poderá inferir a chave. Este é, no entanto, apenas necessário. Podemos identi�car outro problema, relacionado ao logaritmo discreto, que captura a essência da di�culdade do protocolo. Este problema leva o mesmo nome do protocolo. De�nição 9.4 (Problema de Di�e-Hellman). Dados um grupo cíclico G e um gerador g gerados por um algoritmo G(1n), denotamos DHg(a, b) = gab. O problema Di�e-Hellman computacional (ou CDH, �Computational Di�e- Hellman�) consiste em calcular DHg(a, b) dados ga e gb escolhidos ao acaso em G. O problema Di�e-Hellman decisional (ou DDH, �Decisional Di�e-Hellman�) consiste em reconhecer se um elemento x foi escolhido ao acaso em G ou se é igual a DHg(a, b) para algum a e algum b gerados aleatoreamente. Dizemos que CDH e DDH são difíceis com relação a um algoritmo G se não houver algoritmo polinomial que os resolva quando os grupos são gerados por G. � Há algoritmos G para os quais não se conhece algoritmo e�ciente para resolver CDH ou DDH (mas não há tampouco prova de que não existam). O que demonstramos então é que o protocolo de Di�e-Hellman é seguro se o problema é difícil para um algoritmo G. Teorema 9.5. Se o problema Di�e-Hellman decisional é difícil para um algo- ritmo G, o protocolo Di�e-Hellman (Construção 9.3) é seguro de acordo com a De�nição 9.2 quando G é usado. Demonstração. Supomos que o grupo G usado no experimento 9.1 foi gerado por um algoritmo G. O bit b é escolhido ao acaso, então Pr[b = 0] = 1/2. Pr[KE_EAV(Π,A, n) = 1 ] = 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 1 ] + 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 0 ]. No experimento KE_EAV o adversário recebe k′, que pode ser um elemento ale- atório do grupo ou a chave. Assim, A pode ter, com igual probabilidade: • (G, q, g, h1, h2, g xy), ou • (G, q, g, h1, h2, k ′), sendo que k′ foi escolhida aleatoreamente. Distinguir entre ambos é exatamente resolver o problema Di�e-Hellman decisi- onal: Pr[KE_EAV(Π,A, n) = 1 ] = 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 1 ] + 1 2 Pr[KE_EAV(Π,A, n) = 1|b = 0 ] = 1 2 Pr[A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 Pr[A(G, q, g, gx, gy, gz) = 0 ] = 1 2 Pr[A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 1− Pr [A(G, q, g, gx, gy, gz) = 1 ] = 1 2 Pr[A(G, q, g, gx, gy, gxy) = 1 ] + 1 2 1− Pr [A(G, q, g, gx, gy, gz) = 1 ] = 1 2 + 1 2 ( Pr[A(G, q, g, gx, gy, gxy) = 1 ] − Pr [A(G, q, g, gx, gy, gz) = 1 ]) ≤ 1 2 + 1 2 ∣∣∣Pr[A(G, q, g, gx, gy, gxy) = 1 ] − Pr [A(G, q, g, gx, gy, gz) = 1 ]∣∣∣. Como g é gerador de G, gz é distribuído uniformemente no grupo se z for uniformemente distribuído em Zq. Se o problema Di�e-Hellman decisional é difícil para G, então existe negl desprezível tal que∣∣∣Pr[A(G, q, g, gx, gy, gxy) = 1 ] − Pr [A(G, q, g, gx, gy, gz) = 1 ]∣∣∣ ≤ negl(n). Concluímos que Pr[KE_EAV(Π,A, n) = 1 ] ≤ 1 2 + 1 2 negl(n). � Note que esta demonstração parece ter um pequeno problema: quando b = 0, o adversário recebe um elemento aleatório do grupo G, e não uma cadeia alea- tória de bits. Para que a diferença �que clara, suponha que tenhamos escolhido o grupo Zq e que a ordem do grupo seja q = 257, que é representado por 100000001 em binário. Apenas um elemento do grupo tem o primeiro bit igual a um: 256 = 100000000. Este não é um problema com a demonstração, mas um fato a que o implementador deve dar atenção: não se pode usar números diretamente para representar elementos de G; ao invés disso deve

Queremos 1 < b < 200 coprimo com 200 = 2352, e escolhemos b = 7 (que não é divisível por 2 nem por 5, e portanto pertence a Z∗200). Assim, a = 7−1 (mod φ(N)) = 7−1 (mod 200) = 143. Temos então pk = (N, b) = (303, 7) sk = (N, a) = (303, 143) Para encriptar 53 (que pertence a Z∗303), fazemos Encpk(53) = 537 (mod 303) = 275. Para decriptar 37, Decsk(275) = 275143 (mod 303) = 53. Da mesma forma que identificamos a essência da dificuldade do protocolo Diffie-Hellman, também o faremos com o RSA, definindo o problema RSA. Definição 9.21. Seja N o produto de dois primos, ambos com n bits. Seja e > 0 tal que gcd(e,N) = 1 e x ∈ Z∗N. O problema RSA computacional consiste em calcular y = x1/e (mod N). Não se conhece qualquer algoritmo eficiente para resolver o problema RSA. Sabemos que o RSA deve ser pelo menos tão difícil quanto a fatoração de inteiros: se for possível fatorar N, basta então calcular φ(N) = (p − 1)(q − 1), calcular d = e−1 (mod φ(N)) e y = xd (mod N) (é importante observar que φ(N) e e−1 não são públicos, e devem ser calculados por um adversário que pretenda quebrar o RSA). Aspectos de segurança do RSA. Esta Seção descreve alguns ataques ao RSA. Estes ataques não caracterizam qualquer fraqueza do criptossistema, e somente são possíveis quando o RSA é usado de maneira ingênua (ou incorreta). Fatoração do módulo n em p, q. A fatoração do módulo em p e q deve ser mantida em segredo. Se um atacante obtiver estes dois números, ele pode usar o algoritmo estendido de Euclides para calcular o exponente de decriptação d. De acordo com a identidade de Bézout, existem X e Y tais que mdc (e, φ(n)) = eX + φ(n)Y 1 = eX + φ(n)Y (Identidade de Bézout) eX ≡ 1 (mod φ(n)) (def. de congruência) Evidentemente, X = d. O valor φ(n). O valor de φ(n) também deve ser mantido em segredo. Vemos o que um atacante poderá fazer tendo φ(n). φ(n) = (p− 1)(q − 1) φ(n) = pq − p− q + 1 φ(n) = (n+ 1)− (p+ q) (p+ q) = (n+ 1)− φ(n) q = (n+ 1)− φ(n)− p. Conseguimos uma descrição de q em função de n, φ(n) e p (que o atacante conhece). Observe que n = pq n = p [ (n+ 1)− φ(n)− p ] n = −p2 + p(n+ 1− φ(n)) Rearranjando, vemos que p é solução de uma equação do segundo grau, p2 − (n+ 1− φ(n))p+ n = 0, com a = 1, b = −(n+ 1− φ(n)) e c = n. Módulo comum. Suponha que ao distribuir chaves para um grupo de pessoas usemos sempre o mesmo módulo N: a i-ésima pessoa recebe (ai, N) e (bi, N). Como aibi ≡ 1 (mod φ(N)), qualquer uma destas pessoas pode fatorar N e consequentemente calcular aj a partir de bj. Ainda que se suponha que no grupo com estas chaves haja confiança mútua e que o fato de um conhecer as chaves privadas de todos os outros não seja um problema, o módulo comum permite que um adversário externo ao grupo decifre mensagens sem precisar de qualquer chave privada. Suponha que m é enviada a duas pessoas com chaves (b1, N) e (b2, N): c1 = mb1 (mod N) c2 = mb2 (mod N). Como b1 e b2 são co-primos com N, são também co-primos entre si, e existem x, y tais que xb1 +yb2 = 1, facilmente computáveis. Um adversário que conheça c1, c2 e N pode decifrar a mensagem porque cx1c y 2 = mxb1myb2 = mxb1+yb2 = m1 = m (mod N). b e m pequenos. Se b usado na chave pública e m são pequenos um adversário pode decriptar m. Por exemplo, se b = 5 e m < N1/5, não há redução modular na encriptação porque m5 < N. Observando c = m5 (mod N), e sabendo que b e m são pequenos, um adversário pode calcular c1/5 em Z (sem aritmética modular) e obter m. Versão segura do RSA: OAEP. Da mesma forma que tornamos cifras de fluxo seguras inserindo nelas elementos de aleatoriedade, tornaremos o RSA seguro modificando-o para que passe a ser um algoritmo probabilístico. A modificação que fazemos é adicionar uma cadeia de bits aleatórios à mensagem antes de encriptá-la. Descrevemos a seguir o OAEP (Optimal Asymmetric Encryption Padding). Se trocarmos o algoritmo Enc da Construção 9.19 pelo algoritmo Enc′ a seguir obteremos uma versão do RSA com segurança IND-CCA-2. O algoritmo Enc′ usa duas funções de hash, G e H. Zeros são adicionados à mensagem m para que tenha tamanho fixo; r é escolhido aleatoriamente. Enc′pk(m) = Encpk(m⊕G(r)||r ⊕H(m⊕G(r))) Observe que o algoritmo original é usado pelo novo. A próxima figura ilustra o algoritmo e deixa claro também que sua estrutura é a de uma rede de Feistel, para que possamos calcular a inversa ao decriptar a mensagem. Notamos também que a função G deve ser usada de forma a expandir os k bits de r para n bits, e que H deve comprimir n bits em k bits. A segurança IND-CCA-2 do esquema depende de tratarmos as duas funções de hash como oráculos aleatórios. Informalmente, podemos fazer algumas observações: se as duas funções de hashing G e H tem saída indistinguível de bits aleatórios e resistência de segunda pré-imagem, então m ⊕ G(r) deveria ter o mesmo efeito que o one-time pad. Mas usar apenas este valor (m⊕G(r)) não daria certo, porque não seria possível decriptar. Por isso usamos também a segunda função H. Goldwasser-Micali. O criptossistema de Goldwasser-Micali fundamenta-se na dificuldade do problema do resíduo quadrático. Teorema 9.22. Seja p primo. Se y é resíduo quadrático módulo p, então y tem exatamente duas raízes quadradas módulo p. Demonstração. Seja x tal que (±x)2 = y. Suponha que x ≡ −x (mod p). Teríamos 2x ≡ 0 (mod p), e p|2x. Como p é primo, teríamos que p|2 ou p|x. Mas p > 2 e p > x, e portanto x ≠ −x (mod p). Consequentemente y deve ter necessariamente duas raízes quadradas distintas módulo p. Teorema 9.23. Seja n = pq, com p e q primos. Então y é resíduo quadrático módulo n se e somente se y (mod p) é resíduo quadrático módulo p e y (mod q) é resíduo quadrático módulo q. Demonstração. O resultado segue imediatamente do Teorema B.16. Teorema 9.24. Seja n = pq, com p e q primos. Se y é resíduo quadrático módulo n, então y tem exatamente quatro raízes quadradas módulo n. Demonstração. Sejam a, b as raízes quadradas de y módulo p, e c, d as raízes quadradas de y módulo q. Pelo Teorema B.16, temos que y (mod p) ≡ y (mod q) ≡ y (mod pq). As raízes de y módulo p devem ser distintas das raízes de y módulo q, porque p e q são primos. Definição 9.25. O conjunto J+ n cont

Prévia do material em texto

Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Introdução à Criptogra�a e seus Fundamentos
notas de aula � versão: 2019.11.28.20.34
Jerônimo C. Pellegrini
id: e052a0bf8a7589c0c522c6b66cd88eb23b67d1b9
compilado em: 29 de novembro de 2019
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Sumário
Sumário i
I Conceitos Fundamentais 3
1 Introdução e visão geral 7
1.1 Encriptação simétrica . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2 Encriptação assimétrica . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Resumos (hashes) criptográ�cos . . . . . . . . . . . . . . . . . . . 9
1.4 Assinatura digital . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5 Estabelecimento de chaves . . . . . . . . . . . . . . . . . . . . . . 11
1.6 Chaves públicas con�áveis . . . . . . . . . . . . . . . . . . . . . . 11
1.7 Protocolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.8 Criptogra�a Pós-Quântica . . . . . . . . . . . . . . . . . . . . . . 14
1.9 Criptogra�a Quântica . . . . . . . . . . . . . . . . . . . . . . . . 14
1.10 Sobre este texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.10.1 Jogos e experimentos . . . . . . . . . . . . . . . . . . . . . 14
1.10.2 Notação e convenções . . . . . . . . . . . . . . . . . . . . 17
2 Criptossistemas e Noções de Segurança 19
2.1 Criptossistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.2 Princípio de Kerckho�s . . . . . . . . . . . . . . . . . . . . . . . 20
2.3 Sigilo Perfeito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.4 Segurança empírica e com heurísticas . . . . . . . . . . . . . . . . 25
2.5 Segurança demonstrável . . . . . . . . . . . . . . . . . . . . . . . 25
2.5.1 Cenários de ataque . . . . . . . . . . . . . . . . . . . . . . 26
2.5.2 Probabilidade desprezível . . . . . . . . . . . . . . . . . . 27
2.5.3 Exemplo de de�nição de segurança . . . . . . . . . . . . . 28
3 Problemas Difíceis 33
3.1 Funções de mão única . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.1 Pré-Computação Quântica . . . . . . . . . . . . . . . . . . 34
3.1.2 Pós-quântica . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.2 Predicados hard-core . . . . . . . . . . . . . . . . . . . . . . . . . 38
i
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
ii SUMÁRIO
3.3 Predicados hard-core para quaisquer funções de mão única . . . . 40
4 Geradores Pseudoaleatórios e Cifras de Fluxo 43
4.1 Geradores pseudoaleatórios . . . . . . . . . . . . . . . . . . . . . 43
4.2 Geradores com Funções de Mão Única . . . . . . . . . . . . . . . 47
4.3 Geração de números pseudoaleatórios . . . . . . . . . . . . . . . . 49
4.4 Geradores com Heurísticas . . . . . . . . . . . . . . . . . . . . . . 49
4.4.1 Propriedades de Sequências Pseudoaleatórias . . . . . . . 50
4.4.2 Testes Para Sequências de Bits . . . . . . . . . . . . . . . 56
4.5 Cifras de Fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.5.1 Múltiplas Mensagens . . . . . . . . . . . . . . . . . . . . . 56
4.5.2 Ataques de Texto Claro Escolhido . . . . . . . . . . . . . 60
5 Cifras de Bloco 65
5.1 Esquemas de Encriptação usando Funções Pseudoaleatórias . . . 66
5.2 Permutações Pseudoaleatórias . . . . . . . . . . . . . . . . . . . . 68
5.3 Modos de Operação . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.3.1 ECB � Electronic Code Book . . . . . . . . . . . . . . . . 69
5.3.2 CBC � Cipher Block Chaining . . . . . . . . . . . . . . . 70
5.3.3 OFB � Output Feedback . . . . . . . . . . . . . . . . . . . 70
5.3.4 CTR � Contador . . . . . . . . . . . . . . . . . . . . . . . 71
5.4 Cifras de bloco . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.4.1 Segurança de cifras de bloco . . . . . . . . . . . . . . . . . 74
5.4.2 Construção . . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.5 Arquitetura de cifras de bloco . . . . . . . . . . . . . . . . . . . . 75
5.5.1 Confusão e difusão . . . . . . . . . . . . . . . . . . . . . . 75
5.5.2 Rede de substituição e permutação . . . . . . . . . . . . . 75
5.5.3 Rede de Feistel . . . . . . . . . . . . . . . . . . . . . . . . 78
5.5.4 Construção de Lai-Massey . . . . . . . . . . . . . . . . . . 81
5.6 Exemplo: DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.6.1 Escalonamento de chaves . . . . . . . . . . . . . . . . . . 85
5.6.2 3DES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.7 Exemplo: AES . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
5.7.1 Corpo de Rijndael . . . . . . . . . . . . . . . . . . . . . . 90
5.7.2 Passos do AES . . . . . . . . . . . . . . . . . . . . . . . . 90
5.8 FOX (IDEA-NXT) . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6 Noções de Criptanálise 99
6.1 Uma rede de substituição e permutação . . . . . . . . . . . . . . 99
6.2 Criptanálise linear . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.2.1 O Lema do Empilhamento . . . . . . . . . . . . . . . . . . 103
6.2.2 Criptanálise da rede . . . . . . . . . . . . . . . . . . . . . 104
6.2.3 Escolha da trilha e resistência ao ataque . . . . . . . . . . 113
6.3 Criptanálise diferencial . . . . . . . . . . . . . . . . . . . . . . . . 113
6.4 Criptanálise Algébrica . . . . . . . . . . . . . . . . . . . . . . . . 119
6.5 Técnicas de criptanálise relacionadas . . . . . . . . . . . . . . . . 121
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
SUMÁRIO iii
7 Resumos Criptográ�cos (funções de hashing) 125
7.1 Ataques e o problema do aniversário . . . . . . . . . . . . . . . . 127
7.2 Construção: transformação de Merkle-Damgård . . . . . . . . . . 128
7.3 Resistência a colisões com dexp . . . . . . . . . . . . . . . . . . . 129
7.4 SHA (Secure Hash Algorithm) . . . . . . . . . . . . . . . . . . . . 131
7.4.1 SHA-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
7.5 Cifras de bloco usando funções de hash: Aardvark . . . . . . . . 133
7.6 O Oráculo Aleatório . . . . . . . . . . . . . . . . . . . . . . . . . 134
7.6.1 Propriedades do Oráculo Aleatório . . . . . . . . . . . . . 135
7.6.2 Objeções . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
8 Códigos de Autenticação de Mensagens 141
8.1 Segurança de códigos de autenticação de mensagens . . . . . . . 142
8.2 Estendendo MACs para tamanho variável de mensagem . . . . . 144
8.3 CBC-MAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
8.3.1 Mensagens de tamanho variável . . . . . . . . . . . . . . . 145
8.4 HMAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
8.5 Aplicação: segurança CCA . . . . . . . . . . . . . . . . . . . . . 148
9 Criptogra�a Assimétrica 151
9.1 Protocolos criptográ�cos . . . . . . . . . . . . . . . . . . . . . . . 151
9.2 Estabelecimento de chaves . . . . . . . . . . . . . . . . . . . . . . 151
9.3 Protocolo Di�e-Hellman para estabelecimento de chaves . . . . . 152
9.3.1 Ataque de homem-no-meio . . . . . . . . . . . . . . . . . 155
9.4 Criptossistemas Assimétricos . . . . . . . . . . . . . . . . . . . . 155
9.4.1 F Funções de mão única com segredo . . . . . . . . . . . 156
9.5 Segurança CCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
9.6 ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
9.7 Criptossistema de Rabin . . . . . . . . . . . . . . . . . . . . . . . 158
9.8 Segurança CPA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
9.9 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
9.9.1 Aspectos de segurança do RSA . . . . . . . . . . . . . . . 162
9.9.2 Versão segura do RSA: OAEP . . . . . . . . . . . . . . . 164
9.10 Goldwasser-Micali . . . . . . . . . . . . . . . . . . . . . . . . . . 165
10 Assinaturas Digitais 171
10.1 Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
10.1.1 Segurança RMA . . . . . . . . . . . . . . . .. . . . . . . 173
10.1.2 Segurança KMA . . . . . . . . . . . . . . . . . . . . . . . 174
10.1.3 Segurança CMA . . . . . . . . . . . . . . . . . . . . . . . 175
10.2 Esquema de assinaturas para uma única mensagem . . . . . . . . 176
10.2.1 Esquema de assinaturas de Lamport . . . . . . . . . . . . 176
10.3 RSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
10.3.1 Full-domain hash . . . . . . . . . . . . . . . . . . . . . . . 178
10.4 ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
10.4.1 DSA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
iv SUMÁRIO
10.5 F Full-domain hash com qualquer permutação de mão única . . 181
10.6 Árvores de assinaturas . . . . . . . . . . . . . . . . . . . . . . . . 181
10.6.1 Estendendo assinaturas de uma única mensagem, para
muitas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
II Protocolos 185
11 Introdução a Protocolos. Exemplo: Comprometimento 189
11.1 Modelo computacional . . . . . . . . . . . . . . . . . . . . . . . . 189
11.2 Comprometimento . . . . . . . . . . . . . . . . . . . . . . . . . . 190
11.2.1 Comprometimento de bit . . . . . . . . . . . . . . . . . . 195
11.2.2 Veri�cação de igualdade de logaritmos . . . . . . . . . . . 196
11.2.3 Cara-ou-coroa . . . . . . . . . . . . . . . . . . . . . . . . . 197
12 Compartilhamento de Segredos 199
12.1 Esquemas com quórum . . . . . . . . . . . . . . . . . . . . . . . . 200
12.1.1 Esquema de Shamir . . . . . . . . . . . . . . . . . . . . . 201
12.1.2 Esquema de Blakley . . . . . . . . . . . . . . . . . . . . . 203
12.2 Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
12.2.1 Sigilo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
12.3 Estruturas gerais de acesso . . . . . . . . . . . . . . . . . . . . . 204
12.4 Compartilhamento veri�cável . . . . . . . . . . . . . . . . . . . . 207
12.5 Compartilhamento publicamente veri�cável . . . . . . . . . . . . 209
12.5.1 Segredos não aleatórios . . . . . . . . . . . . . . . . . . . 212
12.6 Encriptação com quórum . . . . . . . . . . . . . . . . . . . . . . 213
12.7 Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
12.8 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
13 Provas de Conhecimento Zero 217
13.1 Provas Interativas . . . . . . . . . . . . . . . . . . . . . . . . . . 217
13.2 Conhecimento zero . . . . . . . . . . . . . . . . . . . . . . . . . . 218
13.2.1 Isomor�smo de grafo . . . . . . . . . . . . . . . . . . . . . 219
13.3 Σ-protocolos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
13.4 Protocolos de Identi�cação . . . . . . . . . . . . . . . . . . . . . 223
13.4.1 Esquema de Identi�cação de Feige-Fiat-Shamir . . . . . . 223
13.4.2 Protocolo de Schnorr . . . . . . . . . . . . . . . . . . . . . 225
13.5 Transformando provas interativas em não interativas . . . . . . . 226
14 Protocolos Seguros com Dois Participantes 229
14.1 Transferência Inconsciente . . . . . . . . . . . . . . . . . . . . . . 229
15 Computação Segura com Múltiplos Participantes 231
15.1 Sobre encriptação homomór�ca . . . . . . . . . . . . . . . . . . . 232
15.2 Um protocolo para participantes semi-honestos . . . . . . . . . . 232
15.3 Segurança . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
SUMÁRIO v
15.4 Componibilidade Universal . . . . . . . . . . . . . . . . . . . . . 236
15.5 Notas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
15.6 Exercícios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
III Outros Tópicos 239
16 Curvas Elípticas 243
16.1 Operação de grupo para curvas elípticas . . . . . . . . . . . . . . 246
16.1.1 Simétrico . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
16.1.2 Soma de pontos . . . . . . . . . . . . . . . . . . . . . . . . 247
16.1.3 Dobrando um ponto . . . . . . . . . . . . . . . . . . . . . 248
16.2 Ordem do grupo . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
16.3 Corpos �nitos usados em Criptogra�a . . . . . . . . . . . . . . . 249
16.3.1 Fp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
16.3.2 GF2m . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
16.4 Criptossistemas e protocolos . . . . . . . . . . . . . . . . . . . . . 250
16.4.1 Logaritmo discreto . . . . . . . . . . . . . . . . . . . . . . 251
16.4.2 Di�e-Hellman . . . . . . . . . . . . . . . . . . . . . . . . 251
16.4.3 ElGamal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
16.4.4 Outros criptossistemas e protocolos . . . . . . . . . . . . . 252
16.5 Emparelhamentos bilineares . . . . . . . . . . . . . . . . . . . . . 252
16.6 Fatoração de Inteiros . . . . . . . . . . . . . . . . . . . . . . . . . 253
17 Emparelhamentos Bilineares 255
17.1 Problemas difíceis em emparelhamentos bilineares . . . . . . . . 256
17.2 Encriptação baseada em identidades . . . . . . . . . . . . . . . . 256
17.3 Assinaturas baseadas em identidades . . . . . . . . . . . . . . . . 257
17.4 Acordo de chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
17.5 Outras construções . . . . . . . . . . . . . . . . . . . . . . . . . . 258
18 Reticulados 259
18.0.1 Variantes . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
18.0.2 SIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
18.0.3 LWE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
18.0.4 SBP e Ortogonalidade . . . . . . . . . . . . . . . . . . . . 260
18.0.5 LLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
18.0.6 CVP: algoritmo de Babai . . . . . . . . . . . . . . . . . . 261
18.1 GGH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
18.1.1 Detalhes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
18.1.2 Ataques ao GGH . . . . . . . . . . . . . . . . . . . . . . . 263
18.2 NTRU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
18.3 Ajtai-Dwork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
18.4 LWE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
vi SUMÁRIO
19 Códigos Corretores de Erros 267
19.1 Correção de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
19.1.1 Códigos Lineares . . . . . . . . . . . . . . . . . . . . . . . 270
19.2 Criptogra�a com códigos corretores de erros . . . . . . . . . . . . 274
20 Criptogra�a Visual 277
20.1 Um único segredo (Naor e Shamir) . . . . . . . . . . . . . . . . . 277
20.1.1 Esquemas para k e n pequenos . . . . . . . . . . . . . . . 280
20.2 Dois segredos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
20.3 Múltiplos segredos . . . . . . . . . . . . . . . . . . . . . . . . . . 280
21 Encriptação Negável 283
21.1 Esquema de Howlader-Basu . . . . . . . . . . . . . . . . . . . . . 285
21.2 Negabilidade por destinatário e negabilidade completa . . . . . . 290
21.3 Aplicações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
22 Votação Eletrônica 293
22.1 Mix Nets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
22.2 Assinaturas cegas . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
22.3 Exemplo: esquema de Chaum . . . . . . . . . . . . . . . . . . . . 296
22.3.1 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
22.4 Exemplo: o esquema CGS (Cramer, Gennaro, Schoenmakers) . . 297
22.4.1 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
22.4.2 Votação 1-de-L . . . . . . . . . . . . . . . . . . . . . . . . 299
22.5 Exemplo: esquema FOO (Fujioka, Okamoto, Ohta) . . . . . . . . 299
22.5.1 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
23 Blockchain303
23.1 Construção . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
23.2 Aplicações Notariais . . . . . . . . . . . . . . . . . . . . . . . . . 303
23.3 Dinheiro Eletrônico . . . . . . . . . . . . . . . . . . . . . . . . . . 303
IV Apêndices 305
A Probabilidade 307
A.1 O problema do aniversário . . . . . . . . . . . . . . . . . . . . . . 307
B Álgebra e Teoria dos Números 309
C Complexidade Computacional 341
C.1 Complexidade de tempo . . . . . . . . . . . . . . . . . . . . . . . 341
C.1.1 Recorrências . . . . . . . . . . . . . . . . . . . . . . . . . 344
C.1.2 Tamanho da entrada e número de bits . . . . . . . . . . . 348
C.2 Grafos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
C.3 Problemas de decisão e de busca . . . . . . . . . . . . . . . . . . 351
C.4 Algoritmos não determinísticos . . . . . . . . . . . . . . . . . . . 352
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
SUMÁRIO vii
C.5 Algoritmos Randomizados . . . . . . . . . . . . . . . . . . . . . . 354
C.6 Classes de Complexidade . . . . . . . . . . . . . . . . . . . . . . 354
C.7 Reduções e completude . . . . . . . . . . . . . . . . . . . . . . . 356
C.7.1 Técnicas para demonstração de NP-completude . . . . . 358
C.7.2 Padrões comuns . . . . . . . . . . . . . . . . . . . . . . . 363
C.7.3 Problemas NP-completos na prática . . . . . . . . . . . . 364
C.7.4 Outros problemas NP-completos . . . . . . . . . . . . . . 368
C.8 Problemas indecidíveis . . . . . . . . . . . . . . . . . . . . . . . . 369
C.9 F Máquinas de Turing . . . . . . . . . . . . . . . . . . . . . . . . 370
D Respostas e Dicas 381
E Ficha Técnica 391
Índice Remissivo 406
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
viii SUMÁRIO
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
1
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
2 SUMÁRIO
Notação
||x|| tamanho da representação binária de x, precedida pelo bit 1
a||b concatenação das sequências a e b
[a]n a classe de equivalência a (mod n)
〈X〉 o grupo gerado por X
A× o número A está representado na base 16 (hexadecimal)
A ≈ B As distribuições das variáveis aleatóreas A e B são indistinguíveis
x ≈ y x e y são números, e x é aproximação de y
Π uma construção criptográ�ca (criptossistema, função de hashing etc)
σ assinatura
Zn grupo multiplicativo de inteiros módulo n
A o adversário
D o desa�ador
T um teste (algoritmo que distingue duas distribuições)
c texto encriptado
C um código corretor de erros
DHg(a, b) problema Di�e-Hellman
g normalmente, o gerador de um grupo
k chave
L um reticulado
m mensagem em claro
p normalmente um número primo
p(·) um polinômio
q normalmente um número primo; às vezes uma quantidade
t código de autenticação de mensagem
m(x) polinômio irredutível que de�ne o corpo de Rijndael
c(x) x4 + 1 (para multiplicação de colunas no AES)
lsb (x) bit menos signi�cativo de x
log(x) logaritmo de x na base 2
logg h logaritmo discreto de h na base g
msb (x) bit mais signi�cativo de x
negl(·) função desprezível
retorne 〈a, b〉 o algoritmo ou função retornará dois valores, a e b
rotlk(a) rotação dos bits de a, k posições à esquerda
a← b b é computado e armazenado em a
a ∈R S a é escolhido uniformemente ao acaso do conjunto S
〈a, b〉 ← f(· · · ) a função f retorna dois valores
a ∧ b e lógico de a e b
a ∨ b ou lógico de a e b
a⊕ b ou exclusivo (XOR) de a com b (adição módulo 2)
a não lógico (negação do bit a)
perm_col (M) conjunto de todas as matrizes obtidas permutando colunas de M
O ponto no in�nito, adicionado ao R2
QRn conjunto de resíduos quadráticos módulo n
Jn conjunto de números em Zn com símbolo de Jacobi igual a +1
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Parte I
Conceitos Fundamentais
3
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5
A primeira parte aborda os problemas básicos da Criptogra�a, expondo cons-
truções clássicas. São dadas de�nições precisas para cada conceito, e há seções
em cada Capítulo dedicadas a de�nições e demonstrações de segurança com
razoável rigor.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 1
Introdução e visão geral
A Criptogra�a abrange desde a concepção até a implementação de sistemas de
computação relacionados a diversos aspectos de segurança. As seções seguintes
dão uma visão geral dos temas que abordaremos. Em alguns casos há exemplos
concretos.
1.1 Encriptação simétrica
O problema mais conhecido abordado pela Criptogra�a é o de modi�car mensa-
gens para que �quem indecifráveis. Decifrar (ou decriptar) a mensagem só deve
ser possível para quem tenha a posse de um segredo. Soluções para este pro-
blema são chamadas de criptossistemas simétricos, e o segredo é normalmente
chamado de chave.
Todo criptossistema simétrico oferece ao usuário duas funções, cada uma
com dois argumentos: uma para cifrar e outra para decifrar. Convencionaremos
usar Enc(m, k) para a função que cifra e Dec(m, k) para a função que decifra
m com a chave k. Evidentemente, é necessário que Dec(Enc(m, k), k) = m para
todos m e k.
A função que transforma a mensagem (que chamamos de texto claro) em
algo irreconhecível (que chamamos de texto cifrado) deve necessariamente ser
difícil de inverter sem o argumento k, de outra forma qualquer um com acesso
à mensagem poderia facilmente decifrá-la.
Ao algoritmo usado para calcular as funções Enc e Dec damos o nome de
cifra. É comum classi�car cifras em dois tipos:
• Cifras de �uxo, que transformam cada bit da mensagem em um bit do
texto cifrado ao misturá-lo com um bit de outra fonte de bits (um gerador
pseudoaleatório de bits, por exemplo) Esta �mistura� normalmente é uma
operação de ou exclusivo, como ilustrado na �gura a seguir:
7
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
8 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL
1 0 0 1 0 1 1 1 0 1
0 0 1 1 1 0 1 0 1 1
1 0 1 0 1 1 0 1 1 0
mensagem
bits aleatóreos
texto cifrado
A semente do gerador aleatório é a senha que permite encriptar e decriptar
mensagens. Em uma cifra de �uxo usando ou exclusivo, Enc e Dec são
idênticas;
• Cifras de bloco, que transformam sequências de bits de tamanho �xo, re-
alizando nelas transformações difíceis de inverter.
mensagem
texto cifrado
0 1 1 0 1 1 1 0 1 1 0 0 0 1 0
f ff
1 1 0 1 1 0 0 0 1 1 1 1 1 1 0
A função f(k,m) na �gura aceita dois parâmetros: um é a chave secreta
usada para encriptar a mensagem e outra é a mensagem; f−1(k, c) deter-
mina a mensagem a partir do texto cifrado e da chave. É importante que
f−1 seja difícil de calcular sem a chave k (de�niremos com mais clareza
esta �di�culdade� mais adiante).
1.2 Encriptação assimétrica
Um problema dos esquemas simétricos de encriptação é que cada par de usuários
que queira se comunicar em sigilo precisa compartilhar uma chave secreta. Se
Alice e Bob estão �sicamente distantes e não podem fazê-lo de maneira simples,
um esquema simétrico não é útil. Os criptossistemas assimétricos permitem que
diferentes usuários se comuniquem em sigilo sem este problema.
Em um criptossistema assimétrico, tanto Alice como Bob tem duas chaves �
uma pública (conhecida de todos, possivelmente divulgada na Internet) e outra
privada.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
1.3. RESUMOS (HASHES) CRIPTOGRÁFICOS 9
Quando Alice precisa cifrar uma mensagem para Bob, usa a chave pública
de Bob (disponível publicamente). Ao receber a mensagem, Bob pode decifrá-la
usando sua chave privada.
1.3 Resumos (hashes) criptográ�cos
Resumos criptográ�cos (ou funçõesde hashing) são outra ferramenta de que
trataremos. Funções de hashing mapeiam sequências de bits de tamanho arbi-
trário (como arquivos e mensagens) em pequenas sequências, de tamanho �xo.
Desta forma estes pequenos resumos podem ser usados para identi�car arqui-
vos. É evidente que não podemos garantir que nunca teremos dois arquivos (ou
mensagens) com o mesmo resumo, porque o número de bits usados no resumo
é menor que o número de bits usado para representar os textos; no entanto,
estas funções são projetadas de forma que colisões sejam improváveis. A fun-
ção SHA3-384, por exemplo, representa o resumo com 384 bits, mas a entrada
pode ter qualquer tamanho. O resultado da aplicação do SHA3-384 à cadeia de
caracteres �mensagem secreta� é mostrado a seguir.
mensagem secreta
↓
SHA3-384
↓
ed7fd6ba5b95e6767efec077ac65327153833470c53aeccf
e6d675dc876d7b518aeff2c2030284564db29eec858dc036
Algumas observações importantes:
• O resultado da função SHA3-384 sempre será do mesmo tamanho (384
bits), não dependendo do tamanho da entrada;
• Se a mensagem original for ligeiramente modi�cada, o hash parecerá com-
pletamente diferente:
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
10 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL
mensagem secreta!
↓
SHA3-384
↓
bd183551e5bc49956df597d80f802e86c83006bceba78010
2c6bb267bd41b96ef2bf0c37a352d7d1fdaa9ec27696181b
• Embora seja fácil calcular, a função de hashing deve ser difícil de inverter
(e portanto não deveria ser possível a alguém chegar à cadeia �mensagem
secreta� a partir de ed7f· · · c036).
Funções de hashing são diretamente úteis em diversas situações onde quere-
mos garantir a integridade de dados, e também na construção de outras ferra-
mentas criptográ�cas.
Suponha que queiramos garantir a integridade de um arquivo ou mensagem,
evitando que alguém mais o modi�que (um vírus ou um intruso, por exem-
plo). Poderíamos computar �resumos� (hashes) destes arquivos (o resumo de
um arquivo tem tamanho muito menor que o próprio arquivo) e armazená-los
em uma tabela. No entanto, nada impede que o intruso recalcule os hashes e os
modi�que também na tabela, tornando inócua nossa medida de precaução. No
entanto, se concatenarmos cada arquivo (ou mensagem) com uma chave secreta
antes de calcular o hash e armazenarmos este resumo na tabela, o intruso não
terá como modi�cá-la (ele pode recalcular o resumo do arquivo modi�cado, mas
não conhece a chave secreta � e portanto não poderá calcular o hash correto).
A este tipo de resumo damos o nome de �código de autenticação de mensagem�
(ou MAC � Message Authentication Code).
Funções de hashing também podem ser usadas para construir geradores pseu-
doaleatórios, para derivar novas chaves de uma única chave-mestra e construir
cifras de bloco.
1.4 Assinatura digital
Os esquemas de encriptação assimétricos garantem sigilo na comunicação entre
duas partes, mas chaves públicas podem ser usadas também para garantir o não-
repúdio (ou irretratabilidade) de documentos: se Alice usa sua chave privada
para criar um documento, qualquer um de que tenha sua chave pública poderá
veri�car que realmente Alice publicou aquele documento (e Alice não poderá
posteriormente negar que o fez).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
1.5. ESTABELECIMENTO DE CHAVES 11
É importante observar que um MAC (código de autenticação de mensagem,
mencionado na seção sobre funções de hashing) não dá garantia de não-repúdio,
uma vez a chave secreta incluída antes do cálculo de hash não está unicamente
associada a alguma entidade da mesma forma que um par de chaves pública/-
privada.
1.5 Estabelecimento de chaves
Criptossistemas assimétricos normalmente são mais lentos que os simétricos.
Assim, quando Alice e Bob quiserem se comunicar, idealmente usariam inicial-
mente um criptossistema assimétrico apenas para poder em seguida estabelecer
uma chave simétrica para que possam trocar informações.
1.6 Chaves públicas con�áveis
Há um problema com os esquemas de encriptação assimétricos: quando a chave
pública de Alice é oferecida a Bob, como Bob pode ter certeza de que foi real-
mente Alice que a enviou? Há diferentes maneiras de abordar este problema.
Podemos dar a uma entidade a autoridade para assinar chaves públicas. Desta
forma quando Alice envia sua chave pública, envia também uma declaração da
autoridade central de que aquela chave é de Alice. Outra maneira de lidar com
este problema é construir uma rede de con�ança, onde cada pessoa assina a
chave pública de outras, dando sua fé de que aquela chave realmente pertence
àquela pessoa. Por último, há também a Criptogra�a baseada em identidades.
1.7 Protocolos
Além dos problemas já descritos, a Criptogra�a moderna trata também de pro-
blemas de interação entre partes onde não necessariamente há con�ança mútua.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL
Os procedimentos que estas partes executam em conjunto a �m de chegar a
algum objetivo são chamados de protocolos. Esta Seção descreve alguns dos
problemas e técnicas usualmente abordados no estudo de protocolos criptográ-
�cos.
Transferência opaca (ou �inconsciente�) Em determinadas situações pode
ser necessário que Alice envie uma de duas mensagens, m0 ou m1 para Bob; que
Alice tenha certeza de que Bob recebeu uma das duas mensagens, mas que
não saiba qual delas foi recebida. Embora pareça inicialmente algo estranho,
trata-se de uma ferramenta importante, usada para construir outros protocolos
(é possível construir qualquer protocolo de duas partes usando como primitiva
apenas transferência inconsciente).
Compromisso Alice deve escolher um valor (ou um dado qualquer) e comprometer-
se com ele, mas sem que Bob saiba qual foi o valor escolhido. Para que Alice não
possa mudar sua escolha mais tarde, deve mostrar a Bob uma prova de que fez
uma escolha, mas sem que a escolha seja revelada. O que Alice faz é semelhante
a entregar a informação a Bob em um cofre (ou envelope lacrado). Quando o
valor tiver que ser usado, Alice mostra um segredo que pode ser usado para
revelar sua escolha. Pode-se implementar um esquema de compromisso usando
uma função de hashing: Alice envia a Bob o resumo criptográ�co de sua esco-
lha; mais tarde, quando Alice a revelará, e a escolha poderá ser veri�cada por
Bob simplesmente calculando novamente o hash. Esquemas de compromisso po-
dem ser usados para implementar diversos protocolos, como cara-ou-coroa por
telefone, provas de conhecimento zero e computação segura por vários atores.
Cara-ou-coroa por telefone Suponha que Alice e Bob estejam �sicamente
distantes, e queriam decidir algo usando um sorteio � jogando uma moeda,
por exemplo. Se ambos �zessem suas escolhas (cara ou coroa) primeiro para
depois um deles jogar uma moeda, este último poderia obviamente trapacear.
É possível, no entanto, �jogar cara ou coroa pelo telefone�, desde que usemos
um mecanismo chamado comprometimento: Alice compromete-se com um bit
(cara ou coroa), mas de maneira que Bob não possa conhecê-lo. Bob então joga
a moeda e anuncia o resultado. Agora Alice envia a Bob o segredo que faltava
para revelar sua opção.
Assinatura simultânea de contrato Alice e Bob querem assinar um con-
trato, mas como cada um deverá abrir mão de algo, nenhum dos dois quer
assinar primeiro.
Compartilhamento de segredos Uma senha dá acesso a muitas informa-
ções de extrema importância. Queremos mantê-la em sigilo, mas não queremos
deixar que uma única pessoa a tenha (esta pessoa pode não ser honesta, pode
perder a senha e mesmo falecer). Também não queremos que a senha seja co-
nhecida por muitos, porque teríamos que con�ar em cada um deles. Idealmente,
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
1.7. PROTOCOLOS 13
esta senha deveria ser guardada em segredo por um grupo de pessoas, até que,
por exemplo, dois terços do grupo decidarevelá-lo. A di�culdade está em per-
mitir que qualquer conjunto de pessoas com mais de 2/3 do grupo possa revelar
o segredo (não basta quebrar uma chave criptográ�ca em várias partes).
Esquemas de compartilhamento de segredos permitem resolver este pro-
blema: derivamos de um segredo diversos pedaços de informação que podem
ser usados (k por vez) para reconstruir o segredo original.
O compartilhamento de segredos, além de ser diretamente útil, também é
importante na construção de protocolos para computação segura por vários
atores.
Eleições eletrônicas Em uma eleição eletrônica com voto sigiloso há que
nenhum eleitor vote mais de uma vez; que ninguém possa duplicar o voto de
outro; que o resultado seja computado corretamente, e que seja possível a qual-
quer um veri�car que o resultado está correto. É possível construir protocolos
criptográ�cos para eleições eletrônicas com tais garantias.
Computação segura por vários atores Pode-se realizar computação usando
dados vindos de várias partes, mas sem que os dados vindos de cada fonte sejam
conhecidos. Por exemplo, duas pessoas podem descobrir qual é a mais rica, sem
que nenhuma �que sabendo exatamente qual é o patrimônio da outra.
Provas de conhecimento zero Queremos transmitir informação a alguém
preservando a possibilidade de negá-la (por exemplo, um agente da Inteligência
de um país pode precisar dar prova de sua identidade a um agente de outro país,
mas quer convencer apenas esta pessoa, sem que esta prova possa convencer
mais ninguém). Podemos também querer provar que sabemos como realizar
uma tarefa sem mostrar como fazê-lo.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
14 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL
1.8 Criptogra�a Pós-Quântica
Os computadores quânticos, embora ainda apenas teoricamente, poderiam resol-
ver de maneira e�ciente problemas como o do logaritmo discreto e o da fatoração
de inteiros. Como muito da Criptogra�a depende da di�culdade em resolver es-
tes problemas, criptólogos tentam conseguir avanços em métodos criptográ�cos
não-quânticos que sejam resistentes a ataques de algoritmos quânticos, usando
em criptossistemas e esquemas criptográ�cos problemas diferentes destes.
1.9 Criptogra�a Quântica
A Criptogra�a Quântica trata do uso de mecânica quântica em Criptogra�a.
Em 1984 Charles Bennett e Gilles Brassard desenvolveram um protocolo para
distribuição de chaves cuja segurança não se sustenta em complexidade com-
putacional, mas em leis da Física. Este protocolo é chamado de �distribuição
quântica de chaves�.
1.10 Sobre este texto
Os fundamentos da Criptogra�a são bastante simples. Usamos apenas um pouco
de Complexidade Computacional (tempo polinomial, tempo exponencial e NP-
completude) e muito pouco de Probabilidade (alguns fatos básicos e uma única
distribuição � a uniforme). A maneira como estes conceitos são usados pode, no
entanto, ser um tanto estranha inicialmente. Felizmente o modus operandi para
as demonstrações e descrições conceituais não muda muito na primeira parte do
texto (exceto talvez pelo Capítulo sobre Criptanálise), então basta que o leitor
se acostume com tal modo de pensar e a �uidez deverá vir rapidamente.
Indo dos Fundamentos para as aplicações básicas, usamos Teoria de Núme-
ros, Códigos Corretores de Erros e outras áreas da Matemática para desenvolver
os sistemas descritos nas seções anteriores.
1.10.1 Jogos e experimentos
Muitas das de�nições e demonstrações usam experimentos aleatórios que funcio-
nam como jogos. Usamos estes �jogos� (ou �experimentos�) porque eles modelam
naturalmente o funcionamento de ataques a criptossistemas: nestes jogos haverá
um desa�ador e um adversário, e estaremos sempre interessados em calcular a
probabilidade de que o adversário consiga ganhar o jogo (o que na prática se tra-
duz na probabilidade do adversário quebrar alguma ferramenta criptográ�ca).
O exemplo a seguir é um jogo extremamente simples de adivinhação de
números entre um desa�ador D e um adversário A, onde usamos um parâmetro
n. Damos a este jogo o nome NUMBER_GUESS(A, n).
Experimento 1.1 (NUMBER_GUESS(A, n)). O desa�ador começa sorteando um
número k entre um e n, e depois o envia a A. O adversário então tenta adivinhar
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
1.10. SOBRE ESTE TEXTO 15
o número e envia sua tentativa k1 a D. Se o adversário acertou, o desa�ador
encerra o jogo e declara que o resultado do experimento é um (signi�cando que
o adversário obteve sucesso). Se o adversário não acertou (ou seja, se k1 6= k),
o desa�ador responde dizendo se k < ki ou k > ki, e o adversário pode tentar
novamente. O desa�ador aceitará até três tentativas de A, mas depois encerrará
o jogo.
O jogo é mostrado no diagrama a seguir.
A D
k ∈R [1, n]
k1 = k → 1, FIM
k2 = k → 1, FIM
k3 = k → 1
k3 6= k → 0
n
k1
k1 ≶ k
k2
k2 ≶ k
k3
�
Calculamos agora a probabilidade de sucesso de A neste jogo. Antes, uma
observação. Quando o adversário envia um chute �ki�, e erra, a probabilidade
de acerto no próximo chute dependerá dele ter errado para cima ou para baixo.
Por exemplo, suponha que n = 100 e que o desa�ante tenha sorteado o número
40.
D n=100−→ A
D k1=20←− A
D k>20−→ A
Agora A tentará adivinhar novamente, mas sabe que deve tentar algum número
maior que 20. Assim, a probabilidade de sucesso será 1/80: Pr(k2 = k|k >
20) = 1/80.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
16 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL
Mas, se ao invés de 20, o adversário tivesse tentado 60, ou seja,
D n=100−→ A
D k1=60←− A
D k<60−→ A,
então a próxima tentativa será com números menores que 60. Há 59 deles, logo
Pr(k2 = k|k < 59) = 1/59.
Dado o exposto, para maior clareza �xamos nomenclatura:
• k é o número sorteado pelo desa�ante;
• ki é a i-ésima tentativa do adversário;
• zi são os valores que o adversário ainda pode usar na i-ésima tentativa.
Estando clara a notação, prosseguimos. Na primeira tentativa, A acerta com
probabilidade 1/n. Ao receber a resposta de D, o adversário poderá então
descartar uma parte do intervalo, mantendo apenas z1 valores plausíveis. Na
segunda tentativa, a probabilidade de acerto é 1/z1, e após a resposta o adver-
sário restringirá o intervalo plausível a z2. A terceira e última tentativa será em
um intervalo de tamanho z2, e a probabilidade de acerto nesta última tentativa
é 1/z2. Cada zi é estritamente menor que n, portanto 1/zi > 1/n podemos
dizer que
Pr [NUMBER_GUESS(A, n) = 1] = 1
n
+
(n− 1)
n
1
z1
+
(n− 1)
n
(z1 − 1)
z1
1
z2
>
1
n
+
(n− 1)
n
1
n
+
(n− 1)
n
(n− 1)
n
1
n
Passamos agora a um exemplo diretamente relacionado à Criptogra�a. No pró-
ximo experimento testamos um criptossistema Π contra um adversário A. O
adversário escolhe duas mensagens e envia ao desa�ador. Em seguida D escolhe
aleatoreamente um bit (b ∈R {0, 1} signi�ca que b é escolhido aleatoreamente
no conjunto {0, 1}), e encripta a mensagem mb (que corresponde ao bit esco-
lhido). D então envia mb encriptada ao adversário, que deve adivinhar qual das
mensagens foi cifrada. Quando A consegue adivinhar qual era a mensagem, o
experimento tem um como resultado; em caso contrário, o resultado é zero.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
1.10. SOBRE ESTE TEXTO 17
D A
b ∈R { 0, 1 }
b = b′ → 1
senão → 0
m0,m1
mb
b′
Claramente, queremos que o adversário tenha probabilidade de sucesso muito
pequena neste jogo (uma de�nição clara de �probabilidade muito pequena� é
dada no Capítulo 2). Não a calculamos aqui porque ela dependerá do criptos-
sistema Π usado no jogo (note que Π é um parâmetro do experimento).
Quase sempre que descrevermos uma interação deste tipo um diagrama como
este acompanhará a descrição.
1.10.2 Notação e convenções
Se adotarmos um ponto de vista prático, notaremos imediatamente que é ne-
cessário traduzir as �mensagens� práticas (que podem ser texto ou arquivos
binários)para os números usados nas construções teóricas. Presumimos que há
alguma maneira simples de traduzir as mensagens em sequências de bits, e que
ao usar uma das construções criptográ�cas, estes bits serão interpretados como
números. Ao longo do texto então presumirmos que os números são represen-
tados em base dois, e de�niremos que o tamanho de um número é o número de
bits necessário para representá-lo.
Assim, log(x) neste texto refere-se ao logaritmo de x na base dois.
A notação x ∈R X signi�ca �x é escolhido uniformemente ao acaso do con-
junto X�. Usaremos || para concatenação de cadeias de bits: se a = 0010 e
b = 1100, então a||b = 00101100.
Muitas das demonstrações tem como componente algoritmos. Quando o al-
goritmo é simples o su�ciente para ser descrito textualmente isso é feito; quando
ele tem estrutura detalhada ou complexa demais, é apresentado na forma de
pseudocódigo. Há uma única característica do pseudocódigo usado que merece
apresentação: alguns dos algoritmos e funções descritos no texto retornam mais
de um valor. A ordem dos valores não é especi�cada porque pode ser inferida
facilmente pelo contexto. Denotamos
retorne 〈a, b, c〉
quando uma função f(x) retorna os valores a, b, c. Quando um algoritmo usa
vários valores retornados por uma função (ou por outro algoritmo), denotamos
〈a, b, c〉 ← f(x)
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
18 CAPÍTULO 1. INTRODUÇÃO E VISÃO GERAL
Exercícios
Ex. 1 � Considere novamente o Experimento 1.1. Se o adversário usado no
experimento sempre tenta ki exatamente na metade do intervalo plausível, qual
sua probabilidade de sucesso?
Ex. 2 � Se não houver limite para o número de tentativas no Experimento 1.1,
qual o mínimo e o máximo número de iterações?
Ex. 3 � Considere o seguinte jogo entre um desa�ador D e um adversário
A. O desa�ador sorteia cinco cartas de baralho e as envia ao adversário. O
adversário é obrigado, então, a trocar uma das cartas � mas pode escolher
qual delas trocar. A então devolve uma das cartas e recebe outra, escolhida
aleatoreamente. Em seguida, A mostra suas cartas a D. Se as cartas mostradas
forem todas do mesmo naipe, D determinará que o resultado do experimento é
um (signi�cando sucesso de A); caso contrário, o resultado será zero.
D A
ci ∈R C
c6 ∈R C \ {ci}
∀i, j N(ci) = N(cj)→ 1
senão → 0
c1, c2, . . . , c5
ci
c6
c1, . . . , c6
Determine a probabilidade de sucesso de A no jogo.
Ex. 4 � De�na um experimento aleatório que descreve o jogo de vinte-e-um
(blackjack) de um adversário contra uma banca. Determine:
i) A probabilidade do adversário conseguir vinte e um;
ii) A probabilidade de a pontuação do adversário seja ≥ 21 após k rodadas
para k = 1, 2, . . ..
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 2
Criptossistemas e Noções de
Segurança
No restante dos Capítulos, fatos históricos serão concentrados em uma seção
�Notas�. O presente Capítulo, no entanto, se diferencia por iniciar com alguns
parágrafos que resumem, em muito alto nível de detalhes, a evolução dos con-
ceitos de segurança em Criptogra�a. Isto porque a compreensão deste processo
é algo demasiado importante para que se possa compreender completamente as
noções atuais de segurança, incluindo os fatos que levaram ao seu desenvolvi-
mento.
As noções de segurança usadas em Criptogra�a passaram por diversas fases
claramente distintas. Inicialmente criptossistemas eram criados e sua segurança
dependia de quanto tempo ela permanecia útil, sem que adversários conseguis-
sem frustrar os objetivos do usuário.
No Século XX, Claude Shannon formalizou diversas ideias a respeito de
segurança e propôs o conceito de sigilo perfeito. Infelizmente, criptossistemas
com sigilo perfeito não são viáveis na prática.
Uma vez que criptossistemas com sigilo perfeito não são construções viáveis,
por certo tempo foram desenvolvidas construções criptográ�cas que �pareciam
boas�, por basearem-se em ideias boas (como a de substituir e misturar partes
da mensagem para obter o texto encriptado), mas sem nenhuma prova de que
realmente eram seguras. A segurança dessas construções era aferida de acordo
com seu grau de exposição: uma construção é mais segura se for mais ampla-
mente conhecida e mais antiga do que outra, sem ter sofrido nenhum ataque
com sucesso.
No início da década de 80 surgiu uma percepção da necessidade de demons-
trações formais de segurança para construções criptográ�cas, de forma a evitar
a prática (comum até então) de usar critérios empíricos para determinar a con-
�ança em criptossistemas e ferramentas criptográ�cas.
19
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
20 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA
2.1 Criptossistemas
Embora o escopo da Criptogra�a seja muito mais amplo que o estudo de criptos-
sistemas simétricos, os usaremos na descrição de conceitos fundamentais sobre
segurança em criptogra�a.
No decorrer do texto usaremos os nomes Enc e Dec para funções que en-
criptam e decriptam mensagens. Normalmente estas funções aceitarão pelo
menos dois argumentos: uma chave e um texto. Ao invés de denotar Enc(k, x)
e Dec(k, x), usaremos Enck(x) e Deck(x).
De�nição 2.1 (Criptossistema de chave privada). Um criptossistema de chave
privada consiste de três algoritmos polinomiais:
• Gen, um algoritmo randomizado que escolhe uma chave de acordo com
alguma distribuição de probabilidades;
• Enc, um algoritmo randomizado que aceita uma chave k, uma mensagem
m e retorna um texto cifrado c;
• Dec, um algoritmo determinístico que aceita uma chave k e um texto
cifrado c e retorna uma mensagem m.
Para toda chave k, toda mensagem m e todo texto cifrado c, é necessário que
Deck(Enck(m)) = m. �
Neste texto denotamos por K o espaço de chaves,M o espaço de mensagens
e C o espaço de textos cifrados.
Usaremos as distribuições de probabilidade sobre K, M e C. A distribui-
ção sobre K é determinada pelo algoritmo Gen. A distribuição sobre M não
é determinada pelo criptossistema, mas sim pelas probabilidades a priori das
mensagens. As distribuições sobre K eM são independentes; já a distribuição
sobre C é determinada pelas outras e pelo algoritmo Enc.
Denotaremos as três variáveis aleatórias por K, M e C: Pr[K = k] é a
probabilidade de a chave k ser escolhida por Gen; Pr[M = m] é a probabilidade
da mensagem ser m; e Pr[C = c] é a probabilidade do texto cifrado ser c.
Para simpli�car a notação poderemos omitir a variável aleatória: Pr(k) ao
invés de Pr[K = k] etc. Neste caso o contexto determinará a variável aleatória.
Por exemplo, se em um dado contexto x for uma chave então Pr(x) é o mesmo
que Pr[K = x].
2.2 Princípio de Kerckho�s
Há um princípio para construção de criptossistemas, descrito por Auguste Kerckho�s
em 1883, e que continua sendo relevante. Damos nesta Seção uma versão mo-
derna dele (a parte relevante do texto original de Kerckho�s, traduzido, está na
Seção de Notas).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
2.3. SIGILO PERFEITO 21
O funcionamento interno de um criptossistema não pode ser secreto;
deve-se presumir que o adversário conhece como o criptossistema
funciona, e a segurança do sistema deve estar na escolha das chaves.
2.3 Sigilo Perfeito
Informalmente, um criptossistema tem sigilo perfeito quando o conhecimento
do texto cifrado não dá a um adversário qualquer informação a respeito da
mensagem e que portanto, se um adversário pretende obter uma mensagem, o
conhecimento do texto encriptado não muda sua probabilidade de sucesso (ou
seja, o adversário não pode fazer melhor do que tentar �adivinhar� a mensagem).
De�nição 2.2 (Sigilo Perfeito). Um criptossistema tem sigilo perfeito se, para
todo m ∈M e c ∈ C, Pr(m|c) = Pr(m). �
A formulação alternativa de sigilo perfeito, dada pelo Lema a seguir, nos
será útil.
Lema 2.3. Um criptossistema tem sigilo perfeito se e somente se, para todo
m ∈M e c ∈ C, Pr(c|m)= Pr(c).
Demonstração. Dada uma mensagem m e um texto cifrado c, considere a equa-
ção
Pr(c|m) = Pr(c).
Multiplique ambos os lados por Pr(m)/Pr(c):
Pr(c|m) Pr(m)
Pr(c)
= Pr(m)
Pelo Teorema de Bayes o lado esquerdo é Pr(m|c). Assim, Pr(m|c) = Pr(m). �
Criptossistemas com sigilo perfeito tem uma séria limitação, que demons-
tramos no Teorema 2.4 a seguir: a quantidade de chaves deve ser tão grande
quanto a quantidade de possíveis mensagens. Se as mensagens tiverem tama-
nho �xo, isso implica que o tamanho das chaves deve ser igual ao tamanho dos
documentos1
Teorema 2.4. Em um criptossistema com sigilo perfeito, |K| ≥ |M|.
Demonstração. Suponha que |K| < |M|, e considere a distribuição uniforme
sobre M. Seja c ∈ C tal que Pr(c) > 0, e seja M(c) o conjunto de todas as
mensagens que poderiam ser o deciframento de c:
M(c) = {m | m = Deck(c) para algum k ∈ K}
1Se quisermos cifrar documentos de 1 Mb, teremos que determinar M como todas as
sequências de bits que formam documentos de 1 Mb, que é o mesmo que 8× 10242 = 8388608
bits. Teríamos então 28388608 possíveis mensagens, e este teria que ser também o tamanho do
espaço de chaves. A representação de cada chave então ocuparia 1 Mb.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
22 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA
Como para cada mensagem m ∈M(c) há pelo menos uma chave k ∈ K tal que
m = Deck(c), então |M(c)| ≤ |K|. Mas como nossa hipótese inicial era de que
|K| < |M|, temos que
|M(c)| ≤ |K| < |M|
e portanto, como |M(c)| < |M|, deve haver alguma mensagem m′ ∈M tal que
m′ /∈M(c), e neste caso
Pr(m′|c) = 0 6= Pr(m′) = 1
|M|
.
(A distribuição sobreM é uniforme, por isso a�rmamos que Pr(m′) = 1|M| .)
Mostramos assim que com |K| < |M| um criptossistema não tem sigilo
perfeito. �
Um exemplo de criptossistema com sigilo perfeito é o one-time pad, também
chamado de cifra de Vernam.
Usamos a notação 1n para a sequência de n bits iguais a um, e {0, 1}n para
o conjunto de todas as sequências de n bits.
Construção 2.5 (One-time pad). O one-time pad requer que o tamanho de
cada chave seja igual ao da mensagem a ser encriptada, e igual também ao
tamanho do texto cifrado. Assim, usando representação binária para as chaves,
K =M = C = {0, 1}n para algum n.
• Gen escolhe uniformemente uma chave k ∈ K
• Enc e Dec realizam a operação ou-exclusivo bit a bit entre seus dois argu-
mentos. Ou seja,
Enck(m) = k ⊕m,
Deck(c) = k ⊕ c. �
A Figura a seguir ilustra o funcionamento do one-time pad.
0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 1 1 0
1 1 1 0 0 1 1 1 0 1 0 0 1 1 0 0 1 0 1 1
1 0 0 0 1 1 1 0 0 0 1 0 0 1 0 0 1 1 0 1
texto encriptado
chave
mensagem
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
2.3. SIGILO PERFEITO 23
Usaremos o Lema a seguir na demonstração de que o one-time pad tem sigilo
perfeito.
Lema 2.6. Um criptossistema simétrico tem sigilo perfeito se e somente se para
toda distribuição sobreM e para quaisquer mensagens m0, m1 e qualquer texto
cifrado c,
P (c|m0) = P (c|m1).
Demonstração. (⇒) Suponha que o sistema tem sigilo perfeito e tome m0,m1 ∈
M e c ∈ C. Usando o Lema 2.3,
Pr(c|m0) = Pr(c) = Pr(c|m1),
e esta direção da prova está completa.
(⇐) (Rascunho) Presuma P (c|m0) = P (c|m1), depois calcule P (c) usando
o Lema 2.3. �
Teorema 2.7. O one-time pad tem sigilo perfeito.
Demonstração. Como a de�nição de sigilo perfeito não pressupõe qualquer dis-
tribuição sobre M, deve valer para todas. Tomamos então uma distribuição
qualquer sobre M, uma mensagem m e um texto cifrado c. Para o one-time
pad,
Pr(c|m) = Pr[M⊕K = c|M = m]
= Pr[m⊕K = c]
= Pr[K = m⊕ c] = 1
|K|
Como isto vale para toda distribuição sobreM e para quaisquer mensagens m0,
m1 e qualquer texto cifrado c, então
P (c|m0) =
1
|K|
= P (c|m1)
e pelo Lema 2.6 o one-time pad tem sigilo perfeito. �
Há uma de�nição alternativa de sigilo perfeito que usa uma simulação de
ataque ao criptossistema por um adversário, como em um jogo. Neste jogo o
adversário tem como objetivo determinar qual de duas mensagens, m0 ou m1,
originou um texto cifrado c. Usaremos esta simulação de jogo para provar que a
probabilidade de acerto do adversário é exatamente 1/2. Usaremos estes jogos
também nas de�nições de outras noções de segurança ao longo do texto.
Consideraremos possíveis ataques a um criptossistema. No modelo a ser
usado há um adversário A. De�niremos um experimento para o criptossis-
tema Π = (Gen, Enc, Dec) e o adversário A. Chamaremos este experimento de
PRIV_EAV(A) (�eav� é para �eavesdropping�). Deixaremos que o adversário esco-
lha duas mensagens. Em seguida, cifraremos uma delas (sem que ele saiba qual)
e a enviaremos a ele. O adversário deverá então descobrir qual das mensagens
foi cifrada.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
24 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA
O Experimento PRIV_EAV aceita dois parâmetros: o criptossistema e o ad-
versário. A notação que usaremos neste texto é Π para um criptossistema qual-
quer e A para um adversário. Quando um criptossistema tiver sigilo perfeito,
ele poderá ser denotado Π∗.
Experimento 2.8 (PRIV_EAV(Π,A)).
1. A escolhe duas mensagens m0 e m1 ∈M;
2. Uma chave k ∈ K é gerada usando Gen, e um bit b é escolhido aleatorea-
mente. Então a mensagem mb é cifrada e enviada para A;
3. A mostra b′;
4. Se b = b′, o resultado do experimento é 1 (e dizemos que A teve sucesso),
senão é 0.
D A
k ∈R { 0, 1 }n
b ∈R { 0, 1 }
b = b′ → 1
b 6= b′ → 0
m0,m1
Enck(mb)
b′
�
De�nição 2.9 (Sigilo perfeito de criptossistema simétrico (versão com adversá-
rio)). Um criptossistema Π tem sigilo perfeito sobre um conjunto de mensagens
M se para todo adversário A,
Pr[PRIV_EAV(Π,A) = 1] = 1
2
.
�
Esta de�nição é equivalente à de�nição 2.2, mas não apresentaremos a de-
monstração. Note que esta de�nição não impõe restrições ao tamanho das men-
sagens e nem ao tempo que A pode demorar para executar.
No decorrer deste texto várias de�nições de segurança semelhantes a esta,
baseadas em experimentos, serão apresentadas. Todos os experimentos são pa-
rametrizados (neste caso os parâmetros foram apenas Π e A; haverá variações).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
2.4. SEGURANÇA EMPÍRICA E COM HEURÍSTICAS 25
2.4 Segurança empírica e com heurísticas
As noções de segurança usadas na prática desde Shannon até o �nal da década
de 70 não são rigorosas ou formais o su�ciente para serem descritas neste texto.
No entanto, mesmo com o surgimento da segurança demonstrável no começo da
década de 80, em muitas áreas da Criptogra�a não foi possível passar a usar
construções com demonstrações de segurança. Um exemplo é o desenvolvimento
de cifras de bloco, que sempre foram mais e�cientes que as cifras assimétricas,
mas por outro lado carecem de demonstração de segurança.
Há, porém, um conjunto de ideias e métodos usados na construção de cifras
de bloco que foram sendo desenvolvidos e re�nados ao longo do tempo: métodos
comuns de ataque, padrões de arquitetura que parecem resistir a estes métodos,
e assim por diante. Estas ideias e métodos (�heurísticas�) mostraram ser bons
o su�ciente para a construção de cifras de bloco cuja segurança �veri�cada em-
piricamente� é bastante boa. As cifras de bloco (e funções de hashing) usadas
na prática em sistemas são exemplo disso: não há para elas demonstração de
segurança, mas foram desenvolvidas usando blocos básicos e arquitetura que são
normalmente reconhecidos como �bons�.
2.5 Segurança demonstrável
Para poder elaborar demonstrações de segurança em Criptogra�a, passou a ser
necessário de�nir rigorosamente critérios de segurança e identi�car conjecturas
nas quais as demonstrações se baseiam. Estes dois pontos são elaborados a
seguir.
• De�nir rigorosamente segurança: antes de demonstrar que uma constru-
ção criptográ�ca é segura, é necessário de�nir o que signi�ca ser �seguro�
no contextoem que trabalhamos. Isto é necessário obviamente porque não
há como elaborar uma demonstração rigorosa sem de�nições precisas. No
entanto, de�nições precisas também servem ao usuário ou engenheiro que
queira escolher uma ferramenta criptográ�ca: ele saberá exatamente quais
são os tipos de ataque a ferramenta resistirá (e poderá inclusive comparar
diferentes ferramentas, de acordo com a segurança de cada uma).
• Identi�cação de hipóteses precisas: na grande maioria dos casos, não é
possível conseguir segurança incondicional, e sim dependendo de alguma
conjectura: uma construção é segura �se a fatoração de inteiros for difí-
cil�, ou se for difícil calcular o logaritmo de um número em um grupo,
por exemplo. Há também conjecturas normalmente �mais con�áveis� que
outras (e aqui surge novamente um critério subjetivo): problemas muito
conhecidos e estudados por muito tempo normalmente são preferíveis a
problemas novos e pouco estudados (é mais provável que um criptólogo
con�e em uma construção baseada em fatoração de inteiros do que em
outra, baseada em um problema desconhecido).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
26 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA
A segurança demonstrável tornou-se o método padrão para desenvolvimento
de algumas construções � em particular, na criptogra�a assimétrica. Algumas
construções, no entanto, continuaram a ser desenvolvidas na prática com heu-
rísticas, porque o trabalho teórico que foi possível desenvolver não levava a
construções e�cientes. Este é o caso das cifras simétricas de �uxo e de bloco, e
de funções de hashing.
A segurança de cifras de bloco, por exemplo, passou de �arte� para �heu-
rística�: com o tempo o conjunto do conhecimento a respeito de métodos de
ataque e arquitetura de cifras de bloco permitiu identi�car estratégias melhores
de projeto. Além disso, a Criptanálise passou a possibilitar diversas veri�cações
de segurança para estas construções.
Ao longo do tempo, no entanto, algum progresso foi feito na tentativa de
aproximar os mundos da criptogra�a simétrica e da segurança demonstrável.
2.5.1 Cenários de ataque
Suponha que um adversário queira quebrar um criptossistema simétrico (ou
seja, obter uma mensagem m ou a chave secreta k, sem que estas tenham sido
con�adas a ele). Há várias possíveis situações em que ele poderia tentar fazê-lo.
As quatro mais simples são listadas a seguir.
• Ataque de texto cifrado conhecido: o adversário tem apenas textos cifrados
com uma chave k e tenta determinar as mensagens;
• KPA, ataque com texto claro conhecido: aqui o adversário conhece pares
de textos claros e cifrados, todos encriptados com uma mesma chave k, e
tenta decriptar um outro texto cifrado, também encriptado com k;
• CPA (Chosen Plaintext Attack), ataque de texto claro escolhido: o adver-
sário pode obter a encriptação de textos à sua escolha usando a chave k.
Seu objetivo é decriptar um outro texto que também foi encriptado com
k;
• CCA (Chosen Ciphertext Attack), ataque de texto cifrado escolhido. Aqui
o adversário pode obter o deciframento de mensagens usando k, exceto
daquela que realmente quer decifrar.
Os dois primeiros ataques são chamados de passivos, e os dois últimos de
ativos.
Estes ataques dizem respeito a sigilo, e portanto fazem sentido apenas para
criptossistemas ou outras construções onde mensagens são de alguma forma en-
criptadas. De�nições de segurança para outros objetivos (resistência a fraude,
por exemplo) e construções (esquemas de assinatura, funções de hashing e pro-
tocolos) serão abordadas ao longo do texto.
O experimento PRIV_EAV(Π,A), descrito anteriormente, está relacionado ao
primeiro tipo de ataque (o adversário conhece apenas textos cifrados) em crip-
tossistemas de chave privada. Outras variantes deste experimento (para chave
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
2.5. SEGURANÇA DEMONSTRÁVEL 27
privada, chave pública e para diferentes tipos de ataque) e outras de�nições de
segurança serão apresentadas quando diferentes criptossistemas forem discuti-
dos.
2.5.2 Probabilidade desprezível
Precisaremos falar de criptossistemas onde o adversário tem �probabilidade des-
prezível de sucesso�, portanto de�niremos �desprezível�: informalmente, uma
função é dita desprezível quando se aproxima de zero mais rápido que o recí-
proco de qualquer polinômio.
De�nição 2.10 (Função desprezível). Uma função f : N→ R é desprezível se
para todo polinômio p(·) existe um N tal que para todos os inteiros n > N ,
f(n) < 1|p(n)| . �
Por exemplo,
• f(n) = 12n é desprezível, porque para qualquer polinômio p, haverá um N
a partir do qual 12n <
1
p(n) ;
• g(n) = 1n4+100 não é desprezível: seja h(n) =
1
n5 . Há algum N a partir do
qual h(n) < 1n4 .
É importante observar que esta de�nição é assintótica: não a�rmamos nada
para valores de n menores que N .
No resto do texto será comum encontrarmos funções desprezíveis a partir do
seguinte raciocínio: para um parâmetro n, um espaço amostral tem tamanho
2n; como supomos distribuição uniforme, a probabilidade de x é dada por 12n ,
e encontramos uma função desprezível. Os espaços amostrais de tamanho 2n
normalmente são algo como �todas as sequências de n bits�.
Denotaremos funções desprezíveis arbitrárias por negl2.
Há duas propriedades importantes de funções desprezíveis:
• A soma de duas funções desprezíveis também é desprezível;
• Amultiplicação de uma função desprezível por um polinômio é uma função
desprezível.
Eventos com probabilidade desprezível podem ser ignorados para efeitos prá-
ticos; aceitaremos como seguro um criptossistema que tenha probabilidade des-
prezível de ser quebrado.
2Usamos negl para manter a consistência com textos em Inglês, onde tais funções são
chamadas de �negligible�.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
28 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA
2.5.3 Exemplo de de�nição de segurança
A de�nição 2.9 implica em sigilo perfeito, e nada presume a respeito do poder
computacional do adversário. Relaxaremos estas restrições para chegar a uma
de�nição de segurança mais útil na prática:
• Apenas consideraremos adversários executando algoritmos randomizados
que executam em tempo polinomial;
• Admitiremos que o adversário possa quebrar o sistema com probabilidade
desprezível.
De�niremos um experimento para o criptossistema Π e o adversário A. Cha-
maremos este experimento de PRIV_EAV(Π,A, n). Note que este experimento
não é o mesmo que aquele usado na De�nição 2.9, tendo inclusive nome dife-
rente (o (n) indica que o experimento depende de um parâmetro n). Além disso,
neste experimento admitiremos que o adversário terminará sua parte em tempo
polinomial em n (o tamanho das mensagens). Damos ao adversário a entrada
1n e o deixaremos escolher duas mensagens de mesmo tamanho. Em seguida
geraremos uma chave de tamanho n, cifraremos uma das mensagens (sem que o
adversário saiba qual) e a enviaremos a ele. O adversário deverá então descobrir
qual das mensagens foi cifrada. Formalizamos esta ideia da seguinte forma:
Experimento 2.11 (PRIV_EAV(Π,A, n)).
1. O adversário A recebe uma entrada 1n e escolhe duas mensagens, m0 e
m1 ∈M, que tenham o mesmo tamanho (o tamanho das mensagens deve
ser o mesmo, mas não precisa ser igual a n);
2. Uma chave k ∈ K é gerada usando Gen(1n), e um bit b é escolhido aleato-
reamente. Então a mensagem mb é cifrada e enviada para A;
3. A mostra b′;
4. Se b = b′, o resultado do experimento é 1 (e dizemos que A teve sucesso),
senão é 0.
D A
k ∈R { 0, 1 }n
b ∈R { 0, 1 }
b = b′ → 1
b 6= b′ → 0
1n
m0,m1
Enck(mb)
b′
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
2.5. SEGURANÇA DEMONSTRÁVEL 29
�
Requeremos que o adversário execute em tempo polinomial em n.
Podemos então dar uma de�nição de segurança contra ataques de texto
cifrado conhecido.
De�nição 2.12 (Segurança contra ataque detexto cifrado conhecido). Um
criptossistema simétrico Π tem indistinguibilidade de texto cifrado na presença
de um grampoM se para todo adversário A existe uma função desprezível negl
tal que,
Pr[PRIV_EAV(A, n) = 1] ≤ 1
2
+ negl(n).
�
Esta nova de�nição de segurança contra ataque de texto cifrado não implica
em sigilo perfeito, portanto podemos obtê-la com criptossistemas onde |K| <
|M|.
Notas
A de�nição de criptossistema que demos é a mesma dada por Katz e Lindell [130]
e também por Goldreich [88].
Auguste Kerckho�s publicou suas ideias a respeito de criptossistemas em seu
artigo �La Cryptographie Militaire�, na revista francesa �Journal des sciences
militaires� em 1883. Os princípios para construção de criptossistemas, descritos
por Auguste Kerckho�s, são:
1. O sistema deve ser praticamente, se não matematicamente, indecifrável;
2. Não pode necessitar ser secreto, e pode ser tal que caindo nas mãos do
inimigo não cause inconveniência;
3. Sua chave deve ser comunicável e armazenável sem a ajuda de notas es-
critas, e modi�cável à vontade pelos correspondentes;
4. Deve ser aplicável a correspondências telegrá�cas;
5. Deve ser portável, e seu uso não deve requerer a participação de várias
pessoas;
6. Finalmente, é necessário, dadas as circunstâncias de sua aplicação, que o
sistema seja fácil de usar, não exigindo esforço mental ou o conhecimento
de longas sequências de regras a serem aplicadas.
A Teoria da Informação foi desenvolvida inicialmente por Claude Shannon
em um artigo de 1948 [193] (e no livro de 1949 [195]). Shannon também de-
senvolveu um modelo teórico para comunicação com sigilo em outro artigo, em
1949 [194]. Embora o artigo de Shannon de 1948 seja bastante claro e acessível,
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
30 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA
o livro de Cover e Thomas [55] também é muito boa introdução ao assunto, e
cobre muitas aplicações modernas.
Na conferência CRYPTO de 1999 Ueli Maurer apresentou um resumo de
conceitos relacionados a Teoria da Informação com aplicações em Criptogra-
�a [155].
O one-time pad foi descrito inicialmente por Vernam em um artigo de 1926 [215]
(por isso também é conhecido como �cifra de Vernam�), sem qualquer demons-
tração de segurança; em 1949 Shannon de�niu sigilo perfeito e mostrou que esta
é uma propriedade da cifra de Vernam [194].
Embora o one-time pad isolado não seja útil como criptossistema, é usado no
desenvolvimento de diversas outras ferramentas, como esquemas de comparti-
lhamento de segredos e negação plausível � é importante portanto compreender
não apenas sua importância teórica, mas também conseguir reconhecê-lo em
outras construções criptográ�cas.
O desenvolvimento de construções com forte ênfase em segurança demons-
trável iniciou com a publicação do criptossistema de Sha� Goldwasser e Silvio
Micali em 1982 [95].
Exercícios
Ex. 5 � Implemente o one-time pad.
Ex. 6 � [Stinson] Suponha que o one-time pad foi usado para encriptar m e
m′, resultando em c e c′ respectivamente. Sabendo que a mesma chave foi usada
(de forma contrária ao que se recomenda quando usamos o one-time pad), mostre
que
m⊕m′ = c⊕ c′.
Ex. 7 � Prove a outra direção do Lema 2.3.
Ex. 8 � (Fácil) Complete a prova do Lema 2.6 (há uma parte marcada como
�rascunho�).
Ex. 9 � (Fácil) Demonstre as duas propriedades de funções desprezíveis na
Seção 2.5.2.
Ex. 10 � Reescreva a de�nição de função desprezível usando a notação de
crescimento assintótico, típica em análise de algoritmos.
Ex. 11 � Considere o criptossistema a seguir (uma variante do one-time pad):
Construção 2.13 (Criptossistema furado).
•Gen(1n) seleciona uniformemente uma sequência de bits em {0, 1}n;
•Enc(m, k) funciona da seguinte maneira: a mensagem m é dividida em
blocos m0,m1, · · · ,mr de n bits. Cada bloco é encriptado separadamente,
sendo que ci = mi ⊕ k;
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
2.5. SEGURANÇA DEMONSTRÁVEL 31
•Dec(c, k) é semelhante a Enc, mas permutando c e m.
�
a) Prove que o criptossistema funciona corretamente (ou seja, para todos k e
m, Dec(Enc(m, k), k) = m).
b) Prove que o criptossistema não é seguro de acordo com nenhuma das de�-
nições dadas neste Capítulo.
c) Implemente o criptossistema, e também tente implementar um programa
que exempli�que sua insegurança.
Ex. 12 � (Katz/Lindell) Prove ou refute: todo criptossistema onde as chaves
tem o mesmo tamanho (�xo) das mensagens e são escolhidas ao acaso tem sigilo
perfeito.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
32 CAPÍTULO 2. CRIPTOSSISTEMAS E NOÇÕES DE SEGURANÇA
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 3
Problemas Difíceis
Funções de mão única são fundamentais para a Criptogra�a moderna. Informal-
mente, uma função f é de mão única se é fácil de calcular e difícil de inverter: há
algoritmo polinomial para calcular f(x), mas dado y não há algoritmo e�ciente
para encontrar um elemento da pré-imagem de y (algum x tal que f(x) = y).
Uma óbvia aplicação de funções de mão única é a encriptação de mensagens.
Se f é de mão única, queremos encriptar mensagens usando f(m).
Outra maneira clara de usar funções de mão única é na construção de funções
de hash, cujo funcionamento é conceitualmente semelhante às funções de mão
única.
Também queremos construir geradores pseudoaleatórios de bits (que são
usados em quase todas as ferramentas criptográ�cas). Para fazê-lo, podemos
simplesmente usar uma função de mão única sobre alguma função que expanda
a semente.
3.1 Funções de mão única
Começamos com uma de�nição mais precisa para �fácil de computar e difícil de
inverter�. Por fácil de computar entendemos que a função pode ser computada
por algum algoritmo determinístico polinomial. Por difícil de inverter queremos
dizer que, para qualquer algoritmo determinístico polinomial A, a probabilidade
de A conseguir encontrar um elemento da pré-imagem de f deve ser desprezível
no tamanho da entrada de f .
De�nição 3.1 (Função de mão única). Uma função f é de mão única se é
1. Fácil de computar: Existe um algoritmo de tempo polinomial que computa
f ;
2. Difícil de inverter: Todo algoritmo A randomizado de tempo polinomial
deve ter probabilidade desprezível de encontrar uma pré-imagem de f .
Ou seja, dado um elemento x com tamanho n escolhido uniformemente no
33
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
34 CAPÍTULO 3. PROBLEMAS DIFÍCEIS
domínio de f , para todo polinômio positivo p(·) e todo n su�cientemente
grande,
Pr
[
A(f(x), 1n) ∈ f−1(f(x))
]
<
1
p(n)
�
A entrada 1n para A é necessária porque não queremos classi�car uma função
como de mão única apenas porque ela diminui muito sua entrada (queremos um
algoritmo polinomial em n, e não no tamanho de f(x)).
Usaremos em diversas situações funções de mão única que preservam o ta-
manho da entrada e que tem inversa. Estas são chamadas de permutações de
mão única.
De�nição 3.2 (Permutação de mão única). Uma função de mão única é cha-
mada de permutação de mão única quando é uma bijeção e preserva o tamanho
de sua entrada. �
Não se sabe se existem funções de mão única. Só podemos provar a existência
de funções de mão única condicionalmente: sabemos que elas devem se P 6= NP,
ou se certas conjecturas forem verdadeiras. Assim, falaremos a seguir de funções
candidatas a mão única.
Daremos três exemplos de funções candidatas a mão única:
• A exponenciação modular, que mostraremos ser permutação de mão única
(condicionada a uma conjectura);
• A multiplicação de inteiros. Mostraremos que esta função satisfaz uma
de�nição relaxada de função de mão única (condicionada a uma conjec-
tura);
• A soma de subconjuntos. A obtenção da inversa é um problema NP-
completo (e portanto é de mão única se P for diferente de NP).
Tomamos a liberdade de, num abuso de linguagem,no resto deste Capítulo,
denominar as funções candidatas por funções �de mão única�.
3.1.1 Pré-Computação Quântica
As funções descritas nesta seção não são resistentes a ataques por computadores
quânticos: embora não conheçamos algoritmo clássico que possa calcular f−1
rapidamente, existe algoritmo quântico para isso.
Nosso exemplo de permutação de mão única é gx (mod p) onde p é primo e
g é o gerador do grupo (Zp, ·).
Exemplo 3.3 (Logaritmo Discreto). Sejam p um número primo; g um gerador
de Zp com a operação de multiplicação1. Cremos que a função
dexp p,g(x) = g
x (mod p)
seja de mão única, com o parâmetro de segurança sendo a quantidade de bits
usada para representar p. J
1ou uma raiz primitiva módulo p � consulte o Apêndice B.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
3.1. FUNÇÕES DE MÃO ÚNICA 35
A função dexp é computável em tempo polinomial. Além disso, preserva o
tamanho da entrada e é uma bijeção. Dado y = dexp p,g(x), não é conhecido
algoritmo e�ciente (polinomial em p) para determinar x. Este problema (en-
contrar um elemento na pré-imagem de dexp (x)) é conhecido como problema do
logaritmo discreto, e tem sido usado como base para construção de ferramentas
criptográ�cas há muito tempo. Usaremos a hipótese de que não existam algorit-
mos e�cientes para resolvê-lo, e nos referiremos a tal hipótese como a �hipótese
do logaritmo discreto�2:
Conjectura 3.4 (Di�culdade do Logaritmo Discreto). Para qualquer algoritmo
randomizado polinomial A, qualquer número x escolhido ao acaso em Zq, onde
||q|| = k é o número de bits usados para representar q, e qualquer polinômio
positivo p(·),
Pr[A(p, g,dexp p,g(x)) = x] <
1
p(k)
.
Exemplo 3.5 (Fatoração de Inteiros). Dados dois primos p, q, ambos com n
bits de tamanho, seja mult (p, q) = pq. Acreditamos que a mult seja uma função
de mão única, com o parâmetro de segurança sendo n. J
É evidente que mult é computável em tempo polinomial. Não conhecemos,
no entanto, algoritmo polinomial para determinar (p, q) a partir de pq. Usaremos
a hipótese de que tal algoritmo não exista, e nos referiremos a ela como a
�hipótese da fatoração de inteiros�3.
Conjectura 3.6 (Di�culdade da Fatoração de Inteiros). Para qualquer algo-
ritmo randomizado polinomial A, quaisquer inteiros x, y com n bits cada, e
qualquer polinômio positivo p(·),
Pr[A(xy) = (x, y)] <
1
p(n)
.
3.1.2 Pós-quântica
As funções descritas na seção anterior só podem ser consideradas candidatas
a funções de mão única se nos restringirmos a computadores clássicos. Há
algoritmo quântico que pode determinar elementos na pré-imagem de cada uma
delas.
Nesta seção apresentamos algumas funções que continuam sendo candidatas
a funções de mão única, mesmo na presença de computadores quânticos.
Exemplo 3.7 (Soma de Subconjuntos). Dados n inteiros x1, · · · , xn e uma
descrição de um subconjunto deles, a função somasub retorna o somatório dos
elementos do subconjunto.
somasub(x1, x2, · · · , xn, S) =
(
x1, x2, · · · , xn,
∑
i∈S
xi
)
2�Discrete logarithm assumption� em Inglês.
3�Integer factorization assumption� nos textos em Inglês.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
36 CAPÍTULO 3. PROBLEMAS DIFÍCEIS
Determinar o subconjunto S a partir dos elementos xi e da soma é um problema
NP-completo, e também acreditamos que esta função seja de mão única. J
No entanto, nem todo problema NP-completo pode ser usado como base
para funções de mão única: para que a função seja de mão única, ela deve ser
difícil de inverter quase sempre (exceto pela �probabilidade desprezível� já men-
cionada). Um problema NP-completo pode ser fácil de resolver na maioria dos
casos � somente não conhecemos algoritmos e�cientes para as piores instâncias
de problemas NP-completos. Cremos que o problema da soma de subconjuntos
seria um bom candidato não por ser NP-completo, mas por não conhecermos
algoritmos e�cientes para resolvê-lo.
Problemas difíceis em reticulados
Reticulados são semelhantes a espaços vetoriais (porque são conjuntos de com-
binações lineares de uma base), mas não são contínuos, porque na de�nição de
um reticulado, usamos somente combinações lineares com coe�cientes inteiros.
De�nição 3.8. Um reticulado em Rn é um conjunto
L(B) =
{
n∑
i=1
λibi|λi ∈ Z
}
onde B = (b1, . . . , bn) é uma base de Rn. Dizemos que (b1, . . . , bn) é uma base
de L(B). �
Assim como com espaços vetoriais, é comum de�nir a base de um reticulado
como uma matriz onde cada coluna é um dos vetores bi:
b1,1 b2,1 · · · bn,1
b1,2
. . .
...
...
. . .
bn,n

Exemplo 3.9. A �gura a seguir mostra o reticulado gerado pela base
(
(0,−1), (2, 0)
)
.
b1 b2
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
3.1. FUNÇÕES DE MÃO ÚNICA 37
A base do reticulado pode ser descrita matricialmente como segue.(
0 2
−1 0
)
Observamos que, assim como para espaços vetoriais, podemos ter mais de uma
base para um reticulado. Por exemplo, uma nova base para o reticulado que
descrevemos pode ser obtida com os vetores
β1 = 2b1 + b2 = (2,−2)
β2 = −3b1 − b2 = (−2, 3).
Note que usamos somente números inteiros nos coe�cientes. A base é(
2 −2
−2 3
)
Esta base é ilustrada na próxima �gura.
β1
β2
A base (b1, b2) é ortogonal, enquanto a base (β1, β2) é bastante distante de
ser ortogonal. Isto interfere na di�culdade de resolver certos problemas em
dimensão maior que dois, como pode ser visto no Capítulo 18. J
Há diversos problemasNP-difíceis de�nidos em reticulados. Os mais simples
deles são:
• SVP: dada uma base B, determinar um vetor de L(B) com a menor norma;
• CVP: dada uma base B com n vetores e um vetor t ∈ Rn, determinar o
vetor v ∈ L(B) mais próximo de t;
• SBP: dada uma base B gerando L(B), encontre outra base B′ para o
mesmo reticulado que seja �menor� de alguma forma. Por exemplo, po-
demos tentar encontrar dentre todas as bases aquela contendo o vetor de
menor norma:
||B′|| = max
i
||si||
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
38 CAPÍTULO 3. PROBLEMAS DIFÍCEIS
ou a que contém a menor soma dos quadrados dos vetores:
||B′|| =
∑
i
||si||2.
Observamos a função de mão única associada ao problema CVP . De posse
de qualquer base B e um vetor x ∈ L(B), podemos obter um vetor v ∈ Rn,
próximo de x mas fora do reticulado. Basta adicionar um vetor de erro que não
tenha norma grande demais:
f(v) = x+ e
Dado um ponto v e uma base B, o problema de encontrar x ∈ L(B) mais
próximo de v é NP-difícil (mas é fácil se a base B for �bem comportada� �
tratamos disso no Capítulo 18).
3.2 Predicados hard-core
Embora em primeira análise possa parecer que funções de mão única sejam
seguras o su�ciente para que as usemos no desenvolvimento de ferramentas
criptográ�cas, há ainda um problema a ser tratado.
Suponha que em um leilão um participante envie seu lance encriptado, e que
o algoritmo para encriptação use uma função de mão única. Sabemos que não
deve haver maneira e�ciente de obter o valor do lance, mas isso não signi�ca
que não possamos descobrir outras coisas sobre a mensagem que foi encriptada.
Por exemplo, poderíamos tentar descobrir se o valor é maior que um certo
número (que no caso do leilão seria uma falha grave), ou a paridade do valor
etc. Trataremos agora de como evitar estes problemas.
No exemplo do leilão, o valor é x, e o valor encriptado é Enc(x). Não deve
ser possível, a partir do valor encriptado, responder à pergunta �x é par?� �
logo esta pergunta é o que chamamos de predicado hard-core da função Enc.
Um predicado b é hard-core de uma função f se qualquer algoritmo pro-
babilístico polinomial que calcule4 b(x) a partir de f(x) tiver probabilidade de
sucesso perto de 1/2.
Na próxima de�nição, H é uma função cujo domínio é o conjunto de todas
as sequências de bits de tamanho arbitrário, que representamos por {0, 1}∗. O
contradomínio é {0, 1} (ou seja, H(x) só pode valer zero ou um).
De�nição 3.10 (PredicadoHard-Core). H : {0, 1}∗ → {0, 1} é um predicado
hard-core de uma função f se
i) Há um algoritmo polinomial para computar H(x);
ii) Para qualquer algoritmo randomizado polinomial A e x escolhido ao acaso,
Pr[A(f(x)) = H(x)] ≤ 1
2
+ negl(k),
onde k é o número de bits de x.
4Note que por ser um predicado, b(x) só pode assumir dois valores: verdadeiro ou falso.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
3.2. PREDICADOS HARD-CORE 39
Quando um predicado hard-core consiste em determinar se um certo bit da
entrada de uma função f é igual a um, dizemos que aquele é um bit hard-core
da entrada de f . �
O próximo Teorema mostra que a possibilidade de computar algo a respeito
de uma função de mão única não é apenas teórica: é realmente possível computar
um dos bits de x dado dexp p.g(x).
Teorema 3.11. Dado dexp p,g(x), é possível computar lsb (x) em tempo poli-
nomial em p.
Demonstração. O seguinte algoritmo computa lsb (x) dado y = dexp p,g(x).
Calcule
c = y(p−1)/2 (mod p).
Se c = 1, pelo critério de Euler (Teorema B.38), y é resíduo quadrático módulo p.
Além disso, pelo Lema B.37, como y é resíduo quadrático módulo p, o expoente x
é par. Como x é par, sua representação binária termina com zero, e conseguimos
determinar seu bit menos signi�cativo � neste caso o algoritmo retorna zero (que
é o bit menos signi�cativo de números representados em binário).
Se c 6= 1, então y não é resíduo quadrático, e pelo Lema B.37, o expoente x
não pode ser par. Determinamos portanto que o bit menos signi�cativo é um.
O algoritmo claramente tem complexidade de tempo polinomial. �
Exemplo 3.12. Sejam p = 41 e g = 6 (que é raiz primitiva módulo 41). Calcu-
lamos dexp p,g(14) (mod 41) = 21. Agora, dado que temos apenas p = 41 e o va-
lor computado 21, calculamos c = 21
41−1
2 (mod 41) = 278218429446951548637196401
(mod 41) ≡ 1 (mod 41), e o bit é zero (de fato, 14 é par!).
Usando os mesmos p e g, tentamos agora x = 31: temos dexp p.g(31) ≡ 13
(mod 41). Tendo agora apenas p = 41 e o valor 13, calculamos c = 13
41−1
2
(mod 41) = 19004963774880799438801 ≡ 40 (mod 41) e determinamos que x é
ímpar. J
O Lema a seguir é usado na demonstração de que dexp tem um bit hard-core.
Lema 3.13. Se p é primo e x é resíduo quadrático módulo p há um algoritmo
probabilístico polinomial para calcular as duas raízes quadradas de x módulo p.
A demonstração do Lema não será dada.
Teorema 3.14. Dado dexp p,g(x), msb (x) é um predicado hard-core de dexp .
Demonstração. A demonstração a seguir mostra que um algoritmo determinís-
tico para calcular msb (x) dado dexp p,g(x) implicaria na negação da conjectura
do logaritmo discreto. É possível estender a demonstração também para algo-
ritmos randomizados, mas não o faremos.
Suponha que exista um algoritmo A polinomial que compute msb (x) dado
dexp p,g(x).
Temos p, g e y = dexp p,g(x).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
40 CAPÍTULO 3. PROBLEMAS DIFÍCEIS
Primeiro, calcule a paridade de x (usando o algoritmo do Teorema 3.11). Se
x é ímpar (ou seja, era uma potência ímpar de g), divida y por g e agora temos
uma potência par de g módulo p:
g2k+1g−1 = g2k.
Esta potência par de g tem duas raízes quadradas r1 e r2 módulo p (veja o
Teorema B.34) e podemos calculá-las e�cientemente. Uma delas será gx/2 e a
outra será g
x
2+
(p−1)
2 .
Podemos então usar o algoritmo A para determinar qual destas raízes é a
menor (qual tem o bit mais signi�cativo igual a zero). Tomamos esta raiz (gx/2)
e iniciamos novamente o algoritmo. Desta forma determinamos cada bit de x,
e paramos quando chegarmos a 1.
O algoritmo é mostrado em pseudocódigo a seguir, usando lsb (x) para o
algoritmo que calcula paridade de x dado apenas y, e msb (x) para o suposto
algoritmo e�ciente para calcular o bit mais signi�cativo de x.
i← 0
x0 ← 0
enquanto y 6= 1
c← lsb (x)
se c = 1 /∗ x era ímpar! ∗/
y ← yg−1 /∗ temos agora potência par ∗/
xi ← 1 /∗ achamos um bit de x ∗/
senao
xi ← 0 /∗ achamos um bit de x ∗/
/∗ determinamos as duas raízes: ∗/
r1, r2 ←
√
y (mod p)
se msb (x) = 0
y ← r1
senao
y ← r2
i← i+ 1
retorne (xi, xi−1, · · · , x0) �
3.3 Predicados hard-core para quaisquer funções
de mão única
Na Seção anterior mostramos que um determinado bit é hard-core para dexp .
Na verdade podemos criar predicados hard-core para qualquer função de mão
única.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
3.3. PREDICADOS HARD-CORE PARAQUAISQUER FUNÇÕES DEMÃOÚNICA41
Teorema 3.15. Seja f uma função de mão única, e seja g(x, r) = (f(x), r),
onde x e r tem tamanho igual a k bits cada um, e r é escolhido ao acaso. Então,
H(x, r)
def
=
k∑
i=1
xiri (mod 2)
(ou seja, o produto interno de x e r quando interpretados como vetores de bits5)
é um predicado hard-core para g.
A função H faz o ou-exclusivo de um subconjunto dos bits de x (determinado
pelos bits um de r).
Notas
Os livros de Talbot e Welsh [211] e de Katz e Lindell [130] traz uma introdução
às funções de mão única. Uma abordagem mais detalhada, e também a demons-
tração do Teorema 3.15 podem ser encontradas no livro de Goldreich [87].
Exercícios
Ex. 13 � Reescreva a de�nição de função de mão única usando um experi-
mento (simulação de jogos), da mesma maneira que �zemos para as de�nições
de segurança no Capítulo 2.
Ex. 14 � Na demonstração do Teorema 3.14, não mostramos que o algoritmo
executa em tempo polinomial. Mostre um argumento muito simples que não
deixe dúvida a respeito disso.
Ex. 15 � Tente construir funções de mão única usando os problemas (presu-
mindo que P 6= NP):
a) SAT
b) TSP
c) COBERTURA-POR-VERTICES
d) GERACAO-DE-PERMUTACAO
e) TETRIS
f) CVP
g) SBP
Tome cuidado de determinar como a entrada será representada, qual exatamente
serão o domínio e o contradomínio (que devem ambos ser �nitos, uma vez que
só nos interessam funções que possamos implementar), e qual será o parâmetro
de segurança n usado para determinar que a função é de mão única.
Se não conseguir construir a função, explicite claramente o motivo.
Em seguida responda:
5Em alguns casos usa-se a notação
⊕k
i=1 xiri.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
42 CAPÍTULO 3. PROBLEMAS DIFÍCEIS
i) Alguma delas é permutação de mão única?
ii) Se o problema subjacente é numérico, há algoritmo pseudopolinomial para
ele. Isso representa um problema para sua função de mão única?
iii) Pesquise o problema e veri�que se há para ele algoritmos aproximados.
Qual a consequência para sua função de mão única?
iv) Existe algum subconjunto das instâncias do problema que possa ser resol-
vido e�cientemente? Novamente, em que isso implica para sua função?
v) Tente analisar a segurança de cada bit de entrada das funções. Há bits cla-
ramente inseguros? Há bits hard-core? Se não conseguir mostrar nenhuma
das duas coisas, consegue identi�car ao menos se existem bits �mais segu-
ros� que outros?
Ex. 16 � Ao invés de problemas NP-difíceis poderíamos tentar usar proble-
mas indecidíveis em construções criptográ�cas. Comente esta ideia.
Ex. 17 � (Katz/Lindell) Mostre que a função de adição f(x, y) = x+y, onde
x e y são representados com a mesma quantidade de bits e interpretados como
naturais, não é de mão única.
Ex. 18 � (Talbot/Welsh) Um primo da forma p = 4k+3 é chamado de primo
de Blum. Presumindo que aproximadamente metade de todos os primos com k
bits são primos de Blum, mostre que se a conjectura da fatoração de inteiros
for verdadeira (ou seja, se fatorar inteiros for difícil), não deve haver algoritmo
e�ciente para fatorar inteiros que sejam produto de dois primos de Blum.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 4
Geradores Pseudoaleatórios e
Cifras de Fluxo
A aleatoriedade é parte fundamental da Criptogra�a � é usada na construção
de praticamente todas as técnicas criptográ�cas de que trataremos. O exemplo
mais clarotalvez seja o das cifras de �uxo, mencionadas brevemente na Seção 1.1.
As cifras de �uxo emulam, de maneira imperfeita, o one-time pad. A parte mais
importante de seu funcionamento, então, consiste em gerar uma sequência de
números pseudoaleatórios. Além das cifras de �uxo, é essencial também que
chaves sejam geradas com distribuição uniforme sobre o espaço de chaves (senhas
digitadas por usuários não são seguras). Isto é importante porque as garantias
de segurança dos algoritmos criptográ�cos dependem da seleção aleatória das
chaves. Há também outros usos de aleatoriedade em Criptogra�a, que serão
discutidos ao longo do texto: em diversas situações é necessário usar números
ou elementos �não previsíveis� por um adversário.
4.1 Geradores pseudoaleatórios
Conceitualmente, um gerador pseudoaleatório é uma função que recebe como
entrada (a semente) uma sequência de bits de tamanho k e gera como saída
outra sequência de bits de tamanho l(k) > k.
10111010 11000101 110001010100111010100...
semente
G
bits gerados
Um gerador pseudoaleatório de bits para aplicação em Criptogra�a deve
ter a propriedade de ser difícil de distinguir de uma sequência completamente
aleatória. Começamos de�nindo �sequência completamente aleatória�.
De�nição 4.1 (Sequência escolhida uniformemente). Sejam n ∈ N e {0, 1}n o
conjunto de todas as sequências de n bits. Dizemos que uma sequência s de
43
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
44CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
n bits foi escolhida uniformemente se foi escolhida com probabilidade igual a
1/|{0, 1}n| = 1/2n. �
Temos interesse em algoritmos que produzam sequências de bits difíceis de
distinguir de alguma sequência escolhida uniformemente. Formularemos isto da
seguinte maneira: qualquer algoritmo polinomial que possa distinguir entre a
saída de nosso gerador e uma sequência escolhida uniformemente só deve poder
fazê-lo com probabilidade desprezível.
Dizemos que duas famílias A e B de distribuições (geradas por dois algo-
ritmos) são estatisticamente próximas quando, para n su�cientemente grande,
cadeias com n bits tem quase a mesma probabilidade de pertencer a A ou a B.
Isto é de�nido rigorosamente a seguir.
De�nição 4.2 (Distribuições estatisticamente próximas). Duas distribuições
X e Y são estatisticamente próximas se a expressão∑
e
∣∣Pr [X = e]− Pr [Y = e] ∣∣
é desprezível em n. Claramente, o somatório é sobre todas as cadeias e ∈
{ 0, 1 }n. �
Se quisermos distinguir entre cadeias geradas por X e Y estatisticamente
próximas, podemos obter cadeias su�cientes para fazê-lo (no máximo precisare-
mos obter todas as cadeias de n bits para cada uma das distribuições: 2(2n)).
Este algoritmo, no entanto, teria complexidade de tempo exponencial.
Diferenciaremos agora distribuições que podem ser identi�cadas (distingui-
das) em tempo polinomial, e aquelas que não podem.
O Experimento 4.3 (DISTRIB_DISTINGUISH) testa duas distribuições e um
teste que tenta distingui-las. De maneira resumida, neste experimento escolhe-
mos uma cadeia de uma ou de outra distribuição (com probabilidade 1/2 para
cada distribuição) e enviamos ao teste T para que tente decidir de qual distri-
buição a cadeia foi sorteada. Este teste T representa qualquer programa que
rode em tempo polinomial tentando distinguir uma sequência de bits, determi-
nando se foi gerada de acordo com a distribuição X ou com a distribuição Y
(Por exemplo, T pode executar algum teste estatístico).
Experimento 4.3 (DISTRIB_DISTINGUISH(A, X, Y )).
1. Escolha s0 ∈ X e s1 ∈ Y
2. Sorteie um bit aleatoreamente (b ∈R { 0, 1 })
3. Envie sb para A
4. Receba b′ de A
5. Se b = b′ o resultado do experimento é 1; senão é 0.
�
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.1. GERADORES PSEUDOALEATÓRIOS 45
A Figura a seguir ilustra o experimento.
D A
s0 ∈ X
s1 ∈ Y
b ∈R { 0, 1 }
b = b′ → 1
b 6= b′ → 0
sb
b′
De�nimos então que duas distribuições são computacionalmente indistin-
guíveis se a probabilidade de sucesso de T neste experimento é próxima de 1/2.
De�nição 4.4 (Distribuições computacionalmente indistinguíveis). Duas dis-
tribuições X e Y são computacionalmente indistinguíveis se para todo algoritmo
polinomial T e n su�cientemente grande, existe uma função desprezível negl(·)
tal que
Pr [DISTRIB_DISTINGUISH(D,n,X, Y ) = 1] ≤ 1
2
+ negl(n). �
Embora a De�nição 4.4 esteja rigorosamente correta, a De�nição 4.5, mais
compacta, é normalmente usada. Esta segunda de�nição possivelmente �ca mais
clara após a compreensão da primeira.
De�nição 4.5 (Distribuições computacionalmente indistinguíveis). Duas dis-
tribuições X e Y são computacionalmente indistinguíveis se para todo algoritmo
polinomial D e n su�cientemente grande, existe uma função desprezível negl(·)
tal que ∣∣∣∣ Pru∈X [D(u) = 1]− Pru∈Y [D(u) = 1]
∣∣∣∣ ≤ negl(n).
Quando duas distribuições A e B são computacionalmente indistinguíveis, de-
notamos A ≈ B. �
Exemplo 4.6 (Sequências de bits estatisticamente distantes). Suponha que
queiramos construir um algoritmo que gera bits aleatórios a partir de um inteiro
k. Decidimos usar uma sequência usando números de Fibonacci: para gerar
uma sequência de l bits, calculamos os l primeiros números de Fibonacci Fk,
Fk+1, . . . , Fk+l. Usamos o i-ésimo número de Fibonacci para determinar o i-
ésimo bit da sequência Bn: para l bits, calcula-se b1, b2, . . . , bl de maneira que
bi =
{
0 se Fk+i é par
1 se Fk+i é ímpar.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
46CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
Por exemplo, escolhemos k = 10 e geramos uma sequência com 8 bits:
F10 = 55 (→ 1)
F11 = 89 (→ 1)
F12 = 144 (→ 0)
F13 = 233 (→ 1)
F14 = 377 (→ 1)
F15 = 610 (→ 0)
F16 = 987 (→ 1)
F17 = 1597 (→ 1)
Temos então a sequência 11011011.
No entanto, esta sequência é facilmente distinguível de uma distribuição
selecionada uniformemente dentre todas as possíveis (e portanto não podemos
usá-la para �ns criptográ�cos).
Como há duas vezes mais números de Fibonacci ímpares do que pares, a
probabilidade de uma sequência com muitos uns pertencer a Bn é maior1 do
que a probabilidade da mesma sequência pertencer a An. Para a sequência
s = 1111 . . . 1 (n bits iguais a um), temos
Pr[s ∈ An] =
(
1
2
)(
1
2
)
. . .
(
1
2
)
=
1
2n
.
Pr[s ∈ Bn] =
(
2
3
)(
2
3
)
. . .
(
2
3
)
=
2n
3n
.
A diferença entre as duas probabilidades não é desprezível. J
De�nição 4.7 (Gerador pseudoaleatório). Seja l um polinômio e G um al-
goritmo polinomial determinístico que recebe como entrada sequências de bits
s ∈ {0, 1}n. A saída de G(s) tem tamanho l(|s|). Então G é um gerador
pseudoaleatório se:
• Para todo n, l(n) > n (ou seja, G sempre expande sua entrada);
• A saída de G para n bits é computacionalmente indistinguível de uma
sequência de n bits escolhida uniformemente. �
A segunda exigência da De�nição 4.7 é muitas vezes exposta da seguinte
forma: a saída de um gerador pseudoaleatório deve �passar por todos os possíveis
testes (de tempo polinomial) estatísticos�.
É impossível, no entanto, que um gerador pseudoaleatório gere sequências
com distribuição uniforme sobre todas as possíveis sequências de um dado com-
primento.
Teorema 4.8. A saída de um gerador pseudoaleatório de bits não pode ter
distribuição uniforme.
Demonstração. Considere um gerador G com l(n) = 2n (ou seja, G dobra o
tamanho de sua entrada). Porque sua entrada tem n bits, ele poderá gerar 2n
sequências diferentes apenas (mesmo que a saída tenha 2n bits). De todas as
22n sequências possíveis com 2n bits, G somente produzirá uma pequena parte:
há 22n − 2n sequências que G nunca serão geradas.
1Há duas vezes mais números de Fibonacci ímpares do que pares.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.2. GERADORES COM FUNÇÕES DE MÃO ÚNICA 47
Assim, como a saída de G é de tamanho 2n, mas há somente 2n saídas
possíveis,teremos probabilidade 2−n para algumas sequências de bits e zero
para outras. �
No entanto, nossa de�nição não exige que o gerador produza sequências com
distribuição uniforme. Queremos apenas que os bits gerados sejam indistinguí-
veis em tempo polinomial da distribuição uniforme.
Um adversário poderia enumerar todas as saídas de G, enumerar todas as
possíveis sequências de 2n bits e encontrar uma sequência de 2n bits que G
nunca produz. No entanto, este algoritmo é exponencial (tem complexidade
O(22n) porque enumera todas as sequências possíveis).
Fica evidente que o tamanho da semente é importante: se ela for muito
pequena, um atacante poderá realizar o ataque mencionado.
Outra maneira de caracterizarmos a qualidade de um gerador pseudoalea-
tório apropriado para criptogra�a é exigirmos que não seja fácil determinar o
próximo bit de uma sequência a partir dos anteriores.
De�nição 4.9 (Teste do próximo bit). Um gerador G passa no teste do próximo
bit se e somente se não existe algoritmo polinomial que, a partir dos k primeiros
bits de uma sequência gerada por G, possa predizer o bit k+1 com probabilidade
maior que 1/2 + negl(k). �
As duas caracterizações de gerador pseudoaleatório para Criptogra�a são
equivalentes.
Teorema 4.10 (de Yao). Um PRG G é pseudoaleatório se e somente se passa
pelo teste do próximo bit.
O leitor poderá facilmente veri�car que o gerador do exemplo 4.6 não passaria
no teste do próximo bit.
4.2 Geradores com Funções de Mão Única
Usaremos predicados hard-core de funções de mão única para construir gerado-
res de números aleatórios, usando a seguinte ideia: dada uma semente x0 e uma
função de mão única f , calculamos x1 = f(x0) e b0 = h(x0). Em seguida, faze-
mos x2 = f(x1) e b1 = h(x1), e assim por diante. Como cada bit da sequência
é hard-core de f , nenhum deles deve ser fácil de prever.
Hf
b_i+1x_i x_i+1x_0
O Teorema a seguir garante que podemos aumentar o resultado de f(x) em
um bit, e o resultado será ainda indistinguível de uma cadeia gerada ao acaso.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
48CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
Teorema 4.11. Seja f uma permutação de mão única com predicado hard-core
H. Então
G(x)
def
= f(x)||H(x),
onde || denota concatenação, é um gerador pseudoaleatório.
Demonstração. (Rascunho) Se x for escolhido uniformemente dentre as cadeias
de bits com tamanho k, como f é uma permutação, f(x) também terá distri-
buição uniforme sobre as cadeias de tamanho k, e um adversário não terá como
distinguir os valores de f(x) de uma distribuição uniforme.
Além disso, a probabilidade do bit hard-core ser 1 é 1/2, donde concluímos
que f(x)||H(x) é indistinguível de uma sequência de bits gerada ao acaso com
probabilidade uniforme. �
O Teorema 4.11 nos dá apenas geradores que aumentam em um bit o tama-
nho da semente. É possível construir geradores que aumentam arbitrariamente
a semente:
Teorema 4.12. Seja f uma permutação de mão única para entrada de tamanho
k bits, com predicado hard-core H. Então, dado um polinômio p(.),
G(x)
def
=
(
H(f(x)), H(f2(x)) · · · , H(fp(k)−1(x))
)
é um gerador pseudoaleatório.
Este Teorema, que não demonstraremos, diz essencialmente que a ideia des-
crita no início desta seção está correta.
Agora usaremos dexp para construir um gerador pseudoaleatório. O predi-
cado hard-core que usaremos é o bit mais signi�cativo.
Construção 4.13 (Gerador de Blum-Micali). Seja p um primo grande; g uma
raiz primitiva módulo p; e x0 (a semente) um inteiro.
O i-ésimo bit gerado é bi:
xi = g
xi−1 (mod p)
bi = msb (xi). �
Teorema 4.14 (Blum-Micali é seguro). O gerador de Blum-Micali é seguro (ou
seja, é um gerador pseudoaleatório de acordo com a De�nição 4.7).
Demonstração. Como o algoritmo implementa exatamente a mesma construção
G de�nida no Teorema 4.12, concluímos imediatamente que Blum-Micali é um
gerador pseudoaleatório. �
Outro gerador pseudoaleatório é mostrado a seguir.
Construção 4.15 (Gerador de Blum-Blum-Shub). Sejam p e q dois primos
grandes com p, q ≡ 3 (mod 4), e seja m = pq. Uma raiz x0 é escolhida que seja
diferente de um, de p e de q.
O i-ésimo bit gerado é bi:
xn = x
2
n−1 (mod m)
bi = lsb (xi). �
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.3. GERAÇÃO DE NÚMEROS PSEUDOALEATÓRIOS 49
4.3 Geração de números pseudoaleatórios
Embora a geração de sequências de bits pseudoaleatórios seja imediatamente útil
(já são su�cientes para a construção de cifras de �uxo, descritas na Seção 4.5),
há também casos em que queremos produzir números (inteiros ou naturais)
pseudoaleatórios.
Quando queremos um número entre 0 e 2k − 1 podemos simplesmente gerar
uma cadeia de k bits e interpretá-la como número na base dois. Isso preserva a
distribuição, porque há 2k números que podem ser gerados, e ao interpretá-los
como inteiros determinamos uma bijeção entre as cadeias de bits e os números.
No entanto, podemos querer gerar números entre 0 e n− 1, para qualquer n
natural. Seja k o menor número possível de bits necessário para representar o
número n em base dois � ou seja, blog2(n)c. Seja G um gerador pseudoaleatório
de bits. Há 2k strings de k bits que podem ser geradas por G. Como queremos
escolher um dentre n números, há strings entre n e 2k − 1 que não podem ser
usadas. Se tentarmos interpretar estas cadeias usando módulo n, a distribuição
não será mais uniforme. Temos então que ignorar estas strings, e gerar um novo
número quando elas forem encontradas. Esta ideia é detalhada no algoritmo a
seguir.
random_natural(G,n):
k ← log2(n)
repita
s← próximos k bits de G
interprete s como x
até que x < n
retorne x
Os dois teoremas a seguir garantem que a saída do algoritmo é a que quere-
mos, e que seu tempo esperado de execução é logarítmico.
Teorema 4.16. Se G tem saída com distribuição uniforme, random_natural(G,n)
produz números uniformemente distribuídos entre 0 e n− 1.
Teorema 4.17. Se G é um gerador pseudoaleatório e n um número natural, o
algoritmo random_natural(G,n) tem tempo de execução O(log(n)).
4.4 Geradores com Heurísticas
Geradores baseados em funções candidatas a mão única como exponenciação ou
quadrado modulares são lentos, porque envolvem aritmética modular com nú-
meros grandes (muito maiores do que o tamanho de palavra de computadores).
Quando a geração de bits deve ser muito rápida, podemos abrir mão das garan-
tias dos métodos com demonstração de segurança. Usamos, então, heurísticas
que nos dão alguma con�ança nas sequências geradas.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
50CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
Ao invés de demonstrar que não se pode (a não ser implicando em algoritmo
e�ciente para um problema presumidamente difícil) prever o próximo bit da
sequência, relaxamos este requisito e construímos geradores que geram sequên-
cias que, tanto quanto podemos veri�car, são indistinguíveis por todos os testes
estatísticos de sequências aleatórias. Isso signi�ca que (i) há baterias de testes
estatísticos às quais um gerador de bits pode ser submetido para veri�car se
pode ser usado em aplicações de Criptogra�a e (ii) devemos identi�car propri-
edades desejáveis em sequências de bits que possam ser usadas como guia na
elaboração de geradores que passem por tais testes. É importante frisar que
estes testes e propriedades não dão a mesma garantia que os métodos baseados
em funções de mão única. Por exemplo, um gerador pode ter como saída diver-
sas sequências que passam todos os testes conhecidos hoje, mas isso não garante
nada a respeito de novos testes estatísticos, e não garante tampouco que este
gerador não possa produzir sequências com viés, dependendo da semente usada.
4.4.1 Propriedades de Sequências Pseudoaleatórias
Nosso ponto de partida são os postulados de Golomb, que expressam proprieda-
des desejáveis de sequências pseudoaleatórias de bits. Esses postulados não são
su�cientespara caracterizar sequências pseudoaleatórias, mas são necessários.
As de�nições a seguir, de período, subsequência constante e de autocorrela-
ção, são usadas nos postulados.
De�nição 4.18 (Período de sequência). O período de uma sequência X é o
menor inteiro p tal que xi = xi+p, para i su�cientemente grande. �
Por exemplo, o período da sequência 011011011 é três, o da sequência
00101010 é dois (o padrão 10 se repete depois de i = 2) e o da sequência
01101001 é oito.
De�nição 4.19 (Subsequência constante). Seja X uma sequência. Uma sub-
sequência xl, . . . xm de X é constante se xi = xj para quaisquer l ≤ i, j ≤ m. �
A autocorrelação representa o quanto cada bit depende de bits anteriores �
o que é claramente relevante, dado o Teorema 4.10 (teste do próximo bit).
De�nição 4.20. Sejam X uma sequência de bits com período p; A(k) a quan-
tidade de posições i tal que xi = xi+k; e D(k) a quantidade de posições onde
isso não acontece.
A(k) = |{i : xi = xi+k}|
D(k) = |{i : xi 6= xi+k}|.
A autocorrelação com deslocamento k para X é
A(k)−D(k)
p
. �
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.4. GERADORES COM HEURÍSTICAS 51
Exemplo 4.21. Considere a sequência X = 100101110 . . . (o padrão mostrado
repete-se; a sequência tem período nove). Calculamos a autocorrelação para
k = 1. Contamos somente as posições em que xi 6= xj . Temos
x0 6= x1
x2 6= x3
x3 6= x4
x4 6= x5
x7 6= x8
x8 6= x1.
e portanto D(1) = 6. Como há nove posições, A(1) = 9− 6 = 3 e a autocorre-
lação para k = 1 é −3/9 = −1/3.
Agora veri�camos a autocorrelação para k = 2.
x0 6= x2
x1 6= x3
x2 = x4
x3 = x5
x4 6= x6
x5 = x7
x6 6= x8.
Temos D(2) = 4, A(2) = 3, portanto a autocorrelação para k = 2 é −1/9. J
Uma das primeiras tentativas de estabelecer critérios de pseudoaleatoriedade
para sequências é um conjunto de três postulados, conhecidos como postulados
de Golomb, que enunciamos a seguir.
G1) A diferença entre a quantidade de zeros e uns na sequência deve ser no
máximo um.
G2) O número de subsequências constantes de um dado comprimento deve ser
o mesmo para uns e para zeros. Além disso, se o número de subsequências
constantes de comprimento k é m, o número de subsequências constantes
para comprimento k + 1 deve ser m/2.
G3) A autocorrelação para deslocamentos diferentes de zero deve ser sempre a
mesma, independente do valor do deslocamento.
O postulado G1 tem razão de ser muito clara: se não for satisfeito, a sequên-
cia passa a ser facilmente distinguível de uma sequência aleatória. Ou ainda,
seria fácil prever o próximo bit da sequência com probabilidade de sucesso maior
que 1/2 + negl(k). O postulado G2 é uma generalização do primeiro para sub-
sequências de bits. O postulado G3 implica que o cálculo da autocorrelação não
permite obter qualquer informação a respeito do período da sequência.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
52CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
Sequências que satisfaçam estas propriedades são chamadas de pseudo-ruído
(ou PN , de pseudo-noise).
Há uma ferramenta conceitual que pode ser usada em geradores pseudoale-
atórios � uma variante de registradores de deslocamento, normalmente imple-
mentados facilmente em hardware. Os registradores de deslocamento, além de
usados na construção de geradores pseudoaleatórios, também são importantes
na descrição de propriedades de sequências.
Um registrador de deslocamento funciona como uma �la de bits. Em sua
versão mais simples, há um bit de entrada, um de saída, e o estado interno do
registrador é uma sequência de bits2.
Como descreveremos algoritmos que operam nestes registradores, nossa visão
deles será a de um vetor de variáveis binárias (aqui usamos �vetor� como objeto
mutável, usado em algoritmos, e não como objeto matemático abstrato). A
operação de deslocamento funciona da seguinte maneira:
• cada bit é movido uma posição para a direita; o bit que estava mais à
direita é removido e usado como saída do registrador;
• um novo bit (o bit de entrada) é gravado sobre a posição mais à esquerda.
A Figura a seguir ilustra o funcionamento de um registrador de deslocamento:
na parte superior da �gura está representado o estado anterior do registrador,
igual a 0011011101; na parte inferior, a operação de deslocamento com entrada
igual a zero (a saída será o último bit do estado, que é igual a um).
A saída de um registrador de deslocamento é serial se apenas o último bit é
usado. Se mais de um bit é usado, a saída é dita paralela.
2Registradores de deslocamento são implementados em hardware como uma sequência de
�ip-�ops do tipo D, com a saída de um alimentando a entrada de outro, como ilustra a �gura
abaixo.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.4. GERADORES COM HEURÍSTICAS 53
De�nição 4.22 (Sequência gerada por registrador de deslocamento linearmente
realimentado). Uma sequência gerada por registrador de deslocamento linear-
mente realimentado é uma sequência (ai) tal que
ai+i =
n−1∑
k=0
ckai+k (mod 2),
ou ainda,
ai+i =
n−1⊕
k=0
ckai+k. �
Em outras palavras, se o estado interno de um registrador tem l bits então
seu estado inicial é sl−1, sl−2, . . . , s0, e para i ≥ l o i-ésimo bit é determinado
pela função linear
si = c1si−1 + c2si−2 + · · ·+ clsi−l (mod 2),
onde os coe�cientes cj podem ser um ou zero.
Em outras palavras, uma função linear determina o próximo bit de entrada
a partir do estado atual.
A função que determina o bit de entrada a partir dos bits do estado é a
função de feedback, ou função de realimentação. Abreviamos registrador de
deslocamento linearmente realimentado por LFSR (linear feedback shift regis-
ter).
O polinômio 1 + c1x + · · · + clxl é chamado de polinômio de conexão do
LFSR.
Exemplo 4.23 (LFSR). Suponha que um LFSR com oito bits use a função de
realimentação
si = si−2 ⊕ si−5 ⊕ si−6 ⊕ si−8,
onde ⊕ é o ou-exclusivo. Esta é uma função linear módulo dois3. Este LFSR é
representado na Figura a seguir.
3Porque a⊕ b é o mesmo que a+ b (mod 2), e a função mostrada é a mesma que
si = si−2 + si−5 + si−6 + si−8 (mod 2).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
54CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
Para o estado inicial 00110011, alguns dos próximos estados e bits de saída são
entrada estado saída
10011001→ 1
(0 + 1 + 0 + 1 = 0)→ 01001100→ 0
(1 + 1 + 1 + 0 = 1)→ 10100110→ 0
(0 + 0 + 1 + 0 = 1)→ 11010011→ 1
J
Teorema 4.24. Toda sequência periódica de bits pode ser gerada por algum
LFSR com no máximo n estados, onde n é o tamanho da sequência.
Demonstração. Trivial (um LFSR com n estados e estado inicial igual à sequên-
cia gera a própria sequência). �
Apesar de ser trivialmente possível obter LFSRs de tamanho n para sequên-
cias de comprimento n, notamos que é muitas vezes possível obter sequências
de tamanho n com LFSRs muito menores que n.
De�nição 4.25 (Complexidade linear de sequência). Seja S uma sequência de
bits.
• Se S é �nita e de comprimento |S|, a complexidade linear de S é o com-
primento do menor LFSR que gera, para alguma semente, uma sequência
cujos |S| primeiros bits formam a sequência S.
• Se S é in�nita e só contém zeros, a complexidade linear de S é zero.
• Se S é in�nita, diferente de zeros, e pode ser gerada por um LFSR, sua
complexidade linear é a do menor LFSR que gera S.
• Se S não pode ser gerada por um LFSR, complexidade linear de S é ∞.
�
Teorema 4.26. Uma sequência de período k não tem complexidade linear maior
do que k.
O algoritmo de Berlekamp-Massey determina a complexidade linear de uma
sequência �nita.
Na descrição do algoritmo, b(·) e c(·) são polinômios (o pseudocódigo não
mostra detalhes da implementação destes � pode-se usar vetores, por exemplo).
Denotamos b(x)xN−m a multiplicação do polinômio b(x) pelo termo xN−m.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini4.4. GERADORES COM HEURÍSTICAS 55
berlekamp−massey(s, n):
b(x)← 1
c(x)← 1
L← 0
m← −1
para N de 0 a n− 1:
d← sn +
∑L
i=1 cisn−i (mod 2)
se d = 1
t(x)← c(x)
c(x)← c(x) + b(x)xN−m
se L ≤ N/2:
L← N + 1− L
m← N
b(x)← t(x)
retorne L, c(x)
O algoritmo retorna L, a complexidade linear da sequência, e c(x), o polinô-
mio de conexão do LFSR que a gera.
A complexidade de tempo do algoritmo de Berlekamp-Massey é O(n2): ape-
sar de havermos explicitado somente um laço (N de zero a n− 1), as operações
em polinômios tem complexidade linear em n.
De�nição 4.27 (LFSR de comprimento máximo). Seja R um LFSR de n bits.
Se, ao ser inicializado com qualquer semente diferente de 0n e deslocado repe-
tidamente, o estado interno de R passa por todas as 2n − 1 permutações, então
R é um LFSR de comprimento máximo.
Sequências geradas por LFSRs de comprimento máximo são chamadas de
m-sequências. �
Teorema 4.28. Toda m-sequência satisfaz os postulados de Golomb.
F Obtendo LFSRs de comprimento máximo
O seguinte Teorema mostra como construir LFSRs de comprimento máximo.
Teorema 4.29. Se o polinômio de conexão de um LFSR é primitivo e tem
grau igual ao tamanho do LFSR (ou seja, tem cl = 1), então este LFSR é de
comprimento máximo.
Usando LFSRs
Podemos inicializar um LFSR com uma semente e usar seus bits de saída, mas
esta construção não seria segura, porque a função de realimentação é linear,
e seria fácil recuperar estados anteriores do registrador. Normalmente alguma
forma de não-linearidade é usada em conjunto com geradores do tipo LFSR para
torná-los resistentes a criptanálise.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
56CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
4.4.2 Testes Para Sequências de Bits
(Esta Seção não está completa)
Há muitos testes que podem ser utilizados para tentar distinguir uma sequên-
cia de bits aleatórios. Esta Seção descreve apenas alguns deles.
Observamos que passar em uma bateria de testes é uma condição necessária
para um gerador pseudoaleatório, mas de forma alguma é su�ciente!
Além de veri�car a complexidade linear da sequência e testar os postula-
dos de Golomb, há outros testes que podem ser usados para veri�car se uma
sequência não é pseudoaleatória.
4.5 Cifras de Fluxo
Podemos construir cifras de �uxo usando geradores pseudoaleatórios (a segu-
rança da cifra se sustentará na segurança do gerador pseudoaleatório). Ao invés
de usar o one-time-pad com uma chave do mesmo tamanho que a mensagem,
podemos usar como chave a semente de um gerador pseudoaleatório. Para ci-
frar a mensagem, usamos o gerador para expandir a semente até o tamanho da
mensagem.
Com isto podemos construir criptossistemas que satisfazem a De�nição 2.12
(segurança contra ataque de texto cifrado conhecido). No entanto, aquela De�-
nição de segurança não trata da situação (muito mais comum) em que queremos
enviar mais de uma mensagem.
4.5.1 Múltiplas Mensagens
Adaptaremos a De�nição 2.12 para que contemple a possibilidade de envio de
várias mensagens.
Experimento 4.30 (PRIV_MULT(Π,A, n)).
1. O adversário A recebe uma entrada 1n, e devolve duas sequências de
mensagens, M0 = (m10,m
2
0, · · · ,mt0) e M1 = (m11,m21, · · · ,mt1);
2. Uma chave k é gerada usando Gen(1n), e um bit b é escolhido aleato-
reamente. Então todas as mensagens da sequência Mi são encriptadas,
resultando na sequência Enck(Mb) = (c1, c2, · · · , ct) onde ci = Enck(mib).
Esta sequência Enck(Mb) é enviada para A;
3. A envia b′;
4. Se b = b′, o resultado do experimento é 1 (e dizemos que A teve sucesso),
senão é 0.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.5. CIFRAS DE FLUXO 57
D A
b ∈R {0, 1}
k ∈R {0, 1}n
b = b′ → 1
b 6= b′ → 0
1n
M0 = (m
1
0,m
2
0, · · · )
M1 = (m
1
1,m
2
1, · · · )
Enck(mb)
b′
�
O adversário novamente tem em tempo de execução restrito a um polinômio
em n.
De�nição 4.31 (Segurança contra ataque de múltiplos textos cifrados conheci-
dos). Um criptossistema simétrico Π tem indistinguibilidade de múltiplos textos
cifrados na presença de grampoM se para todo adversário A existe uma função
desprezível negl tal que,
Pr[PRIV_MULT(Π,A, n) = 1] ≤ 1
2
+ negl(n).
onde a probabilidade é sobre as moedas usadas por A, para a escolha do bit b
e usadas por Enc. �
Damos agora um exemplo de criptossistema que é seguro de acordo com a
De�nição 2.12, mas não de acordo com a De�nição 4.31.
Construção 4.32. Seja G um gerador pseudoaleatório com fator de expansão
p(.). O seguinte criptossistema simétrico é construído sobre G:
• Gen: dado 1n, escolha uma chave k ∈ {0, 1}n com probabilidade uniforme;
• Enc(k,m) = G(k)⊕m, desde que tanto k como m tenham k bits;
• Dec(k, c) = G(k)⊕ c, desde que tanto k como c tenham k bits. �
Teorema 4.33. O Criptossistema descrito na Construção 4.32 é seguro de
acordo com a De�nição 2.12.
Demonstração. Seja Π o criptossistema da Construção 4.32. Mostraremos que
a existência de um adversário que possa distinguir as mensagens no experi-
mento 2.8 (usado na De�nição 2.12) com probabilidade maior que a dada na
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
58CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
De�nição 2.12, teríamos um algoritmo para distinguir os bits gerados por G de
bits aleatórios com distribuição uniforme.
Seja A um adversário executando em tempo polinomial, e seja
f(n) = Pr[PRIV_EAV(Π,A, n) = 1]− 1/2
(ou seja, a função f mede quão melhor que 1/2 é a probabilidade de o adversário
obter sucesso no experimento.
Construiremos um algoritmo (ou um teste) T para distinguir uma sequência
s de bits, determinando se ela foi produzida por G ou se foi escolhida com
distribuição uniforme no espaço amostral de tamanho n.
T executa o experimento a seguir.
1. Chame A(1n) e obtenha duas mensagens de tamanho p(n).;
2. Escolha um bit b aleatoreamente;
3. Calcule c = s⊕mb;
4. Ao invés de Enc(k,mb) = k⊕mb, dê c a A � ou seja, ao invés de enviar a
mensagem cifrada com uma chave gerada por Gen, use s como se fosse a
chave. Obtenha a saída b′, e retorne 1 se b = b′, ou zero em caso contrário.
Este experimento é ilustrado a seguir.
T A
b ∈R {0, 1}
c← s⊕mb
b = b′ → 1
b 6= b′ → 0
1n
m0,m1
c
b′
A �gura não diz como s é obtido, e isso é intencional: trataremos a seguir
de duas maneiras de obter s.
Primeiro, se s for obtida ao acaso uniformemente do espaço amostral {0, 1}p(n),
teremos que a chaves usadas para cifrar as mensagens são escolhidas com distri-
buição uniforme � exatamente como seria se tivéssemos usado o one-time pad
ao invés de enviar c para A, e
Pr[T (s) = 1] = Pr[PRIV_EAV(Π,A, n) = 1] = 1
2
.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.5. CIFRAS DE FLUXO 59
Para o segundo caso, suponha então que s seja igual a G(k), com k esco-
lhida aleatoreamente. Sabemos que s não pode ter distribuição uniforme (pelo
Teorema 4.8). Neste caso o experimento é exatamente como seria se tivéssemos
usado k = Gen(1n) ao invés de enviar c para A � e o experimento é o mesmo
que o da De�nição 2.12, e
Pr[T (s) = 1] = Pr[PRIV_EAV(Π,A, n) = 1] = 1
2
+ f(n).
Temos então que se houvesse um adversário A que obtivesse sucesso f(n)
(que supomos não desprezível) no experimento PRIV_EAV(Π,A, n), teríamos
também um algoritmo (T ) para distinguir a saída de G de bits aleatórios, com
a mesma probabilidade de sucesso. Como G é pseudoaleatório, tal adversário
não pode existir. �
Proposição 4.34. O Criptossistema descrito na Construção 4.32 não é seguro
de acordo com a De�nição 4.31.
Demonstração. No Experimento 2.11 (usado na De�nição 4.31) o adversário
A escolhe duas sequências de duas mensagens, M0 = (0n, 0n), M1 = (0n, 1n).
Ao receber a sequência de mensagens cifradas C = (c1, c2), o adversário pode
simplesmente veri�car se c1 = c2 (neste caso sabe que a sequência encriptada
M1) ou não (e portanto a sequência deve ser M2). �
O problema com a Construção 4.32 é o fatode ser um criptossistema de-
terminístico: um mesmo par (chave, mensagem) sempre levará ao mesmo texto
encriptado. Como este foi a única característica relevante do criptossistema que
usamos na demonstração da Proposição 4.34, temos o seguinte teorema:
Teorema 4.35 (Insegurança de criptossistemas determinísticos). Qualquer crip-
tossistema simétrico determinístico é inseguro de acordo com a De�nição 4.31.
Se usarmos uma chave diferente cada vez que encriptarmos uma mensagem
teremos resolvido o problema. Ao cifrar uma mensagem, inicializamos G não
apenas com uma semente (secreta), mas também com alguns bits a mais, esco-
lhidos aleatoreamente com distribuição uniforme:
iv ∈R {0, 1}n
Enck(m) = (iv,G(k, iv)⊕m).
Esta sequência adicional de bits é chamada de �vetor de inicialização�, e é enviada
junto com o texto cifrado, em claro. Para decifrar, fazemos
Deck(iv, c) = G(k, iv)⊕ c.
A Construção a seguir é uma cifra de �uxo construída usando esta ideia.
Construção 4.36. Seja G um gerador pseudoaleatório com fator de expansão
p(.). O seguinte criptossistema simétrico é construído sobre G:
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
60CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
• Gen: dado 1n, escolha uma chave k ∈ {0, 1}n com probabilidade uniforme;
• Enc(k,m) = (iv,G(k, iv)⊕m), desde que tanto k como m tenham k bits,
e com iv sendo escolhido com distribuição uniforme;
• Dec(iv, k, c) = G(k, iv)⊕ c, desde que tanto k como c tenham k bits.
�
A saída de G(k, iv) deve ser indistinguível de bits aleatórios, mesmo quando
o adversário conhece iv (isto realmente ocorre, porque G é gerador pseudoalea-
tório).
4.5.2 Ataques de Texto Claro Escolhido
Consideramos agora a situação em que o adversário tem acesso limitado à função
Enc: pode cifrar mensagens à vontade, mas não tem a chave k (suponha por
exemplo que o adversário possa convencer alguém a cifrar para ele mensagens
usando k).
Experimento 4.37 (PRIV_CPA(Π,A, n)).
1. Uma chave k é gerada por Gen(1n);
2. O adversário recebe a entrada 1n e, podendo cifrar mensagens com Enck,
nos devolve duas mensagens m0 e m1, ambas de mesmo tamanho;
3. Um bit b é escolhido aleatoreamente, e a mensagem correspondente é en-
criptada: c = Enck(mb). Este texto cifrado (o �desa�o�) é enviado a A;
4. A, ainda podendo usar Enck, responde um bit b′;
5. O resultado do experimento é um se b = b′ e zero em caso contrário.
D AEnck
b ∈R {0, 1}
k ← { 0, 1 }
b = b′ → 1
b 6= b′ → 0
1n
m0,m1
Enck(mb)
b′
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.5. CIFRAS DE FLUXO 61
�
De�nição 4.38 (Segurança contra ataque de texto claro escolhido). Um crip-
tossistema simétrico Π tem indistinguibilidade contra ataques de texto claro es-
colhido se para todo adversário A existe uma função desprezível negl tal que,
Pr[PRIV_CPA(Π,A, n) = 1] ≤ 1
2
+ negl(n).
�
Notas
Pseudoaleatoriedade é objeto do livros de Goldreich [85] e (mais antigo) de
Luby [149]. O assunto também é abordado em outros livros, de Goldreich [87]
e Kranakis [140].
A demonstração do Teorema 4.16 (a corretude do método para geração de
números naturais) pode ser encontrada no livro de Shoup [198].
Há uma demonstração do Teorema de Yao no livro de Delfs e Knebl [66].
Há um interessante livro [59], de Thomas Cusick, Cunsheng Ding e Ari
Renwall que estuda aspectos de cifras de �uxo relacionados a Teoria de Números.
Os postulados de Golomb foram a primeira tentativa de formalizar a ideia
de sequência pseudoaleatória. Seu livro de 1967 foi revisado em 1982 [96]. O
livro de Daniel Neuenschwander [167] sobre métodos estatísticos em Criptogra�a
aborda diversos testes para números aleatórios. O livro de Golomb e parte do
livro de Neuenschwander tratam de registradores de deslocamento linearmente
realimentados (linear feedback shift registers).
Sequências geradas por LFSRs são estudadas extensivamente nos livros de
Golomb [96], de Lidl e Niederreiter [146], e de Golomb e Gong [97].
O livro de Klein [133] traz uma discussão detalhada sobre cifras de �uxo,
incluindo uma apresentação teórica de registradores de deslocamento e seu uso
em construções práticas.
Um dos primeiros a de�nir baterias de teste para aleatoriedade foi George
Marsaglia, que criou a bateria de testes �Die Hard�. Há baterias de testes
de�nidas pelo NIST [169].
Exercícios
Ex. 19 � Calcule a autocorrelação e a complexidade linear das sequências,
com deslocamentos 1, 2 e 3:
a) 01101011
b) 10101010
c) 11101010
d) 100101101101
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
62CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
Ex. 20 � Construa programas que calculem a autocorrelação e a complexi-
dade linear de sequências de bits.
Ex. 21 � Descreva em pseudocódigo um algoritmo que veri�que, para sequên-
cias de bits, os postulados de Golomb. Calcule a complexidade de tempo de seu
algoritmo.
Ex. 22 � Sobre LFSRs, responda:
i) Porque um LFSR tendo uma sequência de zeros como estado inicial gerará
somente zeros?
ii) Existe uma família de LFSRs que só gere uns?
iii) Que LFSRs geram tanto zeros como uns?
Ex. 23 � Prove que toda m-sequência satisfaz os postulados de Golomb.
Ex. 24 � Uma sequência de bits é de deBrujin binária de ordem k se cada
sequência binária de comprimento k aparece exatamente uma vez. Generali-
zando, uma sequência de deBrujin n-ária de ordem k é uma sequência sobre
um alfabeto de tamanho n onde cada sequência de comprimento k aparece uma
única vez.
i) Quantas sequências de deBrujin m-árias de ordem n existem?
ii) Prove que m-sequências são de deBrujin, e diga para que ordem.
Ex. 25 � Demonstre o Teorema 4.17
Ex. 26 � Na demonstração do Teorema 4.34 há um pequeno detalhe que
omitimos: é possível que as duas mensagens, 0n e 1n, resultem no mesmo texto
cifrado.
a) Demonstre que isso deve necessariamente ser possível.
b) Complete a demonstração tratando também deste caso.
Ex. 27 � Mostre que se a sequência X tem período p e k|p, então a autocor-
relação de X com deslocamento k é igual a um.
Ex. 28 � Demonstre que a Construção 4.36 é segura contra ataques de múl-
tiplos textos cifrados conhecidos.
Ex. 29 � Implemente os geradores de Blum-Micali e Blum-Blum-Shub.
Ex. 30 � Um gerador por congruência linear funciona da seguinte maneira:
dados parâmetros a, b, n e uma semente s < n,
x0 = s
xi = axi−1 + b (mod n)
Mostre que este tipo de gerador não é seguro.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
4.5. CIFRAS DE FLUXO 63
Ex. 31 � Construa despretensiosamente4 sua própria cifra de �uxo, usando
um LFSR e uma função não linear.
4O Exercício 59, do Capítulo 6, pede que você quebre sua cifra.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
64CAPÍTULO 4. GERADORES PSEUDOALEATÓRIOS E CIFRAS DE FLUXO
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 5
Cifras de Bloco
Cifras de bloco operam em sequências de bits de tamanho �xo. Para encriptar
mensagens de tamanho maior que o do bloco da cifra, é necessário quebrar a
mensagem em blocos consecutivos.
No Capítulo 4 usamos geradores pseudoaleatórios para criar cifras de �uxo,
fazendo ou exclusivo das mensagens com a sequência gerada de bits. Neste
Capítulo usaremos como fundamento para cifras de bloco permutações pseu-
doaleatórias, semelhantes em espírito aos geradores pseudoaleatórios, mas que
trabalham com sequências de tamanho �xo.
Ao invés de usarmos uma única função para encriptar mensagens, mudare-
mos a função cada vez que Enc for usada.
m seletor
k F1
F2
...
Fn
F1(m)
F2(m)
Fn(m)
Suponha que temos um conjunto de funções Fi : {0, 1}n → {0, 1}n que
poderiam ser usadas para encriptar mensagens. Podemos criar uma função
F : {0, 1}n × {0, 1}n → {0, 1}n, onde o primeiro argumento é o índice usado
para escolher qual Fi queremos usar. F é chamadade função indexada por
chave. Denotaremos Fk(m) ao invés de F (k,m).
Com |k| = n, podemos indexar 2k possíveis funções. No entanto, há muito
mais funções com tamanho de entrada e saída igual a n bits.
Cada função de n em n bits pode ser representada por sua tabela verdade,
que tem n colunas e 2n linhas. Assim, cada uma destas funções pode ser repre-
sentada por n2n bits � e cada string de n2n bits representa uma única função.
A quantidade de cadeias de comprimento n2n é 2n2
n
(ou ainda, (2n)(2
n)).
65
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
66 CAPÍTULO 5. CIFRAS DE BLOCO
Assim, usamos k como índice para escolher 2n dentre (2n)(2
n) funções. Uma
função indexada por k desta forma não pode então induzir distribuição uniforme
sobre todas as funções com entrada e saída de n bits, porque haverá funções que
não poderão ser representadas.
Queremos que a segurança de nossa construção criptográ�ca esteja na escolha
da função. Assim, se permitirmos ao adversário acesso a uma função Fk (sem
o índice k), ele não deve ser capaz de distinguir Fk de uma função qualquer
escolhida ao acaso dentre todas as (2n)(2
n) possíveis funções com entrada e saída
de n bits.
Em outras palavras, a distribuição das 2n funções indexadas por k deve ser
indistinguível da distribuição das (2n)(2
n), que é uniforme. Na De�nição 5.1, o
algoritmo D tem o objetivo de tentar realizar esta distinção.
De�nição 5.1 (Função Pseudoaleatória). Seja F : {0, 1}n × {0, 1}n → {0, 1}n
uma função computável polinomialmente e que preserva o tamanho da entrada.
F é pseudoaleatória se, para todo algoritmo polinomial D, existe uma função
desprezível negl tal que∣∣∣Pr[D(Fk(·), 1n) = 1]− Pr[D(f(·), 1n) = 1]∣∣∣ ≤ negl(n),
onde k é escolhido com distribuição uniforme sobre {0, 1}n e f é escolhida com
distribuição uniforme sobre o conjunto de todas as funções com domínio e con-
tradomínio {0, 1}n. O algoritmo D(Fk, 1n) executa em tempo polinomial em n
(por isso denotamos 1n e não simplesmente n) e tem livre acesso à função Fk
(mas não ao seu índice). �
O Exercício 32 pede a demonstração de que toda função pseudoaleatória é
de mão única.
5.1 Esquemas de Encriptação usando Funções Pseu-
doaleatórias
A di�culdade do adversário em determinar a função Fk escolhida pode ser usada
para construir criptossistemas: poderíamos criar uma função Enc tal que
Enck(m) = Fk(m).
No entanto, este criptossistema seria determinístico, e portanto não seria resis-
tente a ataques de múltiplos textos cifrados conhecidos.
Para introduzir aleatoriedade podemos fazer
r ∈R { 0, 1 }n ,
Enck(m) = 〈r, Fk(r)⊕m〉 ,
e enviar r junto com o texto encriptado. Como esperamos que a saída da função
pseudoaleatória seja indistinguível de bits aleatórios, o ou exclusivo dela com m
tem o efeito que desejamos.
Temos assim o seguinte criptossistema usando funções pseudoaleatórias:
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.1. ESQUEMAS DE ENCRIPTAÇÃOUSANDO FUNÇÕES PSEUDOALEATÓRIAS67
Construção 5.2. Seja F : {0, 1}n × {0, 1}n → {0, 1}n uma função pseudoa-
leatória. As seguintes funções são um criptossistema com tamanho de chave e
mensagem igual a n:
• Gen(1n) escolhe uniformemente uma chave em {0, 1}n.
• Enck(m): escolha r ∈R { 0, 1 }n, e retorne
〈r, Fk(r)⊕m〉 .
• Deck(r, c) = Fk(r)⊕ (c) �
Construção 5.3. Seja Π∗ igual ao sistema de Construção 5.2 exceto por não
usar Fk: ao invés disso, Π∗ seleciona uniformemente uma das (2n)(2
n) funções
f de n em n bits (não conseguiríamos construir Π∗ na prática, mas ele servirá
ao nosso argumento). �
O Criptossistema Π∗ é equivalente ao one-time pad.
Lema 5.4. Seja Π∗ o criptossistema da Construção 5.3 e A um adversário
executando em tempo polinomial. Seja p(·) o polinômio dando o número de
consultas feitas pelo adversário A ao oráculo Enck(·) no experimento 4.37. A
probabilidade de b = b′ é
Pr [PRIV_CPA(Π,A, n) = 1] ≤ 1
2
+
p(n)
2n
Demonstração. Cada vez que Enck é usada (tanto por Π∗ como pelo adversário
A no experimento PRIV_CPA), um novo r é escolhido. Dado que temos um r, a
probabilidade de r ser escolhido novamente é 12n .
Suponha agora que no experimento o texto encriptado c = 〈 rc, f(rc)⊕mb〉
seja enviado a A.
Há dois casos a tratar:
• rc é usado por A em suas consultas ao oráculo que lhe permite usar f .
Chamaremos este evento de RUIM . Quando isso acontece, A terá sucesso
e b = b′. A fará uma quantidade polinomial de consultas ao oráculo. Seja
então p(.) o polinômio que dá a quantidade de consultas. A probabilidade
de b = b′ é
1
2n
+
1
2n
+ · · ·+ 1
2n
=
p(n)
2n
.
• rc nunca é usado por A nas consultas ao oráculo; este evento é o comple-
mento do anterior, e o denotaremos por RUIM . Neste caso o experimento
é o mesmo que o Experimento 2.8 para o one-time pad, e a probabilidade
de b = b′ é 12 .
Concluímos que Pr [PRIV_CPA(Π∗,A, n) = 1] é
Pr [PRIV_CPA(Π∗,A, n) = 1 ∧RUIM ] + Pr
[
PRIV_CPA(Π∗,A, n) = 1 ∧RUIM
]
≤ Pr(RUIM) + Pr
[
PRIV_CPA(Π∗,A, n) = 1|RUIM
]
≤ p(n)
2n
+
1
2
. �
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
68 CAPÍTULO 5. CIFRAS DE BLOCO
Teorema 5.5. O criptossistema descrito na Construção 5.2 é CPA-seguro.
Demonstração. Seja g(n) uma função que nos diz quão acima de 12 é a proba-
bilidade de sucesso do criptossistema Π no experimento PRIV_CPA:
g(n) = Pr [PRIV_CPA(Π,A, n) = 1]− 1
2
,
e então
Pr [PRIV_CPA(Π,A, n) = 1] = g(n) + 1
2
.
A diferença entre a probabilidade de sucesso para Π, que acabamos de calcular,
e a probabilidade de sucesso para Π∗, dada pelo Lema 5.4, é∣∣∣∣(12 + g(n)
)
−
(
1
2
+
p(n)
2n
)∣∣∣∣
=
∣∣∣∣g(n)− p(n)2n
∣∣∣∣ ,
e há então dois casos:
• g(n) é desprezível. Se assim for, Π é CPA-seguro (pela de�nição de segu-
rança CPA);
• g(n) não é desprezível. Neste caso conseguiríamos distinguir Fk de f esco-
lhida ao acaso, distinguindo Π da Construção 5.2 de Π∗ da Construção 5.3
� mas como F é função pseudoaleatória, isso não pode acontecer.
�
5.2 Permutações Pseudoaleatórias
Trataremos agora de permutações pseudoaleatórias, que são funções pseudoale-
atórias bijetoras.
De�nição 5.6 (Permutação indexada). Uma função indexada F é chamada de
permutação se para todo k, Fk é bijetora.
Quando Fk e F−1k são computáveis em tempo polinomial, dizemos que F é
e�ciente. �
Quando Fk é indistinguível de f escolhida ao acaso dentre todas as permu-
tações de n bits, dizemos que é uma permutação pseudoaleatória.
De�nição 5.7 (Permutação Pseudoaleatória). Uma permutação indexada F é
pseudoaleatória se, para todo k escolhido uniformemente ao acaso, todo adver-
sário polinomial D, toda f escolhida ao acaso dentre todas as permutações de
n bits, existe uma função desprezível negl tal que∣∣∣Pr [D(Fk, 1n) = 1]− Pr [D(f, 1n) = 1] ∣∣∣ ≤ negl(n).
�
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.3. MODOS DE OPERAÇÃO 69
Note que de acordo com a de�nição de permutação pseudoaleatória o ad-
versário só tem acesso a Fk. Se re�zermos a De�nição 5.7 dando ao adversário
acesso a F−1k , teremos uma permutação pseudoaleatória forte.
5.3 Modos de Operação
Dada uma permutação pseudoaleatória Fk para n bits, suponha que uma men-
sagem tenha tamanho maior que n. Podemos encriptar pedaços diferentes da
mensagem, um de cada vez. Por exemplo,
c1..n = F (k,m1..n)
cn+1..2n = F (k,mn+1..2n)
c2n+1..3n = F (k,m2n+1..3n)
...
Um modo de operação de um esquema de encriptação usando permutações
pseudoaleatórias é a maneira como a permutação é usada para construir um
criptossistema simétrico. Esta seção traz apenas os modos de operação mais
conhecidos.
Todos os modos de encriptação descritos neste texto, exceto o primeiro
(�ECB�), tem segurança CPA. Somente apresentamos a demonstração para um
deles, porque para os outros casos as demonstrações são demasiado longas.
5.3.1 ECB � Electronic Code Book
No modo ECB, cada bloco é encriptado independentemente com a chave k.
F
k
F
k
F
k
m
1 2 3
m m
cc c
12 3
Por ser determinístico, o modo ECB é completamente inseguro: não oferece
indistinguibilidade contra ataque de múltiplos textos cifrados conhecidos; na
verdade, há nele uma fragilidade ainda mais básica: dois blocos iguais de uma
mensagem serão transformados em dois blocos iguais no texto encriptado.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
70 CAPÍTULO 5. CIFRAS DE BLOCO
5.3.2 CBC � Cipher Block Chaining
No modo CBC, a mensagem passa por um ou-exclusivo com o vetor de iniciali-
zação antes de ser usada como entrada para Fk. O bloco seguinte é encriptado
usando a saída do anterior como vetor de inicialização.
Enck(m) = 〈iv1, (c0, c1, · · · , cn)〉 ,
onde
ci = Fk(ivi ⊕mi).
O primeiro vetor de inicialização iv1 é escolhido ao acaso e para i > 1, ivi = ci−1.
O modo CBC não é paralelizável: não é possível computar nem parcialmente
um bloco sem antes computar o bloco anterior.
Teorema 5.8. Se Fk é uma permutação pseudoaleatória e tanto iv como k
são escolhidos ao acaso com distribuição uniforme, o modo CBC tem segurança
CPA.
5.3.3 OFB � Output Feedback
No modo OFB um vetor de inicialização é usado para gerar Fk; a saída de
Fk é usada como vetor de inicialização para o próximo bloco. Para encriptar
mensagens, fazemos ou-exclusivo de cada mi com a saída da i-ésima aplicação
de Fk.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.3. MODOS DE OPERAÇÃO 71
F
k
F
k
F
k
m
1 2 3
m m
cc c
1 2 3
iv
+ ++
iv
Enck(m) = 〈iv1, (c0, c1, · · · , cn)〉 ,
onde
ci = Fk(ivi)⊕mi.
O primeiro vetor de inicialização iv1 é escolhido ao acaso e para i > 1, ivi =
Fk(ivi−1).
Assim como o modo CBC, o modo OFB não é paralelizável. No entanto,
uma sequência de bits pode ser preparada com antecedência para vários blocos
antes da encriptação (ou decriptação) das mensagens.
Teorema 5.9. Se Fk é uma permutação pseudoaleatória e tanto iv como k
são escolhidos ao acaso com distribuição uniforme, o modo OFB tem segurança
CPA.
5.3.4 CTR � Contador
No modo contador o vetor de inicialização é gerado e depois incrementado para
cada bloco. Para encriptar o i-ésimo bloco, usa-se o contador somado com i
como entrada para Fk, e o resultado é usado em um ou-exclusivo com a i-ésima
parte da mensagem.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
72 CAPÍTULO 5. CIFRAS DE BLOCO
Enck(m) = 〈ctr, (c0, c1, · · · , cn)〉 ,
onde
ci = Fk(ctr + i)⊕mi.
O modo CTR é paralelizável: cada bloco pode ser encriptado separadamente.
Além disso, é possível encriptar ou decriptar o n-ésimo bloco isoladamente (ou
seja, o modo CTR permite acesso aleatório).
O Lema 5.10 é análogo ao 5.4, tendo demonstração semelhante àquele.
Lema 5.10. Seja Π o modo CTR de encriptação usando uma função pseudoa-
leatória F , e Π∗ o modo CTR, exceto que uma função verdadeiramente aleatória
f é usada no lugar de F .
Seja A um adversário polinomial restrito de forma que: (i) A pode realizar
uma quantidade também polinomial em n de consultas a um oráculo; (ii) a
quantidade de blocos em cada consulta ao oráculo é polinomial em n; (iii) a
quantidade de blocos em m0 e m1 é polinomial em n. Então existe uma função
desprezível negl tal que∣∣∣Pr[PRIV_CPA(Π,A, n) = 1]− Pr[PRIV_CPA(Π∗,A, n) = 1]∣∣∣ ≤ negl(n).
O Lema 5.11 nos permitirá, junto com o Lema 5.10, demonstrar a segurança
CPA do modo CTR. A demonstração é muito próxima da que é dada por Katz
e Lindell [130].
Lema 5.11. Sejam Π∗ e A como no Lema 5.10. Então
Pr[PRIV_CPA(Π∗,A, n) = 1] < 1
2
+ negl(n).
Demonstração. Durante o experimento PRIV_CPA(Π∗,A, n), o algoritmo de en-
criptação é usado uma vez para encriptar m0,m1, e o oráculo é acessado por A
uma quantidade p(n) de vezes.
Seja k o tamanho dos blocos das mensagensm0,m1 enviadas no experimento,
tal que k ≤ p(n), e ctr o valor do contador usado.
Sejam ki e ctri os tamanhos dos blocos e o contador usados na i-ésima
consulta feita por A ao oráculo.
Assim, depois que as mensagens m0,m1 são encriptadas, A recebe
f(crt∗ + 1), f(ctr∗ + 2), . . . , f(ctr∗ + k).
Quando A consulta o oráculo pela i-ésima vez, ele recebe
f(crti + 1), f(ctri + 2), . . . , f(ctri + ki).
Identi�camos duas situações: aquela em que nenhum dos ctri+j é igual a algum
ctr∗ + q; e aquela em que, para algum j, i e algum q, ctri + j = ctr∗ + q.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.3. MODOS DE OPERAÇÃO 73
• (Evento REPETE): se existem j, i e algum q tais que ctri + j = ctr∗ + q, A
talvez possa identi�car a mensagem que foi enviada, porque sabe f(ctr∗+
q).
Presumimos que a quantidade de blocos q é máxima, q = p(n). Denotamos
por REPETEi o evento em que algum i é repetido, como acima. Assim,
Pr[REPETE] ≤ Pr
p(n)⋃
i=1
REPETEi

=
p(n)∑
i=1
Pr [REPETEi] .
Dado um valor de ctr∗, para que REPETEi ocorra, ctri deve estar entre
ctr∗− p(n) + 1 e ctr∗+ p(n)− 1, e portanto há (ctr∗+ p(n)− 1)− (ctr∗−
p(n) + 1) + 1 = 2p(n) − 1 possíveis valores de ctri que resultam neste
evento. Assim,
Pr[REPETEi] =
2p(n)− 1
2n
,
de forma que
Pr[REPETE] =
p(n)∑
i=1
Pr [REPETEi]
=
p(n)∑
i=1
2p(n)− 1
2n
<
p(n)∑
i=1
2p(n)
2n
=
2p(n)2
2n
.
• (Evento REPETE): neste caso, A não tem informação sobre qualquer um
dos blocos encriptados f(ctr∗+ q) recebidos, e como ctr∗ é escolhido alea-
toriamente e f é função verdadeiramente aleatória, a sequência de blocos
cifrados é composta pelos blocos da mensagem, tendo sido passados por
ou-exclusivo com bits aleatórios, da mesma forma que no one-time pad, e
a probabilidade de b = b′ é 1/2.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
74 CAPÍTULO 5. CIFRAS DE BLOCO
Finalmente,
Pr[PRIV_CPA(Π∗,A, n) = 1] = Pr[PRIV_CPA(Π∗,A, n) = 1 ∧ REPETE]
+ Pr[PRIV_CPA(Π∗,A, n) = 1 ∧ REPETE]
≤ Pr[REPETE]
+ Pr[PRIV_CPA(Π∗,A, n) = 1 | REPETE]
<
1
2
+
2p(n)2
2n
=
1
2
+ negl(n). �
Teorema 5.12. Se Fk é uma permutação pseudoaleatória e tanto iv como k
são escolhidos ao acaso com distribuição uniforme, o modo CTR usando Fk tem
segurança CPA.
Demonstração. Segue diretamente dos Lemas 5.10 e 5.11. �
5.4 Cifras de bloco
Já de�nimos o comportamento de permutações pseudoaleatórias e determinamos
diversas maneiras de usá-las (os modos de operação). Nos falta ainda tratar de
métodos para a construção de cifras de bloco usando estas permutações.
5.4.1 Segurança de cifras de bloco
As noções de segurança dadas anteriormente na análise da segurança de cifras
de �uxo e de funções pseudoaleatórias eram baseadas em comportamento assin-
tótico, e não fazem sentido para cifras de bloco, uma vez que estas trabalham
com blocos e chaves de tamanho �xo.
Ao invés disso, diremos que uma cifra de bloco é segura quando o melhor
ataque contra ela tem complexidade de tempo igual à da busca exaustiva pela
chave. Por exemplo uma cifra de bloco que trabalha com chaves de 256 bits é
insegura se há algum ataque que exija uma quantidade de operações próxima
de 2128, por exemplo (mesmo 2128 sendo um número muito grande).
5.4.2 Construção
De�nição 5.13 (Cifra de Bloco). Uma cifra de bloco para chaves com n bits
e mensagens com t bits é uma permutação indexada e�ciente F : {0, 1}n ×
{0, 1}t → {0, 1}t. �
As chaves são portanto de tamanho n e os blocos de tamanho t.
A de�nição de cifra de bloco não faz referência a permutações pseudoaleató-
rias. Ao invés disso, uma permutação e�ciente indexada é usada. Isso porque,
como já mencionamos, para cifras de bloco não faz sentido tratar de comporta-
mento assintótico.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.5. ARQUITETURA DE CIFRAS DE BLOCO 75
Uma cifra de bloco deve ser indistinguível de uma permutação aleatória. In-
felizmente não podemos usar diretamente permutações pseudoaleatórias: para
representar uma permutação onde entrada e saída usam n bits precisaríamos de
representar 2n! valores, e consequentemente teríamos que usar log(2n!) bits.Por
exemplo, se quisermos que o bloco tenha 256 bits, precisaríamos de log(2256!) �
algo inconcebível na prática. Na construção de cifras de bloco usam-se normal-
mente funções representáveis de maneira mais compacta, que, do ponto de vista
do adversário, parecem ser permutações pseudoaleatórias.
5.5 Arquitetura de cifras de bloco
Há diferentes maneiras de organizar cifras de bloco. A seguir são destacados
dois princípios básicos enunciados por Shannon e em seguida, três arquiteturas
comuns de cifra de bloco são exploradas: redes de substituição e permutação,
cifras de Feistel e esquemas de Lai-Massey.
5.5.1 Confusão e difusão
Há dois conceitos básicos identi�cados por Claude Shannon no funcionamento
de esquemas de encriptação, e que são claramente relacionados à arquitetura de
cifras de bloco:
• Confusão: a relação (estatística) entre o texto encriptado e a chave deve
ser complexa o su�ciente para não permitir a obtenção da chave a partir
do texto encriptado.
• Difusão: a distribuição não-uniforme do texto claro não deve se re�etir
no texto encriptado. Em outras palavras, o texto encriptado deve ter
distribuição uniforme e independente da do texto claro � as redundâncias
no texto claro são �diluídas�. A permutação das posições de bits da entrada
é uma das maneiras de obter este efeito.
5.5.2 Rede de substituição e permutação
Uma vez que não podemos representar uma permutação aleatória de todos os
bits de um bloco, podemos tentar outra abordagem. Dividimos o bloco em
pequenas partes menores e dentro de cada uma fazemos uma permutação alea-
tória. Dizemos que esta operação introduz confusão no bloco original, e damos
a estes pequenos blocos o nome de S-boxes (ou �caixas-S�).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
76 CAPÍTULO 5. CIFRAS DE BLOCO
SSS
Como só permutamos bits dentro de pequenos blocos, alterações em uma
parte da entrada causam modi�cações apenas na parte correspondente da saída.
Introduzimos confusão, mas não difusão. Para conseguir difusão, tomamos a
saída dos blocos e as distribuímos entre os outros (as modi�cações das S-boxes
são �espalhadas�).
À aplicação em sequência das S-boxes e à difusão de bits damos o nome de
rodada. Uma rede de substituição e permutação normalmente executa várias ro-
dadas, e ao �nal de cada rodada o resultado é combinado (normalmente usando
ou-exclusivo) com uma chave.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.5. ARQUITETURA DE CIFRAS DE BLOCO 77
SS S
K
i
S-boxes
introduzem
confusão
passo de mistura
traz difusão
XOR com
i-ésima chave
Exemplo 5.14. Construiremos agora um protótipo de rede de substituição e
permutação. A rede não é útil de forma alguma, a não ser como ferramenta
didática.
A �gura mostra quatro S-boxes que substituem dois bits cada, ligadas por
uma permutação simples.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
78 CAPÍTULO 5. CIFRAS DE BLOCO
Já a próxima �gura mostra a operação da rede para a entrada 1100.
A entrada é dividida em partes, 11 e 00. A primeira parte, 11, é mapeada
pela primeira S-box em 10, e a segunda parte, 00, é mapeada pela segunda
S-box em 11. Os bits são permutados para a entrada de mais duas S-boxes, que
transformam 11 em 01 e 01 em 10, resultando na saída 0110. J
Sendo as S-boxes invertíveis, a cifra como um todo também o será � e as-
sim será também uma permutação (porque é bijeção e preserva o tamanho da
entrada).
O projeto das S-boxes e dos passos de mistura deve ter como objetivo o
efeito avalanche: uma mudança em um bit na entrada tem alta probabilidade
de modi�car qualquer um dos bits da saída.
5.5.3 Rede de Feistel
Redes de Feistel são parecidas com redes de substituição e permutação mas
usam uma arquitetura diferente, não sendo necessário que as S-boxes sejam
invertíveis.
Em uma rede de Feistel a entrada é dividida em duas metades (esquerda e
direita), denotadas Li e Ri. Em cada rodada, são calculados
Li = Ri−1
Ri = Li−1 ⊕ fi(Ri−1,Ki)
onde fi é uma função �xa para a cifra e Ki é a subchave para a i-ésima rodada.
É comum que se use o ou-exclusivo como operação em redes de Feistel, mas na
verdade pode-se usar outra operação (redes de Feistel exigem que as sequências
de n/2 bits mais a operação + usada formem um grupo).
A Figura a seguir mostra uma rodada de uma rede de Feistel.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.5. ARQUITETURA DE CIFRAS DE BLOCO 79
Exemplo 5.15. A S-box da segunda camada no exemplo 5.14 faz as seguintes
substituições:
f(00) = 10
f(01) = 11
f(10) = 00
f(11) = 01
De�niremos uma rede de Feistel simples usando esta S-box.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
80 CAPÍTULO 5. CIFRAS DE BLOCO
A próxima �gura ilustra como a rede transforma a sequência de bits 1101 em
0011.
J
Uma característica importante das redes de Feistel é que sempre são inver-
tíveis, mesmo que suas funções internas não o sejam.
Teorema 5.16. Uma rede de Feistel sempre é invertível, independente da es-
colha de sua função interna.
Demonstração. Basta mostrarmos que uma rodada é invertível. E realmente:
como Li é copiado de Ri−1, temos imediatamente Ri−1. Com Ri−1, f e Ri
podemos calcular Li−1:
Ri−1 = Li
Li−1 = f(Ri−1)⊕Ri �
Como as redes de Feistel tem entrada e saída de tamanho �xo e são invertíveis
(e são bijeções), temos o seguinte Corolário:
Corolário 5.17. Redes de Feistel são Permutações.
Cifras de bloco são de�nidas como permutações, mas é mais natural analisar
a segurança de uma cifra presumindo que ela é uma função pseudoaleatória,
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.5. ARQUITETURA DE CIFRAS DE BLOCO 81
e não uma permutação. Isso nos leva ao próximo Teorema, demonstrado por
Michael Luby e Charles Racko�, que garante que se a função interna de uma
rede de Feistel for uma função pseudoaleatória, então a permutação resultante
da rede é pseudoaleatória, desde que a rede tenha pelo menos três rodadas.
Mais precisamente, Luby e Racko� mostraram que a probabilidade de um ad-
versário distinguir entre uma permutação verdadeiramente aleatória e uma cifra
de Feistel de três rodadas construída com funções pseudoaleatórias é menor do
que q2/2n. É muito importante observar que o enunciado do Teorema de Luby-
Racko�, embora tenha alguma semelhança com a de�nição 4.7, de geradores
pseudoaleatórios, é diferente em um aspecto: para PRGs usamos uma formula-
ção assintótica (dissemos que sempre existe uma função desprezível maior que
o valor); já aqui damos uma expressão exata. Fazemos isso porque, como já
mencionamos, raciocínio assintótico não faz sentido para cifras de bloco.
Teorema 5.18 (Luby-Racko�). Seja P ∗ uma permutação pseudoaleatória de n
bits. Seja P a permutação de�nida por uma rede de Feistel para entrada de n bits
com três rodadas, e funções internas F ∗1 , F
∗
2 e F
∗
3 , todas pseudoaleatórias. Seja
D um adversário tentando distinguir P de P ∗ fazendo no máximo q consultas
a um oráculo que lhe dê acesso a P . Então
∣∣∣Pr[D(P ) = 1]− Pr(D(P ∗) = 1]∣∣∣ ≤ q2
2n
.
5.5.4 Construção de Lai-Massey
Uma construção de Lai-Massey lembra uma rede de Feistel.
Seja (G,+) um grupo e σ uma permutação em G. Um esquema de Lai-
Massey com r rodadas em G é
Λσ(F1,F2,...,Fr) = Λ
σ
(F2,...,Fr)
(x+ σ(F (x− y)), y + F (x− y))
Λσ(F ) = (x+ F (x− y), y + F (x− y))
Em cada rodada a mensagem é dividida em duas partes, x e y; calcula-se
então a diferença x− y, que é usada como entrada para uma função F . A saída
de F é somada às duas metades. A Figura a seguir mostra uma rodada de uma
construção de Lai-Massey, onde denotamos por x0, y0 a entrada da primeira
rodada, e por x1, y1 a saída.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
82 CAPÍTULO 5. CIFRAS DE BLOCO
0 0
1 1
x y
x y
F
σ
Para que a construção deLai-Massey tenha a mesma garantia de segurança
das redes de Feistel, a permutação σ deve ser um ortomor�smo).
De�nição 5.19 (ortomor�smo). Seja (G,+) um grupo. Uma permutação θ :
G → G é um ortomor�smo se γ : G → G, tal que γ(x) = θ(x) − x, também é
uma permutação. �
Teorema 5.20 (Hall-Paige). Um grupo �nito comutativo tem um ortomor�smo
se e somente se sua ordem é ímpar, ou se tem algum subgrupo isomorfo a Z22.
Em particular, Z2m não tem ortomor�smos.
Teorema 5.21. Seja Λσ a construção de Lai-Massey com permutação σ. Seja
(z, t) = Λσ(F1,F2,...,Fr)(x, y)
Se σ é ortomor�smo, então t− z tem distribuição uniforme.
Demonstração.
z − t = (σ(x+ F (x− y))− (x+ F (x− y))) + (x− y)
= σ′(x+ F (x− y)) + (x− y).
onde σ′(u) = σ(u) − u. Se σ′ é permutação e F tem saída com distribuição
uniforme, então z − t tem distribuição uniforme. �
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.6. EXEMPLO: DES 83
O Teorema 5.22 é análogo para esquemas de Lai-Massey, ao Teorema de
Luby-Racko� para redes de Feistel.
Teorema 5.22. Seja G um grupo com cardinalidade |G| = 2n. Sejam F1, F2, F3
funções aleatórias independentes e C uma permutação aleatória em G. Seja
também σ um ortomor�smo em G.
Seja D um adversário tentando distinguir C de Λσ(F1,F2,F3), usando no má-
ximo q acessos a um oráculo que dê acesso a Λσ(F1,F2,F3). Então
∣∣∣Pr[(Λσ(F1,F2,F3) = 1]− Pr[C = 1]∣∣∣ ≤ q(q − 1)(2−2n + 2−4n),
menor que uma função desprezível no tamanho do grupo, desde que a quantidade
de acessos ao oráculo seja polinomial.
As cifras IDEA e FOX são construções de Lai-Massey.
5.6 Exemplo: DES
Em 1976 um criptossistema desenvolvido pela IBM foi escolhido como padrão
pelo National Bureau of Standards americano. Este criptossistema passou a ser
conhecido com DES (Data Encryption Standard). Embora já muito antigo, o
DES é importante como exemplo de arquitetura de cifra de bloco.
O DES é uma rede de Feistel com chave de 56 bits e mensagens de 64 bits,
usando 16 rodadas e oito S-boxes.
Antes de aplicar a entrada na rede de Feistel, o DES realiza uma permutação
inicial na entrada. Esta permutação é revertida na saída da rede. A próxima
Figura ilustra o funcionamento do DES.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
84 CAPÍTULO 5. CIFRAS DE BLOCO
Descreveremos a função interna do DES. Como em uma rede de Feistel
metade dos bits da mensagem é usado de cada vez como entrada para a função
interna, a entrada é de 32 bits.
A função interna da rede de Feistel do DES funciona da seguinte maneira:
os 32 bits da entrada são expandidos em uma string de 48 bits. Após um
ou-exclusivo com a subchave, a entrada é dividida em oito S-boxes (note que
usam-se S-boxes, típicas de redes de substituição-permutação, como parte da
função interna desta rede de Feistel). Estas S-boxes têm seis bits de entrada
e quatro de saída (donde se conclui que a função usada pelo DES na rede de
Feistel não tem inversa). Depois, a saída tem 8× 4 = 32 bits. A Figura a seguir
ilustra a função interna do DES.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.6. EXEMPLO: DES 85
5.6.1 Escalonamento de chaves
O algoritmo de escalonamento de chaves do DES gera 16 chaves de 32 bits a
partir da chave de 56 bits usada na entrada.
O escalonamento de chaves do DES inicia com a aplicação de uma permu-
tação PC − 1, dando origem a uma sequência de bits, que dividimos em duas
metades C0 e D0.
Tanto C0 como D0 são rotacionados para a esquerda. A quantidade de bits
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
86 CAPÍTULO 5. CIFRAS DE BLOCO
rotacionados depende da iteração, conforme a tabela a seguir.
iteração deslocamentos à esq
1 1
2 1
3 2
4 2
5 2
6 2
7 2
8 2
9 1
10 2
11 2
12 2
13 2
14 2
15 2
16 1
Assim, após a primeira iteração rotacionam-se C0 e D0 um bit para a direita;
na segunda iteração, um bit, na terceira, dois bits, e assim por diante.
Em cada iteração, aplica-se a permutação PC-2, para obter a i-ésima chave.
A Figura a seguir ilustra o processo de escalonamento de chaves do DES.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.6. EXEMPLO: DES 87
5.6.2 3DES
O único problema do DES é o tamanho de sua chave: hoje é possível a um
adversário percorrer o espaço de chaves (de tamanho 256) em tempo aceitável.
Uma maneira de aumentar a segurança do DES é aumentando o tamanho de
sua chave. Não devemos, no entanto, modi�car internamente uma cifra de bloco
� o DES resistiu a décadas de ataques da forma como foi criado, e pequenas
mudanças na sua estrutura podem enfraquecê-lo.
Uma primeira tentativa de aumentar o tamanho das chaves é simplesmente
encriptar as mensagens duas vezes, usando duas chaves diferentes:
F ′k1,k2 = Fk1(Fk2(m)).
Infelizmente esta ideia não traz segurança adicional à cifra. O ataque descrito
a seguir é chamado de ataque do encontro no meio1.
Suponha que um adversário tenha um par (m, c), sabendo que foi encriptado
duplamente como a descrevemos (c = Fk1(Fk2(m))). Ele deve procurar duas
1Meet-in-the-middle em Inglês.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
88 CAPÍTULO 5. CIFRAS DE BLOCO
chaves tais que
Fk1(m) = x = F
−1
k2
(c).
• O adversário efetua Enc(m) com todas as chaves possíveis. Ao encriptar
m com uma chave ki e obter o texto encriptado xi, ele guarda o par ki, xi
em uma tabela.
• Depois, o adversário faz um procedimento semelhante: decripta c com
todas as chaves possíveis, guardando pares (xi, ki).
• Em seguida, ordena as duas tabelas geradas usando xi como chave. Ao
encontrar uma entrada na tabela pares com o mesmo xi, ele guarda as
chaves (ki, kj) em um conjunto de possíveis soluções.
Se sortearmos duas chaves ao acaso, elas poderão satisfazer a Equação 5.6.2 com
probabilidade 12n (para perceber isto, imagine as duas chaves como uma única
cadeia de 2n bits). O conjunto de possíveis soluções terá aproximadamente
22n
2n = 2
n. Se o adversário tiver mais pares de mensagem e texto encriptado,
este conjunto �cará menor e ele conseguirá facilmente identi�car a chave.
Tentamos então de outra forma: encriptar, decriptar e encriptar novamente,
usando chaves diferentes:
F ′k1,k2,k3 = Fk1(F
−1
k2
(Fk3(m))).
O 3DES opera exatamente desta forma, e com três chaves de 56 bits passamos
a ter 168 bits no total. O espaço de chaves de 2168 bits é mais do que su�ciente
para os padrões modernos. A encriptação tripla desta maneira não é vulnerável
ao ataque de encontro no meio.
Infelizmente, o 3DES é muito lento (são necessárias três operações onde antes
usávamos uma).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.7. EXEMPLO: AES 89
5.7 Exemplo: AES
O AES é uma rede de substituição e permutação com blocos de 128 bits. A
chave pode ter 128, 192 ou 256 bits.
Como em qualquer cifra de bloco, as mensagens são divididas em trechos de
igual comprimento (os blocos). No entanto, no AES os blocos são representados
como matrizes 4×4, onde cada elemento é um byte (note que o número total de
bits será 4 × 4 × 8 = 128. Representamos então um bloco do AES da seguinte
maneira: 
a0,0 a0,1 a0,2 a0,3
a1,0 a1,1 a1,2 a1,3
a2,0 a2,1 a2,2 a2,3
a3,0 a3,1 a3,2 a3,3

O AES é uma cifra de bloco iterada: as mesmas transformações (incluindo a
mistura com a chave) são aplicadas em diversas rodadas. O número de rodadas
(N no algoritmo) é dez para chaves de 128 bits, doze para chaves de 192 bits e
catorze para chaves de 256 bits.
O pseudocódigo do AES é mostrado a seguir.
// primeira rodada:
AddRoundKey
// rodadas intermediarias:
para i de 2 a N − 1:
SubBytes
ShiftRows
MixColumns
AddRoundKey
// rodada final:
SubBytes
ShiftRows
AddRoundKey
• AddRoundKey realiza ou exclusivo do bloco com a chave da rodada atual;
• SubBytes é o único passo não linear da cifra, e tem o objetivo de evitar
ataques que explorem a estruturalinear da cifra;
• ShiftRows desloca as linhas, para adicionar difusão;
• MixColumns aplica uma transformação nas colunas para adicionar difusão.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
90 CAPÍTULO 5. CIFRAS DE BLOCO
5.7.1 Corpo de Rijndael
O AES é de�nido usando um corpo �nito, que descrevemos brevemente.
De�nição 5.23 (Corpo de Rijndael). OAES (Rijndael) trabalha com elementos
do corpo �nito GF (28), usando o polinômio irredutível
m(x) = x8 + x4 + x3 + x+ 1.
como módulo. �
Todo byte no AES é interpretado como um elemento do corpo de Rijndael.
Tome, por exemplo, o byte 1C×:
1C× = 0001 1100
que é interpretado como o polinômio
0x7 + 0x6 + 0x5 + 1x4 + 1x3 + 1x2 + 0x+ 0x0
5.7.2 Passos do AES
SubBytes
Este passo substitui cada um dos bytes da entrada, usando S-boxes, tento como
resultado a aplicação de uma função não-linear em cada byte.
As S-boxes foram projetadas com dois objetivos em mente:
• Não-linearidade: a amplitude máxima de correlação entre entrada e saída
foi minimizada tanto quanto possível, e além disso, a probabilidade de
propagação de diferenças foi também minimizada;
• Complexidade algébrica: A expressão da S-box no corpo �nito GF (28) é
bastante complexa, a �m de evitar o sucesso de ataques de criptanálise
algébrica.
Neste passo, cada byte é visto como elemento no corpo de Rijndael, e duas
operações são usadas. A primeira consiste em inverter o elemento no corpo de
Rijndael:
g(a) = a−1
g(0) = 0
Como exemplo, calculamos g aplicada no byte 2A×. Primeiro mudamos 2A×
para a base dois, a �m de extrair os coe�cientes do polinômio:
2A× = 0010 1010,
portanto o polinômio que 2A× representa deve ser
p(x) = x5 + x3 + x.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.7. EXEMPLO: AES 91
O inverso deste polinômio é
p−1(x) = x7 + x4 + x3.
Veri�camos:
p(x)p−1(x) = x12 + x10 + x9 + x8 + x7 + x6 + x5 + x4 (mod m)
= 1.
Assim, o inverso de 2A× é 1001 10002, ou 98× em hexadecimal.
Depois de aplicada a transformação g, SubBytes aplica também uma trans-
formação a�m
f(x) = Ax+ b,
onde
A =

1 0 0 0 1 1 1 1
1 1 0 0 0 1 1 1
1 1 1 0 0 0 1 1
1 1 1 1 0 0 0 1
1 1 1 1 1 0 0 0
0 1 1 1 1 1 0 0
0 0 1 1 1 1 1 0
0 0 0 1 1 1 1 1

, b =

1
1
0
0
0
1
1
0

Observamos também que as substituições feitas por SubBytes são uma per-
mutação caótica, e portanto não há a possibilidade de algum byte permanecer
inalterado.
ShiftRows
O passo ShiftRows realiza transposições de bytes, tendo difusão como efeito.
Como o tamanho do bloco é de 128 bits, cada uma das linhas é deslocada
para a direita por 0, 1, 2 e 3 posições. Por exemplo:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
 /−→//−→
///−→

1 2 3 4
6 7 8 5
11 12 9 10
16 13 14 15

A operação ShiftRows é facilmente invertível.
Os critérios para o projeto deste passo foram
• Difusão ótima: os quatro deslocamentos são diferentes;
• Outros efeitos de difusão: os autores do AES consideraram este passo
como defesa para diferentes ataques (criptanálise diferencial truncada, por
exemplo).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
92 CAPÍTULO 5. CIFRAS DE BLOCO
MixColumns
Cada coluna da matriz é interpretada como coe�cientes de um polinômio sobre
GF (28) (porque são bytes).. Assim, uma coluna
a0
a1
a2
a3

é interpretada como a3x3 + a2x2 + a1x+ a0, onde os coe�cientes ai são bytes (e
portanto variam de 0 a 255 = FF×).
Note que este polinômio não pertence ao corpo de Rijndael, porque seus
coe�cientes não são binários (são bytes inteiros)2!
Por exemplo, a coluna 
E0×
21×
0A×
72×

é interpretada como
72×x
3 + 0A×x
2 + 21×x+ E0×
= 114x3 + 10x2 + 33x+ 224.
Cada um dos coe�cientes, por sua vez, pode ser visto como um polinômio
de grau menor ou igual a sete.
A operação MixColumns multiplica cada coluna pelo polinômio �xo
c(x) = 3x3 + x2 + x+ 2.
e o resultado é tomado módulo x4 + 1 (desta forma será um polinômio de grau
menor ou igual a 3, e teremos uma nova coluna com quatro bytes).
Por exemplo, a coluna
63×
2F×
AF×
A2×
 representa A2×x3 + AF×x2 + 2F×x+ 63×.
A transformação MixColumns trocará esta coluna por
(A2×x
3 + AF×x
2 + 2F×x+ 63×) · (3x3 + x2 + x+ 2) (mod x4 + 1),
mas ao realizar a multiplicação dos polinômios, usa-se a aritmética no corpo de
Rijndael!
A Proposição a seguir nos dá uma maneira fácil de computar a multiplicação
de polinômios módulo x4 + 1.
2Se representamos os elementos de GF (28) como polinômios, seus coe�cientes devem per-
tencer a Z2.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.7. EXEMPLO: AES 93
Proposição 5.24. A multiplicação de dois polinômios a(x) = a3x3 + a2x2 +
a1x+ a0 e b(x) = b3x3 + b2x2 + b1x+ b0 módulo x4 + 1 é dada por
a(x)b(x) =

b0 b3 b2 b1
b1 b0 b3 b2
b2 b1 b0 b3
b3 b2 b1 b0


a0
a1
a2
a3

Assim, o passo MixColumns realizará a multiplicação do estado por uma
matrix � mas usando a multiplicação no corpo de Rijndael e soma em Z2.
Exemplo 5.25 (Passo MixColumns do AES). Suponha que o estado atual seja
B =

F2× 02× 01× 33×
0A× 22× 22× FF×
01× 3E× F1× 2C×
10× B0× 0A× BB×

Teremos a primeira coluna substituída por
02× 03× 01× 01×
01× 02× 03× 01×
01× 01× 02× 03×
03× 01× 01× 02×


F2×
0A×
01×
10×
 ,
sendo que as multiplicações dos coe�cientes são feitas no corpo de Rijndael.
O primeiro elemento da primeira coluna será transformado como segue. Mul-
tiplicamos a primeira linha da matriz pela coluna, no corpo de Rijndael:
F2× = 1111 0010⇒ x7 + x6 + x5 + x4 + x
0A× = 0000 1010⇒ x3 + x
01× = 0000 0001⇒ 1
10× = 0001 0000⇒ x4
As multiplicações, no corpo de Rijndael, tem os resultados a seguir.
02× ⊗ F2× = 0000 0010⊗ 1111 0010 = 1111 1111
03× ⊗ 0A× = 0000 0011⊗ 0000 1010 = 0001 1110
01× ⊗ 01× = 0000 0001⊗ 0000 0001 = 0000 0001
01× ⊗ 10× = 0000 0001⊗ 0001 0000 = 0001 0000
Somamos em Z2:
1111 1111
0001 1110
0000 0001
+0001 0000
1111 0000
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
94 CAPÍTULO 5. CIFRAS DE BLOCO
e o primeiro elemento será F0×. J
Para �ns de implementação, a multiplicação pode ser realizada da seguinte
maneira:
a⊗ 1 = a
a⊗ 2 = a� 1⊕ Y
a⊗ 3 = (a� 1)⊕ Y ⊕ a,
onde ⊕ é a operação de ou exclusivo, � é o operador de deslocamento para a
esquerda (a � x desloca os bits de a x bits para a esquerda), e Y depende do
primeiro bit de a antes de iniciar a operação: quando este bit é zero, Y = 0;
quando é um, Y = 1b×
Esta transformação é invertível e pode ser implementada e�cientemente, já
que envolve poucas operações em bytes (deslocamento para a esquerda e ou
exclusivo), todas disponíveis como instruções nativas em hardware.
O passo MixColumns foi projetado com os seguintes critérios:
• Dimensões: a operação é realizada em colunas de quatro bytes;
• Linearidade: o passo é linear em GF (2);
• Difusão: a transformação realiza difusão relevante;
• Desempenho em processadores de oito bits: este foi um dos critérios
para a seleção do AES como padrão. O concurso realizado pelo NIST
tinha diversos requisitos além de segurança, e um deles era performance
em dispositivos embarcados.
AddRoundKey
A chave é representada por uma matriz 4×4, assim como os blocos da mensagem,
e a mistura do bloco com a chave é feita aplicando ou-exclusivo byte a byte.
Claramente, a chave não é su�ciente para muitas rodadas. O AES usa um
algoritmo de escalonamento de chaves, que, a partir da chave original, produz
várias subchaves de rodada.
Escalonamento de chave
O escalonamento de chave do AES usa duas operações,
• ou exclusivo com uma constante rcon
• RotWord, que rotaciona palavras, contribuindo para a difusão na chave
expandida
• SubWord, a S-box do AES, contribuindo para a confusão
Para cada rodada i, é de�nida uma constante
rconi = (rci 0016 0016 0016),
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34- Jerônimo C. Pellegrini
5.8. FOX (IDEA-NXT) 95
onde rci é a representação, em bits, de um polinômio no corpo de Rijndael,
de�nido a seguir.
rci = x
i−1.
Por exemplo, rc6 é o polinômio x5, representado como 00010000. Já
rc9 = x
8 (mod x8 + x4 + x3 + x+ 1) (corpo de Rijndael)
= x4 + x3 + x+ 1,
que é representado como
rc9 = 000011011.
Como os rci são constantes, podem ser apresentados em uma tabela.
i 1 2 3 4 5 6 7 8 9 10 · · ·
rci 0116 0216 0416 0816 1016 2016 4016 8016 1b16 3616 · · ·
A operação RotWord toma uma palavra de quatro bytes e os rotaciona para a
esquerda por um byte:
RotWord(b0 b1 b2 b3) = (b1 b2 b3 b0).
A operação SubWord recebe uma palavra de quatro bytes e aplica, em cada um
deles, SubBytes, a S-box do AES.
SubWord(b0 b1 b2 b3) = (SubBytes(b0) SubBytes(b1) SubBytes(b2) SubBytes(b3)).
A chave para a i-ésima rodada do AES é composta de palavras de 32 bits
W0,W1, . . . ,Wk; a quantidade de palavras depende da variante do AES. Para
o AES-256, por exemplo, são necessárias oito palavras, portanto a chave de
rodada é W0W1W2W3W4W5W6W7, portanto com 8× 32 = 256 bits.
As subpalavras Wi são determinadas da seguinte maneira. Seja n o número
de rodadas. Então,
Wi =

Ki i < n
Wi−n ⊕ SubWord(RotWord(Wi−1))⊕ rconi/n i ≥ n, i ≡ 0 (mod n)
Wi−n ⊕ SubWord(Wi−1) i ≥ n, n > 6, i ≡ 4 (mod n)
Wi−n ⊕Wi−1 em outros casos.
5.8 FOX (IDEA-NXT)
A cifra FOX é um esquema de Lai-Massey, e é a sucessora da cifra IDEA. Há
variantes de FOX para blocos de 64 e de 128 bits.
Da mesma forma que nas outras cifras de bloco apresentadas, há um algo-
ritmo para escalonamento de chaves.
A Figura a seguir mostra uma rodada do FOX64.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
96 CAPÍTULO 5. CIFRAS DE BLOCO
f64
X1 X2 X3 X4
Ki
Y1 Y2 Y3 Y4
Note que ⊕ é inversa de si mesma, por isso é a única operação usada. A função
f64 na Figura é chamada de �função de rodada�, e realiza ou exclusivo com a
chave de rodada, permutações e transformações lineares.
Notas
O conceito de função pseudoaleatória foi proposto por Oded Goldreich, Sha�
Goldwasser e Silvio Micali [90]. Já permutações pseudoaleatórias (e a formaliza-
ção do conceito de cifra de bloco) foram idealizadas por Michael Luby e Charles
Racko� [150].
O Teorema 5.18 foi demonstrado por Luby e Racko� quando analisavam a
segurança do DES.
O DES foi desenvolvido na década de 1970 pela IBM, e um dos projetistas
era Horst Feistel; o AES foi desenvolvido por Joan Daemen e Vincent Rijmen.
A descrição do DES e do AES dadas aqui é super�cial. Uma descrição mais
profunda do AES é dada por Daemen e Rijmen em um livro [61].
A União Soviética desenvolveu uma cifra de bloco bastante parecida com o
DES. O padrão GOST 28147-89 de�ne a cifra, que usa blocos de 64 bits (GOST
é um conjunto de padrões originalmente produzidos pela União Soviética3 �
3Hoje mantidos pela Comunidade de Estados Independentes (países antes membros da
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
5.8. FOX (IDEA-NXT) 97
GOST signi�ca padrão do estado em russo). A cifra era secreta até 1994, quando
foi tornada pública. A cifra de bloco de�nida pelo GOST tem mais rodadas que
o DES; o padrão não de�ne as S-boxes, que eram modi�cadas dependendo do
contexto (o governo soviético decidia quem poderia usar quais conjuntos de
S-boxes).
A cifra IDEA [141] foi desenvolvida em 1991 por James Massey e Xuejia Lai,
e sua arquitetura, com semelhanças com as redes de Feistel, mas também com
características diferentes, é hoje conhecida como �arquitetura de Lai Massey�.
A cifra FOX[126] foi criada por Pascal Junod e Serge Vaudenay como sucessora
da cifra IDEA.
Exemplos de redes de Feistel são as cifras Camellia (desenvolvida pela Mit-
subishi) [6], Blow�sh (de Bruce Schneier) [186], e MARS (�nalista do concurso
que selecionou o AES, desenvolvida pela IBM) [36].
Exercícios
Ex. 32 � Seja F : { 0, 1 }n×{ 0, 1 }n → { 0, 1 }n uma função pseudoaleatória.
Argumente que F deve ser de mão única.
Ex. 33 � (Stinson) Prove que é possível decriptar a saída de uma rede de
Feistel encriptando o texto cifrado, mas revertendo a ordem das subchaves usa-
das em cada rodada.
Ex. 34 � A respeito do Teorema de Luby-Racko�, analise os casos de redes
de Feistel com apenas uma e apenas duas rodadas.
Ex. 35 � O que acontece se retirarmos a permutação em cada rodada da
construção de Lai-Massey?
Ex. 36 � (Trappe/Washington) O modo CBC tolera erros no texto cifrado.
Mostre que se há um erro em um bloco cj , somente dois blocos serão decriptados
incorretamente (mostre quais).
Ex. 37 � Prove o Teorema 7.10 (a demonstração dada é só um rascunho
muito super�cial).
Ex. 38 � Mostre4 que para o DES vale Enck(m) = Enck(m), onde x é a
operação de complemento dos bits de x.
Ex. 39 � Explique porque o ataque do encontro no meio não funciona para
F ′k1,k2,k3 = Fk1(F
−1
k2
(Fk3(m))).
Ex. 40 � Observe apenas o passo SubBytes do AES. Se o repetirmos muitas
vezes sobre uma mensagem, necessariamente voltaremos à mensagem original
União Soviética).
4O Exercício 51 pede a descrição de um ataque que usa esta propriedade.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
98 CAPÍTULO 5. CIFRAS DE BLOCO
(porque o número de con�gurações é �nito). Quantas vezes no máximo podemos
iterar este passo sem repetir con�gurações?
Ex. 41 � Você consegue usar o mesmo raciocínio usado na resposta do Exer-
cício 40 para rodadas �quase� completa do AES, com todos os passos menos
AddRoundKey? E para rodadas completas?
Ex. 42 � Se você não leu a descrição algébrica do AES, tente determinar a
inversa da operação MixColumns.
Ex. 43 � O Teorema 5.22 trata da segurança de esquemas de Lai-Massey
com pelo menos três rodadas. Mostre que, com menos que três rodadas, é fácil
distinguir a saída de um esquema de Lai-Massey de uma permutação aleatória.
Ex. 44 � Prove que a permutação usada na cifra FOX é de fato um ortomor-
�smo.
Ex. 45 � Desenvolva e implemente, despretensiosamente5, suas próprias ci-
fras de bloco:
a) Uma rede de permutação e substituição;
b) Uma cifra de Feistel simples;
c) Uma cifra de Feistel que usa S-boxes e permutações;
d) Uma cifra de Lai-Massey.
Será interessante que as S-boxes, permutações e �partes de cifras� em geral sejam
parametrizáveis, para que seja possível mais tarde trocar facilmente uma S-box
ou permutação da cifra sem ter que refazer completamente o programa.
5Dentre os exercícios do Capítulo 6, que trata de Criptanálise, há um (58) que sugere tentar
quebrar estas cifras.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 6
Noções de Criptanálise
Este Capítulo traz uma breve discussão de alguns métodos comuns de Cripta-
nálise. Para isso construiremos (de maneira intencionalmente simplista e des-
cuidada) uma rede de substituição e permutação, que analisaremos usando crip-
tanálise linear e criptanálise diferencial. Também construiremos uma cifra de
�uxo, que analisaremos usando criptanálise algébrica.
6.1 Uma rede de substituição e permutação
Nossa rede terá entrada de 16 bits e quatro rodadas. Usaremos uma chave de 80
bits com escalonamento absolutamente simples: cada rodada usará uma parte
da chave. A primeira rodada usará os primeiros 16 bits; a segunda rodada, os
próximos 16 bits, e assim por diante. Após a última rodada aplicaremos uma
última subchave, usando o total de 16× 5 = 80 bits. Inicialmente, presumimos
que o esforço para obtenção da chave seja O(280), mas mostraremos que tal
expectativa é ingênua.
Os passos realizados em cada rodada da rede são descritos a seguir.
• Substituição: A entrada será dividida em 4 S-boxes iguais (normalmente
as S-boxes usadas em uma rodada são diferentes, mas usaremos apenas
uma para simpli�car a exposição da rede). Cada S-box fará uma permu-
tação e teremos 4 bits também na saída de cada S-box. A tabela a seguir
mostra a S-box usada. Como a S-box tem entrada e saída de 4 bitsusa-
mos todos os valores em hexadecimal, já que 24 = 16. Assim, o valor 0
deve ser lido como 0000, 1 como 0001, e assim por diante até E× = 1110 e
F× = 1111. A linha superior mostra as entradas e a linha inferior mostra
as saídas correspondentes.
[
0 1 2 3 4 5 6 7 8 9 A B C D E F
2 8 D 5 4 A C F E 3 B 9 7 1 6 0
]
99
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
100 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
Por exemplo, se a entrada da S-box é 1011 veri�camos que 1011 = B× e a
saída será 9, ou seja, a sequência de bits 1001.
Nossa S-box é uma permutação simples (é bijeção e preserva o tamanho da
entrada). Isso não é estritamente necessário para que a criptanálise linear
funcione (uma S-box do DES, por exemplo, que tem entrada de seis bits
e saída de quatro bits, também pode ser analisada usando esta técnica).
• Permutação: Os 16 bits da saída do passo de substituição são permutados
usando a seguinte tabela:

1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

Esta tabela é semelhante àquelas vistas no Capítulo 5: os números repre-
sentam as posições dos bits da entrada, e a ordem em que aparecem na
tabela é a ordem em que aparecerão na saída. Como exemplo, o terceiro
bit da entrada será o nono da saída, o quinto bit da entrada será o segundo
da saída, e o primeiro e último bits não são trocados de lugar. O diagrama
a seguir ilustra como os bits são reordenados.
• Mistura com a chave: Após os passos de substituição e permutação um
ou-exclusivo é feito com os 16 bits da chave. A saída de cada uma das
S-boxes é distribuída para todas as quatro S-boxes da próxima rodada.
A próxima �gura ilustra a rede de substituição e permutação, já com as
quatro rodadas: as três primeiras consistem da aplicação de ou exclusivo com
uma subchave seguida de um passo de substituição (com quatro S-boxes) e um
de permutação. Na última rodada, ao invés de uma permutação temos mais um
passo de mistura com chave, porque esta permutação de bits não seria útil (não
seria propagada para uma próxima rodada, e pode ser trivialmente desfeita por
qualquer atacante).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.1. UMA REDE DE SUBSTITUIÇÃO E PERMUTAÇÃO 101
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
102 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
6.2 Criptanálise linear
A criptanálise linear trata de encontrar relações lineares entre bits de entrada e
bits próximos da saída de uma cifra. Falamos de �relação (probabilística) linear�
porque usamos representação binária de números e usamos aritmética módulo
dois, onde a operação aditiva é o ou-exclusivo e a multiplicativa é o �e� lógico.
Por exemplo, considere oito variáveis binárias a1, . . . , a4 e x1, . . . , x4. Podemos
usar os ai como coe�cientes e os xi como variáveis de uma combinação linear
a1x1 + a2x2 + a3x3 + a4x4 (mod 2),
ou
a1x1 ⊕ a2x2 ⊕ a3x3 ⊕ a4x4,
onde �aixi� denota o �e� lógico de ai e xi. Como ai só pode valer um ou zero,
cada ai tem o efeito de escolher quais xi participam do ou-exclusivo. Se a = 0110
e x = 1100, então a combinação linear ax é
a1 · x1 ⊕ a2 · x2 ⊕ a3 · x3 ⊕ a4 · x4
= 0 · x1 ⊕ x2 ⊕ x3 ⊕ 0 · x4
= (0 · x1 ⊕ 0 · x4)⊕ x2 ⊕ x3
= 0⊕ x2 ⊕ x3
= x2 ⊕ x3
= 1⊕ 0 = 1.
Presumimos que um atacante tem uma grande quantidade de pares de men-
sagem/texto cifrado, todos gerados com a mesma chave. Após encontrar uma
relação probabilística linear entre bits da entrada e bits da saída, conseguiremos
obter a última subchave com esforço menor que o de uma busca exaustiva.
A Figura mostra que estamos interessados em um valor V , que é extraído da
última rodada da rede. Conhecendo alguma relação entre X e V , e conhecendo
o valor da saída Y , podemos tentar deduzir algo a respeito da subchave k5 usada
na última rodada.
Analisaremos a parte da rede de substituição-permutação que não deve ser
linear (ou seja, cuja saída não deveria ser representável como combinação linear
da entrada): as S-boxes. Denotaremos por X e Y a entrada e a saída de uma
S-box; por X1, X2, X3, X4 os bits de entrada e por Y1, Y2, Y3, Y4 os bits de saída.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.2. CRIPTANÁLISE LINEAR 103
O objetivo é encontrar variáveis aleatórias de�nidas por relações lineares do
tipo
Xi ⊕Xj ⊕ · · · ⊕Xm ⊕ Yk ⊕ Yl ⊕ · · · ⊕ Yn = 0
que tenham probabilidade distante de 1/2.
6.2.1 O Lema do Empilhamento
A saída de uma rede de substituição e permutação deveria ser indistinguível da
saída de uma permutação pseudoaleatória. Se escolhermos uma sequência de
bits da mensagem mi, . . . ,mj e uma sequência de bits da saída cl, . . . , cm, seja
p = Pr[mi ⊕ · · · ⊕mj ⊕ cl ⊕ · · · cm = 0].
Se c é a saída de uma função realmente aleatória, supomos que p é muito próxima
de 1/2 � e a criptanálise linear é um método para identi�car casos onde isso não
acontece.
Começamos de�nindo esta �distância de 1/2�, que é um conceito central para
a criptanálise linear.
De�nição 6.1. O viés de uma variável aleatória binária Xi é εi = Pr(Xi) −
1/2. �
O viés mede o quanto a probabilidade de um evento está acima de 1/2
(claramente o viés pode ser negativo, se Pr[Xi] < 1/2).
Considere as entradas X1 e X2 na S-box que de�nimos. A expressão
X1 ⊕X2 = 0
pode ser reescrita como
X1 = X2.
Suponha que as probabilidades de X1 e X2 sejam
Pr[X1 = 0] = p1
Pr[X2 = 0] = p2.
Se X1, X2 são independentes temos
Pr[X1 = 0, X2 = 0] = p1p2
Pr[X1 = 0, X2 = 1] = p1(1− p2)
Pr[X1 = 1, X2 = 0] = (1− p1)p2
Pr[X1 = 1, X2 = 1] = (1− p1)(1− p2).
E portanto
Pr[X1 ⊕X2 = 0] = Pr[X1 = X2]
= p1p2 + (1− p1)(1− p2).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
104 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
Se p1 = 1/2 + ε1 e p2 = 1/2 + ε2, com |ε1| e |ε2| ≤ 1/2, então
Pr[X1 ⊕X2 = 0] =
1
2
+ 2ε1ε2
ou seja, ε1,2 = 2ε1ε2.
O Lema do Empilhamento, que enunciamos a seguir, dá uma forma fechada
para o cálculo do viés de diversas variáveis aleatórias binárias independentes.
Lema 6.2. (Lema do Empilhamento) Sejam X1, X2, . . . , Xn variáveis aleatórias
binárias independentes; seja εi o viés de Xi e ε1,2,...,n o viés de X1 ⊕ · · · ⊕Xn.
Então
Pr[X1 ⊕ · · · ⊕Xn] =
1
2
+ 2n−1
n∏
i=1
εi,
ou seja,
ε1,2,...,n = 2
n−1
n∏
i=1
εi.
Demonstração. Provamos por indução no número de variáveis. Para uma va-
riável o resultado é claramente verdadeiro: (21−1)ε1 = ε1.
O caso com duas variáveis já mostramos no texto, antes do enunciado do
Lema.
Nossa hipótese de indução é de que o Lema vale para k variáveis, com k ≥ 2.
Mostraremos então a validade do Lema para k + 1.
Para determinar o viés de X1 ⊕X2 ⊕ · · · ⊕Xik+1 , reescrevemos A = X1 ⊕
X2 ⊕ · · · ⊕Xik e
X1 ⊕X2 ⊕ · · · ⊕Xik+1 = A⊕Xik+1 .
Pela hipótese de indução, o viés de A é 2k−1Πkj=1εij . Já o viés de Xik+1 é εik+1 .
Como sabemos calcular o viés para duas variáveis, basta fazê-lo para A e
Xik+1 , obtendo
2
2k−1 k∏
j=1
εij
 εik+1 = 2k k+1∏
j=1
εij .
�
6.2.2 Criptanálise da rede
A tabela a seguir mostra o mapeamento dos bits de entrada nos de saída para
a S-box que usamos em nossa cifra.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.2. CRIPTANÁLISE LINEAR 105
X X1 X2 X3 X4 Y1 Y2 Y3 Y4 Y
0 0 0 0 0 0 0 1 0 2
1 0 0 0 1 1 0 0 0 8
2 0 0 1 0 1 1 0 1 D
3 0 0 1 1 0 1 0 1 5
4 0 1 0 0 0 1 0 0 4
5 0 1 0 1 1 0 1 0 A
6 0 1 1 0 1 1 0 0 C
7 0 1 1 1 1 1 1 1 F
8 1 0 0 0 1 1 1 0 E
9 1 0 0 1 0 0 1 1 3
A 1 0 1 0 1 0 1 1 B
B 1 0 1 1 1 0 0 1 9
C 1 1 0 0 0 1 1 1 7
D 1 1 0 1 0 0 0 1 1
E 1 1 1 0 0 1 1 0 6
F 1 1 1 1 0 0 0 0 0
Olharemos agora para combinações lineares (ou seja, somas de parte dos
bits), tanto da entrada como da saída. Queremos veri�car quando a equação
Xi1 ⊕Xi2 ⊕ · · · ⊕Xim ⊕ Yj1 ⊕ Yj2 ⊕ · · · ⊕ Yjn = 0
é verdadeira. Por exemplo, considere X3⊕X4 = Y1⊕Y2⊕Y3. A próxima tabela
é obtida a partir da anterior com as seguintes modi�cações:
• Apenas X3 e X4 são listados na entrada, e apenas Y1, Y2 e Y3na saída;
• As colunas do meio mostram as duas combinações lineares, X3 ⊕ X4 e
Y1 ⊕ Y2 ⊕ Y3;
• As linhas em que as duas combinações coincidem estão destacadas.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
106 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
X3 X4 X3 ⊕X4 Y1 ⊕ Y2 ⊕ Y3 Y1 Y2 Y3
0 0 0 1 0 0 1
0 1 1 1 1 0 0
1 0 1 0 1 1 0
1 1 0 1 0 1 0
0 0 0 1 0 1 0
0 1 1 0 1 0 1
1 0 1 0 1 1 0
1 1 0 1 1 1 1
0 0 0 1 1 1 1
0 1 1 1 0 0 1
1 0 1 0 1 0 1
1 1 0 1 1 0 0
0 0 0 0 0 1 1
0 1 1 0 0 0 0
1 0 1 0 0 1 1
1 1 0 0 0 0 0
Seja A = X3⊕X4⊕Y1⊕Y2⊕Y3. Esta variável será zero quando X3⊕X4 =
Y1 ⊕ Y2 ⊕ Y3, ou seja, nas linhas em destaque.
Esperamos que Pr[A = 0] seja aproximadamente 1/2 (quanto mais próximo
de 1/2 melhor). No entanto, as colunas do meio coincidem 4 vezes e há 16
entradas, portanto Pr[A = 0] = 4/16 = 1/4. O viés de A é 1/4− 1/2 = −1/4.
Para uma variável A qualquer (ou seja, para uma expressão linear qualquer)
o número de coincidências pode �car entre zero e dezesseis. Se subtrairmos
oito do valor, teremos um número entre −8 e +8 � que se dividido por 16
resultará no viés da variável (por exemplo, para A de�nida acima o valor seria
(4− 8)/16 = −4/16 = −1/4).
Construímos agora outra tabela: as linhas representam diferentes bits de X
(combinações lineares de Xi), e as colunas representam bits de Y (combinações
lineares de Yi). O elemento (i, j) da tabela é a quantidade de coincidências para
⊕X = ⊕Y menos oito.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.2. CRIPTANÁLISE LINEAR 107
⊕Y
⊕X
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 +8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 +2 −2 0 −4 −2 −2 0 0 +2 −2 0 0 +2 +2 −4
2 0 +2 −2 0 +2 0 0 −2 +2 −4 0 +2 0 −2 −2 −4
3 0 0 0 0 −2 +2 +2 −2 +2 +2 +2 +2 0 +4 −4 0
4 0 −2 0 −2 +2 0 −2 +4 −2 0 −2 0 0 +2 −4 −2
5 0 0 −2 −2 +2 +2 0 0 −2 +2 +4 0 +4 0 +2 −2
6 0 +4 −2 +2 0 0 +2 +2 0 0 −2 −2 +4 0 −2 +2
7 0 +2 0 −6 0 −2 0 −2 0 −2 0 −2 0 +2 0 +2
8 0 +2 +2 0 −2 +4 −4 −2 −2 0 0 −2 0 −2 −2 0
9 0 0 +4 0 +2 −2 −2 −2 +2 +2 −2 +2 +4 0 0 0
A 0 +4 0 0 +4 0 0 0 0 +4 0 0 −4 0 0 0
B 0 −2 −2 0 0 −2 −2 0 +4 +2 +2 −4 0 −2 −2 0
C 0 0 +2 −2 0 +4 +2 +2 +4 0 −2 −2 0 0 +2 −2
D 0 −2 −4 −2 0 +2 0 −2 0 +2 −4 +2 0 −2 0 +2
E 0 −2 0 +2 +2 0 +2 −4 −2 0 −2 −4 0 +2 0 −2
F 0 0 −2 +2 +2 +2 −4 0 +2 −2 0 0 0 +4 +2 +2
Esta tabela é chamada de tabela de aproximação linear.
Podemos veri�car o viés que já calculamos, de X3 ⊕ X4 ⊕ Y1 ⊕ Y2 ⊕ Y3: a
linha é dada por 0011 = 3 e a coluna por 1110 = 14 = E×. E de fato, na posição
(3, E×) temos −4 � o que signi�ca que o viés é −4/16 = −1/4, exatamente como
calculamos anteriormente.
Denotaremos por In a sequência de 16 bits na entrada das S-boxes da n-
ésima rodada. De maneira semelhante, On é a sequência de 16 bits saindo das
S-boxes da n-ésima rodada. Também denotaremos por Inj e O
n
j o j-ésimo dos
16 bits de In e On.
Usaremos notação semelhante para as chaves de rodada: knj é o j-ésimo bit
da chave da n-ésima rodada.
A próxima �gura mostra In e On, além de �caminhos�, cuja natureza �cará
clara no decorrer do texto. As S-boxes S1,1, S2,1, S3,2, S4,2 e S4,3 são ativas na
aproximação que faremos.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
108 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
Note que a �trilha� mostrada na rede não representa que tal entrada deve
in�uenciar exatamente aqueles bits na rede. Signi�ca apenas que escolhemos um
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.2. CRIPTANÁLISE LINEAR 109
caminho que, com alta probabilidade, nos garantirá uma relação entre entrada
e saída.
Considere os bits 1 e 2 da entrada (ambos entram na S-box S11 como X1 e
X2 após ou-exclusivo com bits de k1) e as seguintes variáveis aleatórias (cada
uma com viés indicado entre parênteses):
(+4/16) em S1,1 : X1 ⊕X2 = Y1
(+4/16) em S2,1 : X1 = Y2 ⊕ Y4
(−4/16) em S3,2 : X1 = Y2 ⊕ Y3
(−4/16) em S3,4 : X1 = Y2 ⊕ Y3.
Reescrevemos:
(+1/4) A1 = I
1
1 ⊕ I12 ⊕O11 = 0
(+1/4) A2 = I
2
1 ⊕O22 ⊕O24 = 0
(−1/4) A3 = I35 ⊕O36 ⊕O37 = 0
(−1/4) A4 = I313 ⊕O314 ⊕O315 = 0.
É fácil identi�car cada variável aleatória na última �gura. Fazemos um ou-
exclusivo de todas elas, de�nindo uma variável aleatória A:
A = [A1 ⊕A2 ⊕A3 ⊕A4 = 0]
O viés desta nova variável pode ser determinado usando o Lema do Empilha-
mento, e é igual a
ε1,2,3,4 = 2
3
4∏
i=1
εi
= 8
(
1
4
)(
1
4
)(
−1
4
)(
−1
4
)
=
1
32
.
Expandimos A1 ⊕A2 ⊕A3 ⊕A4, obtendo
(I11 ⊕ I12 ⊕O11) ⊕
(I21 ⊕O22 ⊕O24) ⊕
(I35 ⊕O36 ⊕O37) ⊕
(I313 ⊕O314 ⊕O315)
Agora desenvolvemos esta expressão, reescrevendo as variáveis Ijk como ou-
exclusivo do passo anterior com a subchave. Por exemplo,
I11 → m1 ⊕ k11
I35 → O22 ⊕ k35.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
110 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
Determinamos então que A1 ⊕A2 ⊕A3 ⊕A4 é igual a
([m1 ⊕ k11]⊕ [m2 ⊕ k12]⊕O11) ⊕
([O11 ⊕ k21]⊕O22 ⊕O24) ⊕
([O22 ⊕ k35]⊕O36 ⊕O37) ⊕
([O24 ⊕ k313]⊕O314 ⊕O315),
que é o mesmo que
(m1 ⊕m2 ⊕ k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313)⊕
O11 ⊕O11 ⊕O22 ⊕O24 ⊕O22 ⊕O36 ⊕O37 ⊕O24 ⊕O314 ⊕O315.
Como x⊕ x = 0,
(m1 ⊕m2 ⊕ k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313) ⊕
O36 ⊕O37 ⊕O314 ⊕O315.
Estamos interessados no caso em que A1⊕A2⊕A3⊕A4 = 0 (porque é como
de�nimos nossa variável aleatória A), e sabemos que
I46 = O
3
6 ⊕ k46
I48 = O
3
14 ⊕ k48
I410 = O
3
7 ⊕ k410
I412 = O
3
15 ⊕ k412,
ou seja, podemos substituir
O36 → I46 ⊕ k46
O37 → I410 ⊕ k410
O314 → I48 ⊕ k48
O315 → I412 ⊕ k412.
Assim,
(m1 ⊕m2 ⊕ k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313)
⊕[I46 ⊕ k46]⊕ [I410 ⊕ k410]⊕ [I48 ⊕ k48]⊕ [I412 ⊕ k412] = 0.
Como estamos interessados apenas na relação entre a entrada da rede e a saída
I4, isolamos os bits de chave:
Z = k11 ⊕ k12 ⊕ k21 ⊕ k35 ⊕ k313 ⊕ k46 ⊕ k410 ⊕ k48 ⊕ k412
Testaremos as chaves uma a uma � portanto podemos presumir que Z estará
�xo em um ou em zero. Em um dos casos, o viés de A1 ⊕ A2 ⊕ A3 ⊕ A4 será
+1/32, e no outro, −1/32. Conseguimos determinar então que o viés de
m1 ⊕m2 ⊕ I46 ⊕ I410 ⊕ I48 ⊕ I412 (6.1)
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.2. CRIPTANÁLISE LINEAR 111
é ±1/32.
Os bits da última chave (K5) que são combinados com a saída das S-boxes
S4,2 e S4,3 são k55 · · · k512. Há 28 = 256 possíveis valores para estes bits, que são
chamados de subchaves candidatas.
Tendo o viés de A e uma quantidade su�ciente de pares (m, c) de texto claro
e encriptado (todos com a mesma chave), podemos identi�car, dentre todas as
subchaves candidatas, aquela para a qual a relação A (Equação 6.1) vale com
a frequência que esperaríamos, dado o viés que calculamos. A Figura a seguir
ilustra este processo.
Quando a relação valer para um par, incrementamos o contador da subchave.
O pseudocódigo a seguir mostra este processo. O vetor F contém os contadores
de frequência (o algoritmo calcula, em Fk, a frequência de ocorrências para a
k-ésima subchave).
para cada subchave candidata k:
Fk ← 0
para cada par (m, c):
O4 ← c⊕ k // desfazemos ⊕
I4 ← S−1(O4) // inversa da S−box
se m1 ⊕m2 ⊕ I46 ⊕ I410 ⊕ I48 ⊕ I412 = 0
Fk ← Fk + 1
Tendo as frequências da relação dada pela Equação 6.1 para cada subchave,
tomamos a subchave com viés mais próximo de 1/32 e a usamos.
Apresentamos a seguir os resultados de uma simulação, completando o exem-
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
112 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
plo. Nesta simulação, usamos
k1 = 0001 1011 1001 1001
k2 = 0010 1010 0011 0011
k3 = 1111 0000 0111 1000
k4 = 1011 1101 0100 0010
k5 = 1000 1001 1001 1100
A subchave que queremos encontrar é, portanto 10011001 (sublinhada acima).
O número de pares de texto claro e encriptado que usamos é 1200. O ide-
alizador da criptanálise linear, Mitsuru Matsui, argumentou que um número
razoável de pares é
1
ε2
onde ε é o viés da relação linear que encontramos. Como temos ε = 1/32,
concluímos que
1
(1/32)2
= 1024
pares são su�cientes.
A próxima tabelamostra uma lista das chaves com o viés calculado da relação
A = 0, onde
A = m1 ⊕m2 ⊕ I46 ⊕ I410 ⊕ I48 ⊕ I412.
Esperamos que o valor absoluto do viés �A da variável A para a chave correta
seja próximo de 1/32 = 0.03125. Pode haver outras subchaves para as quais esta
relação também valha com alta probabilidade, portanto podemos ter que buscar
entre as diversas subchaves com �A mais próximos de 1/32. Nesta simulação, a
subchave correta tem �A = 0.35.
subchave |�A|
01010000 0.02325
01111011 0.02325
00011111 0.025
10111000 0.02525
10111110 0.0255
10010110 0.02625
01000011 0.0265
11011110 0.02675
00100000 0.02775
01101001 0.03025
00101110 0.033
10011001 0.035
Conseguimos, �nalmente, extrair oito bits da chave.
Podemos repetir este processo para tentar obter subchaves para as outras
duas S-boxes da última rodada, e posteriormente repetir o processo para as
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.3. CRIPTANÁLISE DIFERENCIAL 113
outras rodadas. Quando a chave tem muitos bits, o trabalho total dispendido
na criptanálise linear de sucesso é muito menor do que a busca exaustiva pela
chave. A chave tem 80 bits, e a busca exaustiva teria complexidade de tempo
O(280). Com o trabalho já feito, �zemos uma busca em tempo O(28) para
determinar oito dos bits. Restam 72 bits, e se os buscarmos exaustivamente
teremos usado no total tempo O(272) + O(28), muito menor que O(280). Se
conseguirmos repetir este processo para as outras S-boxes, duas por vez, a busca
poderia levar tempo O(16×28) � um esforço muito pequeno quando comparado
à busca exaustiva.
6.2.3 Escolha da trilha e resistência ao ataque
A trilha que escolhemos no exemplo dado tinha quatro S-boxes. Deve ser claro
que a probabilidade de sucesso do ataque linear é menor quando há mais S-boxes
envolvidas e quando o viés das variáveis envolvidas é menor.
O criptanalista deve encontrar trilhas que resultem em viés alto. Para cifras
mais complexas e com mais rodadas do que a que construímos, isso pode ser
feito usando técnicas de otimização combinatória (metaheurísticas). Por exem-
plo, usando algoritmos genéticos (cada trilha é um indivíduo, e a função de
adequação ao ambiente é o viés da trilha).
6.3 Criptanálise diferencial
A criptanálise diferencial é outro conjunto de técnicas para encontrar fraquezas
em construções criptográ�cas, particularmente aplicável a cifras de bloco. Con-
siste basicamente em explorar as relações entre probabilidades de certos bits na
mensagem e sua relação com a probabilidade de outros bits no texto cifrado.
Dadas duas entradas X ′ e X ′′ para uma cifra, calculamos sua diferença ∆X e
veri�camos a diferença entre as saídas Y ′ e Y ′′. Se a distribuição de ∆Y for
muito distante de uniforme, podemos usá-la para acelerar a busca pela chave.
Antes de mais nada é relevante recordar que em aritmética módulo dois a
diferença entre dois números é igual ao ou exclusivo (0 − 0 = 0; 0 − 1 = 1;
1− 0 = 1; 1− 1 = 0).
Sejam X ′ e X ′′ duas entradas para uma S-box. Estamos interessados na
diferença entre estas entradas, que denotamos
∆X = X
′ ⊕X ′′.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
114 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
Calculamos também as saídas da S-box Y ′ = S(X ′) e Y ′′ = S(X ′′), e observa-
mos a diferença
∆Y = Y
′ ⊕ Y ′′.
O par (∆X ,∆Y ) é chamado de diferencial.
Idealmente, tendo �xado um ∆X , Pr[∆Y |∆X ] deveria ser igual a 1/2n para
qualquer ∆Y . Isto infelizmente é impossível, como mostraremos adiante. Quando
esta probabilidade é muito alta para algum diferencial (∆X ,∆Y ), ela pode ser
usada para obter bits da chave.
Escolhemos agora um ∆X e calculamos todos os possíveis X ′ e X ′′ que resul-
tam em ∆X . Damos um exemplo usando a S-box que de�nimos anteriormente:
se escolhermos ∆X = 0011, listamos todos os 16 valores de X ′, e para cada um
deles teremos X ′′ = X ′ ⊕ 0011. Isto é feito na tabela a seguir.
∆X = 0011
X ′ X ′′ = X ′ ⊕∆X
0000 0011
0001 0010
0010 0001
0011 0000
0100 0111
0101 0110
0110 0101
0111 0100
1000 1011
1001 1010
1010 1001
1011 1000
1100 1111
1101 1110
1110 1101
1111 1100
A próxima tabela já mostra, para X ′ e X ′′, as saídas Y ′ e Y ′′ e a diferença ∆Y
(ainda com ∆X �xo, igual a 0011).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.3. CRIPTANÁLISE DIFERENCIAL 115
∆X = 0011
X ′ X ′′ Y ′ Y ′′ ∆Y
0000 0011 0010 0101 0111
0001 0010 1000 1101 0101
0010 0001 1101 1000 0101
0011 0000 0101 0010 0111
0100 0111 0100 1111 1011
0101 0110 1010 1100 0110
0110 0101 1100 1010 0110
0111 0100 1111 0100 1011
1000 1011 1110 1001 0111
1001 1010 0011 1011 1000
1010 1001 1011 0011 1000
1011 1000 1001 1110 0111
1100 1111 0111 0000 0111
1101 1110 0001 0110 0111
1110 1101 0110 0001 0111
1111 1100 0000 0111 0111
Observamos as frequências de cada cadeia de quatro bits em ∆Y :
0101 2
0110 2
0111 8
1000 2
1011 2
A tabela a seguir mostra as frequências para cada diferencial (∆X ,∆Y ).
∆Y
∆X
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0 0 2 2 0 0 4 0 2 0 2 0 0 2 2 0
2 0 4 0 0 0 4 0 0 2 0 2 0 0 2 0 2
3 0 0 0 0 0 2 2 8 2 0 0 2 0 0 0 0
4 0 2 4 0 0 0 2 0 0 4 2 0 0 2 0 0
5 0 0 2 0 2 0 0 0 2 2 0 2 2 0 0 4
6 0 0 0 2 0 0 0 2 4 2 0 0 2 0 2 2
7 0 2 0 0 2 2 0 2 0 0 2 0 0 2 4 0
8 0 0 0 2 0 0 2 0 0 0 2 4 4 0 0 2
9 0 2 0 0 2 2 2 0 0 2 0 0 2 2 2 0
A 0 2 2 2 0 0 2 0 0 2 2 2 0 0 2 0
B 0 0 0 2 2 0 0 0 2 0 0 4 2 2 2 0
C 0 0 0 0 0 4 2 2 0 4 2 2 0 0 0 0
D 0 0 0 4 4 2 0 2 0 0 0 0 0 2 0 2
E 0 0 2 2 4 0 0 0 2 0 2 0 2 0 0 2
F 0 4 4 0 0 0 0 0 0 0 0 0 2 2 2 2
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
116 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
As frequências que computamos para y = 0011 estão na linha 3.
Idealmente, gostaríamos de construir uma S-box tal que para quaisquer ∆X
e ∆Y ,
Pr[∆Y |∆X ] =
1
2n
,
ou seja, tal que todas as entradas na tabela de frequências sejam iguais a um.
Lema 6.3. Todas as entradas na matriz de distribuição de diferença são pares.
Além disso, a soma das entradas em qualquer linha ou coluna é igual a 2n.
Teorema 6.4. Não existe S-box tal que para quaisquer ∆X e ∆Y ,
Pr[∆Y |∆X ] =
1
2n
.
Demonstração. Segue imediatamente do Lema 6.3. �
Em nossa cifra, a saída Oi−1 de uma rodada é misturada com a chave ki
da próxima, para somente depois servir de entrada para as S-boxes da i-ésima
rodada. A diferença entre duas entradas para Ii, no entanto, não dependem da
subchave ki, de acordo com o próximo Teorema.
Teorema 6.5. Sejam O′(i−1) e O′′(i−1) saídas para a rodada i− 1 da rede; I ′(i)
e I ′′(i) as entradas na i-ésima rodada. Sejam
∆I = I
′(i) ⊕ I ′′(i)
∆O = O
′(i−1) ⊕O′′(i−1)
as diferenças na saída da rodada i − 1 e na entrada da rodada i. Então ∆I
depende somente de ∆O, e não é in�uenciada pela subchave ki.
Demonstração. O ou exclusivo das entradas é
I ′(i) ⊕ I ′′(i) =
(
O′(i−1) ⊕ ki
)
⊕
(
O′′(i−1) ⊕ ki
)
= O′(i−1) ⊕O′′(i−1),
ou seja, independente da chave ki. �
Queremos encontrar taxas de propagação em cada rodada, de forma que o
ou-exclusivo do diferencial na entrada de uma rodada seja o ou-exclusivo do di-
ferencial de saída na rodada anterior, conseguiremos uma trilha de diferenciais.
Presumimos que as taxas de propagação em diferentes rodadas são indepen-
dentes, e assim multiplicamos as taxas em cada rodada para obter a taxa de
propagação da trilha.
Suponha que duas mensagens tenham diferençam1⊕m2 = 0000 0000 0000 0110.
A diferença na entrada de S14 será 0110. Nas outras S-boxes, a diferença de
entrada é zero, e portanto a diferença de saída também o será (m1 e m2 só
diferem no último nibble). Podemos então analisar a propagação das diferenças
traçando uma trilha como �zemos na criptanálise linear.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.3. CRIPTANÁLISE DIFERENCIAL 117
Usaremos 0110 como diferencial de entrada na S-box S14, e portanto o dife-
rencial de entrada para a rede toda é 0000 0000 0000 0110.
Denotaremospor O113..16 os bits de 13 a 16 de O
1 � que são a saída da S-box
S14 � e usaremos notação semelhante para outros Ii e Oi.
Na saída de S14 (ou seja, nos bits 13..16 de O1), teremos a diferença 0100
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
118 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
com probabilidade 4/16 = 1/4.
Pr
[
∆(O113..16) = 0100|∆X = 0000 0000 0000 0110
]
=
1
4
.
Na saída de S22 teremos 0110 com probabilidade 4/16 = 1/4. Portanto,
Pr
[
∆(I35..8) = ∆(I
3/S33) = 0100|∆(O113..16) = 0110
]
= (1/4)2.
Já em O3 temos
Pr
[
∆(O35..8) = ∆(O
3
9..12) = 1100
∣∣∆(O113..16) = 0110] = (14
)4
=
1
256
,
muito maior que 1/2n = 1/65536.
No processo de criptanálise usamos pares de texto claro com este valor para
∆X .
A criptanálise diferencial termina de maneira parecida com a criptanálise
linear, identi�cando subchaves e veri�cando a frequência da relação para cada
possível subchave.
Usamos muitos pares de mensagens (m∗,m∗∗) com diferença igual a 6 (ou
seja, 0000 · · · 0110).
gen_msg_dx (m,∆X):
m′i ← mi ⊕∆X
retorne m′
m∗ ← gen_msg(n)
m∗∗ ← gen_msg_dx(m∗, 6×)
c∗ ← enc_vector(m∗)
c∗∗ ← enc_vector(m∗∗)
Com alta probabilidade (1/256), a diferença entre os bits de S41 e S42 será
0110 0110.
Para cada subchave candidata, decriptamos parcialmente muitos pares (c∗, c∗∗)
resultando em (4∗, I
4
∗∗) e observamos a diferença I
4
∗ ⊕ I4∗∗. Quando esta for igual
à diferença entre m∗ e m∗∗, incrementamos o contador para esta subchave.
para cada subchave candidata k:
Fk ← 0
para cada tupla (c∗, c∗∗,∆Y )
O4∗ ← c∗ ⊕ k // desfazemos ⊕
O4∗∗ ← c∗∗ ⊕ k
I4∗ ← S−1(O4∗) // inversa da S−box
I4∗∗ ← S−1(O4∗∗)
se I4∗ ⊕ I4∗∗ = ∆Y
Fk ← Fk + 1
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.4. CRIPTANÁLISE ALGÉBRICA 119
A probabilidade de ∆Y = 6× para a subchave correta é 1/256, portanto basta
dividir cada elemento do vetor F por N e veri�car os valores mais próximos de
1/256 = 0.00390625.
É possível mostrar que uma quantidade razoável de pares de texto claro
necessários para que a criptanálise tenha sucesso é aproximadamente
c
p
onde p é a probabilidade que calculamos para o diferencial (em nosso exemplo,
1/256), e c é uma constante pequena. Simulamos um ataque usando 800 pares
de texto claro gerados aleatoreamente (com os respectivos textos encriptados,
evidentemente). Esta quantidade é mais que su�ciente, já que
1
(1/256)
= 256.
Simulando um ataque diferencial com esta cifra e com as mesmas chaves
usadas no ataque linear, obtemos os dados na tabela a seguir. Fk/n é igual a
0.00375 para a chave correta � o valor mais próximo de 1/256 = 0.00390625
dentre todos.
subchave Fk/n
11110100 0.00125
11111011 0.00125
11111100 0.00125
11111110 0.00125
00101011 0.0025
01010100 0.0025
01100100 0.0025
01101011 0.0025
01011011 0.00375
Assim como na Seção sobre criptanálise linear, conseguimos extrair oito bits da
chave.
6.4 Criptanálise Algébrica
A criptanálise algébrica se dá quando conseguimos representar a cifra como um
sistema de equações (normalmente módulo dois, mas não necessariamente), e
resolver o sistema.
Suponha que a chave em nossa rede de substituição e permutação seja ge-
rada a partir de uma chave inicial k0 = (KAKBKCKDKE), onde KA, etc são
sequências de quatro bits. Por exemplo,
KA = 0001
KB = 0110
KC = 1111
KD = 1010
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
120 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
então
k0 = 0001 0110 1111 1010.
Suponha agora que o escalonamento de chaves seja feito da seguinte maneira:
k1 = k0
k2 = (KBKCKDKA)
k3 = (KCKDKAKB)
k4 = (KDKAKBKC)
k5 = k2.
Observamos que
k2 = (k05..8k
0
9..12k
0
13..16k
0
1..4)
k3 = (k09..12k
0
13..16k
0
5..8k
0
5..8)
k4 = (k013..16k
0
5..8k
0
5..8k
0
9..12).
Precisamos de modelos das S-boxes e da permutação como equações envol-
vendo os bits de entrada e saída de cada uma. Sendo Yi o i-ésimo bit de saída
da S-box e Xi o i-ésimo bit de entrada, a S-box pode ser descrita como
Y1 = X1X2X4 ⊕X1X2X3 ⊕X1X2X3 ⊕X1X3X4 ⊕X1X3X4
Y2 = X1X3 ⊕X2X4 ⊕X1X3X4
Y3 = X1X2X4 ⊕X1X4 ⊕X2X3X4 ⊕X1X2X3
Y4 = X2X3 ⊕X1X3X4 ⊕X1X2X3 ⊕X1X3X4.
Aqui A é a negação de booleana de A, que é o mesmo que 1−A (mod 2).
A rede inteira pode ser descrita então como um sistema de equações módulo
dois.
Por exemplo, o bit c1 é
c1 = k
5
1 ⊕O41.
Mas como sabemos que o primeiro bit de uma S-box pode ser descrito em termos
das entradas da S-box, temos
c1 = k
5
1 ⊕ I41I42I44
⊕ I41I42I43
⊕ I41I42I43
⊕ I41I43I44
⊕ I41I43I44 .
Reescrevemos cada I4j em função de O
3 e k4, e continuamos até termos descrito
completamente um sistema de equações. Como as equações tem grau três, o
sistema é difícil de resolver, mas em muitos casos é possível.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.5. TÉCNICAS DE CRIPTANÁLISE RELACIONADAS 121
6.5 Técnicas de criptanálise relacionadas
As técnicas de criptanálise linear e diferencial não são métodos fechados. Po-
demos usar variantes e combiná-las com outras técnicas. Alguns exemplos são
listados a seguir.
• Criptanálise linear diferencial:
• Chave relacionada: semelhante à técnica de criptanálise diferencial, mas
tendo como objeto os pares de chaves ao invés de pares de texto claro.
• Criptanálise diferencial impossível: semelhante à criptanálise diferencial,
mas ao invés de procurarmos características diferenciais que tenham alta
probabilidade, procuramos características com probabilidade zero (ou seja,
que não deveriam acontecer).
Notas
A criptanálise linear foi introduzida por Mitsuru Matsui em 1993 em um artigo
explorando possíveis ataques ao DES [154]. A criptanálise diferencial foi pro-
posta inicialmente por Biham e Shamir em 1991, usando como exemplo uma
cifra semelhante ao DES [25]. A apresentação para criptanálise linear e diferen-
cial é semelhante em espírito àquelas feitas por Stinson em seu livro [210] e por
Howard Heys em um relatório técnico [108]. Em 1994 Don Coopersmith, um dos
responsáveis pela criação do DES na IBM, publicou um artigo [53] a�rmando
que a IBM já em 1974 conhecia a técnica de criptanálise diferencial, e apontou
medidas tomadas no projeto do DES para di�cultar o sucesso desse tipo de
ataque. De acordo com Coopersmith, IBM e NSA decidiram manter diversos
objetivos de projeto do DES em segredo para não levar facilmente à descoberta
de ataques como a criptanálise diferencial. Posteriormente Eli Biham, durante
seu doutorado, redescobriu a técnica de criptanálise diferencial, possibilitando a
recuperação de todos os bits da chave do DES. A tese de Biham foi transformada
em livro [27], em cujo prefácio se lê1
A criptanálise diferencial é o primeiro ataque capaz de quebrar o
DES completo com 16 rodadas com complexidade menor do que
255. A fase de análise de dados computa a chave analisando cerca de
236 textos cifrados em tempo 237. Os 236 textos cifrados são obtidos
durante a fase de coleta de dados, de um pool maior de 247 textos
claros escolhidos usando um critério simples de repetição de bits que
descarta mais que 99.9% dos textos cifrados assim que são gerados.
Uma introdução à Criptanálise Algébrica com exemplos de cifras reais que-
bradas é dada no livro de Gregory Bard [18].
A técnica de chaves relacionadas foi desenvolvida independentemente por
Biham e Knudsen em 1993 [26, 136].
1Tradução livre.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
122 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
Há diversas outras técnicas de Criptanálise além das duas cobertas neste
Capítulo. A criptanálise diferencial truncada é semelhante à criptanálise dife-
rencial, exceto que apenas alguns dos bits das diferenças são levados em conside-
ração [135]. É possível combinar criptanálise diferencial e linear, resultando no
método descrito por Hellman e Langford, chamado de criptanálise diferencial-
linear[106]. O uso de metaheurísticas em criptanálise é discutido extensivamente
na tesede John Clark [48]. Bruce Schneier publicou na revista Criptologia um
guia para estudo individual de Criptanálise [187], onde observa que só se aprende
Criptanálise através da prática, e propõe diversas tarefas criptanalíticas para o
leitor.
O método de Quine-McCluskey, mencionado no exemplo de criptanálise algé-
brica, é usualmente descrito em livros sobre circuitos digitais, como o de Nelson
e outros [166], em seu terceiro Capítulo. Há outros métodos que dão o mesmo
resultado � por exemplo, os mapas de Karnaugh, descritos no livro de Idoeta e
Capuano [40].
Exercícios
Ex. 46 � Use a tabela de aproximação linear exposta neste Capítulo para
calcular:
a) Pr[X1 ⊕X4 = Y3]
b) Pr[X1 ⊕ Y1 = 0]
c) Pr[X1 ⊕ Y2 = 0]
d) Pr[X2 ⊕X3 ⊕ Y2 ⊕ Y3 = 0]
Ex. 47 � A respeito da tabela de aproximação linear que calculamos:
a) Porque a primeira coluna e a primeira linha estão zeradas, exceto pela
posição (0, 0)? Isso é uma propriedade especí�ca desta S-box ou é algo que
deva ser verdade sempre?
b) Porque a soma de qualquer linha ou coluna é sempre +8 ou −8?
Ex. 48 � Tente refazer o processo de criptanálise linear na cifra apresentada
neste Capítulo, mas desta vez usando os bits 1 e 4 da entrada.
Ex. 49 � Escolha uma das S-boxes do DES e construa sua tabela de aproxi-
mação linear.
Ex. 50 � Prove o Lema 6.3.
Ex. 51 � Mostre como usar a propriedade descrita no Exercício 38 para di-
minuir pela metade o tempo necessário para busca exaustiva pela chave do DES
em um ataque de texto cifrado conhecido. Quantos pares de mensagem e texto
cifrado são necessários?.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
6.5. TÉCNICAS DE CRIPTANÁLISE RELACIONADAS 123
Ex. 52 � Nos exemplos dados neste Capítulo, encontramos maneiras de de-
terminar bits de subchaves da última rodada da cifra. Complete os exemplos,
mostrando como o processo pode ser usado para obter os outros bits também.
Ex. 53 � Suponha que alguém tenha proposto um ataque criptanalítico teó-
rico a uma cifra de bloco. O bloco da cifra tem 80 bits e a chave, 128 bits. O
ataque proposto funcionaria com 2100 operações em 2110 pares de mensagem e
texto encriptado. Aponte um problema com este ataque.
Ex. 54 � (Programação) Construa ferramentas computacionais que automa-
tizem parte do processo de Criptanálise.
Ex. 55 � Considere a S-box descrita neste Capítulo. Use-a para construir
redes de Feistel com duas, quatro e doze rodadas, e tente atacá-las usando
criptanálise linear e criptanálise diferencial. (A função interna da rede de Feis-
tel deve ser a aplicação da S-box seguida de ou exclusivo com a subchave da
rodada).
Ex. 56 � Construa uma cifra usando o esquema de Lai-Massey onde a per-
mutação é a S-box usada neste Capítulo e a função interna é uma substituição
de bytes não linear e sem ponto �xo (semelhante ao passo SubBytes do AES).
Tente fazer a criptanálise desta cifra com três, cinco e oito rodadas.
Ex. 57 � Como construções de Lai-Massey não podem ter saída pseudoalea-
tória com menos de três rodadas, adapte a cifra do Exercício 56 para funcionar
com uma ou duas rodadas e faça uma análise estatística da saída da cifra. Tente
em seguida identi�car maneiras de usar o que descobriu para quebrar a cifra.
Ex. 58 � Faça a criptanálise das cifras que você desenvolveu no Exercício 45,
no Capítulo sobre cifras de bloco.
Ex. 59 � Faça a criptanálise da cifra que você desenvolveu no Exercício 31,
no Capítulo sobre cifras de �uxo.
Ex. 60 � Faça a criptanálise de uma versão simpli�cada do DES e prossiga
aumentando a di�culdade da tarefa:
a) Uma única rodada.
b) Quatro rodadas, sem S-boxes (somente as permutações).
c) Quatro rodadas completas.
d) Seis rodadas completas.
Ex. 61 � Esboce o início da criptanálise (linear ou diferencial) do AES.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
124 CAPÍTULO 6. NOÇÕES DE CRIPTANÁLISE
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 7
Resumos Criptográ�cos
(funções de hashing)
Funções de hashing (ou resumos criptográ�cos) tem um papel análogo, de certa
forma, ao dos geradores pseudoaleatórios: enquanto um PRG expande sua se-
mente em uma saída indistinguível de bits aleatórios, uma função de hashing
comprime uma entrada (possivelmente de tamanho ilimitado) em um resumo
de tamanho �xo, mas de tal forma que seja difícil encontrar duas entradas com
a mesma saída.
Por ora de�niremos formalmente funções de hashing que sejam resistentes à
colisão, e nosso modelo ideal de função de hashing será uma função f(·) para
a qual seja difícil encontrar x, x′ tais que f(x) = f(x′). Posteriormente, na
Seção 7.6, trataremos de outra idealização de funções de hashing, chamada
de oráculo aleatório. O oráculo aleatório, embora seja um modelo teoricamente
muito bom, permitindo demonstrações que não seriam possíveis de outra forma,
traz problemas conceituais em sua implementação prática.
Em nossa de�nição de função de hashing usaremos um algoritmo Gen, que
cria uma chave.
De�nição 7.1 (Função de hashing). Uma função de hashing é um par (Gen, H)
onde
• Gen é uma função que determina uma chave a partir de um parâmetro de
segurança n. Assim, Gen(1n) = s, com s ∈ {0, 1}n
• Se s foi gerada por Gen(1n), então há um polinômio p(·) tal que H cria
resumos com p(n) bits a partir de s e de uma entrada x de tamanho
arbitrário:
H(s, x) = y
com x ∈ {0, 1}∗ e y ∈ {0, 1}p(n). �
Usaremos Hs(x) ao invés de H(s, x).
125
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
126CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
Consideraremos inicialmente funções de hashing onde a entrada não é de
tamanho arbitrário, mas de tamanho �xo (maior que o tamanho da saída).
Como de�nimos uma função com domínio maior que o contradomínio, cer-
tamente haverá x e x′ diferentes tais que Hs(x) = Hs(x′). Chamamos a isso
de colisão. Tentaremos construir funções de hashing que minimizem a pro-
babilidade de colisão � ou, de maneira mais precisa, funções para as quais a
probabilidade de colisão seja desprezível.
De�nimos a seguir a propriedade de resistência a colisão para funções de
hashing.
Experimento 7.2 (HASH_COL(Π,A, n)). Neste experimento, Π é a função de
hashing (Gen, H).
• s é escolhida usando Gen;
• s é enviada para A;
• O adversário envia de volta dois textos, x e x′;
• Se Hs(x) = Hs(x′) o adversário teve sucesso e o resultado do experimento
é um. Caso contrário é zero.
D A
s← Gen(1n)
Hs(x) = Hs(x′)→ 1
Hs(x) 6= Hs(x′)→ 0
1n
x, x′
�
De�nição 7.3 (Resistência a colisão). Uma função de hashing Π = (Gen, H)
é resistente a colisão se para todo adversário polinomial A existe uma função
desprezível negl tal que
Pr [HASH_COL(Π,A, n) = 1] ≤ negl(n)
�
Há outras noções, mais fracas, de resistência a colisão:
• Resistência de segunda pré-imagem: ao invés de enviar apenas s ao ad-
versário, enviamos s e um texto x (ou seja, enviamos um elemento da
pré-imagem de H(x), e pedimos ao adversário que encontre um segundo
elemento da pré-imagem). O adversário terá então que encontrar outro
texto x′ que tenha o mesmo resumo de x na função Hs;
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
7.1. ATAQUES E O PROBLEMA DO ANIVERSÁRIO 127
• Resistência de pré-imagem: Enviamos s e um resumo y para o adversário.
Este y é o resultado da aplicação de H(x), para algum x escolhido uni-
formemente. O adversário deve encontrar algum x′ tal que H(x′) = y (ou
seja, dada a imagem H(x), o adversário deve encontrar algum elemento
na pré-imagem de H(x)).
Proposição 7.4. Toda função de hashing resistente a colisões tem resistência
de segunda pré-imagem, e toda função com resistência de segunda pré-imagem
tem resistência de pré-imagem.
7.1 Ataques e o problema do aniversário
Suponha que temos uma função de hashing H com saída de tamanho n, e seja
N = 2n o tamanho do conjunto de possíveis saídas de H.
Escolha k diferentes entradas x1,x2, . . . , xk, todas com tamanho 2n e calcule
seus resumos y1, y2, . . . , yk usando H. Suporemos que os valores yi = H(xi) são
distribuídos uniformemente em {0, 1}2n.
Esta situação está claramente relacionada ao problema do aniversário, des-
crito no Apêndice A.
Suponha que o adversário queria tentar encontrar colisões em uma função
de hashing com n bits de saída calculando sucessivamente resumos de entradas
escolhidas ao acaso. Denotaremos por N = 2n a quantidade de possíveis saídas
da função, e por C o evento que representa a situação onde o adversário en-
controu uma colisão. Presumiremos que o adversário usará k =
√
N amostras.
Temos então que sua probabilidade de sucesso será
N
2N
≥ Pr[C] ≥ N −
√
N
4N
.
Por exemplo, suponha que o tamanho da saída de H seja 100 bits. Temos então
N = 2100. Se o adversário tentar
√
2100 = 250 entradas, a probabilidade de
colisão é
k(k − 1)
4N
≤ Pr[C] ≤ k
2
2N
250(250 − 1)
4(2100)
≤ Pr[C] ≤ (2
50)2
2(2100)
1
4
≤ Pr[C] ≤ 1
2
.
Na verdade, como 250 é exatamente
√
2100, a probabilidade de sucesso do ad-
versário será aproximadamente 1/2.
O projeto de uma função de hashing deve, assim, levar em conta este fato.
Suponha que uma função de hashing produza saída de 512 bits. Isso signi�ca
que para conseguir probabilidade de sucesso no máximo igual a 1/2 em um
ataque o adversário precisaria de
√
2512 = 2256 tentativas � tal ataque não seria
factível.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
128CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
Veremos agora como seria a probabilidade de sucesso à medida que diminuí-
mos a quantidade de tentativas: Para 2255, a probabilidade é < 1/4. Para 2254
é menor que 1/32. Para 2200 é menor que 9.6 × 10−35. Para 2128 é menor que
4.3× 10−78.
A proteção contra ataques de aniversário se dá, então, pela escolha do ta-
manho da saída da função. No entanto, é apenas medida necessária para a
segurança de uma função de hashing, e não su�ciente.
7.2 Construção: transformação de Merkle-Damgård
Se tivermos uma função de hashing para entrada de tamanho �xo, podemos
usá-la para entradas de qualquer tamanho usando uma transformação descrita
por Merkle e Damgård.
Construção 7.5 (Transformação de Merkle-Damgård). Uma função de hashing
(Gen, h) tem entrada de tamanho �xo, igual a n bits.
A nova função será (Gen, H): a função Gen permanece a mesma, e Hs(x) é
computada como segue.
• h aceita entrada de n bits; quebramos x em k = 2|x|/n blocos diferentes,
cada um com n/2 bits. Daremos a estes blocos os nomes x1, x2, . . . , xk.
• Adicione um último bloco xk+1, cujo conteúdo é a representação do tama-
nho de x em binário.
• Usaremos hs em cada bloco (chamaremos cada aplicação de hs de passo.
Como cada bloco tem n/2 bits, em cada passo precisaremos de mais n/2
bits. No primeiro passo, usamos um valor arbitrário z0. Nos outros,
usamos a saída do passo anterior.
A saída do último bloco é Hs(x). �
A Figura a seguir ilustra esta construção. Cada aplicação da função hs (com
entrada de tamanho �xo) é representada por trapézios e não retângulos, para
simbolizar o fato da entrada de hs ser duas vezes maior que sua saída.
Teorema 7.6. Seja (Gen, h) uma função de hashing de entrada de tamanho �xo
resistente a colisão e (Gen, H) construída usando a transformação de Merkle-
Damgård. Então (Gen, H) também é resistente a colisão.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
7.3. RESISTÊNCIA A COLISÕES COM DEXP 129
Demonstração. Provaremos apenas que o Teorema vale quando as entradas têm
o mesmo tamanho (ou, equivalentemente, quando H tem entrada de tamanho
�xo).
Lembramos que as entradas para cada estágio da função transformada são
xi (i-ésimo bloco da mensagem) e zi (i-ésimo vetor de inicialização). A entrada
para cada estágio é xi||zi.
Sejam x e x′ duas entradas diferentes de mesmo tamanho que colidem em
Hs. Sejam x1, . . . , xk os k blocos da transformação de Merkle-Damgård. Como
x 6= x′, deve haver algum bloco onde xi 6= x′i.
Seja i∗ o maior índice de bloco tal que zi−1||xi e z′i−1||x′i são diferentes.
Se i∗ = k+ 1, ou seja, as entradas do último bloco diferem, então zk||xk+1 e
z′k||x′k+1 são cadeias diferentes para as quais há colisão em hs (na �gura acima
isso signi�caria que não há mais blocos à direita).
Suponha então que i∗ < k + 1 (as entradas de dois blocos antes dos dois
últimos diferem). Neste caso, temos zi∗ = z′i∗ . No bloco anterior temos então
zi∗−1||xi∗ e z′i∗−1||x′i∗ colidindo.
Assim, uma colisão em Hs implica em uma colisão em hs. Com isto torna-se
simples mostrar que se hs é resistente a colisão, Hs também é. �
7.3 Resistência a colisões com dexp
A função de hashing a seguir é bastante simples e podemos demonstrar que é
resistente a colisões.
Construção 7.7. A função de hashing (Gen, H) descrita a seguir tem entrada
de tamanho 2n e saída de tamanho n.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
130CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
• Gen(1n): Escolha um primo q cuja representação tenha n bits e devolva
um grupo de ordem q com um gerador g e um elemento h do grupo:
s = 〈G, q, g, h〉.
• Hs(m): como m tem 2n bits, pode ser interpretada como a concatenação
de dois números x e y (mod q), ou seja, m = x||y. Calcule
Hs(m) = gxhy (mod q).
�
Teorema 7.8. Presumindo que vale a hipótese do logaritmo discreto, a Cons-
trução 7.7 é uma função de hashing com resistência a colisões.
Demonstração. Seja Π a Construção 7.7 e A um algoritmo polinomial para
obtenção de colisões. Seja
e(n) = Pr[HASH_COL(A,Π, n) = 1].
Podemos usar A para construir um algoritmo DL que resolve o problema do
logaritmo discreto em tempo polinomial com probabilidade de sucesso e(n).
DL(G, q, g, h):
〈x, x′〉 ← A(G, q, g, h)
se x 6= x′ e x, x′ colidem em H:
se h = 1 retorne zero
senao
interprete x como (x1||x2)
interprete x′ como (x′1||x′2)
retorne (x1 − x′1)(x′2 − x2)−1 (mod q)
Agora mostramos que quando A encontra colisão (x 6= x′ e Hs(x) = Hs(x′))
DL retorna logg h.
Primeiro observamos que quando h = 1 o resultado será obviamente correto,
porque logg h = 0.
Para o caso em que h 6= 1, veri�camos que Hs(x1||x2) = Hs(x′1||x′2) implica
que
gx1hx2 = gx
′
1hx
′
2 (7.1)
gx1−x
′
1 = hx
′
2−x2 . (7.2)
Seja d = x′2 − x2. Notamos que d 6≡ 0 (mod q), porque se o fosse, então
teríamos
hx
′
2−x2 = h0 = 1,
e como gx1−x
′
1 = hx
′
2−x2 ,
gx1−x
′
1 = 1
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
7.4. SHA (SECURE HASH ALGORITHM) 131
implicaria que (x1 − x′1) (mod q) seria zero, e teríamos então x = (x1||x2) =
(x′1||x′2) = x′ � contradizendo o que já estabelecemos (x 6= x′).
Como d 6≡ 0 (mod q) e q é primo, existe d−1 (mod q).
Elevamos a Equação 7.2 a este valor (d−1 (mod q)) e obtemos
g(x1−x
′
1)d
−1
=
(
hx
′
2−x2
)[d−1 (mod q)]
= h[dd
−1 (mod q)]
= h.
Como g(x1−x
′
1)d
−1
= h, conseguimos o logaritmo de h na base g:
logg h = (x1 − x′1)d−1 (mod q)
= (x1 − x′1)(x′2 − x2)−1 (mod q),
que é a saída de DL.
Temos um algoritmo DL que resolve o problema do logaritmo discreto com
probabilidade e(n). Como presumimos este problema seja difícil, e(·) deve ser
desprezível. �
Esta função é muito pouco e�ciente para ser usada na prática, porque exige
o cálculo de exponenciação modular. As próximas seções descrevem outras
funções de hashing.
7.4 SHA (Secure Hash Algorithm)
Em 1993 a NSA desenvolveu um algoritmo para que se tornasse padrão para
resumos criptográ�cos. O algoritmo foi chamado de Secure Hash Algorithm,
que passou por uma revisão em 1995, dando origem ao SHA-1. O SHA-1 é uma
construção de Merkle-Damgård e tem saída de 160 bits. O SHA-2 é semelhante
(é uma construção de Merkle-Damgård).
7.4.1 SHA-3
O NIST selecionou através de concurso um novo padrão para função de hash, que
recebeu o nome de SHA-3. O algoritmo selecionado era chamado anteriormente
de Keccac.
O Keccac é uma construção esponja, quedetalhamos a seguir.
Seja f uma permutação em {0, 1}k. A função esponja tem um estado interno
com k bits, onde k = p + q. Os p primeiros bits são a parte do estado onde os
blocos de mensagem interferem, e os outros q são usados, de certa forma, para
acumular informação, q é chamado de �capacidade� da função.
A construção esponja opera em duas fases:
• Absorção: p bits da entrada são misturados via ou-exclusivo na parte
�externa� do estado interno, e em seguida a função f é aplicada em todos
os bits do estado. Se houver mais bits de entrada, repete-se a operação.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
132CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
• Extração1: Os p primeiros bits do estado interno são copiados para a
saída. Se houver necessidade de mais bits, então a função f é aplicada
novamente ao estado interno, e depois disso novamente os p primeiros bits
são copiados.
p
q
f f f f ff
. ..
. ..
. ..
. ..
absorção extração
m1 2 nmm
0
0
n1 2 yy y
O algoritmo a seguir ilustra a construção esponja.
esponja(m, f, p, q, l):
// m é vista como sequência de blocos mi.
r ← 0
c← 0
// fase de absorção:
enquanto há próximo bloco mi:
x← f(r ⊕mi|c)
r ← x[0..p]
c← x[p+1..q]
// fase de extração:
y ← r
k ← p
enquanto k < l:
x← f(x)
y ← y|x[0..p]
k ← k + p
retorne y
1Squeeze no original em Inglês.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
7.5. CIFRAS DE BLOCO USANDO FUNÇÕES DE HASH: AARDVARK133
7.5 Cifras de bloco usando funções de hash: Aard-
vark
Esta Seção descreve uma cifra de bloco menos conhecida do que as anteriores.
Embora não haja cifra de bloco com segurança demonstrável baseando-se em
funções de mão única, há um método para construir cifras de bloco usando
cifras de �uxo e funções de hashing com a garantia de que, se a cifra de bloco
for quebrada, uma das outras duas ferramentas também o será.
Dizemos que Aardvark é uma cifra de bloco, embora se pareça mais com um
�gabarito� (ou método para construção) de cifra de bloco � para cada combinação
de cifra de �uxo, função de hashing e função de hashing com senha, é possível
construir uma cifra de bloco usando o método Aardvark. A Figura a seguir
ilustra esta construção.
Construção 7.9 (Aardvark). Dadas uma cifra de �uxo S, uma função de
hashing H e uma função de hashing H ′ com chave, pode-se construir uma cifra
de bloco, com bloco do tamanho igual ao tamanho da saída de H.
• Gen(1n) retorna k ∈R { 0, 1 }n.
• Enck(m) retorna um par (c, c′), onde
c′ = H(m)
c = m⊕ S(H ′k(c′)).
• Deck(c, c′) = c⊕ S(H ′k(c′))
Após decriptar uma mensagem é possível realizar uma veri�cação adicional: c′
deve ser igual a H(m). �
A demonstração de segurança do Aardvark é condicionada a quatro carac-
terísticas de seus componentes:
• H é fortemente resistente a colisões: é difícil encontrar x, y tais queH(x) =
H(y).
• H ′ é resistente a fraude existencial.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
134CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
• S resiste a ataques de expansão: é difícil expandir qualquer �uxo parcial
de S.
• S e H ′ são independentes:
Pr(H ′k(x)|k) = Pr(H ′k(x)).
O Teorema a seguir é a demonstração de segurança do Aardvark. A prova
detalhada é pedida no Exercício 37.
Teorema 7.10. Dados oráculos para calcular Enck e Deck para uma chave k
desconhecida, é difícil encontrar (m, c, c′) tais que Enck(m) = (c, c′) sem usar
um dos oráculos para computar Enck(m) ou Deck(c, c′) diretamente
Demonstração. (Rascunho) Suponha que é possível facilmente encontrar (m, c, c′)
mencionados no enunciado. Ao fazê-lo ou encontramos colisão em H, ou conse-
guimos fraude existencial em H ′, ou S e H ′ tem alguma correlação que conse-
guimos explorar. �
7.6 O Oráculo Aleatório
Há uma situação bastante comum no projeto de esquemas e protocolos cripto-
grá�cos que usam funções de hashing como primitiva. Ainda que presumamos
que a função de hashing é função de mão única e resistente a colisões, parece
muito difícil encontrar uma demonstração de segurança. Nestas situações é pos-
sível usar uma metodologia menos rigorosa que o padrão, mas que nos permite
encontrar alguma demonstração de segurança, ainda que usando hipóteses que
não podem ser concretizadas.
É importante frisar que o método do oráculo aleatório não leva a demonstra-
ções rigorosas como no modelo padrão (onde não se usam oráculos aleatórios),
e que há exemplos de construções com demonstração de segurança neste mo-
delo que tornam-se inseguras quando o oráculo aleatório é instanciado com uma
função de hashing � independente de que função de hashing seja escolhida.
Seja FA→B o conjunto de todas as funções com domínio A e contradomínio
B. Na metodologia do oráculo aleatório, escolhemos uniformemente uma função
em FA→B quando precisamos de uma função de hashing.
Evidentemente não podemos representar tal função explicitamente, uma vez
que há um número exponencial de funções. Podemos imaginar, no entanto,
um simulador, que responde aleatoreamente quando é perguntado a respeito de
uma entrada x ∈ A, mas que sempre responde à mesma pergunta com a mesma
resposta.
Normalmente o método do oráculo aleatório é visto como um meio termo
entre a Criptogra�a com segurança demonstrável (ainda que resultando em cons-
truções ine�cientes) e a Criptogra�a onde a segurança de construções e�cientes
é avaliada de maneira empírica.
A seguir temos um exemplo de demonstração usando o modelo do Oráculo
Aleatório. Suponha que Alice deva comprometer-se com uma escolha, mas que
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
7.6. O ORÁCULO ALEATÓRIO 135
não possa revelar a ninguém esta escolha. Pode ser que Alice seja parte de
uma banca avaliadora (e não possa divulgar seu voto antes que todos tenham
votado), ou que esteja participando de uma licitação (e que a lei exija que as
propostas sejam feitas em sigilo). A escolha de Alice pode ser vista como uma
mensagem m de n bits (onde se lê seu voto, ou sua proposta para a licitação).
Alice não con�a nos outros participantes, e quer garantir que ninguém poderá
inferir absolutamente nada a respeito de sua mensagem.
Tentamos então usar o seguinte protocolo: Alice usa uma função f e pu-
blica y = f(m) para comprometer-se. Depois, quando revelar m, todos poderão
conferir que f(m) = y.
A intuição nos diz que poderíamos usar uma função de hashing como f .
No entanto, as propriedades de funções de hashing não são su�cientes para
demonstrar o sigilo do protocolo:
• Uma função de mão única não é su�ciente para garantir que nada possa
ser inferido a partir da mensagem;
• Uma função resistente a colisões (ou resistente a pré-imagem) também não
nos serve, pelo mesmo motivo: nada impede que o adversário determine
alguns bits, ou alguma outra característica de m.
Certamente, se f é de mão única, podemos calcular para ela um predicado
hard-core.
Se presumirmos que f é um oráculo aleatório, conseguiremos demonstrar o
sigilo do protocolo: como f(m) é um valor escolhido aleatoreamente, o adver-
sário não obtém dali qualquer informação. O melhor que pode fazer é tentar
adivinhar m, escolhendo aleatoreamente m′ e depois veri�cando se f(m′) = y
através de uma consulta ao oráculo. A probabilidade do adversário sortear
m′ = m é 1/2n, desprezível em |m|.
O método do Oráculo Aleatório difere do uso de funções pseudoaleatórias.
Em ambos os casos, idealizamos um esquema ou protocolo presumindo que há
uma função f completamente aleatória. Depois,
• para usar uma função pseudoaleatória F , trocamos f por F , mas somente
alguns participantes terão acesso à chave k. No entanto, a chave é parte
da função: Fk é função de A em B, mas F é uma família de funções.
Assim, o adversário não tem acesso à descrição da função;
• para usar o oráculo aleatório, trocamos f por uma função de hashing �real�
H. Esta função não é indexada, e estamos dando então uma descrição
sucintacompleta da função que será usada na prática (não há informação
secreta).
7.6.1 Propriedades do Oráculo Aleatório
O oráculo aleatório é um modelo teoricamente muito poderoso: mostramos aqui
que uma função concebida como oráculo aleatório é também de mão única e
resistente a colisões.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
136CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
Resistência a colisões
Todo oráculo aleatório funciona como uma função de hashing resistente a coli-
sões.
Teorema 7.11. Sejam um oráculo aleatório H e um adversário polinomial A.
Seja n o maior tamanho de saída de H consultado por A. Então A só poderá
encontrar x, x′ tais que H(x) = H(x′) com probabilidade desprezível em n.
Demonstração. Observamos que o adversário não pode fazer mais que uma
quantidade polinomial de consultas ao oráculo. Sejam então k a quantidade
de consultas feitas por A ao oráculo e n o número de bits na saída de H.
Como H é oráculo aleatório, sabemos que os valores yi consultados são
gerados aleatoreamente com distribuição uniforme. Temos então A realizando
um ataque como o descrito na Seção 7.1. Sua probabilidade de sucesso será
então no máximo O(k2/2n), desprezível em n. �
Funções de mão única
Um oráculo aleatório funciona como uma função de mão única.
O Exercício 74 pede a demonstração do Teorema 7.12.
Teorema 7.12. Seja H um oráculo aleatório. Sejam também x escolhido do
domínio de H com probabilidade uniforme e y = H(x) obtido por consulta ao
oráculo. Qualquer adversário polinomial A, de posse de y poderá obter x com
probabilidade menor ou igual que uma função desprezível em n.
Podemos construir, a partir de um oráculo aleatório, uma família indexada
de funções de mão única.
Teorema 7.13. Se H é um oráculo aleatório então F , de�nida a seguir, é uma
função de mão única.
Fk(x) = H(k||x).
O Teorema 7.13 é importante porque em tese, permite reconstruir boa parte
da Criptogra�a usando funções de hashing no lugar de funções de mão única.
7.6.2 Objeções
Há problemas conceituais no método do Oráculo Aleatório que levaram muitos
teóricos a rejeitá-lo. Por outro lado, é o modelo usado nas demonstrações de
segurança de diversos esquemas e protocolos usados na prática. Esta Seção
resume os argumentos contra e a favor do uso do método.
Contra o uso do conceito de oráculo aleatório, temos:
• Funções de hashing reais (instanciadas concretamente) não podem funci-
onar como oráculo aleatório;
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
7.6. O ORÁCULO ALEATÓRIO 137
• Algumas demonstrações de segurança exigem que o adversário tenha acesso
controlado ao oráculo, permitindo somente que ele calcule H(x) para de-
terminados valores de x. No entanto, funções de hashing reais tem sua
descrição pública, e não temos portanto como impedir um adversário de
usar o algoritmo (público) para calcular o valor de H(x′), para algum x′
que não queríamos permitir.
Suportando o modelo (como Katz e Lindell [130] apontam):
• O modelo do oráculo aleatório é o único que temos para produzir demons-
trações que envolvem funções de hashing, e portanto é melhor que nenhum
modelo (e portanto nenhuma demonstração);
• Uma demonstração usando o modelo do oráculo aleatório garante que o
único problema que pode ocorrer é instanciar o oráculo de forma incorreta
(ou inadequada), usando uma função de hashing que tenha sido quebrada,
ou que não tenha as propriedades necessárias (por exemplo, que tenha a
saída muito pequena, ou que não seja resistente a colisões);
• Não conhecemos qualquer ataque a esquemas que tenham usado o modelo
do oráculo aleatório, desde que o oráculo aleatório seja instanciado por
uma função de hashing apropriada, e sem ataques conhecidos.
Notas
A construção 7.7 é de Chaum, Heijst e P�tzmann [43].
Em 1996 Anderson e Biham criaram duas cifras para as quais era possível
obter demonstração condicional de segurança: BEAR e LION [4]. Ambas usa-
vam funções de hashing e cifras de �uxo. Pat Morin mostrou que ambas eram
suscetíveis a um ataque de encontro no meio, e desenvolveu Aardvark [163],
semelhante em espírito mas imune àquele ataque.
O modelo do oráculo aleatório foi inicialmente sugerido na conferência CRYPTO
de 1986 por Amos Fiat e Adi Shamir em um trabalho sobre problemas relaciona-
dos a identi�cação e assinaturas [76]. Em uma das demonstrações de segurança
os autores a�rmam que2
�A prova formal de segurança neste abstract estendido presume que
n é su�cientemente grande e que f é uma função verdadeiramente
aleatória.�
Em um trabalho apresentado na primeira Conferência da ACM em Segu-
rança de Computadores e Computadores no ano de 1993 [20], Mihir Bellare e
Phillip Rogaway deram tratamento formal à ideia de �função verdadeiramente
aleatória� usado anteriormente por Fiat e Shamir.
2Tradução livre. O original é �The formal proof of security in this extended abstract
assumes that n is su�ciently large and that f is a truly random function.�
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
138CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
O Keccac é descrito por seus autores nos documentos submetidos ao concurso
do NIST [23] e em outros artigos [207]. A evolução do Keccac foi também
apresentada em Daghstul em 2009 [24].
O Capítulo 13 do livro de Katz e Lindell [130] apresenta uma discussão
bastante extensa sobre o modelo do Oráculo Aleatório.
Exercícios
Ex. 62 � (Katz/Lindell) Sejam (Gen1, H1) e (Gen2, H2) duas funções de hashing,
e seja (Gen, H) a função de hashing que combina as outras duas concatenando
suas saídas:
Hs1,s2(x) = Hs1(x)||Hs2(x)
onde s1 é obtido usando Gen1 e s2 é obtido usando Gen2.
a) Prove que para que H seja resistente a colisão, basta que uma das outras
duas funções o seja.
b) O mesmo vale para resistência de segunda pré-imagem e resistência de
pré-imagem?
Ex. 63 � Demonstre a Proposição 7.4.
Ex. 64 � O Teorema 7.6 foi demonstrado apenas para duas entradas de
mesmo tamanho. Generalize a demonstração mostrando que ele também vale
para duas entradas de tamanhos diferentes.
Ex. 65 � Quantas tentativas alguém deveria fazer para encontrar uma colisão
em uma função de hashing resistente a colisões com saída de 256 bits, com
probabilidade de sucesso maior ou igual que 3/4?
Ex. 66 � A probabilidade de colisão dada na Seção sobre o problema do
aniversário pode ser veri�cada por um experimento usando um gerador pseudo-
aleatório e uma função de hashing. Descreva (e implemente) este experimento.
Ex. 67 � O Teorema 7.6 não tem demonstração completa (leia o último pa-
ragrafo da prova). Complete-a.
Ex. 68 � Implemente a função de hashing resistente a colisões usando ex-
ponenciação modular descrita neste Capítulo. Compare seu desempenho com
alguma função de hashing criptográ�ca rápida.
Ex. 69 � Invente uma função de hashing de entrada de tamanho �xo, implemente-
a, e depois implemente sua transformação de Merkle-Damgård.
Ex. 70 � Implemente uma instância da cifra Aardvark.
Ex. 71 � Aardvark foi baseada em duas cifras, uma delas chamada LION. A
cifra LION usa uma função de hashing H resistente a colisões e uma cifra de
�uxo S.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
7.6. O ORÁCULO ALEATÓRIO 139
•Gen(1n) gere k1, k2 ∈R { 0, 1 }n.
•Enc(m): a mensagem é dividida em partes esquerda (l) e direita (r), não
necessariamente iguais (mas ambas devem ser menores do que n, o tamanho
da chave) e calcula-se:
r ← r ⊕ S(l ⊕ k1)
l ← l ⊕H ′(r)
r ← r ⊕ S(l ⊕ k2)
•Dec(c): o texto encriptado é dividido em partes esquerda (l) e direita (r),
da mesma forma que em Enc, e realiza-se o mesmo cálculo feito em Enc,
invertendo apenas a ordem das chaves:
r ← r ⊕ S(l ⊕ k2)
l ← l ⊕H ′(r)
r ← r ⊕ S(l ⊕ k1)
A respeito da cifra LION,
a) Desenhe um diagrama ilustrando o funcionamento da cifra.
b) Prove que a cifra funciona (ou seja, que Deck(Enck(m)) = m).
c) Mostre um ataque de encontro nomeio para esta cifra.
Ex. 72 � O que pode ser dito a respeito de funções homomór�cas de hashing
e o Oráculo Aleatório?
Ex. 73 � Mostre concretamente porque uma função de hashing H construída
usando a transformação de Merkle-Damgård não é uma instância de oráculo
aleatório (ou seja, mostre como distinguir H de um oráculo aleatório).
Ex. 74 � Demonstre o Teorema 7.12.
Ex. 75 � Releia a descrição da cifra Aardvark, na Seção 7.5, e construa para
ela uma demonstração de segurança usando o método do Oráculo Aleatório.
Sua demonstração �cou mais simples que aquela já dada no texto (e que não
depende do Oráculo Aleatório)?
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
140CAPÍTULO 7. RESUMOS CRIPTOGRÁFICOS (FUNÇÕES DEHASHING)
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 8
Códigos de Autenticação de
Mensagens
A encriptação permite proteger mensagens de forma que não possam ser lidas
por entidades não autorizadas. O conceito de segurança, no entanto, não se
reduz à privacidade apenas. Neste Capítulo trataremos de autenticidade de
mensagens: se Alice recebe uma mensagem supostamente enviada por Bob,
como ela pode ter certeza de que Bob é de fato o remetente?
De�nição 8.1 (Esquema de Autenticação de Mensagem). Um esquema de au-
tenticação de mensagem consiste de três algoritmos:
• Gen cria uma chave a partir de um parâmetro de segurança n: Gen(1n) = k,
com |k| ≥ n.
• Mac recebe uma chave k, uma mensagem m e tem como saída um rótulo
t. Denotamos t← Mack(m).
• Vrf recebe uma chave k, uma mensagem m, um rótulo t, e retorna um
(signi�cando válido) ou zero (signi�cando inválido). Denotamos v ←
Vrfk(m, t).
Para todo n, para toda k gerada por Gen(1n) e toda mensagem m, é mandatório
que
Vrfk(m, Mack(m)) = 1.
�
Quando para qualquer k, Mack somente for de�nido para mensagens de ta-
manho p(n) (onde p é algum polinômio), dizemos que (Gen, Mac, Vrf) é um
esquema de autenticação de mensagens de tamanho �xo para mensagens de
tamanho p(n).
A próxima Construção a seguir é um exemplo de MAC, que tem como base
funções pseudoaleatórias.
141
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
142 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS
Construção 8.2. Seja F uma função pseudoaleatória. Um esquema de auten-
ticação de mensagens pode ser construído da seguinte forma:
• Gen(1n) escolhe k uniformemente ao acaso de {0, 1}n.
• Mack(m) = Fk(m), desde que |m| = |k| = n.
• Vrfk(m, t) = 1 se e somente se |m| = |k| = |t| = n, e t = Mack(m). Em
outros casos, Vrf retorna zero. �
Esta construção funciona apenas para mensagens de tamanho �xo.
8.1 Segurança de códigos de autenticação de men-
sagens
O único ataque que faz sentido para códigos de autenticação é a fraude: um
adversário não deve conseguir criar um rótulo sem a chave.
O Experimento MAC_FORGE(Π,A, n), que usaremos na de�nição de segurança
para esquema de autenticação de mensagens, é descrito a seguir.
Experimento 8.3 (MAC_FORGE(Π,A, n)). Neste experimento o adversário tem
acesso a um oráculo que permite obter Mack(m) para qualquer mensagem m,
sem, no entanto, conhecer a chave k.
• Uma chave k é gerada por Gen(1n).
• O parâmetro 1n é enviado a A.
• A, com acesso ao oráculo Mack, gera o par (m, t). Seja Q o conjunto de
mensagens que A enviou para o oráculo.
• O resultado do experimento é um se e somente se Vrfk(m, t) = 1 e m /∈ Q.
D AMack
s← Gen(1n)
Vrfk(m, t) = 1,m /∈ Q→ 1
1n
m, t
�
De�nição 8.4 (Segurança de esquema de autenticação de mensagens). Um
esquema de autenticação de mensagens Π é seguro (ou �não-fraudável por ataque
adaptativo de mensagem escolhida�) se para todo adversário polinomial A existe
uma função desprezível negl tal que
Pr[MAC_FORGE(Π,A, n) = 1] ≤ negl(n). �
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
8.1. SEGURANÇADE CÓDIGOS DE AUTENTICAÇÃODEMENSAGENS143
Teorema 8.5. A Construção 8.2 é segura.
Demonstração. Mostraremos que, se a construção não é segura (ou seja, se é
possível fraudar códigos de autenticação), então poderíamos construir um algo-
ritmo que distingue funções pseudoaleatórias de funções realmente aleatórias.
Considere Π = (Gen, Mac, Vrf) e Π∗ = (Gen∗, Mac∗, Vrf∗) obtidos pela Cons-
trução 8.2, sendo que Π foi construído com uma função pseudoaleatória, e em
Π∗ uma função realmente aleatória foi usada.
Seja A um algoritmo polinomial e
e(n) = Pr[MAC_FORGE(Π,A, n) = 1].
Como Gen∗(1n) escolhe aleatoreamente uma função de n bits em n bits, ou seja,
f ∈R {g|g : {0, 1}n → {0, 1}n} ,
então
Pr[MAC_FORGE(Π∗,A, n) = 1] ≤ 1
2n
.
Isso porque se uma mensagem m não está na lista Q de mensagens consultadas
o valor t = f(m) está uniformemente distribuído em {0, 1}n.
É possível construir um teste polinomial T que distingue funções pseudoa-
leatórias de funções verdadeiramente aleatórias com a mesma probabilidade de
sucesso do adversário em MAC_FORGE (ou seja, e(n)). Se e(n) não for desprezí-
vel, conseguiremos distinguir funções pseudoaleatórias de aleatórias � mas isso
é impossível pela de�nição de função pseudoaleatória.
O algoritmo T simula o Experimento 8.3, observando quando A tem sucesso
conseguindo um rótulo válido.
Suponha que queiramos distinguir uma função h.
T recebe 1n e acesso a h : {0, 1}n → {0, 1}n via oráculo O.
test executa A(1n). Cada vez que A pedir a seu oráculo para calcular o
MAC de uma mensagem m, T usa O para obter t = h(m), e retorna t para A.
Em outras palavras, T intermedia o acesso de A ao oráculo, enviando o valor
de h para o adversário.
T Ah (via T)
1n
m, t
Quando A retorna (m, t), test faz o seguinte:
• Obtém t′ = h(m) via O;
• Se A nunca perguntou o MAC de m e se t = t′, o resultado é um. Senão
é zero.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
144 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS
Há agora dois casos:
• Se h é Fk pseudoaleatória com k escolhida ao acaso, T se torna igual ao
Experimento 8.3 com Π, e
Pr[T (Fk, 1n) = 1] = Pr[MAC_FORGE(Π,A, 1n)] = e(n).
• Se h é realmente aleatória, T é igual ao Experimento 8.3 com Π∗, e
Pr[T (h, 1n) = 1] = Pr[MAC_FORGE(Π∗,A, 1n)] ≤ 1
2n
.
Ou seja, se e(n) não for desprezível, T distinguirá facilmente os dois casos. �
8.2 Estendendo MACs para tamanho variável de
mensagem
A construção de MAC que realizamos anteriormente só funciona para mensa-
gens de tamanho �xo. Descrevemos agora sua extensão teórica para MACs de
tamanho variável.
Construção 8.6. Seja (Mac′, Vrf′) um MAC para mensagens de tamanho �xo.
Construiremos um MAC para mensagens de tamanho l < 2n/4: de�nimos
(Mac, Vrf) da seguinte maneira:
• Mack(m):
1. divida a mensagem em blocos m1,m2 . . . ,mq, tendo cada bloco l <
n/4 bits.
2. escolha r ∈R {0, 1}n/4.
3. ti = Mac′k(r||l||i||mi)
4. Retorne (r, t1, . . . , tq)
• Vrfk(m, t):
1. divida a mensagem em blocos m1, . . . ,m′q, da mesma forma que em
Mack(m).
2. Retorne 1 se e somente se q = q′ (ou seja, as mensagens tem a mesma
quantidade de blocos) e Vrfk(r||l||i||mi, ti) = 1 para todo i. �
A Construção 8.6 funciona para mensagens de tamanho variável, mas com
tamanho máximo de�nido (2n/4, onde n é o tamanho da chave). Esta é uma
construção teórica, portanto podemos presumir que é possível escolher n tão
grande quanto necessário para garantir a segurança do esquema. No entanto, a
realização prática deste esquema necessita de atenção: pode ser que o tamanho
da chave torne o esquema inviável.
Teorema 8.7. Se Π′ é um MAC seguro para mensagens de tamanho �xo de
acordo com a De�nição 8.4, então a Construção 8.6 o transforma em um MAC
seguro para mensagens de tamanho arbitrário.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
8.3. CBC-MAC 145
8.3 CBC-MAC
CBC-MAC é uma Construção semelhante ao modo CBC para encriptação (des-
crito na Seção 5.3.2). A geração do rótulo é feita aplicando uma cifra de bloco
no modo CBC, comduas diferenças.
• No CBC-MAC o vetor de inicialização é 0n;
• No CBC-MAC apenas a saída do último bloco é usada (na cifra de bloco
a saída de todos os blocos era concatenada). As saídas dos outros blocos
não podem ser mostradas, porque isto tornaria a construção insegura.
Construção 8.8 (CBC-MAC com entrada de tamanho �xo). Seja F uma fun-
ção pseudoaleatória. Para um polinômio p(·), as funções a seguir são uma
construção MAC.
• Gen(1n) escolhe k ∈R {0, 1}n
• Mack(m) quebra a mensagem em blocos de tamanho |m|/q, onde q = p(n)
é o tamanho (�xo) das mensagens. Em seguida, aplica Fk no modo CBC
(veja Seção 5.3.2), mas usando 0n como vetor de inicialização e dando
como saída apenas o resultado da encriptação do último bloco.
• Vrfk(m, t) veri�ca se Mack(m) = t
�
A Figura a seguir ilustra o CBC-MAC para mensagens de tamanho �xo.
8.3.1 Mensagens de tamanho variável
Da forma como descrevemos na última Seção, o CBC-MAC não é seguro para
autenticar mensagens de tamanho variável.
Teorema 8.9. A Construção 8.8 não é segura para mensagens de tamanho
variável.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
146 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS
Demonstração. Seja Π = (Gen, Mac, Vrf) como na Construção 8.8. Sejamm1,m2
duas mensagens com tamanho igual ao tamanho do bloco usado em Enc, e sejam
M1, M2 os respectivos rótulos.
Dados (m1,M1), (m2,M2), um adversário quer calcular o rótulo M3 de x =
m1||z.
Sabemos que Mi = Enck(mi) e o rótulo de m1||z deve ser Enck(M1 ⊕ z).
Construímos agora a mensagem y = m2||(M1 ⊕ z ⊕M2). Seu rótulo é igual
ao de x, e assim o adversário pode fraudar rótulos. �
Para usar o CBC-MAC em mensagens de tamanho variável, há três modi�-
cações com demonstração de segurança:
• Aplicar Fk sobre o tamanho de m, e usar o resultado como chave para o
CBC-MAC:
x← Fk(|m|)
t← Fx(m)
• Usar uma construção semelhante ao CBC-MAC de tamanho �xo, mas
pre�xando a mensagem m com |m| (o seu tamanho).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
8.4. HMAC 147
• Mudar a construção para que duas chaves sejam geradas (k1 e k2). Ao
calcular o MAC, primeiro usamos o CBC-MAC usando k1, obtendo como
resultado t′. Depois calculamos t = Fk2(t
′) e o rótulo é t.
Não demonstraremos a segurança destas três construções.
8.4 HMAC
Há uma maneira diferente de obter um código de autenticação usando resu-
mos criptográ�cos. Para gerar um rótulo para uma mensagem m e chave k,
poderíamos simplesmente concatenar a m e k, e calcular o resumo Hs(m||k).
Esta ideia, se implementada diretamente desta forma, não é segura. A Constru-
ção 8.10 descreve a implementação de MAC usando resumos de forma segura.
Construção 8.10 (HMAC). Seja (Gen′, h) uma função de hash de tamanho
�xo e (Gen′, H) sua modi�cação usando a transformação de Merkle-Damgård.
Tanto H como h produzem saída de n bits. As três funções a seguir constituem
um código de autenticação de mensagens.
• Gen(1n): use Gen(1n) para obter uma chave k, e também escolha k ∈R
{0, 1}n. Retorne 〈s, k〉.
• Mac(s,k)(m) retorna
t = Hsiv
(
(k ⊕ opad)||Hsiv ((k ⊕ ipad)||m)
)
.
• Vrf(s,k)(m, t) simplesmente veri�ca se t = Mac(s,k)(m).
Tanto opad como ipad são constantes. �
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
148 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS
A Figura a seguir ilustra esta Construção.
Quando a Construção 8.10 é usada para obter um algoritmo prático, seu
nome normalmente é �HMAC-� seguido do nome da função. Por exemplo,
HMAC-MD5 e HMAC-SHA1 são os algoritmos construídos usando as funções
MD5 e SHA-1. Construções do tipo HMAC são largamente utilizadas na prá-
tica.
8.5 Aplicação: segurança CCA
Até agora só construímos criptossistemas com nível de segurança CPA. Nesta
Seção de�nimos segurança CCA e mostramos como usar MACs para construir
criptossistemas com segurança CCA.
Experimento 8.11 (PRIV_CCA(Π,A, n)).
1. Uma chave k é gerada por Gen(1n);
2. O adversário recebe a entrada 1n e, podendo cifrar mensagens com Enck
e Deck, nos devolve duas mensagens m0 e m1, ambas de mesmo tamanho;
3. Um bit b é escolhido aleatoreamente, e a mensagem correspondente é en-
criptada: c = Enck(mi). Este texto cifrado (o �desa�o�) é enviado a A;
4. A, ainda podendo usar Enck e Deck, responde um bit b′ (o adversário não
pode usar Deck em c);
5. O resultado do experimento é um se b = b′ e zero em caso contrário.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
8.5. APLICAÇÃO: SEGURANÇA CCA 149
D AEnck,Deck
b ∈R { 0, 1 }
k ∈R { 0, 1 }n
1n
m0,m1
Enck(mb)
b′
�
De�nição 8.12 (Segurança contra ataque de texto claro escolhido). Um crip-
tossistema simétrico Π tem indistinguibilidade contra ataques de texto cifrado
escolhido se para todo adversário A existe uma função desprezível negl tal que,
Pr[PRIV_CCA(Π,A, n) = 1] ≤ 1
2
+ negl(n). �
Podemos usar um criptossistema CPA-seguro e um MAC para construir um
criptossistema CCA-seguro.
Construção 8.13 (Criptossistema com segurança CCA). Seja ΠE = (GenE , Enc, Dec)
um criptossistema CPA-seguro e ΠM = (GenM , Mac, Vrf) um esquema seguro
de autenticação de mensagens. De�nimos o seguinte criptossistema:
• Gen(1n) usa GenE(1n) e GenM (1n) para determinar as duas chaves, ke e
km.
• Encke,km(m) calcula c = Encke(m) e t = Mackm(c), e retorna 〈c, t〉
• Decke,km(c, t) primeiro veri�ca se Vrfkm(c, t) = 1. Depois, decifra c
usando ke, retornando Decke(c). �
Teorema 8.14. Se ΠE é um criptossistema com segurança CPA e ΠM é um
esquema seguro de autenticação de mensagens, a Construção 8.13 aplicada a
ΠE e ΠM resulta em um criptossistema Π com segurança CCA.
Notas
A demonstração do Teorema 8.14 pode ser obtida no livro de Katz e Lindell [130].
Exercícios
Ex. 76 � Além do CBC há algum outro modo de encriptação em bloco que
possa ser usado para construir MACs?
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
150 CAPÍTULO 8. CÓDIGOS DE AUTENTICAÇÃO DE MENSAGENS
Ex. 77 � Suponha que ao invés da Construção HMAC descrita neste Capí-
tulo, usemos o seguinte:
Construção 8.15 (MAC furado). Seja (Gen′, Hs) uma função de hashing ob-
tida via transformação de Merkle-Damgård. Então construímos
•Gen(1n) (sem mudanças)
•Mack(m) = Hs(k||m)
•Vrfk(m, t) veri�ca se Mack(m) = t.
�
Mostre que esta construção não é segura.
Ex. 78 � Ao construir CBC-MAC para mensagens de tamanho variável, men-
cionamos que podemos usar uma construção semelhante ao CBC-MAC de ta-
manho �xo, mas pre�xando a mensagem m com |m| (o seu tamanho). Mostre
que se o tamanho da mensagem fosse pós-�xado (incluído após a mensagem), a
construção não seria segura.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 9
Criptogra�a Assimétrica
A criptogra�a de chave privada permite proteger dados contra acesso não au-
torizado (um arquivo encriptado só será lido por quem conheça a chave usada
para encriptá-lo), e também oferece um método para comunicação privada: duas
entidades podem se comunicar trocando mensagens encriptadas. Há um pro-
blema, no entanto, que a criptogra�a de chave privada não resolve: se Alice e
Beto querem se comunicar, precisam estabelecer uma chave comum para que
possam usar ao encriptar sua comunicação. Supondo que não seja possível um
encontro físico, como determinar, pela primeira vez, a chave a ser usada?
Até 1976 era consenso que a comunicação por canal seguro dependia de esta-
belecimento prévio de chave por algum outro canal seguro. Em 1976 um artigo
publicado por Whit�eld Di�e e Martin Hellman [69] trouxe novas perspecti-
vas para a Criptogra�a, descrevendo um método para estabelecimento de chave
que não necessita de canal seguro previamente estabelecido. Nos anos que se
seguiram diversos criptossistemas assimétricos foram propostos, dentre os quais
o mais conhecido é provavelmente o RSA de Rivest, Shamir e Adelman.
9.1 Protocoloscriptográ�cos
Um protocolo criptográ�co é uma descrição de como atores diferentes podem
realizar uma computação em conjunto trocando mensagens. Neste Capítulo
abordaremos apenas o protocolo de Di�e e Hellman para estabelecimento de
chaves, que funciona com dois participantes, e usaremos uma de�nição de se-
gurança elaborada especi�camente para um tipo de protocolo. Uma de�nição
mais detalhada de protocolo será dada no Capítulo 11.
9.2 Estabelecimento de chaves
A situação descrita no início deste Capítulo, em que Alice e Bob querem se
comunicar quando não há canal seguro, pode ser remediada usando um protocolo
para que ambos usem um canal inseguro (aberto) para estabelecer uma chave
151
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
152 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
privada a ser usada em suas comunicações, sem que outros tenham acesso à
chave. A comunicação subsequente poderá se dar usando apenas esta chave, e
o canal seguro estará, então, estabelecido.
De�niremos segurança para protocolos de estabelecimento de chaves antes
de apresentar o protocolo de Di�e e Hellman. Começamos com o experimento
KE_EAV (�key establishment / eavesdropping�), que identi�ca a probabilidade
com que o segredo (chave) comum pode ser capturado por um adversário.
Experimento 9.1 (KE_EAV(Π,A, n)).
1. Duas entidades A e B, ambas conhecendo n, executam o protocolo Π.
Todas as mensagens trocadas entre A e B são guardadas em uma listaM .
Ambos devem calcular uma chave k (que não é incluída na lista M).
2. Um bit aleatório b é escolhido. Se b = 0, k′ é escolhida uniformemente ao
acaso. Se b = 1, k′ = k.
3. A lista de mensagens M e a chave k′ são enviadas ao adversário A.
4. A envia um bit b′
5. O resultado do experimento é um se b = b′ ou zero em caso contrário. �
De�nição 9.2 (Segurança para protocolo de estabelecimento de chaves). Um
protocolo de estabelecimento de chaves Π é seguro se para todo adversário po-
linomial A existe uma função desprezível negl tal que
Pr[KE_EAV(Π,A, n) = 1] ≤ 1
2
+ negl(n). �
Esta noção de segurança é adequada a protocolos de estabelecimento de
chaves: como há apenas dois atores e presumimos que há con�ança mútua, só
temos que nos preocupar com a possibilidade de obtenção da chave por um
adversário que não participa do protocolo.
9.3 Protocolo Di�e-Hellman para estabelecimento
de chaves
O protocolo de estabelecimento de chaves de Di�e e Hellman usa um algoritmo
G que, dado um parâmetro n, retorna a descrição de um grupo cíclico G de
ordem q tal que q tem n bits, e um gerador g de G.
Construção 9.3 (Protocolo de Di�e e Hellman para estabelecimento de cha-
ves). Dois participantes, A e B, estabelecem uma chave simétrica da seguinte
maneira:
• A usa G para obter (G, q, g)
• A escolhe x ∈R Zq e calcula h1 = gx
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.3. PROTOCOLODIFFIE-HELLMAN PARA ESTABELECIMENTODE CHAVES153
• A envia (G, q, g, h1) para B
• B escolhe y ∈R Zq e calcula h2 = gy.
• B envia h2 para A e determina a chave secreta kB = hy1.
• A recebe h2 e determina a chave secreta kA = hx2 . �
Ao �nal da execução do protocolo, A como B tem chaves secretas kA e kB .
Estas chaves são iguais, porque
kA = h
x
2 = (g
y)x = gxy
kB = h
y
1 = (g
x)y = gxy.
É importante observar que o protocolo não especi�ca nada a respeito do
grupo, exceto que q deve ter n bits. Com isso é possível usar diferentes grupos
na construção prática do protocolo. Um exemplo é o ECDH (Elliptic Curve
Di�e-Hellman), onde são usados pontos em uma curva elíptica.
Um requisito evidente do Di�e-Hellman é que o problema do Logaritmo
Discreto seja difícil � caso contrário qualquer um que observe as mensagens
trocadas poderá inferir a chave. Este é, no entanto, apenas necessário. Podemos
identi�car outro problema, relacionado ao logaritmo discreto, que captura a
essência da di�culdade do protocolo. Este problema leva o mesmo nome do
protocolo.
De�nição 9.4 (Problema de Di�e-Hellman). Dados um grupo cíclico G e um
gerador g gerados por um algoritmo G(1n), denotamos
DHg(a, b) = g
ab.
O problema Di�e-Hellman computacional (ou CDH, �Computational Di�e-
Hellman�) consiste em calcular DHg(a, b) dados ga e gb escolhidos ao acaso em
G.
O problema Di�e-Hellman decisional (ou DDH, �Decisional Di�e-Hellman�)
consiste em reconhecer se um elemento x foi escolhido ao acaso em G ou se é
igual a DHg(a, b) para algum a e algum b gerados aleatoreamente.
Dizemos que CDH e DDH são difíceis com relação a um algoritmo G se não
houver algoritmo polinomial que os resolva quando os grupos são gerados por
G. �
Há algoritmos G para os quais não se conhece algoritmo e�ciente para resolver
CDH ou DDH (mas não há tampouco prova de que não existam).
O que demonstramos então é que o protocolo de Di�e-Hellman é seguro se
o problema é difícil para um algoritmo G.
Teorema 9.5. Se o problema Di�e-Hellman decisional é difícil para um algo-
ritmo G, o protocolo Di�e-Hellman (Construção 9.3) é seguro de acordo com a
De�nição 9.2 quando G é usado.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
154 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
Demonstração. Supomos que o grupo G usado no experimento 9.1 foi gerado
por um algoritmo G.
O bit b é escolhido ao acaso, então Pr[b = 0] = 1/2.
Pr
[
KE_EAV(Π,A, n) = 1
]
=
1
2
Pr
[
KE_EAV(Π,A, n) = 1|b = 1
]
+
1
2
Pr
[
KE_EAV(Π,A, n) = 1|b = 0
]
.
No experimento KE_EAV o adversário recebe k′, que pode ser um elemento ale-
atório do grupo ou a chave. Assim, A pode ter, com igual probabilidade:
• (G, q, g, h1, h2, gxy), ou
• (G, q, g, h1, h2, k′), sendo que k′ foi escolhida aleatoreamente.
Distinguir entre ambos é exatamente resolver o problema Di�e-Hellman decisi-
onal:
Pr
[
KE_EAV(Π,A, n) = 1
]
=
1
2
Pr
[
KE_EAV(Π,A, n) = 1|b = 1
]
+
1
2
Pr
[
KE_EAV(Π,A, n) = 1|b = 0
]
=
1
2
Pr
[
A(G, q, g, gx, gy, gxy) = 1
]
+
1
2
Pr
[
A(G, q, g, gx, gy, gz) = 0
]
=
1
2
Pr
[
A(G, q, g, gx, gy, gxy) = 1
]
+
1
2
1− Pr
[
A(G, q, g, gx, gy, gz) = 1
]
=
1
2
+
1
2
(
Pr
[
A(G, q, g, gx, gy, gxy) = 1
]
− Pr
[
A(G, q, g, gx, gy, gz) = 1
])
≤ 1
2
+
1
2
∣∣∣Pr [A(G, q, g, gx, gy, gxy) = 1]− Pr [A(G, q, g, gx, gy, gz) = 1]∣∣∣.
Como g é gerador de G, gz é distribuído uniformemente no grupo se z for
uniformemente distribuído em Zq.
Se o problema Di�e-Hellman decisional é difícil para G, então existe negl
desprezível tal que∣∣∣Pr [A(G, q, g, gx, gy, gxy) = 1]− Pr [A(G, q, g, gx, gy, gz) = 1]∣∣∣ ≤ negl(n).
Concluímos que
Pr
[
KE_EAV(Π,A, n) = 1
]
≤ 1
2
+
1
2
negl(n). �
Note que esta demonstração parece ter um pequeno problema: quando b = 0,
o adversário recebe um elemento aleatório do grupo G, e não uma cadeia alea-
tória de bits. Para que a diferença �que clara, suponha que tenhamos escolhido
o grupo Zq e que a ordem do grupo seja q = 257, que é representado por
100000001 em binário. Apenas um elemento do grupo tem o primeiro bit igual
a um: 256 = 100000000. Este não é um problema com a demonstração, mas
um fato a que o implementador deve dar atenção: não se pode usar números
diretamente para representar elementos de G; ao invés disso deve-se usar al-
guma representação dos elementos do grupo como cadeias de bits, que preserve
a distribuição uniforme.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.4. CRIPTOSSISTEMAS ASSIMÉTRICOS 155
9.3.1 Ataque de homem-no-meio
Apesar de seguro de acordo com a De�nição 9.2 o Di�e-Hellman, como proposto
originalmente, é suscetível a um ataque de homem-no-meio:
• O adversário A recebe a descrição (G, q, g, h1) vinda de A e calcula z ∈R
Zq, h3 = gz.
• A repassa a descrição alterada (G, q, g, h3) para B.
• B escolhe y, computa h2 e determina kB = hy3 = gyz envia de volta
h2 = g
y.
• A agora tem a chave kB = hz2 = gyz.
• A impede que h2 siga para A, e envia h3 para A.
• A recebe h3 e computa kA = hx3 = gxz.
• A tem também a chave kA = hz1 = gxz.
Porser vulnerável a este ataque o protocolo Di�e-Hellman não é usado na
prática em sua formulação original, mas ainda assim é a base para diversos
outros protocolos.
9.4 Criptossistemas Assimétricos
O protocolo Di�e-Hellman não é exatamente um criptossistema assimétrico: ele
apenas permite estabelecer um canal seguro para comunicação entre duas partes
(oferecendo assim parte da funcionalidade dos criptossistemas assimétricos). No
entanto, os criptossistemas assimétricos são de�nidos de forma diferente: cada
participante tem uma chave pública e uma privada, e estas chaves são usadas
para que ambos efetivamente se comuniquem.
De�nição 9.6 (Criptossistema assimétrico). Um criptossistema assimétrico
consiste de três algoritmos:
• Gen, que aceita um parâmetro de segurança n e gera um par de chaves
(pk, sk). A primeira é chamada de chave pública e a segunda de chave
secreta.
• Enc, randomizado, que aceita uma chave pública pk, uma mensagem m e
calcula um texto cifrado c.
• Dec, determinístico, que aceita uma chave privada sk, um texto cifrado c
e retorna uma mensagem m.
Requeremos por hora1 que Decsk(Encpk(m)) = m. �
Enquanto para criptossistemas simétricos o sigilo perfeito implica em pro-
blemas práticos, para os criptossistemas assimétricos o sigilo perfeito é absolu-
tamente impossível.
1Mais adiante admitiremos que Dec falhe com probabilidade desprezível.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
156 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
9.4.1 F Funções de mão única com segredo
A De�nição 9.6 é diferente da De�nição 2.1: o algoritmo Gen não cria apenas
uma chave, mas duas. Uma é usada para encriptar e outra para decriptar
mensagens.
De�nição 9.7 (Permutação de mão única com segredo). Uma permutação de
mão única com segredo é uma tupla de algoritmos (Gen, Samp, f, Inv):
• Gen retorna duas chaves, I e td.
• (Gen′, Samp, f) é uma família de permutações de mão única
• Para todo par (I, td) produzido por Gen, o segredo td deve permitir inverter
f e�cientemente usando o algoritmo Inv:
Invtd(fI(x)) = x. �
9.5 Segurança CCA
Nesta seção de�nimos segurança CCA para criptossistemas de chave pública.
Experimento 9.8 (PUB_CCA(Π,A, n)).
1. Gen(1n) é usado para determinar pk, sk.
2. O adversário recebe pk e acesso de oráculo a Decsk.
3. A retorna duas mensagens, m0,m1, do mesmo tamanho.
4. Um bit aleatório b é escolhido e mk é encriptada com Encsk e enviada a
A (o adversário não pode usar o oráculo nesta mensagem)
5. A envia um bit b′
6. O resultado do experimento é um se b = b′, ou zero em caso contrário. �
De�nição 9.9 (Segurança CCA para criptossistemas assimétricos). Um crip-
tossistema de chave pública Π tem segurança contra ataques de texto cifrado
escolhido se para todo adversário polinomial A existe uma função desprezível
negl tal que
Pr[PUB_CCA(Π,A, n) = 1] ≤ 1
2
+ negl(n). �
9.6 ElGamal
O criptossistema de ElGamal, detalhado na Construção 9.10, tem como base o
problema DDH. Nesta construção há um abuso de notação: escrevemos �a/b�
para indicar �a · (b)−1�, onde (b)−1 é o inverso de b no grupo.
Construção 9.10 (Criptossistema ElGamal).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.6. ELGAMAL 157
• Gen(1n): use G(1n) para escolher um grupo cíclico G com ordem q, com
gerador g, sendo que q é representável com n bits.
x ∈R Zq
h← gx
A chave pública é 〈G, q, g, h〉.
A chave privada é 〈G, q, g, x〉.
• Enc: dada a chave pública pk = 〈G, q, g, h〉 e a mensagem m ∈ G, escolha
y ∈R Zq e devolva
〈gy, hym〉 .
• Dec: dada a chave sk = 〈G, q, g, x〉, e o texto cifrado c = 〈c1, c2〉, a função
Dec retorna
c2
cx1
. �
A função Dec opera corretamente:
c2
cx1
=
hym
(gy)x
=
(gx)ym
gxy
=
gxym
gxy
=m.
Exemplo 9.11 (Operação do criptossistema de ElGamal). Começamos su-
pondo que G escolheu G = Z17 com g = 5. Escolhemos x = 9, e portanto
h = 59 (mod 17) = 12.
pk = (G, 17, 5, 12)
sk = (G, 17, 5, 9).
Para encriptar 15, escolhemos y = 3 e
Encpk(15) = (5
3, 12315) (mod 17) = (6, 12)
Para decriptar (6, 12):
Decsk(6, 12) =
12
69
(mod 17) = 15. J
Uma característica notável do criptossistema de ElGamal é que ele não é
determinístico (um elemento y é escolhido aleatoreamente no procedimento de
encriptação).
Outro fato importante é que no ElGamal, a mensagem é um elemento de um
grupo, e o texto encriptado consiste de dois elementos. Dizemos que o ElGamal
tem um fator de expansão de dois para um.
Teorema 9.12. Se o problema DDH for difícil para G, então o criptossistema
de ElGamal (Construção 9.10) tem segurança contra ataques de texto cifrado
conhecido.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
158 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
Teorema 9.13. O criptossistema ElGamal é homomór�co para multiplicação
emM e C.
9.7 Criptossistema de Rabin
O criptossistema mostrado a seguir foi proposto por Michael Rabin em 1979.
Em essência, encriptar no Rabin é elevar ao quadrado, e decriptar é calcular
raiz módulo N .
Construção 9.14 (Criptossistema de Rabin).
• Gen: Gere dois primos grandes e diferentes p, q tais que p, q ≡ 3 (mod 4).
Seja N = pq. A chave privada sk é (p, q), e a chave pública pk é N .
• Encpk(m) = m2 (mod N)
• Decsk(c) =
√
c (mod N) �
Dados primos p, q com N = pq, e y = x2 (mod N), computar a raiz a
é fácil quando se tem a fatoração de N , mas difícil caso contrário. De fato,
não conhecemos algoritmo polinomial para computar tais raízes sem conhecer
a fatoração de N . No entanto, sabendo que N = pq podemos determinar
√
y
(mod pq):
Calculamos r1 =
√
y (mod p) e r2 =
√
y (mod q). Estas raízes podem ser
calculadas e�cientemente quando p, q ≡ 3 (mod 4).
As quatro raízes quadradas de y módulo N podem então ser encontradas
resolvendo-se os quatro sistemas, que podem ser resolvidos usando o Teorema
Chinês do resto (Teorema B.21):
(1) x ≡r1 (mod p), x ≡ r2 (mod q),
(2) x ≡r1 (mod p), x ≡ −r2 (mod q),
(3) x ≡− r1 (mod p), x ≡ r2 (mod q),
(4) x ≡− r1 (mod p), x ≡ −r2 (mod q).
Exemplo 9.15 (Encriptando e decriptando com Rabin). Sejam p = 3 e q =
7. Temos N = 21. Para encriptar m = 11, calculamos 112 (mod 21) = 121
(mod 21) = 16.
Para decriptar, calculamos
r1 =
√
16 (mod 3) = 1
r2 =
√
16 (mod 7) = 4.
Resolvemos o sistema
(1) x ≡1 (mod 3), x ≡ 4 (mod 7)
(2) x ≡1 (mod 3), x ≡ −4 (mod 7)
(3) x ≡− 1 (mod 3), x ≡ 4 (mod 7)
(4) x ≡− 1 (mod 3), x ≡ −4 (mod 7).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.8. SEGURANÇA CPA 159
As soluções para este sistema são 4, 10, 11, 17 � note que o 11 está entre elas. J
A segurança do criptossistema de Rabin se sustenta na suposição de que
um problema (encontrar a raiz quadrada de um número módulo N sem sua
fatoração) seja difícil.
Reduziremos este problema ao de quebrar o criptossistema (ou seja, mos-
traremos que se o Rabin puder ser quebrado, então podemos encontrar
√
x
(mod N) sem saber a fatoração de N). A redução é trivial: quebrar o Rabin
signi�ca exatamente encontrar
√
c (mod N) (veja a de�nição de Dec). Assim,
ao quebrar o criptossistema, conseguimos calcular raízes quadradas módulo N
sem conhecer a fatoração de N .
É fácil veri�car agora o que já mencionamos: um criptossistema assimétrico
como o Rabin não pode ter sigilo perfeito: a chave pública N contém toda a
informação necessária para obter a chave privada (p, q): basta fatorarmos N .
Acontece que sabemos que não é conhecido algoritmo e�ciente para obter a
fatoração de N .
9.8 Segurança CPA
Experimento 9.16 (PUB_EAV(A,Π, n)).
1. O par de chaves (pk, sk) é gerado por Gen(1n).
2. Envie pk para A.
3. A devolve m0,m1, ambas de mesmo tamanho.
4. Um bit b é escolhido aleatoreamente e uma das mensagens é encriptada:
c← Encsk(mb).
5. c é enviada a A
6. A envia b′ de volta
7. Se b = b′ o resultado do experimento é um. Caso contrário, é zero. �
De�nição 9.17 (Segurança contra ataque de texto cifrado conhecido para crip-
tossistemas assimétricos). Um criptossistema de chavepública Π = (Gen, Enc, Dec)
tem segurança contra ataque de texto cifrado conhecido se para todo adversário
polinomial A existe uma função desprezível negl(·) tal que
Pr[PUB_EAV(A,Π, n) = 1] ≤ 1
2
+ negl(n). �
Esta de�nição difere daquela semelhante para criptossistemas simétricos por-
que o adversário recebe a chave pública pk. Isso signi�ca que A pode encriptar
mensagens à vontade � e que esta de�nição é então equivalente à de�nição de
segurança CPA.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
160 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
De�nição 9.18 (Segurança CPA para criptossistemas assimétricos). Um crip-
tossistema de chave pública tem segurança CPA se tem segurança contra ataque
de texto cifrado conhecido. �
Interessantemente, as duas De�nições de segurança (texto cifrado conhecido
e CPA) para criptossistemas assimétricos também são equivalentes à De�nição
de segurança contra múltiplos textos cifrados conhecidos.
9.9 RSA
O RSA é provavelmente um dos criptossistemas mais conhecidos.
Dado um número N , produto de dois primos grandes p e q, a função de
encriptação no RSA funciona em ZN elevando a mensagem a um expoente e (de
encriptação) � ou seja, c = me (mod N)), e decriptar é o processo contrário:
calculamos m = ce
−1
. Assim, temos dois expoentes: e é público, para que todos
possam encriptar, e o expoente d = e−1 (de decriptação) é privado, para que
apenas o destinatário possa decriptar.
Para que estas operações funcionem é necessário escolher os expoentes de
um conjunto com uma propriedade especial: tendo escolhido o expoente secreto
e, é necessário que ele tenha um inverso. Note que em Zn, onde n é um número
composto qualquer (como é o caso do RSA), nem todo elemento terá inverso
multiplicativo.
O RSA funciona com exponenciação (que é multiplicação iterada), e não
com soma � lembramos que a soma de inteiros não é de mão única, enquanto a
multiplicação é candidata a função de mão única. Assim, para usar aritmética
modular neste contexto, precisamos de um grupo onde a operação seja a mul-
tiplicação. Mais ainda, queremos encontrar dois elementos, e e d, que tenham
inverso multiplicativo. O grupo Zn, com a operação de soma, não nos serve.
Observamos que um dado a ∈ Zn tem inverso se e somente se é co-primo com n,
ou seja, mdc (a,m) = 1. Podemos então usar o conjunto dos elementos menores
que n e coprimos com n:
Z∗n =
{
x ∈ {1, 2, . . . , n− 1} : mdc (x, n) = 1
}
.
Este conjunto, com a operação de multiplicação, forma um grupo onde todos os
elementos tem inverso. A ordem deste grupo é denotada |Z∗n| = φ(n); a função
φ(n) é chamada de tociente2
Se p é primo, deve ser coprimo com todos os números menores que ele. Assim,
φ(p) = p− 1.
A função φ é multiplicativa � ou seja,
φ(ab) = φ(a)φ(b),
2Veja a De�nição B.6 da função φ(n) (�φ de Euler�, ou função tociente) no Apêndice B.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.9. RSA 161
e como n = pq, temos
φ(n) = (p− 1)(q − 1).
O Teorema de Euler nos garante que para todo n > 1 e a ∈ Z∗n,
aφ(n) ≡ 1 (mod n).
Ao invés de escolher os expoentes em ZN , escolhemos e e d em Z∗φ(N). Primeiro
escolhemos e < φ(N) ao acaso, depois calculamos d tal que
ed ≡ 1 (mod φ(N)).
Assim, pela de�nição de congruência, existe algum inteiro k tal que
ed = kφ(N) + 1.
Conseguiremos então encriptar (mb) e decriptar (ca) obtendo a mensagem ori-
ginal3:
(me)d ≡ mkφ(N)+1 (mod N)
≡ (mφ(N))km (mod N)
≡ (mkφ(p)φ(q))m (mod N)
≡ (mφ(p))kφ(q)m (mod N)
≡ (1)kφ(q)m (mod N) (Teorema de Euler)
≡ m (mod N).
O valor de φ(N) no RSA é sempre (p − 1)(q − 1), porque N é o produto dos
dois primos p e q.
A Construção 9.19 é descrita muitas vezes como a versão de livro-texto do
RSA, por ser normalmente usada em livros didáticos na descrição do criptossis-
tema RSA. Esta construção, no entanto, é determinística e consequentemente
insegura.
Construção 9.19 (Criptossistema RSA (versão de livro-texto)).
• Gen(1n):
escolha primos p 6= q com n bits cada
N ← pq
escolha aleatoreamente 1 < e < φ(N), coprimo com N
d← e−1 (mod φ(N))
retorne 〈(N, d), (N, e)〉
• Encpk(m) = Enc〈N,e〉(m) = me (mod N).
3Usamos nesta derivação o Teorema de Euler (Teorema B.27): se a e m são co-primos,
então aφ(m) ≡ 1 (mod m).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
162 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
• Decsk(c) = Dec〈N,d〉(c) = cd (mod N). �
O cálculo de e−1 pode ser feito usando o algoritmo estendido de Euclides4.
Aparentemente as mensagens (e consequentemente os textos encriptados) devem
pertencer ao grupo de unidades Z∗N , mas um Exercício no �nal deste capítulo
pede a demonstração de que o sistema funciona mesmo quando m ∈ Zn \ Z∗N .
Exemplo 9.20. Sejam p = 101, q = 3. Temos N = 303 e φ(N) = 200.
Queremos 1 < b < 200 coprimo com 200 = 2352, e escolhemos b = 7 (que
não é divisível por 2 nem por 5, e portanto pertence a Z∗200). Assim,
a = 7−1 (mod φ(N))
= 7−1 (mod 200) = 143.
Temos então
• pk = (N, b) = (303, 7)
• sk = (N, a) = (303, 143)
Para encriptar 53 (que pertence a Z∗303), fazemos
Encpk(53) = 53
7 (mod 303) = 275.
Para decriptar 37,
Decsk(275) = 275
143 (mod 303) = 53. J
Da mesma forma que identi�camos a essência da di�culdade do protocolo
Di�e-Hellman, também o faremos como RSA, de�nindo o problema RSA.
De�nição 9.21. Seja N o produto de dois primos, ambos com n bits. Seja
e > 0 tal que gcd(e,N) = 1 e x ∈ Z∗N . O problema RSA computacional consiste
em calcular y = x1/e (mod N). �
Não se conhece qualquer algoritmo e�ciente para resolver o problema RSA.
Sabemos que o RSA deve ser pelo menos tão difícil quanto a fatoração de in-
teiros: se for possível fatorar N , basta então calcular φ(N) = (p − 1)(q − 1),
calcular d = e−1 (mod φ(N)) e y = xd (mod N) (é importante observar que
φ(N) e e−1 não são públicos, e devem ser calculados por um adversário que
pretenda quebrar o RSA).
9.9.1 Aspectos de segurança do RSA
Esta Seção descreve alguns ataques ao RSA. Estes ataques não caracterizam
qualquer fraqueza do criptossistema, e somente são possíveis quando o RSA é
usado de maneira ingênua (ou �incorreta�).
4O algoritmo estendido de Euclides é dado no Apêndice B
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.9. RSA 163
Fatoração do módulo n em p, q
A fatoração do módulo em p e q deve ser mantida em segredo. Se um atacante
obtiver estes dois números, ele pode usar o algoritmo estendido de Euclides para
calcular o exponente de decriptação d. De acordo com a identidade de Bézout,
existem X e Y tais que
mdc (e, φ(n)) = eX + φ(n)Y
1 = eX + φ(n)Y (Identidade de Bézout)
eX ≡ 1 (mod φ(n)) (def. de congruência)
Evidentemente, X = d.
O valor φ(n)
O valor de φ(n) também deve ser mantido em segredo. Vemos o que um atacante
poderá fazer tendo φ(n).
φ(n) = (p− 1)(q − 1)
φ(n) = pq − p− q + 1
φ(n) = (n+ 1)− (p+ q)
(p+ q) = (n+ 1)− φ(n)
q = (n+ 1)− φ(n)− p.
Conseguimos uma descrição de q em função de n, φ(n) e p (que o atacante
conhece). Observe que
n = pq
n = p
[
(n+ 1)− φ(n)− p
]
n = −p2 + p(n+ 1− φ(n))
Rearranjando, vemos que p é solução de uma equação do segundo grau,
p2 − (n+ 1− φ(n))p+ n = 0,
com a = 1, b = −(n+ 1− φ(n)) e c = n.
Módulo comum
Suponha que ao distribuir chaves para um grupo de pessoas usemos sempre o
mesmo módulo N : a i-ésima pessoa recebe (ai, N) e (bi, N). Como aibi ≡ 1
(mod φ(N)), qualquer uma destas pessoas pode fatorar N e consequentemente
calcular aj a partir de bj .
Ainda que se suponha que no grupo com estas chaves haja con�ança mútua
e que o fato de um conhecer as chaves privadas de todos os outros não seja um
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
164 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
problema, o módulo comum permite que um adversário externo ao grupo decifre
mensagens sem precisar de qualquer chave privada. Suponha que m é enviada
a duas pessoas com chaves (b1, N) e (b2, N):
c1 =m
b1 (mod N)
c2 = m
b2 (mod N).
Como b1 e b2 são co-primos com N , são também co-primos entre si, e existem
x, y tais que xb1 +yb2 = 1, facilmente computáveis. Um adversário que conheça
c1, c2 e N pode decifrar a mensagem porque
cx1c
y
2 = m
xb1myb2 = mxb1+yb2 = m1 = m (mod N).
b e m pequenos
Se b usado na chave pública e m são pequenos um adversário pode decriptar
m. Por exemplo, se b = 5 e m < N1/5, não há redução modular na encriptação
porque m5 < N . Observando c = m5 (mod N), e sabendo que b e m são
pequenos, um adversário pode calcular c1/5 em Z (sem aritmética modular) e
obter m.
9.9.2 Versão segura do RSA: OAEP
Da mesma forma que tornamos cifras de �uxo seguras inserindo nelas elementos
de aleatoriedade, tornaremos o RSA seguro modi�cando-o para que passe a ser
um algoritmo probabilístico. A modi�cação que fazemos é adicionar uma cadeia
de bits aleatórios à mensagem antes de encriptá-la.
Descrevemos a seguir o OAEP (Optimal Asymmetric Encryption Padding).
Se trocarmos o algoritmo Enc da Construção 9.19 pelo algoritmo Enc′ a
seguir obteremos uma versão do RSA com segurança IND-CCA-2. O algoritmo
Enc′ usa duas funções de hash, G e H. Zeros são adicionados à mensagem m
para que tenha tamanho �xo; r é escolhido aleatoreamente.
Enc′pk(m) = Encpk(m⊕G(r)||r ⊕H(m⊕G(r)))
Observe que o algoritmo original é usado pelo novo. A próxima �gura ilustra o
algoritmo � e deixa claro também que sua estrutura é a de uma rede de Feistel,
para que possamos calcular a inversa ao decriptar a mensagem.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.10. GOLDWASSER-MICALI 165
Notamos também que a função G deve ser usada de forma a expandir os k bits
de r para n bits, e que H deve comprimir n bits em k bits.
A segurança IND-CCA-2 do esquema depende de tratarmos as duas funções
de hash como oráculos aleatórios.
Informalmente, podemos fazer algumas observações: se as duas funções de
hashingG eH tem saída indistinguível de bits aleatórios e resistência de segunda
pré-imagem, então m ⊕ G(r) deveria ter o mesmo efeito que o one-time pad.
Mas usar apenas este valor (m⊕G(r)) não daria certo, porque não seria possível
decriptar. Por isso usamos também a segunda função H.
9.10 Goldwasser-Micali
O criptossistema de Goldwasser-Micali fundamenta-se na di�culdade do pro-
blema do resíduo quadrático.
Teorema 9.22. Seja p primo. Se y é resíduo quadrático módulo p, então y tem
exatamente duas raízes quadradas módulo p.
Demonstração. Seja x tal que (±x)2 = y. Suponha que x ≡ −x (mod p).
Teríamos 2x ≡ 0 (mod p), e p|2x. Como p é primo, teríamos que p|2 ou p|x.
Mas p > 2 e p > x, e portanto
x 6≡ −x (mod p).
Consequentemente y deve ter necessariamente duas raízes quadradas distintas
módulo p. �
Teorema 9.23. Seja n = pq, com p e q primos. Então y é resíduo quadrático
módulo n se e somente se y (mod p) é resíduo quadrático módulo p e y (mod q)
é resíduo quadrático módulo q.
Demonstração. O resultado segue imediatamente do Teorema B.16. �
Teorema 9.24. Seja n = pq, com p e q primos. Se y é resíduo quadrático
módulo n, então y tem exatamente quatro raízes quadradas módulo n.
Demonstração. Sejam a, b as raízes quadradas de y módulo p, e c, d as raí-
zes quadradas de y módulo q. Pelo Teorema B.16, temos que y (mod p) ≡ y
(mod q) ≡ y (mod pq).
As raízes de y módulo p devem ser distintas das raízes de y módulo q, porque
p e q são primos. �
De�nição 9.25. O conjunto J+n contém os números x ∈ Z∗n tais que(x
n
)
= +1. �
Observe que J+n contém os elementos do grupo de unidades Z∗n com símbolo
de Jacobi igual a um módulo n.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
166 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
Teorema 9.26. Seja p primo. Então exatamente metade dos elementos em Zp
é resíduo quadrático.
Demonstração. Seja g uma raiz primitiva (e portanto pertencente a Zp). O
conjunto Zp é
{ g0, g1, . . . , gp−2 } .
Elevando todos os elementos ao quadrado, obtemos
{ g0, g2, . . . , gp−3, g0, g2, . . . , gp−3 } .
Cada quadrado aparece duas vezes neste conjunto, e há nele metade dos ele-
mentos de Zp. �
Teorema 9.27. Seja n = pq, com p e q primos. Exatamente metade dos
elementos de J+n é resíduo quadrático módulo n.
Demonstração. Há (p − 1)/2 resíduos quadráticos em Zp e (q − 1)/2 resíduos
quadráticos em Zq. Como p e q são primos, isso signi�ca que há exatamente5
• (p− 1)/2 números tais que (x|p) = +1,
• (p− 1)/2 números tais que (x|p) = −1,
• (q − 1)/2 números tais que (x|q) = +1, e
• (q − 1)/2 números tais que (x|q) = −1.
O símbolo de Jacobi (x|pq) será um quando(
x
p
)(
x
q
)
= +1,
ou seja, quando (x|p) e (x|q) tiverem o mesmo sinal. Isso acontece exatamente
metade das vezes. Temos então, em Z∗pq:
• 1/2 de números com (x|pq) = −1;
• 1/4 de números tais que (x|p) = (x|q) = −1. Não são resíduos quadráticos
módulo pq, mas tem (x|pq) = +1;
• 1/4 de números tais que (x|p) = (x|q) = +1. Estes são resíduos quadráti-
cos módulo pq. �
Se escolhermos uniformemente um elemento x ∈R J+n , a probabilidade de x
ser resíduo quadrático será 1/2. Como não se conhece algoritmo e�ciente para
determinar, sem a fatoração de n, se x é de fato resíduo quadrático módulo n,
temos uma função de mão única.
5Lembre-se de que tanto p como q são ímpares, por isso as quantidades listadas são inteiras.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.10. GOLDWASSER-MICALI 167
De�nição 9.28 (Problema da residuosidade quadrática). O problema da re-
siduosidade quadrática consiste em, dados n = pq e x ∈ J+n , se x é resíduo
quadrático módulo n. �
Conjectura 9.29. Para qualquer algoritmo randomizado polinomial A, quais-
quer primos p, q com k bits cada, x tal que (x|pq) = +1, qualquer polinômio
positivo p(·), a probabilidade de A determinar corretamente se x é resíduo qua-
drático módulo pq é desprezível em k.
No entanto, se conhecermos os fatores p e q, podemos computar os símbolos
de Jacobi (x|p) e (x|q) e veri�car se são ambos positivos ou ambos negativos.
Desta forma podemos determinar se (x|pq) é resíduo quadrático ou não.
O criptossistema de Goldwasser-Micali fundamenta-se no problema da resi-
duosidade quadrática.
Construção 9.30 (Criptossistema de Goldwasser-Micali).
• Gen(1k): escolha aleatoreamente dois primos p e q com k bits cada. Esco-
lha também x tal que (
x
p
)
=
(
x
q
)
= −1.
A chave pública é (x, n).
A chave privada é (p, q).
• Enc(x,n)(m): a mensagem m é interpretada como uma sequência de bits
mi. Para cada bit mi da mensagem, escolha a ∈R Z∗n e calcule
ci = a
2xmi
• Decp,q(c): o texto c é interpretado como uma sequência de bits ci. Para
cada bit ci,
mi =
{
0 se ci é resíduo quadrático (mod n),
1 se ci caso contrário.
�
Por se basear no problema do resíduo quadrático, não há a necessidade de
demonstrar segurança de bit (todo bit encriptado é seguro, porque cada um é
tratado individualmente). Este criptossistema, no entanto, não é e�ciente no
que tange ao espaço utilizado: cada bit do texto claro é representado como um
número com k bits no texto encriptado.
O criptossistema de Goldwasser-Micali tem a propriedade de encriptação
homomór�ca, além de ser aleatorizado.
Teorema 9.31. A função Enc no criptossistema de Goldwasser-Micali é homo-
mór�ca para multiplicação em C e soma emM.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
168 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
Demonstração. Sejamm0 em1 duas mensagens, com Encpk(m0) = c0 e Encpk(m1) =
c1. Então
c0c1 = a
2xm0b2xm1
= a2b2xm0+m1
= (ab)2xm0+m1 ,
que é um possível valor para Encpk(m0 ⊕m1). �
Notas
O criptossistema ElGamal foi criado em 1985 por Taher ElGamal [73], e da
mesma forma que o RSA, tornou-se um dos criptossistemas assimétricos mais
usados em aplicações práticas.
Michael Rabin publicou seu criptossistema em 1979 em um relatório técnico
do MIT [179].
O criptossistema RSA foi elaborado por Ronald Rivest, Adi Shamir e Len
Adelman em 1978[181]. John Talbot e Dominic Welsh apontam [211]6 que
outro criptossistema, semelhante ao RSA, já havia sido descoberto por James
Ellis e Cli�ord Cocks em 1973: em 1969 Ellis teria chegado à de�nição de função
de mão única, mas somente em 1973 Cocks teria conseguido usar a de�nição na
construção de um criptossistema assimétrico (que foi chamado de �criptossistema
não-secreto�, porque não havia a necessidade de transmissão de chaves secretas).
Uma análise cuidadosa de ataques ao RSA e medidas preventivas é feita no
livro de Song Yan [220].
O esquema OAEP foi desenvolvido por Mihir Bellare e Phillip Rogaway [19],
e combina e�ciência e segurança demonstrável. É possível demonstrar que se
uma mensagem for codi�cada com OAEP antes de ser encriptada com o RSA,
o resultado é um criptossistema CCA-seguro.
Victor Shoup [199] mostrou que a demonstração de segurança do OAEP não
é válida. Shoup propôs um novo esquema, OAEP+, um pouco mais complexo,
com nova demonstração de segurança. A demonstração dada por Shoup é bas-
tante interessante e instrutiva � diferentes experimentos (chamados de �jogos�
no artigo de Shoup) são propostos, cada um sendo uma pequena variante do
anterior.
Eiichiro Fujisaki e outros [80] mostraram que o OAEP original garante se-
gurança IND-CCA-2 apenas em algumas situações, mas dentre elas está o uso
do criptossistema RSA.
O criptossistema de Sha� Goldwasser e Silvio Micali foi publicado em 1982 [95].
Foi o primeiro criptossistema probabilístico, e é também um criptossistema ho-
momór�co.
6Uma história detalhada da Criptogra�a está no livro de Simon Singh [203].
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
9.10. GOLDWASSER-MICALI 169
Exercícios
Ex. 79 � Mostre como generalizar o protocolo Di�e-Hellman de distribuição
de chaves para um número arbitrário de participantes. Qual é o custo com-
putacional da sua construção, comparado com o do Di�e-Hellman para dois
participantes?
Ex. 80 � O que acontece se usarmos o RSA para encriptar uma mensagem
m tal que m ∈ Zφ(N) \ Z∗φ(N)?
Ex. 81 � Prove o Teorema 9.13.
Ex. 82 � Que versão do RSA tem propriedade de encriptação homomór�ca?
Ex. 83 � Descreva detalhadamente como decriptar mensagens usando o OAEP.
Ex. 84 � No Teorema 9.24, mencionamos que se y é resíduo quadrático mó-
dulo pq, as raízes quadradas de y módulo p e módulo q devem ser distintas
porque p e q são primos. Mostre que isso é verdade.
Ex. 85 � Implemente o criptossistema de ElGamal.
Ex. 86 � Implemente o criptossistema de Rabin.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
170 CAPÍTULO 9. CRIPTOGRAFIA ASSIMÉTRICA
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 10
Assinaturas Digitais
Os códigos de autenticação de mensagens descritos no Capítulo 8 funcionam
da mesma forma que outras construções criptográ�cas de chave privada: uma
única chave é usada pelo algoritmo, tanto para criar códigos de autenticação
como para veri�cá-los. Queremos poder rotular mensagens sem ter que oferecer
ao veri�cador a chave usada (porque não queremos que ele também possa rotular
as mensagens).
No cenário da criptogra�a assimétrica, onde cada entidade tem uma chave
privada e uma pública, podemos conceber esquemas que permitam a alguém
gerar um rótulo (ou assinatura) com sua chave privada, de forma que qualquer
um possa veri�car a assinatura usando apenas a chave pública.
Há uma consequência importante disso: dado que a chave usada para assinar
uma mensagem é de conhecimento de uma única entidade, as assinaturas digitais
feitas desta forma tem a característica de não repúdio: o assinante não pode
negar a assinatura depois de produzi-la. Isso não é possível com códigos de
autenticação usando chave simétrica.
De�nição 10.1 (Esquema de assinaturas). Um esquema de assinaturas consiste
de três funções (Gen, Sign, Vrf) computáveis em tempo polinomial:
• Gen(1n) cria um par de chaves (pk, sk). Dizemos que pk é a chave pública
e que sk é a chave secreta (ou privada). Ambas as chaves devem ter
tamanho no mínimo igual a n, e deve ser possível determinar n apenas
inspecionando pk ou sk.
• Signsk(m) assina a mensagem m usando a chave sk, retornando uma
assinatura σ.
• Vrfpk(m,σ) retorna um (signi�cando �válida�) ou zero (signi�cando �invá-
lida�).
É necessário que para todo n, para todo par (pk, sk) gerado por Gen(1n) e
toda mensagem m,
Vrfpk(m, Signsk(m)) = 1. �
171
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
172 CAPÍTULO 10. ASSINATURAS DIGITAIS
10.1 Segurança
Assim como códigos de autenticação de mensagens, as assinaturas digitais devem
ser consideradas seguras desde que não possam ser fraudadas. Essencialmente,
entendemos por fraude a obtenção de assinatura sem acesso à chave privada que
supostamente seria necessária para fazê-lo (formalizaremos esta noção de dife-
rentes maneiras). Resumimos a seguir três aspectos da segurança de assinaturas
digitais que usaremos na formulação das de�nições de segurança.
Quanto aos pares de mensagem e assinatura aos quais o adversário possa ter
acesso, identi�camos três casos:
• RMA (random message attack): o adversário só tem acesso a mensagens
sorteadas aleatoreamente com suas respectivas assinaturas;
• KMA (known message attack): o adversário conhece, a priori, certas men-
sagens, e poderá ter acesso às suas assinaturas antes de tentar iniciar sua
fraude, mas as mensagens são determinadas antes do adversário conhecer
a chave pública do assinante;
• CMA (chosen message attack): o adversário pode escolher mensagens para
que sejam assinadas, após conhecer a chave pública do assinante.
Também observamos diferença entre tipos de fraude:
• Resistência a fraude existencial: quando o adversário consegue assinar
uma mensagem que nunca tenha sido assinada antes pelo assinante, tendo
apenas a chave pública, mas não tem poder para escolher a mensagem,
dizemos que o ataque é uma fraude existencial.
• Resistência forte a fraude existencial: suponha que o adversário consiga
gerar uma nova assinatura em uma mensagem já assinada anteriormente
(mas a assinatura gerada é diferente da original). Dependendo do contexto
podemos querer impedir que estas assinaturas sejam geradas. Dizemos que
esquemas de assinatura que resistam a este tipo de fraude tem resistência
forte contra fraude existencial.
O número de vezes que um esquema de assinaturas pode ser usado também
de�ne outro aspecto da segurança desses esquemas.
• Única assinatura: há esquemas que só são seguros se a chave secreta for
usada para uma única assinatura. Para gerar mais assinaturas, é necessá-
rio gerar um novo par de chaves;
• Número ilimitado de assinaturas: há também esquemas que podem ser
usados sem limite para o número de assinaturas.
Estes três aspectos (com três, dois e dois casos cada um) são independentes,
e portanto de�nem doze casos.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
10.1. SEGURANÇA 173
10.1.1 Segurança RMA
A noção mais fraca de segurança que formalizamos é a de mensagens aleatórias,
onde o adversário não controla, de forma alguma, as assinaturas às quais tem
acesso.
Experimento 10.2 (SIG_FORGE_RMA(Π,A, n)).
1. k mensagens m1,m2, . . . ,mk são escolhidas uniformemente.
2. Gen(1n) é usada para obter (pk, sk).
3. As mensagens são todas assinadas com sk: σi ← Signsk(mi).
4. A recebe pk e todos os pares (mi, σi)
5. A retorna (m,σ).
6. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m /∈
{m1,m2, . . . ,mk }.
D A
m1, . . . ,mk ∈RM
(pk, sk)← Gen(1n)
σi ← Signsk(mi)
Vrfpk(m,σ) = 1
m /∈ {m1,m2, . . . ,mk }
1n, pk,
(m1, σ1, . . . ,mk, σk)
(m,σ)
�
De�nição 10.3 (Segurança RMA para esquema de assinaturas digitais). Um
esquema de assinaturas Π = (Gen, sign, Vrf) é seguro contra ataques com men-
sagens aleatórias se para todo adversário polinomial A existe uma função des-
prezível negl(·) tal que
Pr[SIG_FORGE_RMA(Π,A,n) = 1] ≤ negl(n). �
Se último passo do experimento for modi�cado da seguinte maneira:
• A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e (m,σ) /∈
{(m1, σ1), (m2, σ2), . . . , (mk, σk)}.
Então dizemos que o esquema é fortemente seguro contra ataques com mensa-
gens aleatórias.
Quando somente uma mensagem é sorteada no início do experimento, dize-
mos que o esquema é �para somente uma assinatura�.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
174 CAPÍTULO 10. ASSINATURAS DIGITAIS
10.1.2 Segurança KMA
A próxima de�nição de segurança é mais forte. Segurança KMA (contra ataques
com mensagens conhecidas) implica em segurança RMA.
Experimento 10.4 (SIG_FORGE_KMA(Π,A, n)).
1. A recebe 1n e escolhe um conjunto M = {m1, . . . ,mk } de mensagens.
2. Gen(1n) é usada para obter (pk, sk).
3. Cada mensagem é assinada com sk: σi ← Signsk(mi)
4. A recebe pk e as assinaturas σi.
5. O adversário retorna (m,σ).
6. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m /∈ M
(ou seja, o adversário não pediu a assinatura de m ao oráculo).
D A
(sk, pk)← Gen(1n)
σi ← Signsk(mi)
Vrfpk(m,σ) = 1
m /∈ {m1,m2, . . . ,mk }
1n
(m1, . . . ,mk)
pk, (σ1, . . . , σk)
(m,σ)
�
De�nição 10.5 (Segurança KMA para esquema de assinaturas digitais). Um
esquema de assinaturas Π = (Gen, sign, Vrf) é seguro contra ataques adaptati-
vos com mensagens conhecidas se para todo adversário polinomial A existe uma
função desprezível negl(·) tal que
Pr[SIG_FORGE_KMA(Π,A, n) = 1] ≤ negl(n). �
Se último passo do experimento for modi�cado da seguinte maneira:
• A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e (m,σ) /∈
{(m1, σ1), (m2, σ2), . . . , (mk, σk)}.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
10.1. SEGURANÇA 175
Então dizemos que o esquema é fortemente seguro contra ataques com mensa-
gens escolhidas.
Quando somente uma mensagem é sorteada no início do experimento, dize-
mos que o esquema é �para somente uma assinatura�.
10.1.3 Segurança CMA
A de�nição mais forte que temos para segurança é contra ataques adaptativos
com mensagens escolhidas.
Experimento 10.6 (SIG_FORGE_CMA(Π,A, n)).
1. Gen(1n) é usada para obter (pk, sk).
2. A recebe pk e acesso de oráculo a Signsk(·); seja M o conjunto de mensa-
gens assinadas pelo oráculo, eX o conjunto de pares (mi, σi) de mensagens
enviadas por A e assinaturas retornadas pelo oráculo.
3. O adversário retorna (m,σ).
4. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m /∈ M
(ou seja, o adversário não pediu a assinatura de m ao oráculo).
D ASign
(pk, sk)← Gen(1n)
Vrfpk(m,σ) = 1
m /∈M
M = assinadas
pelo oráculo
1n, pk
(m,σ)
�
De�nição 10.7 (Segurança CMA para esquema de assinaturas digitais). Um
esquema de assinaturas Π = (Gen, sign, Vrf) é seguro contra ataques adaptati-
vos com mensagens escolhidas se para todo adversário polinomial A existe uma
função desprezível negl(·) tal que
Pr[SIG_FORGE_CMA(Π,A, n) = 1] ≤ negl(n). �
Se o Experimento SIG_FORGE_CMA for modi�cado tal que seu último passo
seja da seguinte forma:
• A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e (m,σ) /∈
X (ou seja, o adversário não obteve exatamente a assinatura σ para a
mensagem m a partir do oráculo),
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
176 CAPÍTULO 10. ASSINATURAS DIGITAIS
então dizemos que Π é fortemente seguro contra ataques adaptativos de mensa-
gem escolhida.
Quando o adversário pode escolher uma única mensagem dizemos que o
esquema tem segurança CMA para uma única vez.
10.2 Esquema de assinaturas para uma única men-
sagem
Experimento 10.8 (SIG_FORGE_ONE(Π,A, n)).
1. Gen(1n) é usada para obter (pk, sk).
2. A recebe pk e acesso de oráculo a Signsk(·), para uma única assinatura.
3. O adversário pede a assinatura de uma única mensagem, m′, ao oráculo.
4. O adversário retorna (m,σ).
5. A saída do experimento é um se e somente se Vrfpk(m,σ) = 1 e m 6= m′
(ou seja, o adversário não pediu a assinatura de m ao oráculo).
D ASign
(pk, sk)← Gen(1n)
Vrfpk(m,σ) = 1
m 6= m′
somente
m′ assinada
pelo oráculo
1n, pk
(m,σ)
�
De�nição 10.9. Um esquema de assinaturas Π tem segurança contra fraude
existencial para ataque de uma única mensagem se, para todo adversário poli-
nomial A exite uma função desprezível negl(.) tal que
Pr [SIG_FORGE_ONE(Π,A, n) = 1] ≤ negl(n). �
10.2.1 Esquema de assinaturas de Lamport
Um esquema de assinatura para o qual não se conhece ataque via algoritmo
quântico é o de Lamport, onde cada chave é usada para realizar uma única
assinatura.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
10.3. RSA 177
Construção 10.10 (Esquema de assinaturas de Lamport). Seja f uma função
de mão única e z o tamanho da mensagem a ser assinada.
• Gen(1n): Construa duas matrizes X e Y , ambas com duas linhas e z
colunas. Primeiro, escolha aleatoreamente os elementos de X (que devem
ter n bits cada):
xi,j ∈R { 0, 1 }n .
Depois preencha Y aplicando f em cada elemento de X:
yi,j ← f(xi,j).
A chave privada é X, a matriz com os valores xi,j
A chave pública é Y , a matriz com os valores yi,j
• Signsk(m): interprete a mensagemm como uma sequência de bitsm1,m2, . . . ,mz.
A assinatura é x1,m1 , x2,m2 , · · · , xzmz .
• Vrfpk(m,σ) veri�ca se, para todo 1 ≤ i ≤ z, f(xi) = yi,mi . �
Exemplo 10.11 (Esquema de assinaturas de Lamport). Sejam n = 3 e p(n) =
n. As chaves geradas são:
sk =
(
x1,0 x2,0 x3,0
x1,1 x2,1 x3,1
)
, pk =
(
y1,0 y2,0 y3,0
y1,1 y2,1 y3,1
)
.
Como n = 3 só podemos assinar mensagens de três bits. Se m = 5 (101 em
binário), a assinatura é calculada usando as posições destacadas na chave:
sk =
(
x1,0 x2,0 x3,0
x1,1 x2,1 x3,1
)
, σ = (x1,1, x2,0, x3,1).
Para veri�car esta assinatura, Vrf(101, (x1,1, x2,0, x3,1)) veri�ca:
pk =
(
y1,0 y2,0 y3,0
y1,1 y2,1 y3,1
)
f(x1) = y1,1 ?
f(x2) = y2,0 ?
f(x3) = y3,1 ?
J
Teorema 10.12. Para qualquer função f de mão única, o esquema de assinatu-
ras de Lamport é um esquema de assinaturas seguro para uma única assinatura.
10.3 RSA
O RSA tem uma propriedade interessante: se trocarmos o papel das chaves
pública e privada, o resultado é um esquema de assinaturas. Para assinar,
encriptamos com a chave privada. Para veri�car uma assinatura, decriptamos
com a chave pública
Construção 10.13 (Esquema RSA de assinaturas (versão livro-texto)).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
178 CAPÍTULO 10. ASSINATURAS DIGITAIS
• Gen (o mesmo do criptossistema RSA) gera pk = (b,N) e sk = (a,N).
• Signsk(m) = ma (mod N).
• Vrfpk(m,σ) = 1 se e somente se m = σb (mod N). �
Exemplo 10.14 (Assinatura com RSA (livro-texto)). Sejam p = 101, q = 3.
Temos N = 303 e φ(N) = 200, como no Exemplo 9.20. Escolhemos, como
naquele exemplo, b = 7 e a = 143.
Para assinar m = 74, encriptamos com a chave privada:
Signsk(74) = 74
143 (mod 303) = 200.
Para veri�car a assinatura de (m,σ) onde m é 74 e σ é 200, deciframos com a
chave pública:
Vrfpk(200) = 200
7 (mod 303) = 74 = m. J
Esta versão do esquema de assinaturas RSA no entanto é insegura, como
mostramos a seguir.
Fraude #1: assinando uma mensagem aleatória Seja pk = (b,N) uma
chave pública RSA. O adversário pode escolher uma assinatura σ ∈ Z∗N arbi-
trariamente e calcular m = σb (mod N). Está claro que Signpk(m) = σ, e o
adversário conseguiu uma mensagem e assinatura válidas. Embora este ataque
pareça pouco interessante de um ponto de vista prático (porque o adversário não
pode escolher nem a assinatura e nem a mensagem), ele torna o RSA inseguro
de acordo com a De�nição 10.7. Além disso, pode haver situações práticas nas
quais este ataque represente um problema.
Fraude #2: assinando uma mensagem arbitrária Seja pk = (b,N) uma
chave pública e m uma mensagem que o adversário queira assinar. Seja m1
uma mensagem com assinatura σ1 e m2 = m/m1 (mod N). O adversário de
alguma forma convenceo detentor de sk a assinar m2, obtendo σ2 e calcula
Signsk(m) sem precisar usar a chave secreta sk: basta calcular σ = (σ1σ2)
(mod N). Veri�camos que esta realmente é a assinatura de m. O algoritmo Vrf
veri�ca se σb = m; pois então temos:
σb = (σ1σ2)
b = (ma1m
a
2)
b
= mab1 m
ab
2 = m1m2 = m (mod N).
10.3.1 Full-domain hash
Há diversos esquemas de assinatura baseados no RSA que tentam remediar os
problemas descritos nesta Seção. Um deles é bastante simples: ao invés de
aplicar diretamente o RSA para produzir assinaturas de mensagens m ∈ Z∗p,
assinamos resumos criptográ�cos de mensagens. O resultado é o full-domain
hash, ou FDH, outro esquema de assinaturas. Pode-se demonstrar a segurança
do FDH usando o modelo do oráculo aleatório.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
10.4. ELGAMAL 179
Construção 10.15 (Full-domain hash usando RSA).
• Gen(1n) gera um par de chaves RSA e uma função e hashing H com
entrada e saída de n bits.
• Signsk(m) = H(m)a (mod N)
• Vrfpk(m,σ) = 1⇔ H(m) = σb (mod N). �
O algoritmo Gen deve �gerar� uma função de hashing de n em n bits, já que
é o que será necessário para Sign e Vrf.
Veri�camos agora o efeito desta medida nos ataques descritos.
• Fraude #1: o adversário precisaria computar m′ = σb (mod N) e depois
tentar encontrar m tal que H(m) = m′. Se a função de hashing H for
difícil de inverter, a di�culdade do ataque será a mesma;
• Fraude #2: para obter 1 nalgum dos experimentos que descrevemos, o
adversário precisaria encontrar três mensagensm,m1,m2 tais queH(m) =
H(m1)H(m2) (mod N). Este ataque também deve ser difícil se H for
difícil de inverter.
10.4 ElGamal
ElGamal descreveu no mesmo artigo um criptossistema e um esquema de assi-
naturas � mas o esquema de assinaturas não é apenas uma maneira diferente
de usar o criptossistema (como no caso do RSA). Ele apenas tem como base o
mesmo pressuposto (a intratabilidade do problema do logaritmo discreto) e usa
o mesmo algoritmo para geração de chaves.
Considere as chaves pública e privada do criptossistema ElGamal: pk =
〈G, q, g, h〉 e sk = 〈G, q, g, x〉, onde h = gx.
Iniciamos com a seguinte congruência:
m ≡ ax+ by (mod φ(q)). (10.1)
Pelo Teorema B.46, as soluções para esta congruência são as mesmas soluções
para
gm ≡ gax+by (mod q)
≡ gaxgby (mod q)
≡ haab (mod q).
No esquema ElGamal, a assinatura de uma mensagem é exatamente o par (a, b)
acima, que esperamos só poder ser produzido e�cientemente por alguém de posse
da chave privada (e portanto de x). Assinar uma mensagem é calcular (a, b) tais
que m ≡ ax+ by (mod q − 1). Isso é feito da seguinte forma:
a = gy (mod q)
b = (m− ax)y−1 (mod q − 1).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
180 CAPÍTULO 10. ASSINATURAS DIGITAIS
Sendo x e y secretos, não é conhecido algoritmo para resolver e�cientemente a
congruência na Equação 10.1.
Veri�car a assinatura é fácil, mesmo sem a chave secreta: basta que gm ≡
haab (mod q) para que a assinatura (a, b) seja válida.
Desta forma chegamos então ao esquema de assinaturas de ElGamal.
Construção 10.16 (Esquema de assinaturas de ElGamal).
• Gen(1n): use G(1n) para escolher um grupo cíclico G com ordem q, com
gerador g, sendo que q é representável com n bits.
x ∈R Zq
h← gx
A chave pública é 〈G, q, g, h〉.
A chave privada é 〈G, q, g, x〉.
• Sign: dada a chave privada pk = 〈G, q, g, x〉 e a mensagemm ∈ G, escolha
y ∈R Zq, sejam
a = gy (mod q)
b = (m− ax)y−1 (mod q − 1).
Devolva (a, b).
• Vrf: dada a chave pública pk = 〈G, q, g, h〉, e a assinatura (a, b), retorne
um se e somente se
haab ≡ gm (mod q). �
10.4.1 DSA
O DSA é uma variante do esquema ElGamal de assinaturas adotado como pa-
drão pelo NIST. As diferenças do ElGamal para o DSA podem ser resumidas
em dois pontos:
• O DSA usa um grupo de ordem p, que deve ser um primo com tamanho l
múltiplo de 64 e 512 ≤ l ≤ 1024, e também um subgrupo de ordem q cujo
tamanho deve ser 160 bits.
• No DSA a mensagem não é usada diretamente na assinatura: um resumo
de 160 bits é usado (o DSA foi proposto para ser usado com a função
de hashing SHA-1, mas o SHA-1 posteriormente foi considerado inseguro;
pode-se usar SHA-2). Além disso, a subtração no cálculo de b do ElGamal
é trocada por uma adição. Temos então
b = (H(m) + ax)y−1 (mod q).
A Construção a seguir é o esquema de assinaturas DSA.
Construção 10.17 (Esquema de assinaturas DSA). Seja H uma função de
hashing com saída de 160 bits.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
10.5. F FULL-DOMAIN HASH COMQUALQUER PERMUTAÇÃODEMÃOÚNICA181
• Gen(): Escolha um grupo cíclico G com ordem p e gerador g, sendo que p
é representável com 160 bits.
Escolha um subgrupo de G com ordem q, tal que o tamanho de q seja
múltiplo de 64 e esteja entre 512 e 1024.
x ∈R Zq
h← gx (mod p)
A chave pública é 〈G, q, g, h〉.
A chave privada é 〈G, q, g, x〉.
• Sign: dada a chave privada pk = 〈G, q, g, x〉 e a mensagemm ∈ G, escolha
y ∈R Zq, sejam
a =
(
gy (mod p)
)
(mod q)
b = (H(m) + ax)y−1 (mod q).
Devolva (a, b).
• Vrf: dada a chave pública pk = 〈G, q, g, h〉, e a assinatura (a, b), e sejam
e = H(m)b−1 (mod q)
f = ab−1 (mod q).
Retorne um se e somente se
a =
(
geyf (mod p)
)
(mod q). �
O documento FIPS-186-2 descreve uma instância do DSA onde o grupo
usado é o de pontos em uma curva elíptica sobre Zp. Este esquema é conhecido
como ECDSA (Elliptic Curve DSA).
10.5 F Full-domain hash com qualquer permuta-
ção de mão única
(Esta Seção não foi redigida ainda)
É possível trocar o RSA no FDH por qualquer família de permutações de
mão única, mantendo sua segurança.
10.6 Árvores de assinaturas
Uma árvore de Merkle é uma árvore binária onde as folhas são hashes de men-
sagens, e cada nó interno contém o hash do conteúdo de seus dois �lhos.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
182 CAPÍTULO 10. ASSINATURAS DIGITAIS
10.6.1 Estendendo assinaturas de uma única mensagem,
para muitas
Notas
Assinaturas digitais usando pares de chaves pública e privada foram idealizadas
inicialmente no mesmo artigo de Di�e e Hellman [69] onde expuseram a ideia
de criptossistemas assimétricos.
Neste texto seguimos a abordagem de Jonathan Katz [129] para a classi�ca-
ção da segurança de esquemas de assinaturas.
O esquema de assinaturas de uma única vez foi desenvolvido por Leslie Lam-
port, e descrito em um relatório técnico [142].
O livro de Jonathan Katz [129] contém um estudo detalhado sobre os fun-
damentos teóricos das assinaturas digitais, e uma discussão detalhada do full-
domain hash.
Exercícios
Ex. 87 � Mostre que se a assinatura (a, 0) for gerada para uma mensagem
usando o DSA, é possível a qualquer um determinar a chave privada do assi-
nante.
Ex. 88 � O padrão DSA determinava inicialmente que a função de hash
usada deveria ser exatamente o SHA-1 (a crença até então era de que para
encontrar colisões no SHA-1, que tem saída de 160 bits, um adversário precisa-
ria de 280 operações). Desde então diversos ataques ao SHA-1 foram descobertos
e publicados:
•Em 2005, Xiaoyun Wang, Yiqun Lisa Yin, e Hongbo Yu mostraram [216]
como encontrar colisões no SHA-1 usando 269 operações.
•Em 2008 Stéphane Manuel publicou um ataque [153] ao SHA-1 que permite
obter colisões com complexidade entre 251 e 227.
A respeito disso, responda:
a) Explique as consequências disso para o padrão DSA original.
b) Uma maneira de resolver o problema poderia ser usar a função SHA256 e
usar apenas os 160 bits da esquerda da saída. Não havendo ataques práticos
ao SHA256, esta solução seria teoricamente melhor, pior ou semelhante ao
uso de outra (boa) função de hash com 160 bits de saída?
Ex. 89 � Implemente os esquemas de assinatura descritos neste Capítulo.
Ex. 90 � A seguinte a�rmação é bastante difundida:
Dado um criptossistema assimétrico qualquer, pode-se obter um es-
quema de assinaturas simplesmente mudando o papel as chaves pú-
blica e privada: para assinar,basta encriptar com a chave privada e
para veri�car basta decriptar com a chave pública.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
10.6. ÁRVORES DE ASSINATURAS 183
Mostre que isto é um equívoco, usando como exemplos criptossistemas assimé-
tricos do Capítulo 9.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
184 CAPÍTULO 10. ASSINATURAS DIGITAIS
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Parte II
Protocolos
185
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
187
Nesta parte são descritos protocolos criptográ�cos.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
188
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 11
Introdução a Protocolos.
Exemplo: Comprometimento
Um protocolo criptográ�co é uma descrição de como diversos agentes realizam
uma computação de maneira distribuída comunicando-se através de mensagens,
sem a necessidade de con�ança entre os atores.
11.1 Modelo computacional
É costumeiro de�nir interação entre participantes de um protocolo usando má-
quinas de Turing. Neste texto estes sistemas são de�nidos usando �atores� (al-
goritmos) conectados por �portas de comunicação�.
Um ator é semelhante a um algoritmo que pode usar portas para comunica-
ção com outros atores. Cada ator (ou participante) tem:
• Um gerador pseudoaleatório, diferente de qualquer outro (ou seja, não
deve ser possível correlacionar as sequências de bits produzidas pelos dois
geradores).
• Um par de portas de entrada e saída para comunicação com o ambiente
(por estas portas o ator recebe a entrada e devolve a saída).
• Um par de portas de entrada e saída para comunicação com outro ator.
O modelo computacional que usaremos tem dois atores (embora seja possível
generalizá-lo para mais participantes); abreviamos seus nomes por A e B.
• As portas de comunicação dos dois atores estão acopladas de maneira que
ambos possam trocar mensagens (a porta de entrada de A é ligada à porta
de saída de B e vice-versa);
• Os atores interagem por troca de mensagens síncronas. Nenhum dos dois
realiza qualquer computação enquanto a mensagem é transmitida de um
para outro ou enquanto o outro está ativo;
189
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
190CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO
P V
out
in out
in
De�nição 11.1 (Resultado de uma computação em conjunto). Quando dois
atores A e B estão acoplados como descrito no texto executam um procedimento,
ambos usando a mesma entrada x, denotamos por 〈A,B〉(x) a variável aleatória
que representa a saída local de A após interagir com B. �
A complexidade de tempo de um algoritmo executado em uma única má-
quina de Turing depende somente do tamanho de sua entrada. Quando um ator
é acoplado a outro, como descrevemos, sua complexidade de tempo depende do
outro ator com quem ele se comunica. De�nimos então que a complexidade de
tempo de um ator deve ser seu tempo máximo de execução, independente de
qual seja sua contraparte.
De�nição 11.2 (Complexidade de tempo de ator). A complexidade de tempo
de um ator A é uma função f se para todo ator B e toda entrada x, a execu-
ção de A acoplado a B com entrada comum x termina após f(|x|) operações,
independente dos bits aleatórios usados por A e B durante a execução. �
11.2 Comprometimento
Um protocolo de comprometimento é usado quando uma das partes precisa
comprometer-se com um valor (ou mensagem), mas sem tornar este valor pú-
blico. Esta noção usada na construção de outras primitivas e protocolos cripto-
grá�cos, mas também é útil por si mesma.
Protocolos de comprometimento são caracterizados por duas fases:
• Comprometimento: nesta fase uma das partes (Alice, por exemplo) se
compromete com uma mensagem, mas sem revelar seu conteúdo. Alice
envia ao outro participante (Bob) um certi�cado de comprometimento (que
neste Capítulo chamamos de �um comprometimento�). Bob não deve ter
acesso à mensagem.
• Revelação: nesta fase Alice envia para Bob alguma informação adicional
que permite que Bob �nalmente tenha acesso à mensagem. Alice não deve
ser capaz de negar que se comprometeu, e nem de modi�car a mensagem.
Há duas propriedades importantes de protocolos de comprometimento:
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
11.2. COMPROMETIMENTO 191
• A propriedade de vinculação preserva os interesses de quem recebe o com-
prometimento: ele representa uma garantia de que a outra parte se com-
prometeu com algum valor, e que este valor será revelado oportunamente;
• A propriedade de sigilo preserva os interesses de quem se compromete:
apesar de se comprometer com um valor, ele é mantido em sigilo.
De�nição 11.3 (Protocolo de comprometimento). Um protocolo de compro-
metimento é composto dos algoritmos polinomiais Gen, Commit e Reveal:
• Gen(1n), que é usado para produzir uma das entradas de Commit.
• Commitk(m), onde k é gerado por Gen. A saída de Commit é o par (c, d)
onde c é o comprometimento, e d é o valor de abertura.
• Revealk(c, d), que retorna uma mensagem m ou um valor especial indi-
cando que (c, d) não foi gerado por Commit.
Exigimos que para toda mensagem m e toda chave k gerada por Gen,
Revealk(Commitk(m)) = m. �
Uma das partes usará Commitk(m) para gerar c e d, e enviará c na fase de
comprometimento e d na fase de revelação. Após receber d, o outro participante
poderá obter m a usando Revealk(c, d)
Informalmente, podemos dizer que um protocolo de comprometimento é vin-
culante se nenhum adversário pode obter dois comprometimentos iguais para
mensagens diferentes. Será útil, no entanto, de�nirmos variantes desta ideia: o
protocolo é perfeitamente vinculante se não há como o adversário ter sucesso; é
estatisticamente vinculante se a probabilidade de sucesso é desprezível, mesmo
para adversários com poder de processamento in�nito; e é computavelmente
vinculante se a probabilidade de sucesso de adversários de tempo polinomial é
desprezível.
Experimento 11.4 (COMMIT_BIND(Π,A, n)).
1. Gen(1n) é usado para gerar a chave k.
2. Envie 1n para o adversário;
3. O adversário determina uma mensagem m, um comprometimento c =
Commitk(m) e dois valores de abertura d e d′.
4. O adversário devolve duas mensagens m,m′, os dois valores de abertura
d, d′ e o comprometimento c.
5. O resultado do experimento é 1 se e somente se m 6= m′, m,m′ 6= ⊥,
m = Revealk(c, d) e m′ = Revealk(c, d′).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
192CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO
D T
k ← Gen(1n)
m 6= m′m,m′ 6= ⊥,
m = Revealk(c, d),
m′ = Revealk(c, d
′)→ 1
1n
m,m′, d, d′, c
�
De�nição 11.5. Um protocolo de comprometimento Π é
(i) computacionalmente vinculante se para qualquer adversário polinomial A
existe uma função desprezível negl(·) tal que
Pr[COMMIT_BIND(Π,A, n) = 1] ≤ negl(n);
(ii) estatisticamente vinculante se para todo adversárioA, não necessariamente
executando em tempo polinomial, existe uma função desprezível negl(·) tal
que
Pr[COMMIT_BIND(Π,A, n) = 1] ≤ negl(n);
(iii) perfeitamente vinculante se para quaisquer A e n
Pr[COMMIT_BIND(Π,A, n) = 1] = 0. �
Para de�nir a propriedade de sigilo usaremos um experimento com dois ato-
res, um desa�ante e um adversário.
Experimento 11.6 (COMMIT_HIDE(Π,A, n)).
1. Gen(1n) é usado para gerar a chave k.
2. Envie 1n para o adversário;
3. A envia duas mensagens m1 e m2 de mesmo tamanho.
4. O desa�ante D gera um bit aleatório b ∈R {0, 1}.
5. D calcula (c, d) = Commitk(mb) e envia c para A.
6. A devolve um bit b′
7. O resultado do experimento é um se b = b′ e zero caso contrário.
Ve
rs
ãoPr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
11.2. COMPROMETIMENTO 193
D T
k ← Gen(1n)
b ∈R { 0, 1 }
(c, d)← Commitk(mb)
b = b′ → 1
b 6= b′ → 0
1n
m1,m2
c
b′
�
De�nição 11.7. Um protocolo de comprometimento Π tem
(i) sigilo computacional se para qualquer adversário polinomial A existe uma
função desprezível negl(·) tal que
Pr[COMMIT_HIDE(Π,A, n)] ≤ 1
2
+ negl(n).
(ii) sigilo perfeito se para qualquer adversário (polinomial ou não) A e todo n,
Pr[COMMIT_HIDE(Π,A, n)] = 1
2
. �
Teorema 11.8. Não existe protocolo de comprometimento com vínculo perfeito
e sigilo perfeito.
Demonstração. Um protocolo perfeitamente vinculante precisa ser determinís-
tico, de outra forma o adversário com tempo ilimitado poderia encontrar as duas
mensagens com o mesmo comprometimento. Isto contraria a de�nição de sigilo
perfeito. �
Construção 11.9 (Protocolo de comprometimento com resumos). Seja H uma
família de funções de hashing. Um protocolo de comprometimento pode ser
construído como mostrado a seguir.
• Gen(1n) escolhe aleatoreamente s e uma função de hashing Hs.
• Commitk(m) = 〈Hs(r||m), (r,m)〉, onde r ∈R {0, 1}n.
• Revealk(c, (r,m)): obter a mensagem é trivial; veri�car que c = Hs(r||m)
também. �
O Exercício 92 pede a demonstração das propriedades do protocolo de com-
prometimento com resumos.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
194CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO
Construção 11.10 (Protocolo de comprometimento usando logaritmo dis-
creto).
• Gen(1n) escolhe aleatoreamente um primo p com n bits, um gerador g para
Z∗p.
• Commitk(m) = (gm,m).
• Revealk(c,m) veri�ca se c = gm. �
Teorema 11.11. Presumindo a hipótese do logaritmo discreto, o protocolo des-
crito na Construção 11.10 tem sigilo computacional e vínculo perfeito.
Demonstração. Como Bob só tem a descrição do grupo e gm, determinar a
mensagem é exatamente resolver o problema do logaritmo discreto e portanto
o protocolo tem sigilo computacional.
O logaritmo de m na base g é único no grupo Z∗n, portanto Alice nunca
poderá trocarm por uma segunda mensagemm′ sem alterar o comprometimento
� e portanto o protocolo tem vínculo perfeito. �
Se modi�carmos o problema usado como base do protocolo do logaritmo
discreto para o de Di�e-Hellman obtemos o protocolo de Pedersen.
Construção 11.12 (Protocolo de comprometimento de Pedersen).
• Gen(1n) escolhe aleatoreamente um primo p com n+1 bits tal que p = 2q+1
para algum primo q. Retorne (p, g, y) onde g é um gerador para Z∗p e
y ∈R Z∗p.
• Commitk(m): escolha r ∈R Z∗q e calcule c = grym (mod p) Retorne 〈c, (r,m)〉.
• Revealk(c, (r,m)): se c = grym retorne m, senão retorne ⊥ (um valor
indicando que o comprometimento não é válido).
É necessário que m ∈ Z∗q . �
Teorema 11.13. O protocolo de Pedersen tem sigilo perfeito e vinculação com-
putacional.
Demonstração. Como r é escolhido aleatoreamente em Z∗q , grym é uniforme-
mente distribuído em G, independente de m. Concluímos que o protocolo tem
sigilo perfeito.
A propriedade de vinculação seria quebrada se for possível encontrar (r,m)
e (r′,m′) tais que m 6= m′ e
Revealk(c, (r,m)) = m
Revealk(c, (r
′,m′)) = m′.
Isso é o mesmo que
grym = gr
′
ym
′
(mod p),
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
11.2. COMPROMETIMENTO 195
mas então gr−r
′
= ym
′−m (mod p), e
y = g(r−r
′)−(m′−m)−1 (mod q) (mod p).
Isso, por sua vez, signi�ca computar o logaritmo de y na base g. Como y
é escolhido uniformemente ao acaso, teríamos que contradizer a hipótese do
logaritmo discreto. Concluímos que o protocolo tem vinculação computacional.
�
Há algo importante a observar a respeito dos dois protocolos baseados em lo-
garitmo discreto: um deles usa apenas gm como comprometimento, e é bastante
claro que quebrar seu sigilo é equivalente a calcular o logaritmo discreto de m.
Por outro lado, como este logaritmo é único, obtemos vinculação perfeita. Ao
mudar de gm para grym abrimos mão da vinculação perfeita, porque há diversos
valores de r e m para os quais c = grym. No entanto, a multiplicação por gr
passou a nos dar sigilo perfeito.
É possível também construir um protocolo de comprometimento a partir de
um criptossistema assimétrico com segurança CPA.
Construção 11.14 (Protocolo de comprometimento com criptossistema assi-
métrico). Seja Π = (Gen, Enc, Dec) um criptossistema de chave pública com
segurança CPA.
• Gen(1n) de Π é usado para gerar sk, pk.
• Commitk(m) = (Encpk(m), sk).
• Revealk(c, (pk, sk)) decripta m com a chave privada sk, e retorna m se
Encpk(m) = c, senão retorna ⊥. �
O Exercício 96 pede a demonstração do seguinte Teorema.
Teorema 11.15. Se Π é um criptossistema de chave pública com segurança
CPA, então a construção 11.14 usando Π é um protocolo de comprometimento
com sigilo computacional. Se em Π a decriptação é não-ambígua, então o pro-
tocolo tem vinculação perfeita.
11.2.1 Comprometimento de bit
Há protocolos para obter comprometimento com um único bit. Mostramos aqui
apenas um deles, usando resíduos quadráticos.
Construção 11.16 (Protocolo de comprometimento com resíduos quadráticos).
1. Gen(1n) escolha um inteiro N com tamanho n bits. A distribuição dos
bits deve ser uniforme.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
196CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO
2. Commitk(b): Alice escolhe y ∈R Z∗N , que não é resíduo quadrático. Para
comprometer-se com zero, Alice envia c, que é um quadrado x2. Para
comprometer-se com um, envia c que é não quadrado: c = yx2. Retorne
c e d = (x, y).
3. Revealk(c, (x, y)): se c = x2 retorne zero; se c = yx2 retorne um; senão
retorne ⊥. �
Teorema 11.17. O protocolo 11.16 é perfeitamente vinculante e, sendo verda-
deira a hipótese do resíduo quadrático, é computacionalmente ocultante.
Demonstração. Como os comprometimentos dos bits são quadrados para zero e
não quadrados para um, é impossível conseguir um comprometimento que sirva
tanto para zero como para um, e portanto o protocolo tem vínculo perfeito.
O protocolo tem sigilo computacional porque se fosse possível distinguir entre
comprometimentos de zeros e uns seria possível determinar e�cientemente se um
número é resíduo quadrático módulo N . �
11.2.2 Veri�cação de igualdade de logaritmos
Esta Seção descreve um protocolo simples que permite a uma parte P provar
para uma outra, V , que dados dois geradores g1, g2 de um grupo Gq e dois
elementos h1, h2 ∈ Gq, existe um a tal que h1 = ga1 e h2 = ga2 (ou seja, que o
logg1 h1 = logg2 h2 (mod q)).
Construção 11.18 (Protocolo para provar de igualdade de logaritmos). Sejam
g1, g2 geradores de um grupo Gq, com q primo, e sejam h1, h2 ∈ Gq.
O provador P conhece a tal que h1 = ga1 e h2 = g
a
2 .
• P escolhe w ∈R Gq e envia a1 = gw1 e a2 = gw2 para o veri�cador V ;
• V envia um desa�o aleatório c ∈R Zq para P ;
• P devolve r = w − ac (mod q);
• V veri�ca que a1 = gr1hc1 e a2 = gr2hc2. �
A veri�cação funciona porque
gr1h
c
1 = g
w−ac
1 h
c
1
= gw−ac1 (g
a
1 )
c
= gw−ac1 g
ac
1
= gw1 = a1.
O mesmo é válido para a2 e gr2h
c
2. Note que o veri�cador V não tem informação
que permita deduzir a � apenas é convencido de que o dois logaritmos são iguais.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
11.2. COMPROMETIMENTO 197
11.2.3 Cara-ou-coroa
Uma aplicação imediata de protocolos de comprometimento é o jogo de cara-
ou-coroa por telefone. Se Alice e Bob precisam jogar uma moeda para decidir
aleatoreamente entre duas opções, garantindo que nenhum deles possa in�uen-
ciar a decisão, podem fazê-lo da seguinte maneira:
1. Alice compromete-se com um bit bA ∈R {0, 1} e envia o comprometimento
cA para Bob;
2. Bob também se compromete com um bit bB ∈R {0, 1} e envia o compro-
metimento cB para Alice;
3. Uma vez que cada um tenha o comprometimento do outro, Alice e Bob
enviam um ao outro os valoresque cada um escolheu (bA e bB);
4. Ambos computam o resultado bA ⊕ bB .
É fácil perceber que Pr(cara) = Pr(coroa) = 1/2.
Notas
Exercícios
Ex. 91 � Porque no modelo computacional apresentado neste Capítulo dis-
semos que A e B devem ter geradores pseudoaleatórios diferentes?
Ex. 92 � Demonstre as propriedades de ocultamento e vinculação para o
protocolo de comprometimento usando resumos. Que propriedades da função
de resumo são importantes? As propriedades do protocolo mudam de acordo
com as propriedades do resumo?
Ex. 93 � O protocolo de transferência inconsciente dado neste Capítulo usa
o RSA. Generalize-o tanto quanto conseguir (tente descrevê-lo em termos de
estruturas algébricas).
Ex. 94 � Se quisermos usar um protocolo de comprometimento com sigilo
perfeito, mas insistirmos em garantir que Gen seja executada por alguém não
con�ável, como podemos proceder?
Ex. 95 � A Demonstração do Teorema 11.13 diz que como �grym é unifor-
memente distribuído em G, independente de m�, o protocolo tem sigilo perfeito.
Elabore estas a�rmações com mais rigor (primeiro a a�rmação a respeito da
distribuição de grym, inclusive sobre a independência de m, e �nalmente mostre
que isso realmente confere sigilo perfeito ao protocolo.
Ex. 96 � Demonstre o Teorema 11.15.
Ex. 97 � Implemente todos os protocolos descritos neste Capítulo.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
198CAPÍTULO 11. INTRODUÇÃOA PROTOCOLOS. EXEMPLO: COMPROMETIMENTO
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 12
Compartilhamento de
Segredos
Queremos manter um segredo em sigilo � por exemplo, a chave para decriptar
um documento ou para permitir acesso a um sistema � mas não queremos que
este segredo seja conhecido apenas por uma pessoa. Seria interessante se o
segredo fosse compartilhado entre várias pessoas, e que fosse revelado apenas
quando um subconjunto autorizado dos participantes decidisse fazê-lo. O foco
deste Capítulo são protocolos para realizar este objetivo. Estes protocolos são
chamados de esquemas de compartilhamento de segredos.
Quando há n participantes e o quórum (ou limiar) para revelação do se-
gredo é de k participantes, dizemos que o protocolo é um esquema (k, t) de
compartilhamento de segredos. Há também esquemas mais gerais onde não
determinamos um quórum, mas especi�camos quais conjuntos de participantes
podem revelar o segredo.
Dentre os esquemas expostos neste Capítulo o de Shamir é particularmente
importante porque dele derivam esquemas de compartilhamento veri�cável, e
porque é usado como bloco básico na construção de protocolos (por exemplo,
nos protocolos para computação distribuída segura, descritos no Capítulo 15).
Primeiro de�niremos estruturas de acesso, que são a forma como especi�ca-
mos os participantes autorizados.
De�nição 12.1 (Estrutura de Acesso). Seja P um conjunto de participantes.
Os subconjuntos de P podem ser divididos arbitrariamente em dois conjuntos,
um deles chamado de conjunto dos quali�cantes e o outro de conjunto dos não
quali�cantes. O conjunto dos quali�cantes é chamado de estrutura de acesso
sobre P . �
Exemplo 12.2. Suponha que para realizar operações bancárias de grande valor
em uma organização, seja necessário a autorização de um dos seguintes grupos:
• Presidente e Coordenador Financeiro;
199
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
200 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
• Todos os quatro membros do Conselho
• Coordenador Financeiro, Vice-Presidente e dois membros do Conselho;
Assim, podemos ter um segredo que autoriza uma operação de grande valor,
dividido em partilhas dadas a cada participante, de forma que apenas esses
conjuntos possam revelá-lo. A estrutura de acesso é
Γ =
 {p, f}, {c1, c2, c3, c4}{f, v, c1, c2}, {f, v, c1, c3}, {f, v, c2, c3},{f, v, c1, c4}, {f, v, c2, c4}, {f, v, c3, c4}
 J
Se um conjunto quali�cante tem acesso ao segredo, um superconjunto dele
também deve ter. Esta ideia é capturada pelo conceito de estrutura monótona.
De�nição 12.3 (Estrutura Monótona). Seja A um conjunto. Uma estrutura
monótona sobre A é uma coleção Γ de subconjuntos de A tal que
• A ∈ Γ;
• Se X ∈ Γ e X ⊂ X ′ ⊂ Γ, então X ′ ∈ Γ. �
Todas as estruturas de acesso que usaremos são monótonas.
De�nição 12.4 (Esquema de Compartilhamento de Segredos). Seja Γ uma es-
trutura monótona de acesso sobre um conjunto P de participantes. Um esquema
de compartilhamento de segredos Π sobre Γ é um par de algoritmos:
• Share(s,Γ): dado um segredo s e a estrutura de acesso Γ, uma partilha
Sa é determinada para cada participante a ∈ P ;
• Combine(H): se H é um conjunto de partilhas obtido de Share(s,Γ), e as
partilhas de H são de participantes que formam um conjunto quali�cante:
H = {Sa | a ∈ O,O ∈ Γ } ,
então Combine deve retornar s. �
12.1 Esquemas com quórum
Os primeiros esquemas de compartilhamento de segredos foram propostos in-
dependentemente em 1979 por Adi Shamir [192] e George Blakley [29], e não
usam estruturas de acesso. São de�nidos de forma que dentre n participantes,
qualquer quórum (ou limiar) de k ≤ n possa obter o segredo (estes são chamados
de esquemas (k, n) de compartilhamento).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.1. ESQUEMAS COM QUÓRUM 201
12.1.1 Esquema de Shamir
Duas observações muito simples formam a base do esquema de compartilha-
mento de segredos de Shamir:
• Interpolação: dados n+1 pontos (xi, yi) diferentes, há um único polinômio
de grau n passando por todos os pontos.
• Sigilo: dado um conjunto contendo menos que n + 1 pontos, pode-se de-
terminar in�nitos polinômios passando por todos os pontos do conjunto.
A ideia básica usada no esquema de Shamir é:
• Gere um polinômio p(·) de grau t aleatoreamente, mas cujo termo cons-
tante é igual ao segredo s.
• Dê a cada participante um ponto (x, p(x)).
• Quando t+ 1 participantes se reunirem com seus pontos, estará determi-
nado o polinômio (e o termo constante). Com um participante a menos,
eles nada sabem a respeito do polinômio.
No entanto, esta ideia foi descrita para polinômios sobre corpos in�nitos.
O esquema de compartilhamento de Shamir adapta este método para corpos
�nitos.
Para obter o polinômio de grau n a partir dos pontos, usamos interpolação
usando a fórmula de Lagrange, que derivamos a seguir.
Teorema 12.5. Sejam n+ 1 pontos (xi, yi), todos distintos. O (único) polinô-
mio de grau n passando por todos os pontos é tal que seu valor em x pode ser
calculado da seguinte forma:
l(x) =
n∑
j=0
yj lj(x)
lj(x) =
n∏
k=0;k 6=j
x− xk
xj − xk
.
Demonstração. Supomos que temos n+1 pontos distintos (x0, y0), . . . , (xn, yn).
De�nimos os seguintes polinômios:
lk(x) =
(x− x0) · · · (x− xk−1)(x− xk+1) · · · (x− xn)
(xk − x0) · · · (xk − xk−1)(xk − xk+1) · · · (xk − xn)
.
Estes polinômios são todos de grau n. Consideramos agora dois casos:
• Quando calculamos lk(xk), o numerador e denominador são iguais e por-
tanto lk(xk) = 1;
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
202 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
• Quando calculamos lk(xj), com j 6= k, o fator (xj − xj) estará no nume-
rador, que portanto resulta em zero 1.
De�nimos então o polinômio resultante da soma de todos os lk de grau n (lem-
bramos que já temos o valor l(xk), que inicialmente chamamos de yk):
Pn(x) =
n∑
k=0
l(xk)lk(x).
Como todos os lk(x) são de grau n e para os pontos x0, x1, . . . xn, teremos
portanto
Pn(xi) = l(xi)l0(xi) + · · ·+ l(xi)li(xi) + · · ·+ l(xi)ln(xi)
e como somente li(xi) é diferente de zero (e igual a um), temos
Pn(xi) = l(xi)(1) = l(xi).
E o polinômio Pn coincidirá com os n+ 1 pontos xi. �
No contexto do esquema de Shamir, estamos interessados no coe�ciente cons-
tante do polinômio. Temos então
l(0) =
n∑
j=0
yjrj
rj = lj(0) =
n∏
k=0;k 6=j
xk
xk − xj
.
O vetor (r1, r2, . . . , rn) é chamadode vetor de recombinação.
Construção 12.6 (Esquema de compartilhamento (k,n) de Shamir). Seja Fq
um corpo, s um segredo, k o quórum e n o total de participantes.
• Share(s): Para distribuir o segredo entre os n participantes:
1. Cada participante i é identi�cado com xi ∈ Fq.
2. Escolha uniformemente k − 1 coe�cientes a1, . . . , ak−1. e seja p o
polinômio p(x) = s+ a1x+ a2x2 + . . .+ ak−1xk−1.
3. Cada participante i recebe por um canal seguro o ponto (xi, p(xi))
(portanto n pontos são distribuídos).
• Combine(H) : Para revelar o segredo, k participantes mostram seus pontos
(xi, p(xi)) e calculam o valor do polinômio em zero usando o polinômio
interpolador de Lagrange. �
1Para valores diferentes dos xi dados inicialmente, lk(x) não é necessariamente um nem
zero.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.2. SEGURANÇA 203
O esquema de Shamir é seguro, porque mesmo conhecendo k−1 chaves a pro-
babilidade do segredo ser qualquer elemento do corpo F é uniforme; é mínimo,
porque o tamanho de cada chave não é maior que o do segredo; é extensível,
porque podemos criar mais pontos do polinômio e distribuir, aumentando n; e
é um esquema com limiar.
O esquema de Shamir, no entanto, não pode ser usado com qualquer es-
trutura de acesso � funciona apenas com quórum. Apesar disso, serve como
fundamento para a construção de outros esquemas mais �exíveis, como veremos
mais adiante.
12.1.2 Esquema de Blakley
Assim como duas observações sobre polinômios fundamentam o funcionamento
do esquema de Shamir, os seguintes fatos a respeito de hiperplanos são usados
na construção do esquema de compartilhamento de segredos de Blakley: em um
espaço vetorial de n dimensões, n hiperplanos não paralelos se interceptam em
um único ponto; mas com n− 1 hiperplanos, há in�nitos pontos de interseção.
Construção 12.7 (Esquema de compartilhamento de segredos de Blakley). O
espaço onde o segredo é codi�cado é um corpo �nito de n dimensões.
• Share(s) : para distribuir o segredo entre n participantes, codi�que o
segredo como um ponto em n dimensões. Dê a cada participante um
hiperplano passando pelo ponto.
• Combine(H) : n participantes, cada um com um hiperplano diferente,
podem determinar a interseção de seus hiperplanos, que é o segredo. �
O esquema de Blakley é extensível porque podemos criar novos hiperplanos
passando pelo ponto onde está o segredo; e é um esquema com limiar. No
entanto, não é estritamente seguro e não é mínimo.
12.2 Segurança
Mencionamos dois aspectos importantes da segurança de esquemas de comparti-
lhamento: um deles é o sigilo (um conjunto não autorizado de participantes não
pode obter qualquer informação sobre o segredo) e o outro é a veri�cação (deve
ser possível veri�car se algum dos participantes está agindo desonestamente).
12.2.1 Sigilo
De�nição 12.8 (Sigilo esquema de compartilhamento de segredos). Seja Π um
esquema de compartilhamento de segredos com estrutura de acesso Γ. Dizemos
que Π tem sigilo perfeito se
Pr(s) = Pr(s|H ′)
para qualquer H ′ /∈ Γ. �
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
204 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
Teorema 12.9. O esquema de compartilhamento de segredos de Blakley não
tem sigilo perfeito.
Demonstração. Seja s um segredo representado como um ponto (s1, s2, . . . , sm)
usando o esquema de Blakley, com limiar igual a t. De posse de nenhuma
informação, sabe-se que o segredo está em Zmn . A probabilidade de um ponto
selecionado uniformemente ser igual a s é 1/nm.
Conhecendo k < t partilhas, restam apenas t − k partilhas que precisamos
descobrir � se tentarmos selecioná-las uniformemente a probabilidade de encon-
trarmos s é
1
nt−k
<
1
nm
.
Mais interessantemente, com t− 1 partilhas a probabilidade é 1/n. �
Ainda que n seja exponencial no número de bits usados, estritamente falando
o esquema de Blakley não tem sigilo perfeito.
O Exercício 98 pede a demonstração de que o esquema de Shamir, ao con-
trário do de Blakley, tem sigilo perfeito.
Teorema 12.10. O esquema de compartilhamento de segredos de Shamir tem
sigilo perfeito.
12.3 Estruturas gerais de acesso
Os esquemas de Shamir e de Blakley não permitem escolher quais participantes
podem revelar o segredo � só é possível determinar o número de participantes
necessário. Nesta seção descrevemos um esquema de compartilhamento que
permite especi�car listas arbitrárias de participantes autorizados a revelar o
segredo.
Suponha que os participantes em um esquema de compartilhamento são
• p, o Presidente;
• v, o Vice-presidente;
• c, o Presidente do Congresso;
• d, o Ministro da Defesa.
Suponha também que podem decidir declarar guerra2 e ter acesso ao código
secreto para uso de armamento nuclear:
• O Presidente da República e o Ministro da Defesa (p, d);
• O Presidente da República e o Presidente do Congresso (p, c);
• O Vice-Presidente, o Presidente do Congresso e o Ministro da Defesa
(v, c, d).
2É uma hipótese �ctícia apenas.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.3. ESTRUTURAS GERAIS DE ACESSO 205
A estrutura de acesso para o código é
Γ =
{
{p, d}, {p, c}, {v, c, d}, {p, d, c},
{p, d, v}, {p, v, c}, {p, v, c, d}
}
Note que tivemos que listar mais conjuntos do que havíamos especi�cado (por
exemplo, {p, d, c, v}, {p, d, v} e {p, d, c} só foram incluídos porque {p, d} ∈ Γ).
Um conjunto quali�cante minimal X em Γ é aquele que não é superconjunto de
outro, também em Γ � e uma descrição minimal de Γ inclui apenas os conjuntos
quali�cantes minimais:
Γ =
{
{p, d}, {p, c}, {v, c, d}
}
Podemos reescrever a estrutura se de�nirmos p, v, d, c como variáveis binárias
(um conjunto pode ser então descrito usando 1 para �presente� e 0 para �au-
sente�). A estrutura de acesso passaria a ser, em forma normal disjuntiva com
três cláusulas conjuntivas:
Γ = (p ∧ d) ∨ (p ∧ c) ∨ (v ∧ c ∧ d).
O esquema de Ito-Nishizeki-Saito usa a descrição da estrutura de acesso nesta
forma, sendo tal Construção a demonstração do seguinte Teorema:
Teorema 12.11. Para qualquer estrutura geral de acesso Γ, existe um esquema
de compartilhamento de segredos que implementa Γ.
Construção 12.12 (Esquema de Ito-Nishizeki-Saito). Seja Γ uma estrutura de
acesso descrita na forma normal disjuntiva. Cada conjunto quali�cante minimal
O está descrito como uma conjunção. Cada posição de variável é numerada na
fórmula: por exemplo, (v1 ∧ v2) ∨ v3 tem posições 1, 2 e 3. Seja n o número de
bits necessário para representar o segredo.
• Share(s,Γ): Gere aleatoreamente valores si ∈R {0, 1}n tais que para cada
cláusula (vi ∧ . . . vj), si ⊕ . . . ⊕ sj = s. Um participante recebe si se sua
variável estiver na i-ésima posição, e portanto Share retorna um conjunto
de valores si para cada participante.
• Combine(H): qualquer um dos conjuntos quali�cantes pode revelar s ob-
servando quais valores de suas partilhas precisam ser combinados com
ou-exclusivo, levando em conta suas posições em Γ. �
Exemplo 12.13 (Esquema de Ito-Nishizeki-Saito). A estrutura já mencionada
tem três conjuntos quali�cantes (e três cláusulas conjuntivas). Para cada cláu-
sula (vi, . . . , vk), queremos que o ou exclusivo dos si, . . . , sk seja igual a s.
s = s1 ⊕ s2
= s3 ⊕ s4
= s5 ⊕ s6 ⊕ s7.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
206 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
As partilhas dos quatro participantes são determinadas pelas suas posições na
fórmula.
sp = (s1, s3)
sd = (s2, s7)
sc = (s4, s6)
sv = s5.
Suponha então que o segredo seja 0110. Escolhemos aleatoreamente s1 = 1100.
Como s deve ser igual a s1⊕s2, então s2 = s⊕s1 = 1010. Escolhemos s3 = 1110
e então s4 deve ser 1000. Escolhemos s5 = 1111 e s6 = 0010. s7 deve então ser
igual a s⊕ s5 ⊕ s6 = 1011.
s1 = 1100
s2 = 1010
s3 = 1110
s4 = 1000
s5 = 1111
s6 = 0010
s7 = 1011
As partilhas são
sp = (s1 = 1100, s3 = 1110)
sd = (s2 = 1010, s7 = 1011)
sc = (s4 = 1000, s6= 0010)
sv = (s5 = 1111).
Para revelar o segredo, p, c se reúnem e calculam
s = s3 ⊕ s4 = 1110⊕ 1000 = 0110.
Quando v, c, d se reúnem, também podem calcular s:
s = s5 ⊕ s6 ⊕ s7 = 1111⊕ 0010⊕ 1011 = 0110. J
Teorema 12.14. O esquema de Ito-Nishizeki-Saito tem sigilo perfeito.
Demonstração. Suponha que um participante tenha um valor sk. Este valor
foi escolhido aleatoreamente ou foi calculado a partir de s. Se foi escolhido
aleatoreamente, não há como extrair dela qualquer informação a respeito de s.
Mas sk pode ter sido calculado a partir de s (porque era a última variável
de uma conjunção):
sk = si ⊕ · · · ⊕ sj ⊕ s
Seja então s′ = si ⊕ · · · ⊕ sj . Evidentemente s′ tem distribuição uniforme
(porque é o ou exclusivo de outras variáveis escolhidas uniformemente) e não foi
construída usando s. Ao fazer s⊕ s′ estamos essencialmente encriptando s com
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.4. COMPARTILHAMENTO VERIFICÁVEL 207
bits escolhidos uniformemente � exatamente como no one-time pad. Assim, não
deve ser possível extrair informação a respeito de s a partir de sk, ou seja,
Pr(s|sk) = Pr(s).
O mesmo vale quando o participante tem vários valores si, ..., sk. �
O esquema de Ito-Nishizeki-Saito, no entanto, é ine�ciente: cada participante
pode receber vários valores, cada um do tamanho do segredo (no esquema de
Shamir cada participante recebe um valor de tamanho igual ao do segredo).
12.4 Compartilhamento veri�cável
Há um problema com os esquemas de Shamir e de Ito-Nishizeki-Saito: não é
possível aos participantes veri�car se as partilhas apresentadas por outros são
de fato as que receberam do distribuidor, e tampouco se todas as partilhas
distribuídas estão corretas.
Por exemplo, no esquema de Shamir qualquer participante � tanto o que
distribui os segredos como algum dos k que pretendem reconstruí-lo � pode
modi�car um par (xi, yi) de forma que o segredo original não seja recuperado,
mas sim algum outro valor. Não há como saber quem agiu desonestamente, e
nem como recuperar o valor original sem mais participantes.
De�nição 12.15 (Esquema veri�cável de compartilhamento de segredos). Um
esquema de compartilhamento de segredos veri�cável é semelhante a um es-
quema de compartilhamento de segredos, havendo um algoritmo adicional, SecVrf,
que pode ser executado por cada participante a �m de veri�car se sua partilha
está correta � ou seja, se o distribuidor entregou-lhe uma partilha que de fato
permite revelar o segredo, e que nenhum dos outros participantes modi�cará
sua partilha. �
Após um conjunto quali�cante se formar, cada um pode veri�car a corretude
das partilhas dos outros no conjunto, já que as partilhas do conjunto quali�cante
serão abertas.
O esquema veri�cável de compartilhamento de segredos de Pedersen, mos-
trado na próxima Construção, é uma extensão do esquema de Shamir usando o
problema decisional Di�e-Hellman para a veri�cação.
Após construir o polinômio a(x) que servirá para distribuir o segredo usando
o esquema de Shamir, um outro polinômio b(x) é gerado para permitir a veri�ca-
ção usando o esquema de comprometimento de Pedersen. O distribuidor entrega
pontos dos dois polinômios aos participantes, mas também publica um compro-
metimento, de forma que não seja possível a qualquer um (nem os portadores
das partilhas e nem o distribuidor) mudar seus valores posteriormente.
Construção 12.16 (Compartilhamento de segredos veri�cável (esquema de
Pedersen)).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
208 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
• Gen(1n): gere um grupo cíclico G de ordem n com gerador g, onde n é
primo.
• Share(s): escolha dois polinômios aleatórios, com S = a0:
a(x) = a0 + a1x+ a2x
2 + · · ·+ at−1xt−1
b(x) = b0 + b1x+ b2x
2 + · · ·+ bt−1xt−1.
Em seguida, cada participante recebe sua partilha, que é composta de um
ponto de cada polinômio. O participante Pi recebe os pontos a(i) e b(i).
Escolhe-se um elemento h ∈R G \ { 1 }
Calcule uma lista C = (C0, C1, C2, . . . , Ct−1), tal que
Ci = g
aihbi .
Esta lista contém um comprometimento para as partilhas de cada par-
ticipante, usando o esquema de comprometimento de Pedersen (o valor
comprometido é ai, e bi é o elemento aleatório3). Cada participante re-
cebe a lista inteira.
• SecVrf(C, a(i), b(i)): cada participante Pi veri�ca se
t−1∏
j=0
C
(ij)
j = g
a(i)hb(i).
(O índice i é do participante Pi, e o índice j é iterado para todos os
participantes)
• Combine(H): a recuperação do segredo a partir de um conjunto H de
pontos do polinômio a se dá da mesma forma como no esquema de Shamir.
�
Para veri�car que SecVrf de fato garante que a partilha está correta, basta
substituir os valores de Cj no produtório:
t−1∏
j=0
C
(ij)
j =
(
ga0hb0
)(i0) (
ga1hb1
)(i1) (
ga2hb2
)(i2) · · ·
= ga0+a1i+a2i
2+...hb0+b1i+b2i
2+...
= ga(i)hb(i).
Teorema 12.17. O esquema de compartilhamento da Construção 12.16 protege
o distribuidor com sigilo perfeito. Em outras palavras, seja t o quórum para
revelação do segredo, e P um conjunto de participantes de posse de seus segredos
e comprometimentos (a(i), b(i)). Denotamos por C a lista de comprometimentos
e V = ∪P {(a(i), b(i))}. Então
Pr [S = s|V,C] = Pr [S = s] .
3O esquema de comprometimento de Pedersen é detalhado na página 194.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.5. COMPARTILHAMENTO PUBLICAMENTE VERIFICÁVEL 209
Demonstração. (Rascunho) Seja P um conjunto de t − 1 participantes. Cada
Pi tem um par (a(i), b(i)), e todos tem a lista de comprometimentos gaihbi .
Os comprometimentos não oferecem informação, porque o esquema de com-
prometimento usado é o de Pedersen. Os pares de pontos (a(i), b(i)) também
não oferecem informação, porque o esquema de compartilhamento usado é o de
Shamir. �
Um fato importante sobre este esquema é que a veri�cação só pode ser
realizada individualmente � cada participante pode veri�car sua partilha, mas
precisa usar sua partilha secreta (a(i), b(i)), por isso não é possível que outras
entidades também façam a veri�cação.
12.5 Compartilhamento publicamente veri�cável
Os esquemas de compartilhamento veri�cável permitem aos participantes veri-
�car suas partilhas, mas não permitem que um expectador possa veri�car que
todos agiram honestamente. Os esquemas de compartilhamento publicamente
veri�cáveis permitem que qualquer um veri�que as partilhas.
De�nição 12.18 (Esquema de compartilhamento de segredos publicamente
veri�cável). Um esquema de compartilhamento de segredos publicamente veri-
�cável é semelhante a um esquema de compartilhamento de segredos, havendo
um algoritmo adicional, SecVrf, que pode ser executado por qualquer entidade,
mesmo que não seja uma das participantes (ou seja, mesmo que não tenha re-
cebido uma partilha), a �m de veri�car se as partilhas estão corretas. �
O esquema de compartilhamento de Schoenmakers, descrito nesta Seção, é
publicamente veri�cável. Este esquema depende do protocolo para veri�cação
de igualdade de logaritmos descrito na Seção 11.2.2.
A Construção a seguir é o protocolo de compartilhamento publicamente
veri�cável de Schoenmakers.
Construção 12.19 (Compartilhamento de segredos publicamente veri�cável
(esquema de Schoenmakers)).
• Gen(1n): selecione um primo q com n bits e gere um grupo G de ordem q,
com dois geradores g e h. Cada participante escolhe uma chave privada
xi ∈R Zq e publica sua chave pública yi = hxi .
• Share(s): crie um polinômio aleatório com coe�cientes em Zq:
p(x) =
t−1∑
j=0
ajx
j ,
e determine que s = a0. É importante que s não seja escolhido e inserido
no polinômio � deve ser determinado em Zq uniformemente.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
210 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
Publique para todo 0 ≤ j < t o comprometimento
Cj = g
aj
e as partilhas p(i) encriptadas para todo o ≤ i < N :
Yi = y
p(i)
i .
Usando os valores Cjpublicados, qualquer um pode computar
Xi =
t−1∏
j=0
Ci
j
j .
O distribuidor deve então publicar a assinatura baseada no protocolo
DLEQ para provar que
Xi = g
p(i)
Yi = y
p(i)
i .
Ou seja, o distribuidor simula DLEQ calculando
� wi ∈R Zq
� a1i ← gwi
� a2i ← ywii
� c← H [∀i(Xi, Yi, a1i, a2i)]
� ri = wi − p(i)c
Note que o desa�o c não é aleatório, mas calculado usando as informações
públicas calculadas até o momento. A transcrição publicada para cada i
é
[(a1i, a2i), c, ri] .
• Combine: um conjunto quali�cante reconstrói o segredo da seguinte ma-
neira: cada participante decripta sua partilha Si = h
p(i)
i usando sua chave
privada yi = gxi calculando
Si = h
p(i)
i = Y
1/xi
i .
Em seguida, dados todos os valores Si, o segredo S = hs é obtido usando
o polinômio interpolador de Lagrange.
t∏
i=1
Sλii =
t∏
i=1
hp(i)
= h
∑t
i=1 p(i)λi
= hp(0) = hs,
onde λi é o coe�ciente de Lagrange:
λi =
∏
i 6=j
j
j − i
.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.5. COMPARTILHAMENTO PUBLICAMENTE VERIFICÁVEL 211
• SecVrf: para veri�car que as partilhas estão corretas, é necessário com-
putar
Xi =
t−1∏
j=0
Ci
j
i
usando os valores Ci publicados. Pode-se então tomar
A1i = g
riXci
A2i = y
ri
i Y
c
i
e veri�car que c = H [∀i(Xi, Yi, A1i, A2i)] �
A primeira observação que devemos fazer é que de fato o algoritmo SecVrf
não depende de informação que não seja pública.
O algoritmo SecVrf, como descrito na Construção, não tem sua corretude
clara. Demonstramos então que se o algoritmo terminar com sucesso, o distri-
buidor terá se comprometido com todos os p(i), de forma que todo conjunto
quali�cante possa reconstruir o mesmo segredo gs. Como p(i) é único, demons-
traremos apenas que cada Xi e cada Yi são gp(i) e y
p(i)
i , que é exatamente o que
o distribuidor poderia modi�car.
Teorema 12.20. Se Xi = gp(i) e Yi = y
p(i)
i , os hashes comparados pelo algo-
ritmo SecVrf serão de fato idênticos.
Demonstração. As cadeias usadas como entrada para os hashes são iguais nos
Xi e Yi. Mostramos que se Xi = gp(i) e Yi = y
p(i)
i então A1i = a1i e A2i = a2i,
e que então os hashes serão iguais.
A1i = g
riXci = g
wi−p(i)cXci
= gwi−p(i)c(gp(i))c
= gwi−p(i)c+p(i)c
= gwi = a1i �
O Exercício 102 pede a demonstração do seguinte Teorema.
Teorema 12.21. O esquema de Schoenmakers é homomór�co.
Os Lemas a seguir serão usados na demonstração de segurança do esquema
de Schoenmakers. O primeiro deles estabelece que presumida a di�culdade do
problema Di�e-Hellman, quebrar a encriptação de um partilha no esquema de
Schoenmakers é difícil.
Lema 12.22. Sejam g, h, Xi, Yi, yi como na descrição do esquema de Scho-
enmakers. Sabemos que h = ga, Xi = gb e yi = gc para determinados a, b, c.
Um algoritmo e�ciente que quebre a encriptação das partilhas � ou seja, que
calcule hpi = gab a partir de ga, gb, gc e gbc � pode ser usado para resolver
e�cientemente o problema Di�e-Hellman.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
212 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
Demonstração. Seja A o algoritmo que, dados ga, gb, gc e gbc calcula e�ciente-
mente gab.
Sejam x = ga e y = gb. Para resolver o problema Di�e-Hellman queremos
obter z = gab usando A.
Escolhemos aleatoreamente a′, b′, c e usamos xa
′
, yb
′
, gc, yb
′c como entradas
para A. Como
xa
′
= (ga)
a′
= gaa
′
yb
′
=
(
gb
)b′
= gbb
′
,
obtemos, com probabilidade não desprezível de sucesso ε, o valor z′ = gaa
′bb′
como saída de A. Mas
gab = (z′)
1
a′b′
e conseguimos calcular gab. �
Lema 12.23. Se t−1 participantes do esquema de Schoenmakers puderem obter
o segredo, pode-se resolver o problema Di�e-Hellman em tempo polinomial.
Teorema 12.24. Usando o modelo do oráculo aleatório e presumida a di�cul-
dade do problema Di�e-Hellman,
• A reconstrução resulta no segredo para qualquer conjunto quali�cante de
participantes;
• Nenhum conjunto não quali�cante de participantes deve conseguir obter o
segredo.
Demonstração. O esquema de comprometimento de Chaum-Pedersen é consis-
tente, e os Xi são obtidos dos Cj como
∏
j C
ij
j � por isso as partilhas são
consistentes com o segredo. Dado o Lema 12.22 e o fato do esquema de Chaum-
Pedersen ser de conhecimento zero quando o veri�cador é honesto, nenhum
conjunto com menos de t participantes deve conseguir obter o segredo. �
12.5.1 Segredos não aleatórios
A descrição que demos do esquema de Schoenmakers presume que o segredo
é hs, sendo s escolhido aleatoreamente (durante a construção do polinômio
aleatório). De fato, precisamos que s seja escolhido uniformemente para que
o esquema seja seguro. Isso o torna aparentemente inútil, mas não é este o
caso: podemos transformá-lo em outro esquema, com a mesma segurança, que
funciona com segredos escolhidos em Zq. Suponha que o segredo que queiramos
compartilhar seja σ
• após executar Share, publique U = σ ⊕ H(hs). Depois de executar
Combine a obtenção de σ a partir de hs e U é trivial (σ = U ⊕ hs).
• O distribuidor, após executar Share, também publica U = σhs. Depois
de executar Combine, saberemos que σ = U/hs e poderemos reconstruí-lo.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.6. ENCRIPTAÇÃO COM QUÓRUM 213
12.6 Encriptação com quórum
É possível usar o criptossistema El Gamal compartilhando a chave privada entre
diversos participantes, mas de tal forma que um quórum mínimo possa decifrar
mensagens sem revelar a chave secreta.
Cada participante Pi do conjunto P recebe uma partilha si da chave (o
compartilhamento é feito usando o esquema de Shamir), e publica um compro-
metimento hi = gsi . O segredo pode ser reconstruído por t+ 1 participantes.
Temos então
s =
∑
i
siλP,i
λP,i =
∏
l∈P\{ i }
l
l − i
.
A chave pública será (q, g, h), com h = gs.
Para decifrar o texto encriptado (a, b) = (gkhkm) sem obter diretamente a
chave privada, t+ 1 participantes usam o seguinte procedimento.
Cada Pi publica zi = xsi , junto com uma prova de que
logg hi = logx zi.
O texto claro é
m =
b
xs
xs =x
∑
i siλP,i
=
∏
i
zλP,ii .
Os participantes podem obter a chave privada, mas presume-se que queiram
preservá-la e apenas decriptar mensagens.
12.7 Notas
Shamir e Blakley inventaram independentemente seus esquemas pioneiros de
compartilhamento de segredos, publicados na mesma época [29, 192].
A fórmula de Lagrange para o polinômio interpolador é normalmente apre-
sentada na literatura de Métodos Numéricos (ou Cálculo Numérico), quando da
discussão sobre interpolação. O livro de Neide Franco [78] é uma boa introdução
ao assunto.
A descrição dada aqui para o esquema de Ito-Nishizeki-Saito é semelhante à
dada por Smart em seu livro [205], onde já se aplica a modi�cação sugerida por
Benaloh e Leichter [21]. O artigo original de Mitsuru Ito, Akira Saito e Takao
Nishizeki foi publicado na conferência GLOBECOM87 [121].
O primeiro esquema de compartilhamento veri�cável foi descrito em 1985 por
Benny Chor, Sha� Goldwasser, Silvio Micali a Baruch Awerbuch [45]. Aquele
esquema já era publicamente veri�cável. Outro esquema de compartilhamento
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
214 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
de segredos com veri�cação foi descrito por Rabin e Ben-Or [151]. O esquema
de Pedersen foi descrito em um artigo em 1992 [176]. Markus Stadler publicou
um esquema publicamente veri�cável em 1996 [208]. O esquema de Stadler
funciona com estruturas arbitrárias de acesso, mas depende de uma conjectura
não padrão, chamada de �problema do logaritmo duplo�: dado
y = g(h
x)
conjectura-se ser difícil determinar x.
Eiichiro Fujisaki e Tatsuaki Okamoto publicaram seu esquema em 1998 [79].
Schoenmakers publicou seu esquema de compartilhamento publicamente ve-
ri�cável em 1999 [188], que é assintoticamente mais e�ciente o que o de Stadler
e o de Fujisaki-Okamoto, embora na prática seja mais lento.
A geração distribuída de chaves paracriptossistemas assimétricos foi pro-
posta pela primeira vez por Pedersen em 1991 [175], modi�cada de várias for-
mas. O trabalho de 1999 realizado por Rosario Gennaro, Stanislaw Jarecki,
Hugo Krawczyk e tal Rabin [84] aperfeiçoa a idea, exibindo um método com
demonstração de segurança.
12.8 Exercícios
Ex. 98 � Demonstre o Teorema 12.10.
Ex. 99 � Suponha que o esquema de compartilhamento de segredos de Sha-
mir é usado para manter uma chave secreta (usada para encriptar um testa-
mento) em sigilo. O número de participantes é n e o quórum mínimo é k.
Quando k pessoas decidiram revelar a chave, constataram que o segredo revelado
era inválido (a chave não decriptou o documento).
Mostre como determinar o valor correto da chave secreta usando dois tipos de
operação: interpolação de polinômios e cálculo do valor do polinômio em um
ponto, minimizando o número de interpolações.
Ex. 100 � Na demonstração do Teorema 12.14 dissemos que �o mesmo vale
quando o participante tem vários valores si, ..., sk�. Complete a demonstração
mostrando que esta a�rmação é verdadeira.
Ex. 101 � Descreva o esquema de compartilhamento de segredos de Shamir
(ou o de Blakley) cuidadosamente, de forma adequada para apresentação a
estudantes de ensino médio.
Ex. 102 � Demonstre o Teorema 12.21.
Ex. 103 � Tente usar os esquemas de comprometimento do Capítulo 11 para
transformar o esquema de Ito-Nishizeki-Saito (Construção 12.12) em esquema
veri�cável. Para cada construção que obtiver:
a) Determine o tipo de sigilo do esquema (perfeito, computacional, etc).
b) Determine se esquema é publicamente veri�cável ou se é veri�cável apenas
pelos participantes.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
12.8. EXERCÍCIOS 215
c) Determine em quanto o tamanho da partilha é aumentada.
d) Argumente informalmente a respeito da e�ciência do novo esquema, comparando-
a com a do esquema antigo e com as dos outros esquemas que produzir.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
216 CAPÍTULO 12. COMPARTILHAMENTO DE SEGREDOS
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 13
Provas de Conhecimento Zero
13.1 Provas Interativas
Um sistema de provas interativas é um método que dois participantes podem
usar a �m de que um deles possa provar algo ao outro. Normalmente o método
envolve a troca de um certo número de mensagens entre os dois participantes �
daí o nome �sistema interativo de provas�.
Uma �prova� neste contexto é algo dinâmico, no espírito de desa�o-resposta.
Um veri�cador emite um desa�o e o provador deve conseguir dar uma resposta
satisfatória a �m de provar algo. Por exemplo, um usuário pode precisar provar
a um sistema que tem uma senha ou algum outro segredo � mas sem mostrar
o segredo. Nos exemplos deste Capítulo, daremos os nomes �Peggy� à entidade
que pretende provar algo, e �Victor� àquela que deverá veri�car a prova.
Em um sistema de prova interativa temos as duas restrições a seguir:
• Victor executa em tempo polinomial.
• Peggy pode executar sem limite de tempo, mas as mensagens que enviar
a Victor devem ter tamanho polinomial.
É necessário também de�nir claramente o que são os �fatos� que são �prova-
dos� em um sistema de prova interativa. O provador deve convencer o veri�cador
de que um elemento x pertence a alguma linguagem1.
A De�nição de sistema de prova interativa é dada a seguir, usando o modelo
de computação descrito no Capítulo 11. As probabilidades são de que o veri�-
cador aceite a prova: V emitirá saída igual a um se aceita a prova, e zero em
caso contrário.
De�nição 13.1 (Sistema de prova interativa). Um par de atores (P, V ) é um
sistema de prova interativa para uma linguagem L se V executa em tempo
polinomial e valem as propriedades listadas a seguir.
1Linguagens são de�nidas no Apêndice C (De�nição C.33, página 356).
217
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
218 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO
i) Completude: para todo x ∈ L,
Pr[〈P, V 〉(x) = 1] ≥ 2
3
ii) Consistência: para todo y /∈ L, e para todo ator A
Pr[〈A, V 〉(y) = 1] ≤ 1
3
. �
Da mesma forma que na descrição da classe2 BPP, a escolha dos valores 2/3
e 1/3 é arbitrária.
De�nição 13.2 (Classe IP). A classe IP é formada por todas as linguagens
para as quais existe sistema de prova interativa. �
O seguinte Teorema relaciona as classes IP, NP e PSPACE .
Teorema 13.3. NP ⊆ IP = PSPACE.
13.2 Conhecimento zero
A �nalidade de um sistema de prova interativa é possibilitar que um provador
convença um veri�cador de algo, mas sem que o veri�cador ganhe qualquer infor-
mação que possa ser usada posteriormente. Por exemplo, se Peggy se apresenta
para Victor como policial disfarçada e envia a ele uma cópia de suas credenci-
ais, Victor passa a ter um documento que pode usar para mostrar a outros que
Peggy é policial. Se, ao invés disso, Peggy puder convencer Victor, sem dar-lhe
algo que Victor não pudesse ter obtido sozinho, ela terá se protegido � e dizemos
que neste caso Peggy é um provador de conhecimento zero (porque Victor não
ganhou conhecimento algum após interagir com Peggy).
Uma aplicação importante de protocolos de conhecimento zero é bastante
simples: ao invés de um usuário enviar uma senha cada vez que usa um serviço
em algum sistema, ele prova para o sistema que conhece a senha. Com isso
evita-se que a senha seja armazenada, ainda que temporariamente, no sistema.
Suponha que temos um sistema de prova interativa (P, V ). Durante a inte-
ração com P , o veri�cador V obterá dados (ele terá no mínimo uma transcrição
da interação, com todas as mensagens trocadas entre ambos). Diremos que P
é de conhecimento zero se V somente obtém dados que ele mesmo poderia ter
gerado, sem a participação do provador P .
Mais detalhadamente, para que P seja de conhecimento zero, então para
todo veri�cador V ′, e para toda entrada x, existe algum algoritmo polinomialM
que simule a interação de V ′ com P , produzindo os mesmos resultados para as
mesmas entradas, mas sem acesso a P . Admitimos que M(x) falhe com baixa
probabilidade em produzir a mesma saída que 〈P, V ′〉(x)
2Veja a De�nição C.30, na Seção C.6 do Apêndice C, página 355.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
13.2. CONHECIMENTO ZERO 219
De�nição 13.4 (Conhecimento zero perfeito). Seja (P, V ) um sistema de prova
interativa. Dizemos que (P, V ) é de conhecimento zero perfeito se para todo ator
polinomial V ′ existe um algoritmo polinomial M tal que para toda entrada x,
i) M falha com probabilidade no máximo 1/2, retornando um símbolo FA-
LHA.
ii) Seja m(x) a variável aleatória que descreve a distribuição deM(x) quando
M(x) 6= FALHA. Entãom(x) tem a mesma distribuição que 〈P, V 〉(x). �
De�nição 13.5 (Conhecimento zero computacional). Seja (P, V ) um sistema
de prova interativa. Dizemos que (P, V ) é de conhecimento zero computacional
se para todo ator polinomial V ′ existe um algoritmo polinomial M tal que
para toda entrada x, as distribuiçõesM(x) e 〈P, V 〉(x) são computacionalmente
indistinguíveis. �
De�nição 13.6 (Conhecimento zero estatístico). Seja (P, V ) um sistema de
prova interativa. Dizemos que (P, V ) é de conhecimento zero estatístico se para
todo ator polinomial V ′ existe um algoritmo polinomial M tal que para toda
entrada x, as distribuiçõesM(x) e 〈P, V 〉(x) são estatisticamente indistinguíveis.
�
13.2.1 Isomor�smo de grafo
Há um problema de decisão importante relacionado a isomor�smo de grafos3
De�nição 13.7 (ISOMORFISMO-DE-GRAFO). Dados G1 = (V1, E1) e G2 =
(V2, E2) dois grafos com o mesmo número de vértices, determinar se G1 e G2
são isomorfos. �
O problema ISOMORFISMO-DE-GRAFO está em NP (o Exercício 105
pede a demonstração).
Proposição 13.8. ISOMORFISMO-DE-GRAFO está em NP.
Não se sabe se ISOMORFISMO-DE-GRAFO está em P.
Suponha que Peggy quer poder provar que detém um determinado segredo,mas não quer divulgá-lo a quem quer que seja.
Construção 13.9 (Sistema de prova interativa para ISOMORFISMO-DE�
GRAFO). Antes de iniciar a prova, as seguintes operações são realizadas na
fase de inicialização:
1. Um grafo G1 é gerado aleatoriamente.
2. O segredo é codi�cado como uma permutação φ dos vértices de G1.
3. O grafo G2 = (φ(V1), E1) é calculado.
3De�nimos isomor�smo de grafos na Seção C.2.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
220 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO
4. Publica-se G1, G2 (mas não φ).
A permutação φ é o segredo que é entregue a Peggy. Quando Peggy quiser
provar a Victor que conhece o segredo, ambos usam o seguinte protocolo:
1. Peggy escolhe aleatoriamente uma permutação π ∈R Sn (onde n = |V1|).
2. Peggy Calcula H = π(G2) e envia H para Victor.
3. Victor escolhe um índice k ∈R {1, 2}, e o envia a Peggy; ele está pedindo
para que Peggy mostre a bijeção que transforma Gk em H.
4. Peggy envia uma das duas permutações:
σ =
{
φ ◦ π se k = 1
π se k = 2
5. Victor aplica a permutação a Gk e veri�ca se o resultado é igual a H. Se
for, sua saída é um; senão é zero. �
O diagrama a seguir ilustra a situação em que Victor escolhe G1. Peggy tem
a permutação φ e tem também π e H (gerados aleatoriamente). Victor não tem
φ nem π; ele tem os três grafos e uma permutação φ◦π, que transformaG1 emH.
P V
G1OO
φ
��
G1 gg
φ◦π
''
G2 oo
π // H G2 H
Quando Victor escolhe G2, receberá apenas π, mas ainda não terá φ nem φ ◦ π.
Após a execução do protocolo, Victor não tem nada que não pudesse com-
putar sozinho: ele tem H e uma permutação σ que transforma Gb em H (ele
poderia ter gerado σ aleatoriamente sem interagir com Peggy).
Exemplo 13.10. Damos agora um exemplo, que será útil para a compreensão
do aspecto de conhecimento zero do protocolo.
Neste exemplo, o segredo e os grafos são pequenos, mas em exemplos práticos
os grafos devem evidentemente ser grandes. Se o segredo for pequeno, pode-se
usar alguma forma de padding.
Suponha que o segredo seja 14523. Para codi�cá-lo, geramos aleatoriamente
um grafo com cinco vértices:
ab
c d
e
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
13.2. CONHECIMENTO ZERO 221
O segredo, 14523, é uma permutação:
ad
e b
c
Os dois grafos são publicados, e a permutação (1, 4, 5, 2, 3) é dada a Peggy.
Embora tenhamos mostrados a representação visual dos grafos, na prática ape-
nas as listas de arestas seriam publicadas.
Agora Peggy precisa provar para Victor que conhece o segredo. Ela escolhe
aleatoriamente uma permutação de cinco elementos: π = (3, 2, 4, 5, 1), e calcula
π(G2):
a 7→ e, b 7→ c, c 7→ a, d 7→ d, e 7→ b
O grafo resultante, H, é:
ed
b c
a
Peggy envia o grafo H para Victor.
Victor agora escolhe aleatoriamente um dos grafos, G1, e envia para Peggy
o índice 1.
Peggy precisa então provar que G1 é isomorfo a H. Ela envia então o iso-
mor�smo φ ◦ π para Victor:
(5, 4, 2, 3, 1)
Victor veri�ca que de fato, aplicando este isomor�smo em G1 ele obtém H, e
aceita a prova.
A transcrição da interação entre Peggy e Victor é mostrada a seguir.
P → V : H
V → P : 1
P → V : φ ◦ π
O protocolo é de conhecimento zero porque Victor não ganhou nada que não
pudesse produzir sozinho: ele não pode provar para mais ninguém que G1 e
G2 são isomorfos. Ele tem apenas a transcrição da interação com Peggy, mas
ele poderia facilmente tê-la gerado sozinho: bastaria criar uma permutação dos
vértices de G1 e anotar H, 1 e a permutação. J
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
222 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO
Antes de enunciar o teorema 13.11, observamos o que o que �zemos com
o segredo (a permutação φ): combinamos cada elemento da permutação com
outra, aleatória. Isso é, de certa forma, equivalente à operação de encriptação
com o one-time-pad.
Teorema 13.11. A Construção 13.9 é um sistema de prova interativa de co-
nhecimento zero perfeito para a linguagem dos pares de grafos isomorfos.
Demonstração. É fácil veri�car que Victor executa em tempo polinomial.
Completude: Se os grafos G1 e G2 realmente são isomorfos, então H será
isomorfo aos dois grafos, e a permutação enviada a Victor Victor transforma
um deles em H. Neste caso Victor aceita a prova e emite um como saída. A
probabilidade de Victor aceitar a prova quando os grafos são isomorfos é 1.
Consistência: Se G1 e G2 não são isomorfos, então não existe H isomorfo a
ambos. Quando Victor, após receber H, escolhe G2, Peggy pode enviar-lhe π
e Victor aceita a prova. Mas quando Victor escolhe G1, não existe permutação
que Peggy possa enviar, e Victor rejeita a prova (sua saída será igual a zero).
A probabilidade de Victor aceitar a prova quando os grafos não são isomorfos é
no máximo 1/2.
Conhecimento zero: simulador S mostrado a seguir produz a transcrição de
uma interação.
S(G1, G2):
b′ ∈R { 0, 1 } // tenta adivinhar a escolha de V ′
π ← permutação aleatória dos vértices de Gb
H = π(Gb)
b ∈R { 0, 1 } // escolha de V ′
se b 6= b′ reinicie
escreva (H, b, π)
�
13.3 Σ-protocolos
Há uma classe especial de protocolos para prova de conhecimento zero onde o
veri�cador e a interação é sempre da forma descrita a seguir.
Normalmente, o provador P tem uma chave pública e um segredo, cujo
conhecimento ele deve provar para o veri�cador V .
1. P envia uma mensagem a V , comprometendo-se com um valor c;
2. V envia uma sequência aleatória d de bits para P (esta sequência de bits
é um desa�o);
3. P envia uma resposta s para V , que �nalmente decide se aceita ou não.
A representação grá�ca deste tipo de protocolo é ilustrada na próxima �gura.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
13.4. PROTOCOLOS DE IDENTIFICAÇÃO 223
P V
c
d
s
De�nição 13.12 (Σ-protocolo). Seja Π protocolo de prova de conhecimento
zero para uma linguagem L onde cada elemento é um par (a, b) (em outras
palavras, L é uma relação entre dois conjuntos A e B). Π é um Σ-protocolo
quando as mensagens trocadas entre os participantes são da forma descrita
no texto (comprometimento, desa�o e resposta), e os seguintes requisitos são
satisfeitos.
i) Completude: se P e V seguem o protocolo e P é honesto (ou seja, P de
fato conhece (x, y) ∈ L), V sempre aceita.
ii) Consistência especial: sejam x ∈ A e duas transcrições do protocolo em
que V aceita, (c, d, s) e (c, d′, s′), com d 6= d′ (ou seja, duas transcrições
com mesma entrada compartilhada x e mesma mensagem inicial c, mas
desa�os d, d′ diferentes). Então deve ser possível calcular e�cientemente
y ∈ B tal que (x, y) ∈ L.
iii) Conhecimento zero para veri�cador honesto: O protocolo é de conheci-
mento zero para veri�cador honesto. Como a única coisa que o veri�cador
faz é escolher o desa�o, um veri�cador honesto é aquele que escolhe d com
distribuição uniforme. �
A propriedade de consistência especial implica que um provador desonesto
terá probabilidade de sucesso menor ou igual a 1/|D|, onde D é o conjunto de
possíveis desa�os.
A próxima seção traz alguns exemplos de protocolos de identi�cação que são
Σ-protocolos.
13.4 Protocolos de Identi�cação
Peggy e Victor pretendem se comunicar via rede, mas Victor quer ter certeza
de que está realmente interagindo com Peggy, e não com alguém se passando
por ela. Para esta situação usamos esquemas de identi�cação.
13.4.1 Esquema de Identi�cação de Feige-Fiat-Shamir
Construção 13.13 (Esquema de identi�cação de Feige-Fiat-Shamir). Fase de
inicialização:
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
224 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO
1. Uma autoridade T escolhe dois primos grandes p e q, e publica seu produto
N = pq. Os fatores p e q não são divulgados.
2. Peggy escolhe aleatoriamente um inteiro 1 ≤ s ≤ N − 1, calcula v = s2
(mod N) e publica v. Esta será a chave pública de Peggy.
Para Peggy provar para Victor que possui s, ambos executam o protocolo a
seguir.1. Peggy escolhe r ∈R {1, . . . , N − 1}, calcula x = r2 (mod N), e envia x
para Victor.
2. Victor escolhe um bit b ∈R { 0, 1 } e envia b para Peggy.
3. Peggy calcula y = rsb (mod N) e envia y para Victor. Note que isto
signi�ca que o valor enviado será r ou rs.
4. Victor aceita a identi�cação se x 6≡ 0 (mod N) e y2 ≡ xvb (mod N). �
Teorema 13.14. O esquema de identi�cação de Feige-Fiat-Shamir é um sis-
tema de prova interativa de conhecimento zero.
Demonstração. Mostramos as propriedades de completude, consistência e co-
nhecimento zero.
Completude: Victor veri�ca se y2 = xvb (mod N). E realmente,
y2 = (rsb)2 = r2s2b = x(s2)b = xvb.
A probabilidade de uma prova correta ser aceita é 1.
Consistência: suponha que um atacante tenta se passar por Peggy. Há duas
possibilidades:
• Victor escolhe o bit 0. Neste caso, o atacante tem sucesso porque ele
mesmo escolheu r e pode enviar r(s0) = r de volta. A probabilidade de
acerto é 1.
• Victor escolhe o bit 1. Neste caso, o atacante não tem como calcular
y = rs1 porque não tem o valor de s (e não consegue calcular raízes
quadradas módulo N e�cientemente). O atacante somente pode fazer uma
escolha aleatória, e a probabilidade de acerto é desprezível no tamanho de
N .
No primeiro caso o atacante tem sucesso com probabilidade um; no segundo,
com probabilidade desprezível. Assim, a probabilidade de sucesso em uma ten-
tativa é 1/2 + negl(N). Se o protocolo for repetido t vezes, a probabilidade de
sucesso do adversário será desprezível.
Conhecimento Zero: esta parte da demonstração é pedida no Exercício 107.
�
Corolário 13.15. O protocolo de identi�cação de Fiat-Feige-Shamir é um Σ-
protocolo.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
13.4. PROTOCOLOS DE IDENTIFICAÇÃO 225
Demonstração. O protocolo é da forma necessária (comprometimento, desa�o,
resposta). Completude e conhecimento zero já foram demonstrados. Resta
observar que tendo duas transcrições com x = r2, mas com b = 0 e b′ = 1 é fácil
determinar r. �
13.4.2 Protocolo de Schnorr
Outro protocolo de identi�cação é o de Schnorr. O provador mostra que co-
nhece o logaritmo discreto de um número y, sem passar ao veri�cador qualquer
informação adicional a respeito do logaritmo.
Construção 13.16 (Protocolo de identi�cação de Schnorr). O provador P quer
provar a V que conhece um segredo z ∈ Zq.
Fase de inicialização:
• Dois primos são p e q tais que q|p− 1 são escolhidos aleatoriamente.
• g, um gerador do grupo de unidades Z∗p, é escolhido.
• De�ne-se t, um parâmetro de segurança.
• v = gz (mod p), que é igual a gq−z (mod p). Esta é a chave pública de
P .
O protocolo é descrito a seguir.
• P: k ∈R Zq. Envia a = gk para V.
• V: envia r ∈R { 1, . . . , 2t } para P.
• P: envia c = k + zr (mod q) para V.
• V aceita se e somente se a ≡ gcvr (mod p). �
Teorema 13.17. O protocolo de Schnorr é de um sistema de prova interativa
de conhecimento zero perfeito para veri�cador honesto.
Demonstração. Dividiremos a prova em três partes � completude, consistência
e conhecimento zero.
Completude: trivial. Temos
a = gcvr
= gk+zrur
= gk+zr(g−z)r
= gk+zrg−zr
= gk,
e portanto a probabilidade de V aceitar uma prova correta é 1.
Consistência: suponha que P não tenha z e tente convencer V do contrário.
P pode tentar a seguinte estratégia:
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
226 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO
1) Fixe k′.
2) Tente adivinhar o valor de r (antes de enviar a mensagem para V ).
3) Envie a′ = gk
′
vr para V .
3) Receba r.
4) Se r é igual ao valor adivinhado, envie k′ para V . Senão, escolha aleato-
riamente x em Zp.
A probabilidade de P conseguir sucesso desta forma em uma rodada do protocolo
é a de adivinhar corretamente t ou, errando nesta tentativa, conseguir escolher
o valor correto em Zp:
1
2t
+ negl(|p|).
Conhecimento zero: mostramos um simulador S que, a partir de uma entrada
x e dos bits aleatórios usados por V , produz uma transcrição de 〈P, V 〉(x).
S(v):
k ∈R Zp
r ∈R { 1, . . . , 2t }
c← gcvr (mod p)
escreva gk; r; c
O simulador pode executar em tempo polinomial, e as distribuições dos elemen-
tos na transcrição são as mesmas que aquelas em uma execução 〈P, V 〉(v). No
entanto, o simulador escolhe o desa�o sempre com distribuição uniforme. Isto
signi�ca que, em tempo polinomial, só poderá produzir transcrições de interações
onde V é honesto (e escolhe seus bits uniformemente). �
A demonstração não implica que o protocolo é de conhecimento zero para
veri�cador desonesto porque 2t é exponencialmente grande, e para simular uma
distribuição de desa�os diferente de uniforme o simulador apresentado poderia
levar tempo exponencial.
Corolário 13.18. O protocolo de Schnorr é um Σ-protocolo.
13.5 Transformando provas interativas em não
interativas
Um Σ-protocolo pode ser transformado em um esquema de assinaturas. A
entidade que assinará mensagens inclui em sua chave pública uma função de
hash h.
Construção 13.19 (Esquema Fiat-Shamir de assinaturas). Presume-se que é
pública uma função de hash h. A entidade assinadora detém um segredo que
usa como o segredo de provador para um Σ-protocolo.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
13.5. TRANSFORMANDO PROVAS INTERATIVAS EMNÃO INTERATIVAS227
Para assinar uma mensagem m, construa (simulando) uma transcrição de
interação do Σ-protocolo. O comprometimento c é gerado da forma usual. Já o
desa�o é h(c||m). Finalmente, produz a transcrição da interação (c, h(c||m), r).
�
A assinatura só é possível para quem tem o segredo, e portanto não deve
haver forma e�ciente de outra entidade produzir uma assinatura. Para conse-
guir uma prova de conhecimento do segredo, qualquer assinatura de mensagem
conhecida basta. No entanto, o esquema (ou transformação) de Fiat-Shamir
para assinaturas só é seguro no modelo do oráculo aleatório.
Notas
Provas de conhecimento zero foram propostas por Sha� Goldwasser, Silvio Mi-
cali e Charles Racko� em 1985 [92, 93].
É comum de�nir sistemas de prova interativa com máquinas de Turing, onde
o que chamamos de �portas de comunicação� são �tas onde uma máquina escreve
e outra lê. Como uma máquina de Turing não pode �ter um gerador pseudo-
aleatório�, neste modelo os bits aleatórios são lidos de uma �ta (e impõe-se a
exigência de que as �tas aleatórias dos atores sejam diferentes). A Figura a
seguir mostra duas máquinas de Turing acopladas desta forma.
A diferença entre a abordagem usada neste texto e naquela com máquinas de
Turing não é signi�cativa para a compreensão dos conceitos, e não interfere no
desenvolvimento das demonstrações.
Provas de conhecimento zero são discutidas no tutorial de Giovanni Di Cres-
cenzo [42] e extensivamente no livro de Oded Goldreich [87].
A demonstração do teorema 13.3 foi dada pela primeira vez por Adi Sha-
mir [191]. Primeiro, IP ⊆ PSPACE trivialmente: basta que se apresente um
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
228 CAPÍTULO 13. PROVAS DE CONHECIMENTO ZERO
simulador de prova interativa que funcione em espaço polinomial. A recíproca,
PSPACE ⊆ IP, é conceitualmente simples, mas envolve diversos detalhes técni-
cos. De maneira resumida, o problemaQSAT está em PSPACE , portanto basta
mostrar que está também em IP. Uma demonstração de que IP = PSPACE
também pode ser encontrada no livro de Michael Sipser [204].
Σ-protocolos foram formalizados por Ronald Cramer em sua tese de douto-
rado [56]. Em sua tese, Cramer diz que escolheu o nome Σ porque �sig� lembra
�zig-zag� e �ma� é abreviação de �Merlin-Arthur�, que é o tipo de protocolo onde
os bits aleatórios usados pelo veri�cador são públicos (em um Σ-protocolo isto
é o mesmo que exigir que o veri�cador seja honesto).
Amos Fiat e Adi Shamir desenvolveram um método para construir esque-
mas de assinatura a partir de esquemas de identi�cação [75] (e de um esquema
de assinaturas deriva-se trivialmenteum protocolo não-interativo de prova de
conhecimento zero). Este esquema não é seguro sem oráculos aleatórios, como
mostrado por Sha� Goldwasser e Yael Kalai [94, 127]. Manuel Blum, Paul
Feldman e Silvio Micali provaram que é possível transformar qualquer sistema
de prova interativa em um sistema de prova não-interativa de conhecimento
zero computacional, desde que se possa adicionar uma cadeia aleatória com-
partilhada entre provador e veri�cador [30]. Já Oded Goldreich e Yair Oren
mostram a impossibilidade de, sem a cadeia compartilhada e no modelo padrão
(e portanto sem oráculos aleatórios), obter provas não interativas para qualquer
prova interativa [91].
Exercícios
Ex. 104 � Porque no modelo computacional apresentado neste Capítulo dis-
semos que A e B devem ter geradores pseudoaleatórios diferentes?
Ex. 105 � Demonstre o Teorema 13.8.
Ex. 106 � Escolha problemas em NP e construa para eles sistemas de prova
interativa.
Ex. 107 � Complete a prova de que o esquema de Feige-Fiat-Shamir é de
conhecimento zero (nossa demonstração do Teorema 13.14 omitiu esta parte).
Ex. 108 � Prove o Corolário 13.18.
Ex. 109 � Se você tem familiaridade com Lógica, discorra sobre as pro-
priedades de completude e consistência de um sistema de prova interativa,
comparando-as com aquelas de�nidas em Lógica.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 14
Protocolos Seguros com Dois
Participantes
(Este Capítulo ainda está incompleto)
14.1 Transferência Inconsciente
Um protocolo de transferência inconsciente (ou �opaca�) permite que Alice envie
uma mensagem a Bob, mas que Bob receba de fato a mensagem com probabili-
dade 1/2. É possível realizar seguramente a computação de qualquer protocolo
de múltiplos atores usando apenas um protocolo de transferência inconsciente
como bloco básico.
O protocolo a seguir implementa transferência inconsciente usando resíduos
quadráticos.
1. Alice escolhe dois primos p e q grandes e calcula N = pq.
2. Alice encripta a mensagem m de alguma forma, módulo N e com uma
chave k. O resultado é o texto cifrado c. A fatoração de N deve permitir
decriptar a mensagem.
3. Alice envia N, c para Bob.
4. Bob escolhe x ∈R Z∗N e envia y = x2 (mod N) para Alice.
5. Alice calcula as quatro raízes quadradas de y (que são x,−x, y,−y). Ela
pode fazê-lo e�cientemente porque tem p e q. Alice então escolhe uma das
raízes aleatoreamente e envia para Bob.
6. Se Bob recebeu uma das raízes diferentes de ±x ele pode fatorar N e
decifrar c em m. Se recebeu uma das outras duas raízes, não conseguirá
decifrar c.
229
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
230CAPÍTULO 14. PROTOCOLOS SEGUROS COMDOIS PARTICIPANTES
Alice não sabe se Bob decifrou a mensagem ou não, porque x foi escolhido
aleatoreamente por Bob, e Alice não sabe qual dos quatro valores é x.
O protocolo obviamente funciona usando o RSA para encriptação, mas tam-
bém funcionará com qualquer criptossistema assimétrico, desde que baseado na
hipótese da fatoração de inteiros.
Em outra forma de transferência inconsciente Alice envia duas mensagens e
Bob recebe uma delas (com probabilidade 1/2 para cada uma), sem que Alice
saiba qual mensagem foi enviada. As duas formas de transferência inconsciente
são equivalentes.
Notas
A ideia de transferência inconsciente foi proposta em 1981 por Rabin [178], e
por Even, Goldreich e Lempel [74] em 1982. A demonstração de que as duas
variantes de transferência inconsciente são equivalentes foi dada por Claude
Crépau em 1988 [58].
O livro de Carmit Hazay e Yehuda Lindell [103] e o segundo volume do livro
de Goldreich [88] tratam detalhadamente de protocolos criptográ�cos com dois
participantes.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
Capítulo 15
Computação Segura com
Múltiplos Participantes
Este Capítulo traz uma exposição básica de protocolos com muitos participantes
onde existe a necessidade de sigilo e não há con�ança mútua entre as partes.
Cada participante Pi conhece um valor xi, e o objetivo é calcular uma função
f(x1, x2, . . . , xn)
com a exigência de que após a execução do protocolo o conhecimento de cada
participante a respeito dos valores de entrada dos outros seja o mesmo que ele
tinha antes do início do protocolo.
Quando construímos protocolos com múltiplos participantes, há diversos as-
pectos que levamos em consideração.
• Estratégia de corrupção: há dois modelos para a estratégia de corrupção
usada pelo adversário. Um deles é o modelo estático, onde há um conjunto
�xo de participantes controlados pelo adversário. O outro é chamado de
modelo dinâmico, onde o adversário pode decidir durante a execução do
protocolo quais participantes irá corromper;
• Comportamento das partes corrompidas: dizemos que um adversário é
�semi-honesto� se ele segue a especi�cação do protocolo, mas obtém infor-
mação à qual não teria direito através da manipulação dos participantes
corrompidos. Um adversário é �malicioso� se poderá desviar-se arbitrari-
amente do protocolo;
• Complexidade: pode-se presumir que o adversário execute em tempo po-
linomial ou pode-se presumir que ele tem poder computacional ilimitado.
• Comunicação: podemos usar o cenário criptográ�co, em que presumimos
que toda a comunicação entre os participantes é pública, e que consequen-
temente o sigilo deve ser garantido por mecanismos criptográ�cos, ou o
231
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
232CAPÍTULO 15. COMPUTAÇÃO SEGURA COMMÚLTIPLOS PARTICIPANTES
cenário de teoria da informação1, onde pode-se contar com canais seguros
para a comunicação entre os participantes.
É comum também diferenciar protocolos para duas partes de protocolos para
muitos participantes.
Estes aspectos dão origem a diferentes modelos de ambiente. Estes ambientes
idealizados são usados na construção do protocolo e também na demonstração
de sua segurança.
15.1 Sobre encriptação homomór�ca
Boa parte deste texto usa criptossistemas parcialmente homomór�cos, porque
até o momento não são conhecidos criptossistemas completamente homomór�cos
que permitam a realização de longos cálculos de maneira e�ciente e, de maneira
geral, satisfatória. É provável, no entanto, que esta situação mude em pouco
tempo.
15.2 Um protocolo para participantes semi-honestos
No protocolo descrito a seguir os participantes são semi-honestos e tem poder
ilimitado.
Os participantes computam o valor de uma função f(x0, x1, . . .) de�nida
sobre um corpo �nito Fq, sem revelar as variáveis xi. Escolhemos realizar as
operações em um corpo �nito porque não poderíamos representar números reais
em computadores sem perda de precisão e, mais grave, sem alterar sua distri-
buição.
Para ilustrar o funcionamento do protocolo presumimos que há três parti-
cipantes, P1, P2 e P3, e cada um deles conhece uma das variáveis x1, x2, x3.
Também presumimos que a função a ser calculada é
f(x1, x2, x3) = x1x2 + x3 (mod q).
A Figura a seguir mostra a função como um circuito envolvendo somas e mul-
tiplicações. A variável x4 é o valor intermediário, igual a x1x2.
×
+
x1
x2
x3 f(x1, x2, x3)
x4
O protocolo funciona usando compartilhamento de segredos. Cada participante
Pi distribui partilhas de seu valor xi para os outros. Denotamos a partilha
enviada de Pi para Pj por x
j
i .
1�Information-theoretic scenario�, em Inglês.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
15.2. UM PROTOCOLO PARA PARTICIPANTES SEMI-HONESTOS 233
Se pudermos usar as partilhas de entrada de uma porta do circuito para
calcular partilhas do valor de saída, poderemos avaliar o circuito inteiro sem
conhecer os valores intermediários.
O seguinte Teorema nos dá uma forma de computar a soma de partilhas de
Shamir.
Teorema 15.1. Seja S o segredo no esquema de compartilhamento de segredos
de Shamir, e si a partilha de Pi. Então, para o segredo
S′ = x+ yS
aspartilhas são
s′i = x+ ysi.
A seguir desenvolvemos em detalhes a adição e multiplicação de segredos
compartilhados.
Adição Inicialmente determinaremos como obter partilhas para um segredo,
S+S′, dadas as partilhas de S e de S′. Do Teorema 15.1 imediatamente obtemos
uma maneira de computar a soma de dois segredos, dadas as partilhas de ambos:
basta tomar y = 0. Só precisamos então somar as partilhas, como mostramos a
seguir.
Suponha que cada Pi tenha suas partilhas f(i) e g(i), para dois segredos S
e S′. Suponha também que os dois polinômios sejam
f(x) = a+ a1x+ a2x
2 + · · ·+ akxk
g(x) = b+ b1x+ b2x
2 + · · ·+ bkxk.
Podemos somar os dois polinômios
h(x) = f(x) + g(x)
= (a+ b) + (a1 + b1)x1 + (a2 + b2)x
2 + · · ·+ (ak + bk)xk
Assim, cada participante Pi calcula sua partilha da saída:
h(i) = f(i) + g(i).
onde h(i) é a partilha de Pi para S + S′.
Multiplicação Temos dois segredos A e B compartilhados, e cada partici-
pante Pi tem partilhas a(i) e b(i). Queremos computar as partilhas m(i) do
segredo M = AB, sem que os participantes tenham acesso a A, B ou M (a
não ser com o quórum necessário). Se tomarmos x = 0 no enunciado do Teo-
rema 15.1, notamos que as partilhas que queremos calcular são
m(i) = Ab(i).
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
234CAPÍTULO 15. COMPUTAÇÃO SEGURA COMMÚLTIPLOS PARTICIPANTES
Cada participante calcula
c(i) = a(i)b(i)
O valor c(i) não é a partilha que queremos, mas podemos obtê-la a partir dele.
Após computá-lo, Pi cria um novo polinômio aleatório e compartilha c(i) com
os outros participantes, enviando a cada Pj o valor ci(j)2.
Cada participante Pj então calcula
m(j) =
∑
i
ric
i(j),
onde ri é o vetor de recombinação3.
Teorema 15.2. O cálculo das partilhas de multiplicação descrito no texto está
correto, ou seja, ∑
i
m(i)ri = AB.
15.3 Segurança
Observamos como é a execução de um protocolo na prática: há participan-
tes honestos, participantes desonestos e há também tudo o que é externo aos
participantes e ao protocolo. Dentre estas entidades e fatores externos há a
entrada enviada a cada participante e o adversário. Chamamos este conjunto
de entidades externas de �ambiente�.
Incluímos conceitualmente o adversário A (que é externo ao protocolo) no
ambiente. O adversário pode corromper participantes. Quando Pi é corrompido,
A tem acesso a todo o histórico de mensagens de Pi, além de poder controlar
as ações de Pi. Denotamos um participante corrompido por P̆i
De maneira simpli�cada, então, construímos dois modelos:
• Um �mundo real�, com o conjunto de participantes Pi executando um
protocolo Π em um ambiente Z;
• Um �mundo ideal� onde trocamos os participantes executando Π por uma
funcionalidade incorrompível F .
Queremos poder mostrar que participantes honestos executando o proto-
colo no mundo real obterão o mesmo resultado que esta funcionalidade perfeita
em um �mundo ideal� � desde que haja participantes honestos em quantidade
su�ciente.
Os dois modelos de mundo que usamos são descritos a seguir.
• No �mundo real�, há diversos participantes Pi, que esperamos que sigam
o protocolo, e um ambiente Z, que inclui um adversário.
2Para facilitar a leitura, pode-se ler ci(j) como �c, de i para j�.
3Veja a descrição do polinômio interpolador na Seção 12.1.1, página 201.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
15.3. SEGURANÇA 235
Z
A
P1
P2
P̆3
• No �mundo ideal�, ao invés de participantes honestos seguindo um pro-
tocolo, modelamos uma funcionalidade ideal F , que é incorrompível e
realizará a computação necessária para que o protocolo funcione. Tam-
bém incluímos um simulador S, que simula a atuação de participantes
desonestos. Como ilustrado na próxima �gura, os participantes não inte-
ragem entre si � eles repassam suas mensagens4 entre F e Z (poderíamos
chamá-los de �participantes vazios5�) ou entre F e S.
F Z
S
P1
P2
P̆3
Diremos que um protocolo implementa seguramente a funcionalidade ideal
F quando o ambiente (exceto por A), ao executar, não puder distinguir entre
uma execução no mundo real e outra no mundo ideal. Deve existir então um
simulador S que substitua A de forma que o mundo simulado por F e S é
indistinguível pelo ambiente do mundo real com Π e A.
O protocolo é executado em rodadas. Em cada rodada
i) o ambiente envia aos participantes honestos suas entradas;
ii) o adversário envia entradas aos participantes desonestos;
iii) os participantes devolvem seus resultados.
Quando um participante Pi se corrompe, a funcionalidade F imediatamente
deixa de ouvir as portas �honestas� de Pi, e envia todo o histórico de mensagens
de Pi para S, de maneira que S possa a partir de então simular para Z o
comportamento de Pi.
Depois do término da execução, a saída de Z é um único bit, que representa
sua tentativa de �adivinhar� se a execução se deu no mundo ideal ou no real.
Dizemos que um protocolo Π é seguro se provarmos que, dado um parâmetro
de segurança k, existe um simulador S (que é um algoritmo polinomial) tal que
4Há autores que de�nem o modelo sem os participantes, como se as mensagens fossem
trocadas diretamente entre F e Z.
5Ou �dummy parties� em Inglês.
Ve
rs
ão
Pr
el
im
in
ar
notas de aula � versão: 2019.11.28.20.34 - Jerônimo C. Pellegrini
236CAPÍTULO 15. COMPUTAÇÃO SEGURA COMMÚLTIPLOS PARTICIPANTES
para todo ambiente Z e toda entrada z, a probabilidade de Z distinguir o mundo
ideal do real (como modelados) é desprezível em k.
Projetamos a funcionalidade ideal F de forma a garantir, no mundo ideal,
que se o protocolo não for seguido de maneira a gerar os resultados que espe-
ramos, a execução é abortada. Assim, se o ambiente (e consequentemente o
adversário) não puder distinguir os dois mundos, a garantia de execução correta
e segura do protocolo se estende para o modelo de mundo real.
Ao modelar o protocolo para demonstrar sua segurança, usaremos alguns
artifícios que parecerão distantes da situação de execução real do protocolo.
Comentamos agora sobre estes artifícios e sobre a nomenclatura usada, para
que não haja confusão.
• Dizemos que há um adversário, entidade abstrata, que �corrompe� parti-
cipantes. Esta é apenas uma abstração que torna a demonstração mais
conveniente, e nota-se facilmente que para o objetivo de demonstrar a se-
gurança do protocolo não faz diferença se o participante age por conta
própria ou seguindo instruções deste adversário abstrato.
• Presumimos que há uma entidade incorruptível intermediando as mensa-
gens, de acordo com a especi�cação do protocolo. A demonstração nos
dará justamente a garantia de que o protocolo, quando executado sem um
intermediador incorrompível, funciona de maneira equivalente à simulação
usando esta entidade. Em outras palavras, o protocolo é projetado para
oferecer as mesmas garantias que um intermediador incorrompível. Di-
zemos que o protocolo �realiza o intermediador incorrompível de maneira
segura�. Queremos que seja indiferente ao ambiente se executamos o pro-
tocolo ou se usamos este intermediador. É por isso que usamos os termos
�mundo real� e �mundo ideal�, embora ambos sejam claramente idealiza-
dos. A diferença entre ambos está na presença deste intermediador.
15.4 Componibilidade Universal
15.5 Notas
O problema de computação segura com múltiplos participantes foi proposto
inicialmente por Andrew Yao em 1982 [221]. O survey organizado por Dario
Catalano e outros [42] descreve os resultados na área até 2005. Os fundamentos
são expostos de modo minucioso no segundo volume do livro de Goldreich [88].
O conceito de componibilidade universal foi introduzido por Ran Canetti [38].
Uma exposição a respeito de protocolos componíveis é dada por Yehuda Lindell
no livro que teve origem em sua tese [148].
A primeira aplicação em larga escala de computação segura com múltiplos
participantes foi reportada por um grupo de pesquisadores holandeses em 2009,
que implementaram um sistema de leilão seguro [31].
[62] [222]
Ve
rs
ão
Pr
el
im
in
ar

Mais conteúdos dessa disciplina