Você está na página 1de 47

MINISTÉRIO DA DEFESA

EXÉRCITO BRASILEIRO
DEPARTAMENTO DE CIÊNCIA E TECNOLOGIA
INSTITUTO MILITAR DE ENGENHARIA
CURSO DE GRADUAÇÃO EM ENGENHARIA DA COMPUTAÇÃO

DAVI BONFIM MORAES MORANT DE HOLANDA


GABRIEL BARBOSA MEIRELES
PIETRO MOTTA GERONIMI

IMPLEMENTAÇÃO DE ALGORITMO DE CRIPTOGRAFIA BASEADO EM


RETICULADOS

RIO DE JANEIRO
2022
DAVI BONFIM MORAES MORANT DE HOLANDA
GABRIEL BARBOSA MEIRELES
PIETRO MOTTA GERONIMI

IMPLEMENTAÇÃO DE ALGORITMO DE CRIPTOGRAFIA BASEADO EM


RETICULADOS

Projeto de Final de Curso apresentado ao Curso de Gradu-


ação em Engenharia da Computação do Instituto Militar
de Engenharia, como requisito parcial para a obtenção do
título de Bacharel em Engenharia da Computação.
Orientador(es): José Antonio Moreira Xexéo, D.Sc.
Luiz Henrique da Costa Araújo, Cel

Rio de Janeiro
2022
©2022
INSTITUTO MILITAR DE ENGENHARIA
Praça General Tibúrcio, 80 – Praia Vermelha
Rio de Janeiro – RJ CEP: 22290-270

Este exemplar é de propriedade do Instituto Militar de Engenharia, que poderá incluí-lo em base
de dados, armazenar em computador, microfilmar ou adotar qualquer forma de arquivamento.
É permitida a menção, reprodução parcial ou integral e a transmissão entre bibliotecas deste
trabalho, sem modificação de seu texto, em qualquer meio que esteja ou venha a ser fixado,
para pesquisa acadêmica, comentários e citações, desde que sem finalidade comercial e que
seja feita a referência bibliográfica completa.
Os conceitos expressos neste trabalho são de responsabilidade do(s) autor(es) e do(s) orienta-
dor(es).

Bonfim Moraes Morant de Holanda, Davi; Barbosa Meireles, Gabriel; Motta


Geronimi, Pietro.
Implementação de Algoritmo de Criptografia Baseado em Reticulados / Davi
Bonfim Moraes Morant de Holanda, Gabriel Barbosa Meireles e Pietro Motta
Geronimi. – Rio de Janeiro, 2022.
46 f.

Orientador(es): José Antonio Moreira Xexéo e Luiz Henrique da Costa Araújo.

Projeto de Final de Curso (graduação) – Instituto Militar de Engenharia, Enge-


nharia da Computação, 2022.

1. reticulados. 2. criptografia. 3. criptografia quântica. i. Antonio Moreira


Xexéo, José (orient.) ii. da Costa Araújo, Luiz Henrique (orient.) iii. Título
DAVI BONFIM MORAES MORANT DE HOLANDA
GABRIEL BARBOSA MEIRELES
PIETRO MOTTA GERONIMI

Implementação de Algoritmo de Criptografia Baseado em


Reticulados

Projeto de Final de Curso apresentado ao Curso de Graduação em Engenharia da Compu-


tação do Instituto Militar de Engenharia, como requisito parcial para a obtenção do título
de Bacharel em Engenharia da Computação.
Orientador(es): José Antonio Moreira Xexéo e Luiz Henrique da Costa Araújo.

Aprovada em 19 de outubro de 2022, pela seguinte banca examinadora:

Prof. José Antonio Moreira Xexéo - D.Sc. do IME - Presidente

Prof. Luiz Henrique da Costa Araújo - D.Sc. da COPPE-UFRJ

Prof. Anderson F. Pereira dos Santos - M.C. do IME

Rio de Janeiro
2022
Este trabalho é dedicado às crianças adultas que,
quando pequenas, sonharam em se tornar cientistas.
AGRADECIMENTOS

Agradecemos a todos os colegas e professores que, durante nossa formação, nos


deram os elementos para escrever este trabalho.
"Whereas classical public key distribution protocols rely on the fact that certain inverse
functions are computationally hard to calculate, quantum key distribution protocols are
based on the fact that certain laws of quantum physics are true"(1)
RESUMO

Este trabalho tem como finalidade a implementação de um algoritmo de criptografia


baseado em reticulados. O algoritmo escolhido foi o NTRU, um dos principais candidatos
a se tornar o algoritmo padrão de criptografia pós-quântica segundo o NIST. A partir
de sua implementação, torar-se-á possível testar os parâmetros que o compõem a fim
de compreender como eles influenciam seu funcionamento e potencialmente desenvolver
futuras otimizações.

Palavras-chave: reticulados. criptografia. criptografia quântica.


ABSTRACT

This work has the goal of implementing an algorithm of cryptography based on lattices.
The chosen algorithm was the NTRU, one of the main candidates of becoming the standard
post-quantum cryptography algorithm according to the NIST. From its implementation,
it will be possible to test the relevant parameters so that we can understand how the
influence its behaviour and potentially develop further optimizations.

Keywords: lattices. cryptography. quantum cryptography.


LISTA DE ILUSTRAÇÕES

Figura 1 – Cronograma do projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . 18


Figura 2 – Reticulado no R2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Figura 3 – Comparação de bases boas e ruins no R2 (2) . . . . . . . . . . . . . . . 26
Figura 4 – Medição de um qubit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Figura 5 – Esfera de Bloch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
LISTA DE QUADROS

Quadro 1 – Finalistas NIST: Encriptação de chave pública / Estabelecimento de


chaves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Quadro 2 – Finalistas NIST: Assinatura Digital . . . . . . . . . . . . . . . . . . . 21
LISTA DE TABELAS
LISTA DE ABREVIATURAS E SIGLAS

LBC Lattice-Based Cryptography

PQC Post-Quantum Cryptography

NIST National Institute of Standards and Technology

ACM Association for Computing Machinery


LISTA DE SÍMBOLOS

Z Conjunto dos números inteiros

R Conjunto dos números reais

C Conjunto dos números complexos

L Reticulado
SUMÁRIO

1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.1 MOTIVAÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 OBJETIVO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3 METODOLOGIA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.4 ESTRUTURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.5 CRONOGRAMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

2 SURVEY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.1 CRIPTOGRAFIA BASEADA EM RETICULADOS . . . . . . . . . . . . . . 19
2.2 NIST: POST-QUANTUM CRYPTOGRAPHY STANDARDIZATION . . . . 20
2.3 COMPUTADORES QUÂNTICOS . . . . . . . . . . . . . . . . . . . . . . 21
2.4 A ESCOLHA DO ALGORITMO . . . . . . . . . . . . . . . . . . . . . . . 21

3 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . 23
3.1 CONCEITOS INICIAIS DE CRIPTOGRAFIA . . . . . . . . . . . . . . . . 23
3.1.1 ESTRUTURA E FUNCIONAMENTO DE UM CRIPTOSSISTEMA . . . . . . . 23
3.1.1.1 CRIPTOGRAFIA SIMÉTRICA . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1.2 CRIPTOGRAFIA ASSIMÉTRICA . . . . . . . . . . . . . . . . . . . . . . . . 24
3.1.2 FUNÇÕES DE MÃO ÚNICA COM ARAPUCA . . . . . . . . . . . . . . . . . 24
3.2 CONCEITOS INICIAIS DE RETICULADOS . . . . . . . . . . . . . . . . . 25
3.2.1 TAXA DE HADAMARD . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.2.2 PROBLEMAS DIFÍCEIS EM RETICULADOS . . . . . . . . . . . . . . . . . 28
3.2.3 REDUÇÃO DE RETICULADOS . . . . . . . . . . . . . . . . . . . . . . . . 28
3.2.3.1 RESOLVENDO SVP E CVP . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.3.2 REDUÇÃO GAUSSIANA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.2.3.3 REDUÇÃO LLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.3 CONCEITOS INICIAIS DE COMPUTAÇÃO QUÂNTICA . . . . . . . . . . 30
3.3.1 BITS E QUBITS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.2 ALGORITMOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4 O NTRU . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . 35
4.1 NTRUENCRYPT . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 35
4.1.1 O ALGORITMO . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . 35
4.1.2 RESTRIÇÕES DOS PARÂMETROS . . .. . . . . . . . . . . . . . . . . . . 36
4.1.3 NTRU COMO UM PROBLEMA DE RETICULADOS . . . . . . . . . . . . . . 37

5 O DESENVOLVIMENTO DO PROJETO . . . . . . . . . . . . . . . 42
5.1 VE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.2 VC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3 VF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

6 CONCLUSÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
16

1 INTRODUÇÃO

1.1 Motivação
Desde 1995, quando Peter Shor publicou seu artigo (3) no qual propõe algoritmos
que quebram os problemas da fatoração de grandes inteiros e do logaritmo discreto em
tempo polinomial para computadores quânticos, os principais criptossistemas utilizados
passaram a ser ameaçados. Apesar de ainda não haver computadores que consigam executá-
los para chaves razoavelmente grandes, é uma questão de tempo até que sejam capazes de
fazê-lo. Por isso, o desenvolvimento de algoritmos de criptografia pós-quântica (PQC: Post-
Quantum Criptography) é de grande interesse para a comunidade científica internacional.
Nesse contexto, os reticulados são especialmente interessantes porque grande parte dos
algoritmos de PQC são baseados em suas propriedades e aplicações.
O NTRU, originadl a partir do funcionamento de anéis polinomiais, é um dos
algoritmos mais promissores em termos de viabilidade para aplicação em um futuro próximo.
Em uma campanha promovida pelo NIST desde 2016 para padronizar um algoritmo de
PQC, ele é um dos 4 finalistas dentre os 69 candidatos originais na categoria de encriptação
com chave pública. Contudo, ele é também um algoritmo em desenvolvimento com diversos
parâmetros a serem otimizados.
Aliando a importância da criptografia pós quântica e os algoritmos baseados em
reticulados, o NTRU mostra-se um objeto de estudo que pode trazer resultados relevantes
para aplicações reais nos próximos anos.

1.2 Objetivo
O objetivo deste projeto é implementar o NTRU baseado em anéis e reticulados, a
fim de discutir os impactos que seus parâmetros têm no comportamento do algoritmo.
A implementação deve ser capaz de encriptar e decriptar uma mensagem, a fim de
analisar sua performance em função dos parâmetros estabelecidos.

1.3 Metodologia
O primeiro passo realizado neste projeto foi compreender os conceitos iniciais de
reticulados. As primeiras semanas de estudo foram dedicadas a isso, e resultaram em
uma apresentação que foi ministrada pelos alunos (Davi, Gabriel e Pietro) referente ao
assunto. A apresentação foi feita aos colegas de graduração durante dois tempos de aula
Capítulo 1. Introdução 17

da disciplina de Segurança da Informação, ministrada pelo professor Xexéo, orientador


deste trabalho, no dia 24/03/2022.
Em seguida, foi realizado um estudo para determinar o panorama geral da pesquisa
em criptografia pós-quântica atualmente. Essa parte inclui os algoritmos mais utilizados,
suas características e as iniciativas de desenvolvimento e pesquisa na área. Foram utilizadas
como principais referências os trabalhos (4, 5, 6).
Uma vez conhecidos os principais algoritmos de criptografia baseados em reticulados,
mostrou-se necessário escolher um deles para se tornar o foco do projeto. O algoritmo
selecionado foi o NTRU.
Os próximos passos do projeto são referentes à implementação do algoritmo esco-
lhido. Primeiramente, foi decidida a linguagem de programação a ser utilizada. Devido à
familiaridade dos membros do grupo e ao seu bom desempenho, a linguagem escolhida foi
C++. Ao final desse processo, espera-se que o algoritmo seja capaz de realizar as tarefas
previstas no objetivo do projeto.
Depois, vem a fase de teste do algoritmo. Nessa etapa, o algoritmo já terá sido
implementado e será então testado com várias configurações diferentes, a fim a registrar
como os parâmetros do NTRU influenciam seu comportamento.
Por fim, após a etapa de testes vem a parte de análise dos resultados obtidos. Nessa
fase, serão analisados os testes realizados na etapa anterior de modo a tirar conclusões
que forneçam uma melhor compreensão do NTRU e de como ele deve ser utilizado para
maximizar seu depempenho em aplicações futuras.

1.4 Estrutura
O Capítulo 1 é a introdução do trabalho e estabelece sua Motivação, Objetivo,
Metodologia e Estrutura. Ele define o que se propõe a ser o projeto e como ele foi organizado
para atingir o objetivo.
O Capítulo 2 é um survey, ou seja, apresenta os principais marcos históricos do
desenvolvimento da pesquisa em criptografia pós-quântica em reticulados, assim como o
panorama geral da área atualmente.
O Capítulo 3 é a fundamentação teórica, e apresenta todos os conceitos necessários
à implementação do NTRU. São abordados desde os conceitos iniciais de criptografia até
o funcionamento simplificado dos computadores quânticos e como eles se diferenciam dos
computadoes clássicos.
O Capítulo 4 é a parte que explica o funcionamento do criptossistema do NTRU
e como ele pode ser atacado utilizando conceitos de reticulados.
Capítulo 1. Introdução 18

O Capítulo 5 apresenta o desenvolvimento do projeto ao longo do ano, descrevendo


seus objetivos, desafios e realizações parciais.
O Capítulo 6, por fim, apresenta as conclusões que se podem tirar a partir do
trabalho realizado.

1.5 Cronograma
Foi montado o seguinte planejamento para o desenvolvimento do projeto:

Figura 1 – Cronograma do projeto

Note que a etapa de implementação e testagem do algoritmo foi dividida em duas


partes, uma com prazo para a VC, em agosto, e outro para a VF, em outubro. Isso foi
decidido porque os primeiros testes podem direcionar o foco do projeto para determinados
parâmetros ou otimizações que sejam mais convenientes. Dado esse direcionamento, serão
realizados os testes seguintes, tendo em vista o prazo final.
19

2 SURVEY

Neste capítulo será apresentado o estado atual da pesquisa direcionada à Cripto-


grafia Pós-Quântica (ou PQC: Post-Quantum Criptography). Dentre os principais aspectos,
estão os algoritmos utilizados e seus problemas associados, assim como as instituições,
pesquisadores e iniciativas que se propõem a padronizar e desenvolver tais algoritmos.

2.1 Criptografia baseada em reticulados


Os reticulados são estruturas utilizadas desde o século XVIII para resolver problemas
matemáticos, principalmente na área de teoria dos números. No entanto, apenas na década
de 1980 passaram a ser considerados no estudo da criptologia, e desde então ganham cada
vez mais importância no desenvolvimento de algoritmos eficientes.
Segue abaixo uma lista com alguns dos momentos importantes na história dos
reticulados para a criptografia:

• 1982: Os pesquisadores A.K. Lenstra, H.W. Lenstra e L. Lovász publicam o artigo


(7), que descreve o LLL, um algoritmo eficiente de redução de base para reticulados.
Suas aplicações são importantes no desenvolvimento de criptossistemas de LBC
(Lattice-Based Cryptography), e será discutido na seção de Fundamentação Teórica.

• 1995: Peter Shor publica o artigo (3), que propõe algoritmos que resovem os pro-
blema sde fatoração e logaritmos discretos em tempo polinomial para computadores
quânticos. São esses algoritmos que ameaçam a criptografia clássica, e portanto
são os motivadores do estudo da criptografia pós-quântica, na qual os reticulados
exercem um papel importante.

• 1996: Foi iniciado o desenvolvimento do criptossistema NTRU pelos matemáticos


Jeffrey Hoffstein, Jill Pipher e Joseph H. Silverman.

• 1997: Em conjunto com Dwork, Ajtai publica um artigo (8) que propõe um crip-
tossistema baseado em uma função de mão única em reticulados. No ano anterior,
ele já havia publicado outro artigo (9) que estabelece a redução de pior caso para
caso médio em problemas envolvendo reticulados. No entanto, a complexidade e
inificiência para a época fizeram com que esse trabalho só fosse retomado mais tarde.

• 2003: Oded Regev melhora o sistema proposto por Ajtai e Dwork em 1997, tornando-
o mais seguro e eficiente mesmo para chaves menores do que antes eram necessárias.
Capítulo 2. Survey 20

• 2016 - hoje: Campanha do NIST para padronização de um algoritmo de criptografia


pós-quântica, na qual os principais candidatos são algoritmos baseados em reticulados.

2.2 NIST: Post-Quantum Cryptography Standardization


Como visto, sabe-se que o advento da computação quântica ameaça os sistemas
criptográficos mais utilizados nos dias de hoje, uma vez que os problemas "difíceis"dos
quais dependem os algoritmos atuais seriam quebrados pelos computadores quânticos.
Portanto, tendo em vista o surgimento desses computadores e sua eventual viabilidade em
um futuro próximo, o NIST (National Institute of Standards and Technology) lançou, em
dezembro 2016, uma campanha (10) para determinar e padronizar algoritmos de PQC a
serem padronizados.
O objetivo dessa campanha é estabelecer e padronizar algoritmos de assinatura
digital, encriptação de chave pública e estabelecimento de chaves que sejam capazes de
protejer dados sensíveis contra computadores clássicos e quânticos.
Para isso, o NIST abriu um processo de submissão de algoritmos candidatos a serem
escolhidos para essa padronização, com prazo final em novembro de 2017. Desde então, os
algoritmos que foram submetidos são analisados pela comunidade internacional a fim de
decidir quais são os mais seguros e eficientes. Inicialmente, foram submetidos 82 algoritmos,
e 69 foram aceitos como candidadtos à 1ª rodada da competição. Periodicamente, o NIST
organiza a NIST PQC Standardization Conference, que ocorreu pela primeira vez em
2018. A segunda conferência, em 2019, determinou os 26 algoritmos que passariam para
a 2ª rodada da competição. Em 2020, foram anunciados os 7 algoritmos finalistas (4 de
encriptação de chave pública / estabelecimento de chaves e 3 de assinaturas digitais), e
por fim foi realizada uma terceira conferência em 2021. A previsão é que em 2023 sejam
publicadas as primeiras versões das padronizações, segundo o NIST (11).
Os algoritmos finalistas são apresentados nos Quadros 1 e 2.

Quadro 1 – Finalistas NIST: Encriptação de chave pública / Estabelecimento de chaves


Algoritmo Funcionamento
McEliece clássico Teoria dos códigos
NTRU Reticulados
CRYSTALS-KYBER Reticulados
SABER Reticulados
Fonte: NIST

Note que 5 dentre os 7 algoritmos finalistas da camapnha proposta pelo NIST


são baseados em reticulados. Fica evidente, portanto, que o estudo de reticulados é
extremamente relevante e promissor para o futuro da criptografia pós-quântica.
Capítulo 2. Survey 21

Quadro 2 – Finalistas NIST: Assinatura Digital


Algoritmo Funcionamento
CRYSTALS-DILITHIUM Reticulados
FALCON Reticulados
Rainbow Corpos
Fonte: NIST

Em julho de 2022, durante a realização deste projeto, o NIST publicou o resultado


da competição entre esses finalistas. Apesar de não ser definitivo e ainda haver análise
de diversos algoritmos, o NIST recomenda, inicialmente, que sejam implementados e
padronizados o CRYSTALS-KYBER (estabelecimento de chave) e o CRYSTALS-Dilithium
(assinatura digital).

2.3 Computadores quânticos


Sabe-se que os algoritmos quânticos, em particular o algoritmo de Shor, ameaçam
os criptossistemas em vigor atualmente. No entanto, a execução desses algoritmos depende
do hardware apropriado no qual possam ser implementados. No momento, essa é a maior
limitação para a criptografia pós-quântica, pois os computadores quânticos existentes
atualmente são limitados quanto à quantidade de bits e seu processamento.
Uma das principais empresas focadas em desenvolver computadores capazes de
rodar algoritmos quânticos é a IBM, que recentemente afirmou ter construído com sucesso
um computador com mais de 100 qubits, e pretende aumentar esse número anualmente
com novos lançamentos. No entanto, estima-se que ainda se passarão diversos anos até
que computadores desse tipo tornem-se de fato utilizáveis em larga escala.
Mesmo que esses computadores ainda não são capazes de realizar operações que
realmente ameacem a criptografia clássica, é uma questão de tempo até que consigam
fazê-lo, e por isso é fundamental estudar algoritmos criptossistemas pós-quânticos que,
eventualmente, tornar-se-ão a única forma segura de criptografia. Compreender e otimizar
um desses criptossistemas é justamente o objetivo deste trabalho.

2.4 A escolha do algoritmo


O algoritmo escolhido a ser implementado neste PFC foi o NTRU. A decisão foi
tomada pelos alunos, juntamente com o orientador, a partir do estudo da área e da análise
sumarizada neste capítulo.
Dentre os principais motivos está seu bom desempenho na campanha promovida
pelo NIST. Por ser um dos finalistas, mostra-se promissor em termos de segurança e,
Capítulo 2. Survey 22

consegquentemente, de possíveis aplicações reais.


Além disso, é um algoritmo relativamente antigo, pois foi desenvolvido na década
de 90, e após mais de 20 anos ainda é estudado e desenvolvido. Isso significa que, além
de ter sobrevivido a inúmeras tentativas de quebra (o que novamente mostra potencial
de segurança), há uma grande quantidade de artigos e publicações que auxiliaram no
desenvolvimento deste trabalho, de modo que o tornaram mais rico e bem fundamentado.
Portanto, o estudo e a implementação NTRU é o objetivo deste projeto, e nele será
centralizado o conteúdo deste relatório.
23

3 FUNDAMENTAÇÃO TEÓRICA

A partir dos artigos que foram selecionados, foi feito um estudo teórico sobre
os principais conceitos referentes a criptografia e reticulados relevantes ao trabalho a
ser desenvolvido. Eles estão apresentados a seguir, de modo a fundamentar as noções
importantes para a compreensão deste documento. As principais fontes foram (2) e (12),
trabalhos realizados no Instituto Militar de Engenharia e também orientados pelo professor
José Antonio Moreira Xexéo.

3.1 Conceitos iniciais de criptografia


3.1.1 Estrutura e funcionamento de um criptossistema
Um criptossistema consiste nos elementos participantes de um processo de comu-
nicação onde se deseja realizar a transmissão de uma mensagem (texto em claro) sem
que agentes externos tenham acesso a ela. Para que isso aconteça, são realizados dois
processos principais: a encriptação e a decriptação. O primeiro é realizado pelo emissor e
consiste na conversão do texto em claro em um texto cifrado, cujo conteúdo é indecifrável
sem o conhecimento de uma chave secreta previamente estabelecida. Já a decriptação é
o processo inverso, quando o texto cifrado é convertido de volta ao texto em claro pelo
receptor.
Note que esse processo garante a segurança da comunicação não por obscuridade
(quando o sistema é seguro porque seu mecanismo de funcionamento e seus elementos
são sigilosos a agentes externos), mas sim pela dificuldade de se resolver um problema
matemático que converte o texto cifrado ao texto em claro (dado que não se conheça a
chave secreta).
Há dois tipo principais de criptografia:

3.1.1.1 Criptografia simétrica

Esse tipo de criptografia se baseia no uso de uma mesma chave secreta, ou duas
chaves obtidas facilmente uma a partir da outra, para codificar e decodificar a mensagem.
Dessa forma, o emissor e o receptor devem realizar uma comunicação, em um primeiro
momento, para estabelecer a qual será essa chave. Para isso, precisa-se de um algoritmo
seguro de troca de chaves, o qual permita que ambos os participantes do processo de
comunicação tenham conhecimento da chave secreta sem que terceiros a descubram. O
algoritmo de troca de chaves mais conhecido é o algoritmo de Diffie-Hellman, publicado
Capítulo 3. Fundamentação Teórica 24

em 1976 no artigo (13), e se baseia na dificuldade de se fatorar o produto de dois primos


grandes.

3.1.1.2 Criptografia assimétrica

Nesse caso, não é mais utilizada a mesma chave para encriptar e decriptar a
mensagem. Em vez disso, o receptor possui duas chaves, uma pública e uma privada.
Para um emissor enviar uma mensagem, basta encriptá-la utilizando a chave pública
disponibilizada pelo receptor desejado. Dessa forma, todos terão acesso ao criptograma
(mensagem encriptada). Porém, somente o receptor será capaz de decriptá-lo, já que apenas
ele tem conhecimento da chave secreta, a qual é responsável pela decriptação. Esse tipo de
ccriptografia tem a vantagem de não ser necessário o procedimento de estabelecimento
de uma chave secreta por meio de um canal potencialmente não seguro. No entanto,
algoritmos de chave assimétrica normalmente possuem uma maior complexidade de tempo
do que os algoritmos de chave simétrica.
Esses algoritmos são baseados dificuldade de se resolver computacionalmente
determinados problemas. Dentre eles, os mais comuns são a fatoração de grandes inteiros e
o problema do logaritmo discreto. Para computadores clássicos, não há algoritmos que os
resolvam em tempo polinomial, e a segurança do criptossistema depende disso. No entanto,
existem algoritmos quânticos que conseguem fazê-lo, e daí a vulnerabilidade gerada pelo
advento da computação quântica, como será discutido nos próximos capítulos.

3.1.2 Funções de mão única com arapuca


Dado o funcionamento básico de criptossistemas, mostra-se fundamental o estudo
de funções que sejam facilmente calculadas, mas que sejam difíceis de inverter computacio-
nalmente. A formalização desse tipo de função se dá a seguir:

Definição 3.1.1 Uma função f é dita de mão única se valem:

1. Existe um algoritmo de complexidade polinomial no tempo que, dado x ∈ Dom(f )


calcula f (x).

2. Não existe um algoritmo de complexidade polinomial no tempo (no caso médio) tal
que, dado apenas y, encontre um elemento da pré-imagem de y (algum x ∈ Dom(f )
tal que f (x) = y).

Há funções de mão única que, dado o conhecimento de certa informação (arapuca),


tornam-se invertíveis. São essas as funções que nos interessam para montar um criptossis-
temas, pois possibilitam a encriptação por parte do emissor, dificultam a decriptação por
Capítulo 3. Fundamentação Teórica 25

parte de agentes externos (que não conhecem a arapuca) e tornam possível a decriptação
para o receptor (que conhece a arapuca). A arapuca, nesse caso, torna-se a chave do
criptossistema.

3.2 Conceitos iniciais de reticulados


Um reticulado é um subgrupo discreto do Rn gerado por uma base de vetores. Pode
ser visto como análogo (discreto) de um espaço vetorial, onde os coeficientes são inteiros.

Definição 3.2.1 Sejam v1 , . . . , vn ∈ Rm um conjunto de vetores linearmente independen-


tes. O reticulado L gerado por v1 , . . . , vn é dado por:

( n )
X
L= ai vi ; a1 , . . . , an ∈ Z
i=1

A Figura 2 dá a intuição visual do que é um reticulado no R2 . Há dois vetores com


base na origem cujas combinações lineares (com coeficientes inteiros) geram os pontos
distribuídos no plano.

Figura 2 – Reticulado no R2 (2)

Um mesmo reticulado pode ser gerado por diversas bases. A escolha dessas bases é
um aspecto fundamental dos algoritmos de criptografia baseados em reticulados que serão
abordados neste trabalho. Isso se deve ao fato de que há bases que são "boas"e outras que
são "ruins"para resolver problemas difíceis relacionados aos reticulados.
Ainda neste capítulo será formalizado o conceito de bases "boas"ou "ruins", e
serão apresentadas métricas para avaliá-las. Porém, antes disso, a Figura 3 dá uma noção
intuitiva de como classificar a base de um reticulado. De forma simplificada, bases "boas"são
formadas por vetores pequenos e ortogonais, enquanto bases "ruins"possuem vetores grandes
e "pouco ortogonais".
Capítulo 3. Fundamentação Teórica 26

(a) Base boa (b) Base ruim


Figura 3 – Comparação de bases boas e ruins no R2 (2)

Voltando para o caso genérico do Rn , os pontos w pertencentes ao reticulado L


com base v1 , . . . , vn podem ser escritos da seguinte forma:

 
a
 1
h i  a2 


w = v1 v2 . . . vn  .. 

 . 
 
an

Note que vi são vetores coluna e ai são escalares inteiros, então w é também um
vetor coluna, formado por uma combinação linear de v1 , . . . , vn .
Logo, se quisermos gerar não apenas um único vetor w, mas sim k vetores w1 , . . . , wk
pertencentes ao reticulado, podemos escrevê-los da seguinte forma:

 
a a12 . . . a1k
 11 
h i h  a21 a22
i . . . a2k 

w1 w2 . . . wk = v1 v2 . . . vn 
 .. .. .. .. 
 . . . . 

 
an1 an2 . . . ank

Para o caso k = n, pa equação fica da seguinte forma:

 
a a12 . . . a1n
 11 
h i h i  a21 a22

. . . a2n 

w1 w2 . . . wn = v1 v2 . . . vn  .. .. ... . . 
 . . . 
 
an1 an2 . . . ann

Seja a matriz A:
Capítulo 3. Fundamentação Teórica 27

 
a a12 . . . a1n
 11 
 a21 a22 . . . a2n 


A=
 .. .. . . . .. 

 . . . 
 
an1 an2 . . . ann

O caso k = n será particularmente interessante para o estudo de algoritmos de


criptografia baseados em reticulados, pois os vetores w podem constituir, também, uma
base do reticulado gerado por v. Note que a matriz A permite passar de uma base de
vetores v para outra base w do mesmo reticulado. Da mesma forma, a inversa A−1 permite
passar da base w de volta para a base v.
Suponha que v é uma boa base de um reticulado L, e w uma base ruim do mesmo
reticulado. Nesse caso, uma matriz A cuja inversão seja computacionalmente difícil é
uma boa chave de encriptação do criptossistema, pois permite que uma mensagem seja
codificada sem ser facilmente decriptável, uma vez que um agente malicioso não consegue
calcular A−1 , a chave de decriptação.

3.2.1 Taxa de Hadamard


Agora, será formalizada a ideia de uma base ser "boa"ou "ruim". Para isso, vamos
definir uma quantidade chamada Taxa de Hadamard (H), respectiva a uma base V =
(v1 , . . . , vn ):

!1
|det(L)| n
H(V ) =
||v1 ||.||v2 || . . . ||vn ||

É possível demonstrar que 0 ≤ H(V ) ≤ 1, e pode-se assumir o quão "boa"é uma


base da seguinte forma:

• H(V ) ≈ 1: base ruim (vetores pequenos e "muito ortogonais")

• H(V ) ≈ 0: base boa (vetores grandes e "pouco ortogonais")

Os casos extremos, quando H(V ) = 0 ou H(V ) = 1, são indicativos de dois casos


específicos. Quando H(V ) = 0, ocorre que os vetores são linearmente independentes
(det(L) = 0), e não constituem uma base do Rn . Se H(V ) = 1, então os vetores são
ortogonais entre si.
Capítulo 3. Fundamentação Teórica 28

3.2.2 Problemas difíceis em reticulados


Como apresentado, algoritmos criptográficos são baseados em problemas que são
computacionalmente difíceis de serem resolvidos. No contexto dos reticulados, os problemas
mais utilizados com essa finalidade são os seguintes:

• Problema do Menor Vetor (SVP - Smallest Vector Problem): encontrar


um vetor não nulo v em um reticulado L que minimize a norma euclidiana ||v||.

• Problema de Vetor mais Próximo (CVP - Closest Vector Problem): dado


um vetor w ∈ Rn /L, encontrar um vetor v ∈ L que minimize a norma euclidiana
||v-w||.

• Solução do Menor Inteiro (SIS - Smallest Integer Solution): dado um


módulo q, ua matriz A(modq) e um vetor w < q, encontrar um vetor v ∈ Zn tal que
Av ≡ 0(modq) e ||v|| ≤ w.

• Aprendendo com Erros (LWE - Learning With Errors): dado um módulo q.


Para s ∈ Znq e uma distribuição de probabilidade χ em Zq , seja Ax,χ a distribuição de
probabilidade em Znq uniforme, e ∈ Zq de acordo com χ, calcule (a, ⟨a, s + e)(modq).
O problema LWE se resume a dados n, q, χ e um número de amostras independentes
de As,χ , encontrar s.

(6) 2.3 - Lattice Problems and Their Applications to Cryptography:


The breakthrough work of Ajtai [8] provides confidence for adopting lattice-based
schemes in cryptography. Ajtai proves that solving some NP-hard lattice problems (e.g.,
Shortest Vector Problem [SVP]) in the average case is as hard as solving the worst-case
assumption. In order to solve the SVP problem, one should solve the problem for any input
basis B (all instances of the SVP problem should be solved). It is conjectured that there is
no probabilistic polynomial time algorithm that can approximate certain computational
problems on lattices to within polynomial factors [9]. This is the basis for the security of
LBC schemes. The fastest algorithm to solve the SVP problem has the time and memory
complexity of 2O (n) [10–12].

3.2.3 Redução de Reticulados


Algoritmos baseados em reticulados, em teoria, são vistos como confiáveis porque é
computacionalmente bastante difícil resolver os problemas difíceis basedos em reticulados,
principalmente quando se utilizam bases geradoras do reticulados ruins, com taxa de
Radamard próxima de zero. A seguir, será mostrado como resolver os problemas do SV P
e do CV P , quando a base tem taxa de Radamard igual a zero.
Capítulo 3. Fundamentação Teórica 29

3.2.3.1 Resolvendo SVP e CVP

Seja L ⊂ Rn um reticulado com base V = (v1 , . . . , vn ), com seus vetores perpendi-


culares dois a dois, ou seja, vi .vj = 0, ∀i ̸= j. A partir dessa ortogonalidade, ao se calcular
o tamanho de qualquer vetor pertencente ao reticulado tem-se que:

∥a1 v1 + . . . + an vn ∥2 = a21 ∥v1 ∥2 + . . . + a2n ∥vn ∥2

Como a1 , a2 , . . . , an ∈ Z, a solução do SVP pertencerá ao conjunto:

{±v1 , . . . , ±vn }

Para resolver o CV P , devemos achar o vetor u mais próximo de um dado vetor W ,


com w, u ∈ L. Fazendo w = ni=1 bi vi e u = ni=1 ai vi , u será a solução do CV P quando
P P

ai = [bi ], para um dado 1 ≤ i ≤ n, onde [.] denota o inteiro mais próximo. Foi mostrado
a solução dos Probemas SV P e CV P quando os vetores da base são ortogonais entre si,
contudo também é possível resolver os problemas para os bases suficientemente ortogonais
entre si, através do algoritmo de Babai:

• Algoritmo de Babai:
 
v
 1
 .. 
1. Seja V =  .  uma base boa, escreva wv = wV −1
 
vn

2. Calcule wv = [wv ]

3. Retorne u = wv V

Com isso, foi visto que bases boas facilitam em muito a resolução de problemas
difíceis baseados em reticulados. Tendo isso em vista, um possível atacante de um cripto-
sistema baseado em reticulados poderia buscar desenvolver um algoritmo capaz de gerar
uma base boa que descreva o mesmo reticulado que uma outra base ruim. Esse processo
é conhecido como redução de reticulados e, a seguir, serão abordados os algoritmos de
redução de reticulados mais tradicionais.

3.2.3.2 Redução Gaussiana

A redução gaussiana só é aplicável para reticulados de duas dimensões, uma vez


que o seu custo computacional aumenta muito a partir de 3 dimensões. Contudo, ela é útil
para entender o funcionamento do algoritmo LLL, usado em reticulados de dimensão mior
do que 2. Para uma dada base V = {v1 , v2 } de um reticulado L ⊂ R2 , com ∥v1 ∥ < ∥v2 ∥, o
processo de redução consiste em diminuir sucessivamente múltiplos de um dos vetores da
Capítulo 3. Fundamentação Teórica 30

base do outro vetor. Primeiramente, deve-se calcular o vetor v2∗ , projeção de v2 sobre a
direção ortogonal a v1 :
v2 .v1
v2 ∗ = v2 − v1
∥v1 ∥2

Mas, assim não é garantido que v2∗ faça parte do reticulado. Então, é feito o seguinte
ajuste:
v2 .v1
v2 ∗ = v2 − m.v1 , m=⌈ ⌋
∥v1 ∥2
v2 .v1
Onde m é o inteiro mais próximo de ∥v 1∥
2 . Se m = 0, a base já está ortogonalizada.

Caso contrário, deve-se trocar v1 por v2 e repetir o processo até que m seja 0.

3.2.3.3 Redução LLL

O algoritmo de redução LLL busca obter uma base boa para reticulados de di-
mensões maiores que 2 e possui tempo polinomial. O funcionamento do LLL consiste
em minimizar os comprimentos das projeções de cada elemento da base sob o subespaço
gerado pelas anteriores por meio de uma troca semelhante à vista na redução gaussiana.
De fato, o LLL utiliza a redução gaussiana localmente em cada par de vetores (bi , bi−1 ).
Contudo, esse par de vetores deve obedecer a uma condição extra, a condição de Lovász:

∥bi ∥2
≥ δ − µ2i,i−1 , δ ∈ (1, 1/4)
∥bi−1 ∥2

Além disso, a redução LLL utiliza a ortognalização de Gram-Schmidt. ((25 mod 24) mod
5) = 1
25 ≡ 1 (mod 24) (mod5)

(5 ≡ 5 (mod 24))(mod 5)

5 ≡ −19 (mod 24)(mod 5)

3.3 Conceitos iniciais de Computação Quântica


Computadores quânticos têm um funcionamento muito diferente dos computadores
clássicos. Eles não são disruptivos por simplesmente possuírem um processamento muito
mais rápido do que os computadores atuais, mas sim por serem estruturados a partir de
regras e princípios completamente diferentes, que oferecem um novo tipo de processamento.
A seguir, serão apresentados alguns conceitos apresentados em (1) que ajudam a
entender como funciona um computador quântico a fim de compreender os algoritmos de
computação quântica e como eles ameaçam a criptografia utilizada atualmente.
Capítulo 3. Fundamentação Teórica 31

3.3.1 Bits e Qubits


Um bit é a unidade de informação que descreve um sistema clássico bidimensional.
Ele pode assumir dois valores, 0 ou (exclusivo) 1, respectivamente associados a seus dois
possíveis estados, para os quais vamos adotar a seguinte notação: |0⟩ e |1⟩.
Os bits descrevem muito bem o mundo "clássico", pois são determinísticos, ou
seja, assumem sempre um, e apenas um, de seus dois possíveis valores. Eles podem ser
interpretados como passagem ou não de corrente, alta ou baixa voltagem, verdadeiro ou
falso. Uma maneira conveniente de representar tais estados é:

   
1 0
|0⟩ =   |1⟩ =  
0 1

Ao invés de utilizarem bits como unidades de informação, computadores quânticos


utilizam os qubits, uma generalização do caso anterior.
Um qubit (Quantum Bit) é a unidade de informação que descreve um sistema
quântico bidimensional. Devido aos princípios de funcionamento da mecânica quântica, os
qubits não se encontram em um estado determinístico. Em vez disso, eles são formados
por uma superposição dos estados |0⟩ e |1⟩, ou seja, ele está simultaneamente em ambos
estados. A cada um dos estados está associada uma probabilidade, e apenas quando se
realiza uma medição (definida ainda neste capítulo) do qubit é que ele assume um dos
dois estados, de acordo com tais probabilidades.
O estado de um qubit pode ser descrito como um vetor em C2 , formado por
c0 , c1 ∈ C, onde |c0 |2 + |c1 |2 = 1:

 
c0
|c0 , c1 ⟩ =  
c1

Nesse caso, |c0 |2 é a probabilidade de que o qubit, depois de medido, se encontre


no estado |0⟩; e |c1 |2 é a probabilidade de que o qubit, depois de medido, se encontre no
estado |1⟩.
Note que os estados |0⟩ e |1⟩ nada mais são do que casos particulares de um
qubit onde |c0 , c1 ⟩ = |1, 0⟩ e |c0 , c1 ⟩ = |0, 1⟩, respectivamente. Uma maneira de visualizar
matematicamente a superposição de estados que caracteriza um qubit é escrevê-lo da
seguinte forma:
Capítulo 3. Fundamentação Teórica 32

     
c 1 0
 0  = c0   + c1  
c1 0 1

|c0 , c1 ⟩ = c0 |0⟩ + c1 |1⟩

A medição de um qubit é uma operação que quebra seu estado de superposição,


fazendo com que ele "colapse"e assuma um único valor (0 ou 1), tornando-se assim análogo
a um bit clássico. A figura 4 ilustra o que ocorre quando um qubit é medido, bem como as
probabilidades associadas.

Figura 4 – Medição de um qubit (1)

Uma forma de visualizar geometricamente o estado de um qubit é a Esfera de Bloch,


ilustrada na figura 5. As deduções algébricas que levam a ela não serão apresentadas,
pois fogem do escopo deste trabalho, mas é interessante entender seu funcionamento.
Basicamente, o estado de um qubit pode ser descrito por 2 números reais, aos quais vamos
associar dois ângulos: θ e ϕ, respectivamente associados à latitude e longitude. O ponto
definido por esses ângulos determina o estado do qubit, e quando ele é medido, converge
para um dos dois polos, |0⟩ ou |1⟩. Quanto mais próximo ao polo |0⟩, maior a probabilidade
de o qubit ser medido no estado |0⟩, e vice-versa.
Agora, vamos entender por que é vantajoso utilizar qubits para determinados tipos
de processamentos. Tome um byte de informação que tem valor 01101011, por exemplo.
Para representá-lo, são necessários 8 bits, cada um deles assumindo um valor dentre 0 e 1.
Uma outra forma de representá-lo é o seguinte vetor, de dimensão 28 = 256 (valor 1 para
o estado do byte e 0 para os demais):
Capítulo 3. Fundamentação Teórica 33

Figura 5 – Esfera de Bloch (1)

 
00000000 0
00000001 
0
 

.. .
.  .. 
 
 
0
01101010  
 
1
01101011  
 
0
01101100  
..  .. 
 
. .
 
11111110 0
 
 
11111111 0

No entanto, para descrever o estado de um qubyte, ou seja, 8 qubits de informação,


é necessário associar um número complexo a cada um dos 256 estados fundamentais que
estão sobrepostos. Observe o vetor associado a um qubit:

 
00000000  c0

00000001  c1
 

.. ..
 
 
. 


 .
 
01101010 c106 


 
01101011 c107 


 
01101100 c108 


..  . 
 . 
.  . 
 
11111110 c254 
 
 
11111111 c255

Nota-se que, enquanto o estado de um byte é descrito por 8 bits, o estado de um


qubyte é descrito por 28 = 256 números complexos. Generalizando esse conceito, tem-se
que N qubits são descritos por 2N números complexos.
Capítulo 3. Fundamentação Teórica 34

Portanto, para uma mesma quantidade de bits e qubits, estes contêm uma quanti-
dade de informação exponencialmente maior, e nela está a disruptividade dos computadores
quânticos. Para descrever o estado de um registrador de 64 qubits, por exemplo, seria
necessário armazenar 264 = 18.446.744.073.709.551.616 números complexos, o que excede
em muito a capacidade de armazenamento dos dispositivos atuais.
Além disso, torna-se possível aproveitar essa enorme capacidade e paralelizar o
processamento, pois múltiplos processamentos podem ser sobrepostos e realizados ao mesmo
tempo. É essa combinação de fatores que torna a computação quântica especialmente
eficiente para determinados problemas, como será discutido na seção de algoritmos.
Por fim, estão descritas a seguir algumas das formas mais comuns de implementar
um qubit:

• Elétrons em diferentes órbitas ao redor de um núcleo (estado fundamental ou


excitado).

• Fóton em um dos dois estados polarizados.

• Partícula subatômica com uma das duas direções de spin.

3.3.2 Algoritmos
Como visto, os computadores quânticos não são meros substitutos dos computadores
clássicos que realizam suas operações mais rapidamente. Em vez disso, são capazes de
executar algoritmos específicos que atendem às propriedades da física quântica, de modo
que resolvem determinados problemas de forma mais eficiente.
A título de exemplo, um computador clássico só é capaz de fazer uma busca em um
vetor desordenado em O(n), onde n é o número de elementos nesse vetor. Em compensação,

o algoritmo de Grover (quântico) é capaz de realizar a mesma tarefa em O( n).
Por fim, o algoritmo mais relevante para a criprografia é o algoritmo de Shor (3).
Proposto em 1995 por Peter Shor, ele resolve o problema da fatoração de grandes inteiros
em tempo polinomial. O seu funcionamento detalhado foge ao escopo deste trabalho, porém
é fundamental ter em mente sua importância. Dado que grande parte dos criptossistemas
atuais baseiam-se na suposição de que fatorar grandes inteiros é computacionalmente difícil,
uma implementação eficaz do algoritmo de Shor tornaria essa suposição falsa, colocando
em risco grande parte da criptografia utilizada hoje em dia.
É importante ressaltar que os computadores quânticos atualmente não suportam a
execução desse algoritmo para chaves de dimensões relevantes, mas eventualmente terão, e
por isso é importante desenvolver alternativas que sejam seguras mesmo contra esse tipo
de abordagem.
35

4 O NTRU

4.1 NTRUEncrypt
4.1.1 O algoritmo
Parâmetros públicos:

• N - número primo que limita o tamanho da mensagem a ser encriptada de uma vez
só. No caso de uma mensagem maior que o limite, dividimos a mensagem e enviamos
por partes.

• p - número primo que limita a quantidade de símbolos representáveis

• q - número primo tal que q > 3 ∗ N ∗ p

Chave privada:

Z[x]
• f - polinômio com coeficientes ∈ {−1, 1} no anel (xN −1)
, inversível quando os
Z Z
coeficientes pertencem à pZ e qZ

Criacação da chave pública:

• fq - inversa de f no anel com os coeficientes em pZ

• g - polinômio aleatório com coeficientes ∈ [−1, 1]

• h = fq ∗ g(modq) - chave pública

Encriptação:

• m - representação polinomial da mensagem com coeficientes ∈ [−p/2, p/2)

• r - polinômio aleatório com coeficientes ∈ [−1, 1]. No caso de várias partes da men-
sagem sendo enviados separadamente, esse polinômio é recalculado aleatoriamente
para cada parte.

• e = p ∗ r ∗ h + m - mensagem encriptada
Capítulo 4. O NTRU 36

Decriptação:

a = f ∗ e (mod q)
= f ∗ (p ∗ r ∗ h + m) (mod q)
= f ∗ p ∗ r ∗ h + f ∗ m (mod q)
= f ∗ p ∗ r ∗ (fq ∗ g) + f ∗ m (mod q)
= p ∗ r ∗ g + f ∗ m (mod q)

b = a ∗ fp (mod p)
= (p ∗ r ∗ g + f ∗ m (mod q)) ∗ fp (mod p)
= p ∗ r ∗ g ∗ fp + f ∗ m ∗ fp (mod p)
=m

4.1.2 Restrições dos parâmetros


Note que, para que valha f ∗ fp ≡ 1 (mod q), passagem no cálculo de b acima,
é necessário que p ∗ r ∗ g + f ∗ m (mod q) = p ∗ r ∗ g + f ∗ m. Para que isso aconteça,
precisamos que os coeficientes de p ∗ r ∗ g + f ∗ m ∈ [−q/2, q/2), pois para todo x temos
que x ≡ q − x (mod ). Logo, essa restrição garante que conseguimos definir o valor correto
de cada coeficiente (caso estejamos com um valor acima de q/2 sabemos que devemos
diminuir o coeficiente em q). Por isso definimos as seguintes restrições:

• Coeficientes de f , r e g ∈ −1, 0, 1 - assim temos os coeficientes de p ∗ r ∗ g ∈


[−N ∗ p, N ∗ p).

• Coeficientes de m ∈ [−p/2, p/2) − 0 - assim temos os coeficientes de f ∗ m ∈


[−N ∗ p/2, N ∗ p/2), que por consequência leva aos coeficientes de p ∗ r ∗ g + f ∗ m ∈
[−3 ∗ N ∗ p/2, 3 ∗ N ∗ p/2) e pelas restrições temos q > 3 ∗ N ∗ p. Não associamos
nenhum símbolo ao zero pois isso geraria ambiguidade entre o símbolo e a mensagem
ter acabado.

A restrição para q poderia ser mais rigorosa caso considerássemos os pisos das
divisões, porém isso causaria uma rigorosidade no momento desnecessária. Assim, vamos
seguir o código usando essa restrição.
Um detalhe importante do algoritmo é a ordem em que fazemos as operações.
Como todas as operações estão em (xZ[x] Z Z
N −1) e pZ ou pZ , na prática estamos tirando 2

módulos. Portanto, em geral, a ordem em que fazemos essas operações poderia chegar
em resultados diferentes. Porém, tirar mod(xN − 1) possui um comportamento cíclico, ou
Capítulo 4. O NTRU 37

seja, todos os coeficientes relacionados a expoentes com o mesmo mod(N ) são somados no
coeficiente relacionado ao expoente de mesmo mod(N ). Por exemplo: 5x3 + 3x2 − 2x + 1 ≡
(5 − 2)x + (3 + 1)mod(x2 − 1). Assim, fazer a operação mod(p) ou mod(q) dos coeficientes
antes ou depois de somá-los acaba no mesmo resultado.
É necessário analisar melhor a influência de usar coeficientes em [−1, 1] na segurança
da criptografia, assim como a ordem de grandeza de p e q.
O tamanho de N está diretamente ligado à segurança da criptografia, pois gera
mais chaves privadas possíveis que um ataque precisaria testar. Um gargalo no crescimento
de N porém é a complexidade em achar um f válido, pois este tem as restrições sobre
a existência de suas inversas. É necessário uma análise sobre a influência de usar N ,
p e q primos para aumentar a probabilidade de randomizar uma chave privada válida,
assim como a escolha limitada dos coeficientes da chave privada. Note que a segurança
envolve a quantidade de chaves privadas válidas, de forma que ser mais provável achar uma
chave válida não diminui a segurança, pelo contrário, permitira valores maiores para N
aumentando a segurança. A limitação dos coeficientes por outro lado diminuem a variedade
de chaves que podemos estar usando e por consequência de fato diminuiria a segurança.
Outra forma de aumentar o valor de N seria pré-calcular diversas chaves privadas
válidas, porém vale ressaltar que para certos parâmetros isso continua sendo inviável. Por
exemplo, se considerarmos 3 opções para cada coeficiente e quisermos checar todos os
polinômios de 40 coeficientes, isso já seria equivalente a aproximadamente 400 anos de pré-
cálculo, por isso implementações com N maiores utilizam de outras análises matemáticas
para achar uma chave válida mais rápido com certas restrições em seus coeficientes.

4.1.3 NTRU como um problema de reticulados


A segurança do NTRU é baseada no fato de que um dos ataques mais comuns
a ele é baseado na solução de um SVP (Smallest Vector Problemm) ou CVP (Closest
Vector Probelm), problemas clássicos de reticulados considerados computacionalmente
difíceis, tanto para computadores clássicos quanto quânticos. Apesar de não haver prova
matemática de que seja impossível achar a solução em tempo polinomial, não é conhecido
um algoritmo que consiga fazê-lo. Até o momento, o melhor método para resolvê-lo tem
complexidade exponencial tanto em tempo quanto em memória.
A seguir, será descrito como um ataque desse tipo é realizado. De forma simplificada,
será definido um reticulado (chamado de reticulado NTRU) que contém vetores de interesse
para o atacante, pois suas coordenadas entregam a chave privada ou o texto em claro.
Primeiramente, é importante lembrar que N , p, q e h são valores públicos conhecidos.
Por outro lado, f e g são valores privados que serão o alvo do ataque, pois o conhecimento
de f permite a decriptação de mensagens desse criptossistema.
Capítulo 4. O NTRU 38

Vamos definir o reticulado L da seguinte forma:

L = (a, b) ∈ Z2N : a ∗ h ≡ b (mod q)

A seguir, será mostrado por que isso é, de fato, um reticulado.


Observe:

f ∗ h (mod q) ≡ f ∗ (fq ∗ g) (mod q) = g


f ∗ h − g ≡ 0 (mod q)

Como estamos lidando com o anel xNZ−1 q


, isso implica que existe um vetor u =
(u1 , u2 , . . . , uN ) ∈ ZN tal que f ∗ h − g = q ∗ u, ou seja:

f ∗h−u∗q =g

No anel xNZ−1
q
, vale que xN +k ≡ xk . Portanto, a multiplicação de polinômios f ∗ h
pode ser escrita da seguinte forma:

f = f0 + f1 x + f2 x2 + . . . fN −1 xN −1
h = h0 + h1 x + h2 x2 + . . . hN −1 xN −1

f ∗ h =f0 h0 + f1 hN −1 + f2 hN −2 + · · · + fN −1 h1
+ (f0 h1 + f1 h0 + f2 hN −1 + · · · + fN −1 h2 ) x
+ (f0 h2 + f1 h1 + f2 h0 + · · · + fN −1 h3 ) x2
..
.
+ (f0 hN −1 + f1 hN −2 + f2 hN −3 + · · · + fN −1 h0 ) xN −1

Essa multiplicação de polinômios (f ∗ h) pode ser reescrita na forma matricial da


seguinte forma:
Capítulo 4. O NTRU 39

  
h0 hN −1 hN −2 . . . h1 f
  0 

 h1 h0 hN −1 . . . h2   f1 


  
f ∗h= 
 h2 h1 h0 . . . h3   f2 



.. .. .. . . . .. 

 .. 

. . . .  . 

  
 
hN −1 hN −2 hN −3 . . . h0 fN −1

Seja a matriz:
 
h0 hN −1 hN −2 . . . h1
 

 h1 h0 hN −1 . . . h2 
 
H= 
 h2 h1 h0 . . . h3 

.. .. .. .. .. 
. . . . .
 

 
hN −1 hN −2 hN −3 . . . h0

Essa é a chamada matriz de convolução de h, obtida pela disposição de N vetores


coluna h, onde a i-ésima coluna é deslocada em i − 1 posições. Há artigos que o escrevem
na sua forma transposta, caso no qual f seria descrito como um vetor linha, e não coluna.
Neste documento vamos adotar a notação acima, com vetores coluna.
Por fim, estamos prontos para obter uma base do reticulado NTRU. Esse reticulado
será definido por uma base em R2N que contém (f, g) - vetor formato pela concatenação
dos vetores f e g, ambos em RN -, o qual pode ser encontrado com a resolução do CVP
associado. Essa discussão será feita de forma mais profunda posteriormente. Observe a
matriz a seguir:

 

1 0 0 ... 0 0 0 0 ... 0 
0 1 0 ... 0 0 0 0 ... 0
 
 
 
0 0 1 ... 0 0 0 0 ... 0
 
 
.. .. .. .. .. .. .. ..
 
 .. .. 

 . . . . . . . . . . 

 
 0 0 0 ... 1 0 0 0 ... 0 
M (L) =
 
 

 h0 hN −1 hN −2 . . . h1 q 0 0 ... 0 

 

 h1 h0 hN −1 . . . h2 0 q 0 ... 0 

 

 h2 h1 h0 . . . h3 0 0 q ... 0 

 .. .. .. .. . .. .. .. .. .. 

 . . . . .. . . . . .


 
hN −1 hN −2 hN −3 . . . h0 0 0 0 ... q

 
IN 0 
M (L) = 
H qIN
Capítulo 4. O NTRU 40

Para verificar que o reticulaodo definido pela base M (L) de fato contém o vetor
(f, g), basta realizar a seguinte multiplicação de matrizes:

    
 f1  
1 0 0 ... 0 0 0 0 ... 0  f1 
 f2  0 1 0 ... 0 0 0 0 ... 0 f2
    
  
    
 f3  0 0 1 ... 0 0 0 0 ... 0 f3
    
  
 .  .. .. .. .. .. .. .. .. ..
    
 .. 
 ... ...  
 

 . . . . . . . . 
 . 

    
f
 N −1 
  0 0 0 ... 1 0 0 0 ... 0  fN −1 
=
  
    
 g 
 1 

 h0 hN −1 hN −2 . . . h1 q 0 0 ... 0 
 −u1 

    
 g 
 2 

 h1 h0 hN −1 . . . h2 0 q 0 ... 0 
 −u2 

    
 g 
 3 

 h2 h1 h0 . . . h3 0 0 q ... 0 
 −u3 

 .  .. .. .. . .. .. .. .. ..
 . 

.. ..  
 . 

 . . . . .. . . . . .

 .


    
gN −1 hN −1 hN −2 hN −3 . . . h0 0 0 0 ... q −uN −1

    
f I
 = N
0  f 
g H qIN −u

(f, g) = M (L) ∗ (f, −u)

Como os coeficientes de (f, −u) são inteiros, (f, g) pertence ao reticulado formado
pela base M (L) de L.
Além disso, pela forma como foram gerados os polinômios f e g (com coeficientes em
{−1, 0, 1}, o vetor (f, g) é um vetor pequeno de L, e possui probabilidade significativamente
alta de ser o menor vetor desse reticulado. Dessa forma, resolver o SVP associado à base
M (L) significa encontrar a chave privada f , que permite decriptar mensagens desse
criptossistema.
Há, também, outra forma de atacar o NTRU utilizando essa mesma matriz. Nesse
caso, ao invés de ter como objetivo calcular a chave privada, têm-se como meta o ataque a
uma mensagem específica, sem o conhecimento de f . Isso é feito através da resolução de
um CVP, onde o vetor buscado é (0, e).
Lembrando que: e = r ∗ h + m (mod q).
Portanto, podemos reescrever (0, e) da seguinte forma:

(0, e) = (0, r ∗ h + m (mod q))


= (r, r ∗ h (mod q)) + (−r, m)
Capítulo 4. O NTRU 41

Note que, pela definição de L, o vetor (r, r ∗ h (mod q)) pertence ao reticulado..
Logo, a busca pelo vetor (0, e) em L a partir da base conhecida M (L) pode ser
considerada um CVP, onde (−r, m) é o vetor pequeno que distancia (0, e) - não pertencente
ao reticulado - do ponto (r, r ∗ h (mod q)) - pertencente ao reticulado.
42

5 O DESENVOLVIMENTO DO PROJETO

A avaliação deste Projeto de Fim de Curso desenvolvido foi dividido em 3 etapas


de avliação: VE (Verificação Especial), VC (Verificação Corrente) e VF (Verificação Final).
As apresentações dos avanços feitos foram realizadas, respectivamente, nos dias 23/05/22,
01/08/22 e em outubro (data a definir). Neste capítulo serão comentados os principais
desafios realizados em cada uma dessas entregas parciais.

5.1 VE
O período anterior à VE foi dedicado ao estudo introdutório da criptografia pós-
quântica, com enfoque especial em reticulados e sua aplicação na área. Nesse tempo, foi
escrita grande parte da fundamentação teórica apresentada neste documento e, ao final do
semestre, os alunos ministraram uma aula sobre criptografia baseada em reticulados à sua
turma de graduação, que na época realizava a disciplina de Segurança da Informação.
O tema proposto para o PFC é "implementar um algoritmo de criptografia baseado
em reticulados". Dessa forma, ideia geral do projeto já estava definida, porém o algoritmo
específico e como seria implementado ainda estava em aberto e deveria ser decidido pelos
alunos em conjunto com o professor. Portanto, o estudo realizado anteriormente à VE foi
direcionado à compreensão dos recentes avanços na área a fim de escolher um algoritmo
específico no qual concentrar os esforços de trabalho. Como discutido no capítulo de
"survey", na seção de "escolha do algoritmo", o algoritmo escolhido foi o NTRU.
Em seguida, foi iniciada a implementação de fato do NTRU. A fim de otimizar a
compreensão de todas as etapas, restrições e gargalos do algoritmo, foi escrito um código
em C++ a partir do zero, ou seja, não foi utilizado código escrito por terceiros disponível
na internet. A decisão da linguagem de programação escolhida foi feita em função de seu
bom desempenho e da familiaridade dos membros do grupo com a linguagem.
Até o prazo de VE, foi entregue a primeir aversão do código. Ele já realizava a
encriptação e decriptação de mensagens, que apesar disso tinham limitações em termos
de tamanho (N ≤ 29), pois para mensagens maiores o algoritmo levava tempo demais
para encontrar um polinômio f que fosse invertível mod q e mod q. Além disso, os diversos
artigos estudados apresentaram restrições diferentes quanto aos valores dos parâmetros do
NTRU, de modo que ainda não estava claro quais eram as limitações reais e seus motivos.
Sumarizando os avanços feitos, as limitações encontradas e os avanços futuros planejados,
temos:
Avanços:
Capítulo 5. O desenvolvimento do projeto 43

• Código que encripta e decripta mensagens pequenas (N ≤ 29) corretamente.

Limitações:

• Leva muito tempo para mensagens grandes (N > 29).

• Falta de clareza na compreensão nas limitações dos parâmetros.

Planejamento:

• Aumentar o tamanho das mensagens a serem encriptadas e decriptadas em tempo


aceitável.

• Compreender as verdadeiras limitações dos parâmetros do NTRU.

5.2 VC
A primeira mudança realizada no período entre a VE e a VC foi o aumento das
mensagens a serem encriptadas e decriptadas pelo código em desenvolvimento. A estratégia
principal adotada foi quebrar essas mensagens em mensagens menores de tamanho que seja
computável em tempo aceitável. Dessa forma, não é necessário utilizar polinômios de grau
muito alto e o algoritmo roda significativamente mais rápido. Além disso, foi melhorado o
gerador de polinômios aleatórios. Até a VE, era gerado sempre o mesmo polinômio.
Houve também um avanço na compreensão dos parâmetros do NTRU. Concluiu-se
que as divergências nas restrições apresentadas na literatura resultam, em parte, de ligerias
diferenças na definição dos parâmetros. Por exemplo, há implementações que utilizam a
tabela ASCII nos coeficientes dos polinômios, enquanto outros utilizam coeficientes binários.
Portanto, foi feito um estudo matemático da aritmética modular nos anéis específico para as
escolhas de parâmetros feitas pelo grupo. Essas restrições são apresentadas no capítulo de
apresentação do algoritmo. Embora tenha sido bem compreendido o papel dos parâmetros
na encriptação e decriptação, ainda falta clareza quanto à sua influência na segurança em
caso de um ataque.
Há, ainda, o plano de melhorar procedimentos específicos dentro do NTRU. Por
exemplo, a multiplicação de polinômios possui métodos mais eficientes (porém mais
complexos) do que o que foi implementado até o momento. O quanto essas implementações
valem a pena está sendo alvo de estudo no momento. Em suma, temos o seguinte até a
VC:
Avanços:

• Mensagens maiores são encriptadas e decriptadas com sucesso.


Capítulo 5. O desenvolvimento do projeto 44

• Melhor gerador do polinômio aleatório.

• Melhor compreensão das limitações e utilização de parâmetros menores e mais


coerentes.

Limitações:

• Compreensão parcial da influência dos parâmetros na segurança em caso de ataque.

• Certas operações ainda podem ser otimizadas.

Planejamento:

• Aprofundar o estudo sobre possíveis ataques ao NTRU e como os parâmetros o


influenciam.

• Melhorar operações que possam ser otimizadas.

• Estudar a possibilidade de implementar um ataque ao NTRU utilizando reticulados.

5.3 VF
45

6 CONCLUSÃO

O trabalho ainda está em desenvolvimento, portanto ainda não foram tiradas as


conclusões às quais o projeto se propõe.
46

REFERÊNCIAS

1 YANOFSKY, N. S.; MANNUCCI, M. A. Quantum Computing for Computer Scientists.


[S.l.: s.n.], 2008.

2 CARAGEORGE, E. C.; GEMIGNANI, R. Avaliação da segurança da criptografia


baseada em reticulado. 2013.

3 SHOR, P. W. Polynomial-time algorithms for prime factorization and discrete logarithms


on a quantum computer. SIAM Journal on Computing, Society for Industrial & Applied
Mathematics (SIAM), v. 26, n. 5, p. 1484–1509, oct 1997. Disponível em: <https://doi.
org/10.1137%2Fs0097539795293172>.

4 PEIKERT, C. 2016.

5 MICCIANCIO, D.; REGEV, O. Lattice-based cryptography. 2008.

6 NEJATOLLAHI, H.; DUTT, N.; RAY, S.; REGAZZONI, F.; BANERJEE, I.; CAM-
MAROTA, R. Post-quantum lattice-based cryptography implementations: A survey. ACM
Comput. Surv., Association for Computing Machinery, New York, NY, USA, v. 51, n. 6,
jan 2019. ISSN 0360-0300. Disponível em: <https://doi.org/10.1145/3292548>.

7 LENSTRA, H. L. A.; LOVáSZ, L. Factoring polynomials with rational coefficients.


1982.

8 AJTAI, M.; DWORK, C. A public-key cryptosystem with worst-case/average-case


equivalence. In: Proceedings of the Twenty-Ninth Annual ACM Symposium on Theory of
Computing. New York, NY, USA: Association for Computing Machinery, 1997. (STOC ’97),
p. 284–293. ISBN 0897918886. Disponível em: <https://doi.org/10.1145/258533.258604>.

9 AJTAI, M. Generating hard instances of lattice problems (extended abstract). In:


Proceedings of the Twenty-Eighth Annual ACM Symposium on Theory of Computing. New
York, NY, USA: Association for Computing Machinery, 1996. (STOC ’96), p. 99–108.
ISBN 0897917855. Disponível em: <https://doi.org/10.1145/237814.237838>.

10 NIST. Announcing Request for Nominations for Public-Key Post-Quantum


Cryptographic Algorithms. 2016. Disponível em: <https://csrc.nist.gov/news/2016/
public-key-post-quantum-cryptographic-algorithms>.

11 NIST. Status Update on the 3rd Round. 2021. Disponível em: <https://csrc.nist.gov/
Presentations/2021/status-update-on-the-3rd-round>.

12 SOUSA, F. R. F. de; PIMENTEL, M. de F. G. Implementação de protocolo de troca


de chaves entre agentes em canal não seguro. 2021.

13 DIFFIE, W.; HELLMAN, M. E. New directions in cryptography. 1976.

Você também pode gostar