Você está na página 1de 183

CRIPTOGRAFIA

Hebert de Oliveira Silva

Editora Senac São Paulo – São Paulo – 2021


 

Sumário
Capítulo 1
Introdução à criptografia
1 Conceitos

2 História

3 Principais elementos do processo criptográfico

4 Criptografia quanto ao processamento

5 Criptografia quanto ao número de chaves

Considerações finais

Referências

Capítulo 2
Criptografia simétrica
1 Conceitos

2 Funcionamento
3 Principais algoritmos simétricos

4 Vantagens e desvantagens

Considerações finais

Referências

Capítulo 3
Criptografia de chave pública e privada
1 Conceitos

2 Conseguindo confidencialidade

3 Conseguindo autenticação

4 Conseguindo confidencialidade e autenticação

5 Vantagens e desvantagens da criptografia assimétrica

6 Trocando chaves

7 Principais algoritmos assimétricos

Considerações finais

Referências

Capítulo 4
Troca de chaves Diffie-Hellman
1 Conceitos

2 Processo de troca de chaves


3 Vantagens e desvantagens

4 Confidencialidade na troca

5 Falta de autenticação

Considerações finais

Referências

Capítulo 5
Hash
1 Conceitos

2 Cálculos de hash

3 Considerações sobre o uso de hashes

4 Principais algoritmos de hash

Considerações finais

Referências

Capítulo 6
Assinaturas digitais
1 Conceitos

2 Funcionamento

3 Vantagens e desvantagens

Considerações finais
Referências

Capítulo 7
Certificados digitais
1 Conceitos

2 Blockchain

Considerações finais

Referências

Capítulo 8
Infraestrutura dos certificados digitais
1 Conceitos

2 Infraestrutura de chave pública (ICP)

3 Tipos de certificados digitais

4 Repositório de certificados (RC)

5 Lista de certificados revogados (LCR)

Considerações finais

Referências

Sobre o autor
Capítulo 1
Introdução à criptografia

A palavra criptografia tem origem no grego e significa “escrita


escondida”, ou “escrita secreta”. Assim como na Antiguidade, as
informações precisam ser ocultadas para garantir que sejam
transmitidas de maneira segura. As mensagens, trocadas entre
sistemas ou computadores, precisam ser entendidas apenas pelo seu
emissor e receptor autorizado. A criptografia, portanto, possibilita que
somente o detentor da chave correta possa desfazer o processo
criptográfico e ter acesso ao conteúdo da mensagem (TANENBAUM;
WETHERAL, 2012). A arte da criptografia é registrada na história a
partir do período babilônico, em pictogramas usados no Antigo Egito,
conhecidos como hieróglifos. Esses hieróglifos só foram decifrados
no século XIX por meio do estudo do fragmento de hieróglifo Pedra
Roseta (THAWTE, 2013).

Em um contexto mais amplo e atual, a criptografia é base para


que os pilares da segurança da informação, como a
confidencialidade, a integridade, a autenticidade e a
responsabilização, sejam alcançados (STALLINGS, 2014). O estudo
dessa “escrita secreta” abordada neste capítulo tem como objetivo
apresentar os conceitos fundamentais para o posterior estudo das
técnicas empregadas atualmente, no contexto da criptografia
utilizada nos sistemas computacionais modernos.

Tenha em mente que a criptografia é utilizada em praticamente


todos os ambientes computacionais, como no processo de
autenticação de um usuário em uma rede de computadores
coorporativa, e-mail ou em uma rede social. Provavelmente, você já
utilizou uma rede sem fio (wireless) em seu smartphone e, se foi
necessário colocar uma senha para acesso, é justamente porque o
sistema de rede sem fio utiliza algum algoritmo de criptografia. A
criptografia não é utilizada apenas para proteção da comunicação e
de dados. Também é utilizada para garantir a autenticidade, a
identidades de usuários, servidores e sites. Outra utilidade dela é a
verificação se o documento eletrônico foi alterado, utilizando
algoritmos e funções de resumo hash. As técnicas de criptografia
também são base para o funcionamento das criptomoedas,
difundidas sob a tecnologia blockchain (HELLANI et al., 2018).

Cada vez mais, a criptografia será demandada aos profissionais


de tecnologia. Com a facilidade de acesso à informação, os dados
pessoais ficaram mais vulneráveis. Novas leis e padrões de
segurança foram criados no Brasil e no mundo para a garantir a
privacidade dos dados, como a lei geral de proteção de dados (LGPD),
a lei de portabilidade e responsabilidade do seguro de saúde (HIPPA),
o regulamento geral de proteção de dados europeu (GDPR/EU) e o
padrão de segurança de dados do setor de cartões de pagamento
(PCI-DSS) (SILVA, 2019). Não se pode iniciar a construção de um novo
software sem pensar em como os dados serão protegidos. Nesse
contexto, a criptografia é uma das formas de garantir que os dados
pessoais serão protegidos contra o acesso indevido, reduzindo o
risco de violações de privacidade e evitando multas (GDPR, 2018).

Neste capítulo, serão abordados os conceitos iniciais sobre a


criptografia, a história, os principais elementos de processo
criptográfico, a criptografia quanto ao seu processamento e número
de chaves.

1 Conceitos
A criptografia assumiu um papel importante na segurança da
informação, sendo aplicada aos mais diversos campos da tecnologia.
Estamos, cada vez mais, familiarizados com a utilização de senhas,
tokens, assinaturas digitais, e-CPF, e-CNPJ e assim por diante.
Quando acessamos uma página da internet, buscamos pelo cadeado
ao lado da URL da página (endereço do site) como sinal de confiança
e autenticidade, porém, sabemos o que ele significa?

Nesse sentido, daremos um passo na direção dos conceitos da


criptografia utilizada nos sistemas computacionais e, antes de nos
aprofundarmos nos protocolos, algoritmos e tecnologias, vamos
entender a terminologia das partes envolvidas no processo e suas
definições básicas (TANENBAUM; WETHERAL, 2012):

Criptografia: arte de criar mensagens cifradas que podem ser


analisadas do ponto de vista histórico, matemático ou estado da
arte atual em segurança e algoritmos criptográficos, protocolos e
aplicações.

Texto claro: texto de entrada do processo de criptografia, ou


seja, a mensagem que será criptografada.

Algoritmo de criptografia: processo de cálculo utilizado para


criptografar ou descriptografar.

Texto cifrado: saída do processo de criptografia.

Criptoanálise: arte de solucionar mensagens cifradas.

Criptologia: nome que se dá coletivamente para criptografia e


criptoanálise.

Cifra: transformação de caractere por caractere ou de bit por bit,


sem levar em consideração a estrutura linguística da mensagem.

Código: substitui uma palavra por outra palavra ou símbolo.

Segundo Tanenbaum e Wetheral (2012), os métodos


criptográficos, ao longo dos anos, foram divididos em dois tipos: cifra
de substituição e cifra de transposição. A cifra de substituição é
basicamente a substituição monoalfabética, em que um texto
simples é alterado, dígito por dígito, por uma letra correspondente. Já
cifras de transposição reordenam o texto simples para o texto cifrado,
utilizando uma palavra como chave para a reorganização da
mensagem original.

É importante ressaltar que a criptografia é diferente da


esteganografia, que é um campo da criptografia que busca uma
forma de ocultar informações, em texto claro, isto é, não cifrado. A
esteganografia pode esconder informações ou mensagens em
imagens, áudios, documentos e assim por diante (CHIRIGATI;
KIKUCHI; GOMES, 2006). De acordo com Popa, esteganografia:

[...] é a arte de mascarar informações como uma forma de evitar a sua


detecção. Esteganografia deriva do grego, donde estegano = esconder,
mascarar e grafia = escrita. Logo, esteganografia é a arte da escrita
encoberta ou, de forma mais abrangente, é a arte das comunicações
encobertas. (1998 apud ROCHA, 2006, p. 2)

A esteganografia pode ser utilizada por atacantes cibernéticos,


criminosos e terroristas para mascarar mensagens na internet (O
QUE É..., 2016), assim como programas de computadores não oficiais
ou falsificados podem esconder códigos maliciosos.

2 História
Historicamente, a criptografia foi utilizada para diversas
finalidades. Os espartanos, na Grécia Antiga, utilizavam um cilindro
com diâmetro específico com um papiro ou coro cortado em tira e
enrolado ao cilindro, de forma que apenas o detentor do cilindro com
o diâmetro correto pudesse enrolar a tira de pergaminho ao cilindro
para reorganizar a mensagem (FIARRESGA, 2010). Esse método de
criptografia ficou conhecido como “cítala”, ou bastão de Licurgo.
Analogamente, a cítala espartana utiliza o método de criptografia de
transposição, pois o texto claro não é modificado, é apenas
reorganizado de acordo com o diâmetro do cilindro-chave.
Posteriormente, surgiu a Cifra de César, por volta de 100 anos
a.C., e utilizava o método de cifra de substituição. Cada letra do
alfabeto no texto original era substituída por um número definido de
letras à frente de sua sequência no alfabeto da língua em que a
mensagem era cifrada. No exemplo da figura 1, a cifra de César utiliza
a substituição por três letras à frente na sequência do alfabeto
(THAWTE, 2013). Utilizando a cifra de César, a palavra
“CRIPTOANÁLISE” seria cifrada para “FULSWRDQDOLVH”.

Figura 1 – Cifra de César

A análise de frequência pode ser utilizada para identificar a chave


da cifra de substituição, o que torna muito simples a descoberta da
chave com o método. Na análise de frequência, busca-se por palavras
comuns na linguagem do texto criptografado. Com isso, pode-se
identificar a chave de substituição.

Durante a Idade Média, outros métodos de cifra de substituição


foram criados, como as cifras de Mary Queen of Scots e a cifra de
Vigenère. A cifra de Mary Queen expandiu a cifra de César, incluindo
códigos para substituir frases, além da substituição de letras. Para
tanto, um livro com a chave para os códigos estava em posse dos
remetentes e destinatários (THAWTE, 2013). A cifra de Vigenère
utilizava todas as 26 posições do alfabeto, para tanto, construía-se
uma tabela com o alfabeto principal como em sua parte superior. A
chave escolhida deveria ser comparada com o texto claro. A letra
correspondente, na tabela, dá origem ao dígito cifrado, isto é, a letra
correspondente com o deslocamento proporcionado pela chave. No
exemplo, demonstrado na figura 2, podemos verificar que o texto
“divert torps to east ridge” (traduzido do inglês, “desviar torpedos para
a cordilheira leste”), combinado à chave “WHITE”, dará origem ao
texto cifrado “ZPDXVPAZHSLZBHIWZBKMZNM”. Assim, uma mesma
letra do texto cifrado pode ter diferentes letras correspondentes no
texto claro. Isso é possível pelo deslocamento efetuado pela chave
em cada letra substituída. A primeira coluna (Chave) demonstra o
deslocamento que será efetuado para a letra do texto claro de acordo
com a posição da chave. Para o exemplo da figura 2, o “W” (da chave)
está posicionado acima da letra “D” (do texto claro), com isso, a letra
“D” será substituída pela letra “Z” (deslocamento de 22 letras). A letra
“H” (da chave) está posicionada acima da letra “I”, portanto, a letra “I”
será substituída pela letra “P” (deslocamento de sete letras) (REEDS,
2000).
Figura 2 – Processo de criptografia baseado na
cifra de Vigenère

Fonte: adaptado de REEDS (2000, p. 115).


NA PRÁTICA
O envio, o recebimento e o armazenamento de senhas (chaves) é um
problema desde a Antiguidade. A cifra de Mary Queen representava um
problema quanto a sua guarda e o transporte do livro de códigos.

Nas organizações, ou mesmo na vida pessoal, o gerenciamento de senhas é


um problema recorrente. Não adianta utilizarmos os mais avançados
algoritmos de criptografia com uma senha muito fraca. Uma senha fraca
pode ser facilmente descoberta através de força bruta (testes repetidos) ou
engenharia social (investigação sobre a pessoa, para obter informações
privilegiadas). Porém, como memorizar senhas complexas? Em
organizações, é inevitável utilizar inúmeras senhas complexas, para usuários
com privilégios avançados, sejam eles de sistemas ou para conexões com
bancos de dados, por exemplo. Memorizar inúmeras senhas não é uma
tarefa fácil, assim como não vale escrever embaixo do teclado.
Na prática, podemos utilizar softwares para gerenciar senhas de usuários
com acessos privilegiados ou senhas de sistemas. Esses softwares
funcionam como um cofre de senhas. Um exemplo de software gratuito para
gerenciamento de senhas é o Keepass, que implementa algoritmos atuais de
criptografia para armazenamento de senhas (DOMINIK, 2020).

As criptografias de mensagens durante os períodos de guerra


foram fundamentais para a evolução das técnicas de criptografia. Na
Segunda Guerra Mundial, uma máquina chamada Enigma elevou o
nível de sofisticação da criptografia. A máquina de criptografia,
projetada pelo alemão Arthur Scherbius, em 1918, foi utilizada pelo
exército alemão durante a Segunda Guerra Mundial, após perceberem
que as cifras utilizadas na Primeira Guerra Mundial foram decifradas
facilmente pelos britânicos (THAWTE, 2013).

A máquina Enigma utilizava o método de substituição


polialfabética, no qual a criptografia consiste na combinação de
engrenagens, uma espécie de embaralhador, para substituição das
letras alfabéticas. A máquina Enigma utilizava a mesma chave tanto
para criptografar e descriptografar de forma simétrica. O que
proporcionou descriptografar as mensagens alemãs foi a descoberta
de que estavam repetindo alguns caracteres para especificar a chave
utilizada na mensagem. Apesar da descoberta, esse fato ficou
encoberto por mais de 20 anos, para que os alemães não alterassem
o código utilizado até o final da guerra (THAWTE, 2013; REEDS, 2000).

3 Principais elementos do processo


criptográfico
Qualquer processo criptográfico atual utiliza funções
matemáticas para obtenção do texto cifrado. Diferentemente dos
métodos empregados historicamente, nos quais a cifra era obtida
manualmente ou através de máquinas, em sistemas criptográficos
obtidos por computadores, o texto cifrado é obtido por algoritmos
que, em resumo, realizaram cálculos para obtenção das cifras. A
notação matemática nesse processo é dada por DK (CK (P)) = P, em
que C e D são, respectivamente, as funções matemáticas para
criptografia e descriptografia. O texto claro é representado pela letra P
e as chaves são determinadas pelo k. Na figura 3, o processo de
criptografia é dado pela notação matemática e demostrado por meio
de fluxo.
Figura 3 – Processo de criptografia

Fonte: adaptado de Tanenbaum e Wetheral (2012, p. 481).

Segundo o princípio de Kerckhoff, um sistema criptográfico deve


ser seguro, mesmo que tudo sobre o sistema, exceto a chave, seja de
conhecimento público. Em seus artigos, em 1883, o criptologista de
nacionalidade francesa afirma ainda que o sistema deve ser
praticamente indecifrável, porém o algoritmo utilizado não deve ser
secreto. Esse conceito foi importante para que os algoritmos
criptográficos pudessem sem construídos e aprimorados, sendo
aplicados em todos os algoritmos de criptografia atuais e
considerados seguros (KERCKHOFFS’S..., 2013).

IMPORTANTE
O que determina a força da criptografia (o quanto a criptografia é segura)
são o tempo e o poder computacional necessário para recuperar ou decifrar
o texto claro. Uma cifra resultante de uma criptografia forte é muito difícil de
se decifrar sem a posse da chave. Nem mesmo um poder computacional
que realize bilhões de verificações por segundo seria capaz de decifrar o
resultado de uma criptografia forte (PGP, 2002).

Apesar do alto poder de processamento computacional existente


no mundo, os algoritmos de criptografia mais atuais são
considerados seguros pelo National Institute of Standards and
Technology (Nist, Instituto Nacional de Padrões e Tecnologia dos
Estados Unidos). Com frequência, os métodos criptográficos são
revisados e alguns algoritmos são considerados obsoletos e
substituídos por versões mais modernas e seguras (BARKER, 2016).
Mas isso não garante que os métodos criptográficos são
indecifráveis, já que, até o momento, ninguém provou que a
criptografia forte disponível se manterá segura no futuro (PGP
CORPORATING, 2002).

4 Criptografia quanto ao processamento


O processamento da criptografia pode ser executado por blocos
ou por fluxo de bits, também conhecido como stream. No
processamento baseado em fluxo, o processo de criptografia é
realizado bit a bit. Por outro lado, o processamento em blocos ocorre
quando o texto claro é criptografado de forma contígua ou em lotes,
conforme o tamanho dos blocos utilizados no algoritmo. Vamos
apresentar como ocorre o processamento das cifras que utilizam o
processamento por fluxo e por blocos.

4.1 Cifra de fluxo


As cifras de fluxo geram a criptografia bit a bit de um texto claro.
Geralmente, a cifra é gerada através da operação lógica XOR, também
conhecida como OU Exclusiva. Nessa operação lógica, o bit
resultante da operação será verdadeiro (nível lógico 1) somente se os
valores de entrada da operação forem diferentes. Por exemplo, para
que o bit cifrado seja verdadeiro (nível lógico 1), o bit do texto claro e
o bit da chave devem ser diferentes. Na tabela 1, podemos verificar o
resultado da operação lógica XOR. Ela demonstra qual será o
resultado da operação lógica entre bits de texto claro e bits de uma
chave. O nível lógico 0 é considerado falso e o nível lógico 1 é
considerado verdadeiro (ROEDER, 2010).

Tabela 1 – Resultado da cifra de fluxo bit a bit


TEXTO CLARO 0 0 1 1
ENTRADA →
CHAVE 0 1 0 1

RESULTADO → CIFRA 0 1 1 0

A figura 4 demonstra o processamento da criptografia utilizando


cifra fluxo de bits. A chave (K) é aplicada a um algoritmo de geração
do fluxo. O texto claro (Pi) é criptografado pelo resultado do algoritmo
de geração de fluxo (Ki), dando origem ao texto cifrado (Ci). Para que
o processo reverso seja executado, a chave (K) é aplicada ao
algoritmo de geração de fluxo, resultando em (Ki). O resultado do
algoritmo (Ki) é aplicado ao texto cifrado (Ci) para que o processo de
descriptografia dê origem ao texto claro (Pi).

Figura 4 – Processamento por fluxo de bits

Fonte: adaptado de Stallings (2014, p. 47).


4.2 Cifra de bloco
As cifras de bloco tratam a criptografia do texto claro por
completo, resultando em um texto cifrado do mesmo tamanho que o
texto claro. De acordo com Stallings:

tem sido destinado muito mais esforço para analisar as cifras de bloco,
em geral, por elas serem adequadas a uma gama maior de aplicações do
que as cifras de fluxo. A grande maioria das aplicações de criptografia
simétrica baseadas em rede utiliza cifras de bloco (2014, p. 46).

O bloco de bits é a unidade básica para esse tipo de


processamento criptográfico (FOROUZAN, 2010). Quanto maior o
tamanho dos blocos utilizados, maior segurança será implementada
na criptografia, entretanto, a velocidade da criptografia será
diminuída. Geralmente, os blocos iniciam-se com 64 bits, valor que
era considerado razoável para algoritmos de criptografia, porém cada
vez mais é comum a utilização do padrão de 128 bits ou superior
(STALLINGS, 2014).

Na figura 5, o texto claro é tratado de forma completa. A chave


(K) e o algoritmo de criptografia são aplicados ao texto claro,
resultando no texto cifrado, também completo (todos os bits de uma
única vez). O processo reverso é executado, aplica-se a chave (k) e o
algoritmo de descriptografia para obter-se o texto claro novamente.
Figura 5 – Processamento por blocos

Fonte: adaptado de Stallings (2014, p. 47).

4.2.1 Modos de operação das cifras de bloco


Nesse tipo de cifra, os blocos possuem comprimento fixo, porém
as mensagens cifradas podem ter diversos tamanhos. Uma vez que o
tamanho da saída das cifras é sempre do mesmo tamanho, alguns
modos de operação precisaram ser desenvolvidos para permitir a
criptografia completa das mensagens, independentemente do
tamanho do texto claro. Os principais métodos são (FOROUZAN,
2008):

Eletronic code book (ECB) (em português, livro eletrônico de


código): em que a mensagem é dividida em blocos e cada bloco
é criptografado separadamente dos demais. O modo ECB é
recomendado para criptografar textos curtos, pois sua
característica limita a produção de um mesmo texto cifrado,
quando aplicada a criptografia em textos claros iguais
(STALLINGS, 2014).
Cipher-block chaining (CBC) (em português, criptografia de
blocos encadeados): seu funcionamento baseia-se na
realimentação comum entre os blocos, formando um
encadeamento. Se aplica a operação lógica XOR no bloco atual
de texto claro junto com o bloco anterior. Dessa forma, o bloco à
frente ficará dependente do bloco anterior na execução do
processo de criptografia, não sendo possível realizar a
descriptografia parcial dos blocos. Para o primeiro bloco (como
não possui um bloco anterior para ser encadeado), a operação
XOR é realizada com um vetor de inicialização (STALLINGS,
2014).

Existem ainda outros métodos de cifras de bloco mais


complexos, como cipher feed back (CFB, traduzido do inglês como
cifra de retorno), output feedback (OFB, traduzido do inglês como
saída de retorno) (STALLINGS, 2014). Na figura 6, temos o esquema
de funcionamento das cifras de bloco ECB (parte A) e CBC (parte B).
Figura 6 – Modos de cifras de blocos ECB e
CBC

Fonte: adaptado de Stallings (2014, p. 142-143).

5 Criptografia quanto ao número de


chaves
A criptografia é classificada quanto à quantidade de chaves
utilizadas em seu processo. Quando a mesma chave é utilizada para
criptografar e descriptografar, o processo é considerado simétrico.
Podemos citar como exemplo de criptografia simétrica os algoritmos
AES, Blowfish, RC4, 3DES e IDEA (CARTILHA..., 2017).

Quando utilizado um par de chaves, uma pública, outra privada, o


processo de criptografia é considerado assimétrico. A exemplo da
criptografia assimétrica, podemos citar os algoritmos RSA, DSA, ECC
e Diffie-Hellman (CARTILHA..., 2017). É importante ressaltar que o
algoritmo de Diffie-Hellmam é utilizado para troca de chaves, e não
para criptografar/descriptografar dados. A figura 7 mostra o processo
de criptografia utilizado no processo simétrico. Nesse método de
criptografia, a chave deve ser compartilhada entre o emissor e o
receptor (FOROUZAN, 2008). A criptografia simétrica geralmente é
aplicada para garantir a confidencialidade de grandes volumes de
dados, pois seu processamento é mais rápido. Porém, é mais
complexa quando utilizada no compartilhamento de informações, em
virtude de sua necessidade de compartilhamento da chave única, fato
que tornam complexos o gerenciamento e as chaves (CARTILHA...,
2017).

Figura 7 – Criptografia simétrica

Fonte: adaptado de Forouzan (2008, p. 963).

A criptografia assimétrica possui chaves diferentes para


execução do processo; desta propriedade vem sua definição. A chave
pública é conhecida por todos, justamente para que a autenticidade
do emissor possa ser verificada. A figura 8 ilustra o processo de
criptografia assimétrica, utilizando chaves distintas para o processo
de criptografia e descriptografia. A criptografia assimétrica possui um
processamento mais lento do que a simétrica, mas proporciona a
facilidade do gerenciamento de chaves, dispensando, inclusive, um
canal seguro para a troca de chaves (CARTILHA..., 2017).

Figura 8 – Criptografia assimétrica

Fonte: adaptado de Forouzan (2008, p. 923).

Considerando a figura 8, imagine que você deseja enviar uma


mensagem criptografada para um destinatário e não deseja enviar
uma chave única (secreta). Utilizando o processo de criptografia
assimétrica, basta criptografar sua mensagem utilizando a chave
pública do próprio receptor. Dessa forma, apenas o receptor poderá
descriptografar com a sua chave privada (secreta) o texto cifrado
com sua chave pública. Esse processo proporcionará
confidencialidade às mensagens enviadas.

Em suma, no âmbito da criptografia, existem três tipos de


chaves: a chave única e secreta, utilizada na criptografia simétrica; a
chave pública, que é conhecida por todos, utilizada na criptografia
assimétrica; a chave privada, secreta, também utilizada na
criptografia assimétrica.
IMPORTANTE
A combinação dos métodos de criptografia simétrico e assimétrico é
comumente utilizada em diversas implementações de protocolos e padrões
de segurança. Como exemplo dessa combinação, temos os protocolos
secure sockets layer (SSL) (em português, protocolo de camada segura) e o
transport layer security (TSL) (em português, segurança da camada de
transporte). Esses protocolos combinam algoritmos simétricos e
assimétricos, como RSA, 3DES e funções de resumo hash para sua
implementação.

Considerações finais
Neste capítulo, foram contextualizados os principais elementos
relacionados à criptografia. Foram discutidos os aspectos históricos
que contribuíram para a evolução dos algoritmos e apresentados os
métodos de criptografia simétricos e assimétricos. Discutimos os
tipos de processamento possíveis para a criptografia através das
cifras de bloco ou cifras de fluxo, assim como alguns exemplos
históricos de cifras de substituição e transposição. Cabe destacar a
cifra de substituição de César como a precursora do uso da
criptografia. A criptografia empregada no cenário militar também foi
discutida. Em especial, a criptografia executada por hardware através
da máquina Enigma durante a Segunda Guerra Mundial.

Do ponto de vista do emprego da criptografia em cenários


práticos atuais, a escolha de um algoritmo deve levar em
consideração os requisitos de processamento necessários (bloco ou
fluxo), bem como a força da criptografia desejada. É importante
ressaltar que os algoritmos atuais são considerados seguros pelo
NIST, porém, não existem garantias de que serão indecifráveis. A
criptografia é considerada forte, principalmente, quanto maior for o
esforço computacional empregado na tentativa de tentar descobrir
uma senha. Logo, quanto mais complexa for a senha, o algoritmo
tende a ser mais seguro. Um projetista de sistemas deve estar aberto
à combinação dos métodos de criptografia e algoritmos adequados a
cada componente do sistema projetado. Para tanto, é vital entender o
funcionamento e as propriedades de cada algoritmo disponível na
literatura e suas implementações práticas.

Referências
BARKER, Elaine; BAKER, William C. Guideline for using cryptographic
standards in the federal government: directives, mandates and
policies. Gaithersburg: National Institute of Standards and
Technology, 2016. Disponível em:
https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-
175A.pdf. Acesso em: 15 jan. 2020.

CARTILHA de segurança para internet: criptografia. Cert.br, 2017.


Disponível em: https://cartilha.cert.br/criptografia/. Acesso em: 15
jan. 2020.

CHIRIGATI, Fernando; KIKUCHI, Rafael; GOMES, Talita.


Esteganografia. UFRJ, 2006. Disponível em:
https://www.gta.ufrj.br/grad/09_1/versao-
final/stegano/introducao.html. Acesso em: 15 jan. 2020.
KERCKHOFFS’S Principle. Crypto-it, 2013. Disponível em:
http://www.crypto-it.net/eng/theory/kerckhoffs.html. Acesso em: 22
jan. 2020.

DOMINIK, Reichl. KeePass Password Safe. Keepass.info, 2020.


Disponível em: https://keepass.info/. Acesso em: 18 jan. 2020.

FIARRESGA, Victor. Criptografia e matemática. Dissertação


(Mestrado em matemática para professores) – Faculdade de
Ciências da Universidade de Lisboa, Lisboa, 2010. Disponível em:
https://repositorio.ul.pt/bitstream/10451/3647/1/ulfc055857_tm_Vict
or_Fiarresga.pdf. Acesso em: 18 jan. 2020.

FOROUZAN, Behrouz A. Comunicação de dados e redes de


computadores. 4. ed. Porto Alegre: AMGH, 2008.

GDPR. Encryption. Intersoft Consulting, 2018. Disponível em:


https://gdpr-info.eu/issues/encryption/. Acesso em: 15 jan. 2020.

HELLANI, Hussein et al. On blockchain technology: overview of bitcoin


and future Insights. In: 2018 IEEE International Multidisciplinary
Conference on Engineering Technology (IMCET). IEEE, 2018. p. 1-8.
Disponível:
https://www.researchgate.net/publication/328138343_On_BlockChain
_Technology_Overview_of_Bitcoin_and_Future_Insights. Acesso em:
24 abr. 2020.

O QUE É esteganografia e como pode ser usada? HackerSec, 2016.


Disponível em: https://hackersec.com/o-que-e-esteganografia-e-
como-pode-ser-usada/. Acesso em: 15 jan. 2020.
PGP CORPORATING. An introduction to cryptography. Version 8.0.
out. 2002.

REEDS, Jim. The code book: the evolution of secrecy from Mary,
Queen of Scots to Quantum Cryptography. New York: Anchor, 2000.

ROCHA, Anderson de Rezende. Camaleão: um software para


segurança digital utilizando esteganografia. 2001. 108 p. Monografia
(Graduação em Ciência da Computação) – Universidade Federal de
Lavras, Lavras, 2003. Disponível em:
http://docplayer.com.br/74582727-Camaleao-um-software-para-
seguranca-digital-utilizando-esteganografia.html. Acesso em: 24 abr.
2020.

ROEDER, Tom. Symmetric-key cryptography. Cornell.edu, 2010.


Disponível em:
http://www.cs.cornell.edu/courses/cs5430/2010sp/TL03.symmetric.
html. Acesso em: 4 fev. 2020.

SILVA, Hebert. Uma abordagem baseada em anonimização para


privacidade de dados em plataformas analíticas. Limeira:
Unicamp.br, 2019. Disponível em:
http://repositorio.unicamp.br/jspui/handle/REPOSIP/334676. Acesso
em: 15 jan. 2020.

STALLINGS, William. Criptografia e segurança de redes: princípios e


práticas. 7. ed. São Paulo: Pearson, 2014.

TANENBAUM, Andrew S.; WETHERAL, David. Redes de


computadores. 5. ed. São Paulo: Pearson, 2012.
THAWTE. History of cryptography: an easy to understand history of
cryptography. 2013. Disponível em:
http://book.itep.ru/depository/crypto/Cryptography_history.pdf.
Acesso em: 4 fev. 2020.
Capítulo 2
Criptografia simétrica

Os métodos de criptografia que utilizam chave simétrica foram


os primeiros registrados na história. As cifras mais simples de
substituição ou de transposição foram desenvolvidas com o passar
dos anos pelos mais diversos métodos matemáticos. Esses métodos
foram aprimorados ainda mais com o advento da computação. Todo
esse desenvolvimento matemático, apoiado por computação,
possibilitou a criação de cifras simétricas ainda mais fortes. Na
prática, podem ser consideradas inquebráveis, devido ao esforço
computacional necessário para decifrá-las.

A maior complexidade envolvida na criptografia simétrica


consiste na gestão da chave privada (chave secreta). Em um
processo de transmissão, tanto o emissor quanto o receptor de uma
mensagem necessitam conhecer a chave secreta, fato esse que
agrava a complexidade quando a quantidade de usuários é muito
grande. Com isso, o gerenciamento de chaves deve ser observado em
sistemas que utilizam a criptografia simétrica. As chaves devem ser
protegidas de forma que a sua perda é considerada um incidente
cibernético similar à perda dos dados em si (BAARS et al., 2015).
Mesmo com a complexidade imposta pelo compartilhamento e
pelo gerenciamento de chaves, a criptografia simétrica é muito
utilizada para um grande volume de dados, como é o caso de big
data. Isso se deve ao seu melhor desempenho no processo de
execução da criptografia ou da descriptografia quando comparado
com a criptografia assimétrica. Em situações práticas, você
perceberá que a criptografia simétrica é combinada com a
assimétrica com o objetivo de alcançar o melhor balanceamento
entre segurança e velocidade (SYMMETRIC..., 2006).

Apesar dos algoritmos simétricos utilizarem uma mesma chave


para criptografar e descriptografar informações, não significa que
seus métodos de funcionamento sejam iguais. Os algoritmos
existentes possuem níveis de complexidade e desempenho
diferentes. Isso implica ao administrador ou desenvolvedor de
sistemas entender quais métodos são mais adequados a cada
situação prática.

Neste capítulo, serão abordados os principais conceitos e o


funcionamento da criptografia simétrica, os principais algoritmos que
a utilizam, vantagens, desvantagens e restrições de uso.

1 Conceitos
Compreendemos anteriormente que na criptografia simétrica é
utilizada uma única chave para criptografar (codificar) e
descriptografar (decodificar). Essa é a técnica mais antiga e mais
conhecida no campo da criptografia, sendo o único método existente
até 1970 (STALLINGS, 2014). A chave secreta pode ser qualquer tipo
de caractere (numérico ou alfabético). A mensagem original (texto
claro) é alterada pelo algoritmo de criptografia simétrico, aplicando-se
a chave secreta. Para que o processo de transmissão segura da
mensagem aconteça, o remetente e o destinatário devem conhecer a
chave secreta previamente, portanto, quem a possuir poderá
descriptografar a mensagem enviada e ler o seu conteúdo.

Note que no processo de criptografia simétrica existem cinco


componentes principais: o texto claro, o algoritmo de criptografia, a
chave secreta, o texto cifrado e o algoritmo para descriptografia. As
cifras de transposição e substituição são exemplos de cifras
simétricas (FOROUZAN, 2008). A criptografia simétrica utiliza os
conceitos historicamente conhecidos, porém, a abordagem atual é
voltada para a implementação de algoritmos fortes (TANENBAUM;
WETHERAL, 2012), sendo esse um dos requisitos para que o
algoritmo seja considerado seguro. Para garantir a segurança da
criptografia, o compartilhamento da chave secreta deve ser
observado. Este deve ser feito por canal seguro, sendo esse um
requisito indispensável. Caso contrário, um invasor pode, de posse da
chave secreta, descriptografar o texto cifrado (STALLINGS, 2014).

Os algoritmos simétricos modernos não são orientados por


caracteres, como na cifra de César, mas por bits. A orientação por
bits permitiu que qualquer tipo de informação (ou arquivo) seja
criptografado, como áudio, vídeo, imagens, banco de dados, entre
outros, abrindo caminho para sua utilização nos mais diversos
campos da segurança da informação em ambientes computacionais
e ampliando sua utilização. Porém, os ataques direcionados à
criptografia simétrica também evoluíram e não são executados
apenas por criptoanalise, como na Antiguidade. A maioria dos
ataques visam explorar possíveis vulnerabilidades nos algoritmos,
assim como o uso de força bruta (tentativas consecutivas de
adivinhação) para obter a chave secreta (STALLINGS, 2014). Dessa
forma, as cifras que utilizam chaves pequenas, isto é, com poucos
bits, se tornaram mais vulneráveis contra os métodos de ataques
atuais. Ainda vamos entender o funcionamento dos principais
algoritmos de criptografia modernos, suas aplicações e fragilidades
que impulsionaram a sua evolução.

PARA SABER MAIS

Os ataques cibernéticos, são cada vez mais comuns na internet. Cada vez
mais, evoluem os métodos e formatos de ataques. Acesse a cartilha de
segurança da informação do CERT.br para conhecer alguns tipos de ataques
(CARTILHA, 2010).

2 Funcionamento
A implementação dos algoritmos pode ser executada tanto por
hardware quanto por software. Algumas cifras simples, como
transposição e substituição, podem ser implementadas facilmente
por circuitos eletrônicos simples. Na figura 1, podemos verificar um
exemplo de esquema para circuito eletrônico com essa finalidade. O
modelo apresentado na figura também é conhecido como cifra de
rotação, pois, em termos práticos, executa o deslocamento de bits na
caixa P (FOROUZAN, 2008).

Figura 1 – Esquema eletrônico de criptografia


cifra-produto

Fonte: adaptado de Tanenbaum e Wetheral (2012, p. 489).

O dispositivo demonstrado na parte A da figura 1 apresenta um


sistema de transposição de 8 bits. A caixa P pode ser utilizada para
transpor bits pela posição determinada fisicamente no esquema
eletrônico. Dessa forma, apenas o uso do mesmo esquema poderá
decodificar a criptografia. A caixa S, na parte B, pode cifrar 3 bits de
entrada (texto claro) em 3 bits de saída (texto cifrado). No primeiro
estágio, um decodificador é utilizado para a conversão de 3 bits para
8 bits, realizando uma conversão de número binário para octal. O
decodificador é acoplado à caixa P, que realizará a transposição dos
bits. Novamente, a caixa P é acoplada a um codificador para a
conversão para 3 bits, resultando em número binário diferente ao de
entrada no sistema. Quando acoplamos sequencialmente uma série
de caixas S, damos origem a uma cifra-produto (também conhecida
como cifra de rotação), possibilitando a ampliação da quantidade de
bits de entrada. Em geral, as cifras-produto funcionam sobre um valor
n de bits de entrada e produzem o mesmo valor n de bits de saída,
variando entre 64 e 256 bits.

NA PRÁTICA

Uma implementação de cifra de produto também pode ser efetuada por


meio de software, realizando permutações e substituições. Uma
implementação por softwares utilizará no mínimo 8 interações de loop
(estrutura de repetição lógica), executando substituições semelhantes às
caixas S, utilizando 64 bits de entrada e 256 bits na fase intermediária.

3 Principais algoritmos simétricos


Vamos, agora, abordar os algoritmos de criptografia simétricos
modernos, processados por cifra de blocos, como DES, triplo DES,
AES, que são amplamente difundidos (FOROUZAN, 2008). Outros
algoritmos, como Blowfish, RC2, RC4 e RC5, serão apresentados,
porém, sem um maior aprofundamento quanto a seus métodos de
funcionamento.

O algoritmo data encryption standard (DES) (em português,


padrão de criptografia de dados), foi o primeiro padrão de criptografia
recomendado pelo Instituto Nacional de Padrões e Tecnologia norte-
americano (National Institute of Standards and Technology – NIST).
Ele é baseado no algoritmo proposto pela IBM chamado “Lúcifer”,
porém, diversos ataques e métodos que exploram suas fraquezas
foram registrados, portanto, seu uso não é mais recomendado. O
3DES é resultado da evolução do DES e, nele, foi proposto o padrão
de criptografia 3DES (triplo DES). De forma simplista, esse algoritmo é
igual ao DES, mas triplicado para aumentar a força da criptografia.
Em razão disso, o 3DES é mais lento que outros métodos de cifra de
bloco.

O advanced encryption standard (AES) (em português, padrão


avançado de criptografia), ou algoritmo de Rijndael, é atualmente
recomendado pelo NIST como substituto do DES. O algoritmo
Blowfish, desenvolvido por Bruce Schneier, é uma chave de tamanho
variável, que utiliza cifra em blocos de 64 bits para criptografia e
chaves extensíveis entre 32 e 448 bits. Apesar de possuir chaves
consideradas fracas, não se conhece nenhum ataque bem-sucedido
contra o algoritmo.

Os algoritmos RC2, RC4 e RC5 foram desenvolvidos por Ronald


Rivest, da RSA Data Security Inc., com o objetivo de prover algoritmos
com chaves de tamanho variável (entre 1 e 2.048 bits), para balancear
a velocidade da criptografia e a segurança. A principal diferença entre
eles está no processamento da criptografia, os algoritmos RC2 e RC5
são processados através de cifras de bloco, já o RC4 é processado
por cifra de fluxo (FOROUZAN, 2008; STALLINGS, 2014).

3.1 Data encryption standard (DES)


O algoritmo DES foi adotado pelo Nist em 1977. O algoritmo era
conhecido como data encryption algorithm (DEA) (em português,
algoritmo encriptado de dados) e utilizava blocos de 64 bits para
criptografia de texto claro e uma chave de 56 bits. Atualmente, o
algoritmo DES foi atualizado para criptografar utilizando blocos de
texto claro e chave secreta de 64 bits, porém seu funcionamento
utiliza a permutação da chave secreta para obter os 56 bits. A
arquitetura do algoritmo baseia-se em dois blocos de transposição
cíclica, similar à caixa P e às cifras-produto. Para execução da
criptografia são executadas permutações iniciais de entrada e,
posteriormente, a chave secreta é aplicada para gerar a transposição
utilizando iterações (ciclos), assim como nas cifras-produto.

A chave secreta também passa pelo processo de permutação,


sendo permutada de 64 para 56 bits. Esse processo gera subchaves
(k1) diferentes para cada iteração do processo que vai transpor os
blocos de texto claro à esquerda. Cada subchave gerada tem um
tamanho de 48 bits. Cada transposição executada pelo DES é uma
cifra complexa e diferente da utilizada para descriptografia.

Na figura 2, podemos encontrar um exemplo da execução


dessas iterações. Após a 16a iteração (rodada), é realizada uma
inversão do texto cifrado e uma nova transposição. Essa troca
consiste na inversão da sequência de bits em dois blocos de 32 bits,
para proteger o algoritmo contra ataques de repetição, em que um
atacante intercepta um texto cifrado durante uma transmissão e o
reenvia diversas vezes ao destinatário, como se fosse uma
transmissão normal para prejudicar o processo de transmissão e
criptografia (RFC 4772, 2006). Depois disso, é realizada uma nova
permutação para que, ao final, o texto cifrado de 64 bits seja obtido
(FOROUZAN, 2010; STALLINGS, 2014; RFC 4772, 2006). Na figura,
podemos verificar o processo executado pelo algoritmo para
processar a criptografia.
Figura 2 – Processo de criptografia DES

Fonte: adaptado de Stallings (2014, p. 55).

O algoritmo DES não é mais considerado seguro, pois é mais


susceptível aos ataques de força bruta, com isso, foi sucedido pelo
protocolo de criptografia 3DES (triplo DES). Entretanto, muitas
aplicações ainda utilizam o protocolo DES, seja por ainda confiarem
em sua média de segurança e desconhecerem suas vulnerabilidades,
seja pela dificuldade de se substituir ou atualizar os sistemas que
ainda o implementam. Como consequência, novos sistemas
precisaram ser implementados com o protocolo DES para fins de
compatibilidade. São utilizados em clientes antigos de redes privadas
virtuais (VPN), pois apresentam melhor desempenho que os seus
sucessores 3DES e AES (RFC 4772, 2006).

3.2 Triplo DES


O algoritmo 3DES, também conhecido como triplo DES, foi
apresentado como uma variante do protocolo DES pela RFC 1851 em
setembro de 1995. A chave secreta é composta por três subchaves,
com tamanho de 168 bits, consistindo em três vezes o tamanho da
chave permutada (k1, k2 e k3) utilizadas no protocolo DES. O
algoritmo realiza três rodadas da criptografia DES, aplicando-se às
três subchaves no processo criptográfico (RFC 1851, 1995).

A força do algoritmo triplo DES também se baseia na segurança


da chave secreta e na implementação das três rodadas da função
DES. O algoritmo funciona com o processo criptografia,
descriptografia e criptografia. O motivo para criptografar,
descriptografar e criptografar se deve à necessidade, na época, de
manter-se a compatibilidade com sistemas de criptografia DES e,
para tanto, basta utilizar o mesmo valor para as subchaves k1 e k2
(TANENBAUM; WETHERAL, 2012). Porém, isso torna o algoritmo
mais suscetível a ataques “meet in the middle”(em português,
encontro no meio) (RFC 4772, 2006). O processo de criptografia e
descriptografia é demonstrado na figura 3, em que as subchaves K1,
K2 e K3 são aplicadas em cada bloco DES.
Figura 3 – Processo de criptografia triplo DES

Fonte: adaptado de Forouzan (2008, p. 943).

Os ataques conhecidos contra os algoritmos DES e triplo DES,


como o ataque de força bruta, “meet in the middle” e chaves
relacionadas, impulsionaram a atualização do algoritmo, abrindo
caminho para o advanced encryption standard (AES) (em português,
padrão de criptografia avançado) (RFC 3565, 1972).

3.3 Advanced encriptation standard (AES)


O advanced encryption standard (AES) (em português, padrão
avançado de criptografia), foi projetado pelo governo dos EUA para o
processamento de informações federais. Entretanto, o AES é
amplamente utilizado por empresas, governos e pessoas no mundo
todo. Seus inventores foram selecionados pelo Nist por meio de
concorrência pública, pois o algoritmo oferece uma combinação
apropriada de segurança, desempenho, eficiência, facilidade de
implementação e flexibilidade, com chave secreta com três tamanhos
diferentes, 128, 192 e 256 bits (RFC 3565, 1972).
Do ponto de vista de execução da criptografia, para cada
tamanho de chave, o algoritmo utilizará uma quantidade diferente de
ciclos de execução. Para chaves de 128, 192 e 256 bits, serão
executados 10, 12 e 14 ciclos. O tamanho da entrada dos blocos é de
128 bits (tamanho do bloco de criptografia para entrada de texto
claro) (FOROUZAN, 2008). A figura 4 mostra o processo de
criptografia executado pelo protocolo AES. Note que uma operação
lógica XOR é executada com a subchave K0, gerada pelo gerador de
chaves cíclicas. Posteriormente, a cada ciclo, uma subchave gerada é
aplicada na transposição dos bits. No exemplo da figura, ao final do
décimo e último ciclo, o texto cifrado é gerado. Cada ciclo executado
pelo algoritmo AES, com uma cifra com quatro operações, em que
apenas o último ciclo vai executar apenas três operações. O objetivo
dos ciclos, de maneira simples, é transpor os bits de forma não linear
para o processo de criptografia só seja possível através da inversão
do processo executado (FOROUZAN, 2008; RFC 3565, 1972).
Figura 4 – Processo de criptografia AES

Fonte: adaptado de Forouzan (2008, p. 944).

3.4 Outros algoritmos


Outros algoritmos de criptografia foram desenvolvidos nas
últimas décadas, sendo que a maioria delas seguem os princípios das
cifras e algoritmos já estudados. O diferencial entre eles compreende,
geralmente, no tamanho de bits de bloco, bits de chave, número de
ciclos ou funções. São alguns desses algoritmos:

Blowfish: projetado por Bruce Schineier, possui blocos de 64 bits


com chaves entre 32 e 448 bits.
CAST-128: utiliza cifras com 16 ciclos, blocos de 64 bits e
chaves entre 40 e 128 bits.

International data encryption alghoritm (IDEA) (em português,


algoritmo internacional de criptografia de dados): utiliza blocos
de 64 bits com chaves de 128 bits, pode ser implementado por
hardware ou software (FOROUZAN, 2008; STALLINGS, 2014).

RC4: também faz parte da família de cifras criadas por Ron


Rivest, com tamanhos de chaves variável com processamento
por cifra de fluxo.

RC5: faz parte da família de cifras criadas por Ron Rivest, com
tamanhos de chaves e números de ciclos diferentes.

Serpent: criado por Anderson, Bihram, Knudesem, possui chaves


de criptografia entre 128 a 256 bits e blocos de 128 bits.

3.5 Desempenho dos algoritmos


O estudo de Wahid et al. (2018) concluiu, a partir dos resultados
de experimento e comparação, que o algoritmo Blowfish possui
melhor performance em tempo e memória, frente a critérios de
ataques de adivinhação de senha e, além disso, consome um mínimo
de memória. Para casos em que a confidencialidade e a integridade
são fatores mais importantes, o algoritmo AES é a escolha mais
adequada. Para aplicações que utilizam recurso de largura de banda,
o DES pode ser considerado a melhor opção, quando não se deseja
uma criptografia forte. O estudo, porém, considerou os algoritmos
Blowfish e AES indicados para a prevenção de ataques de força bruta
(tentativas consecutivas de adivinhação de chave), podendo ser
aplicados sobre todos os protocolos da internet baseados em IP
(WAHID et al., 2018).

IMPORTANTE
Quando projetamos mecanismos de segurança para redes e/ou sistemas,
devemos observar quais os requisitos desejados de segurança, as restrições
do projeto, poder de processamento disponível e o necessário, necessidade
da utilização de rede e espaço para armazenamento. Os algoritmos
escolhidos devem ser adequados ao sistema projetado para que sejam
eficientes, evitando o desperdício de processamento.

Similar ao estudo de Wahid et al. (2018), o estudo de Patil et al.


(2016) escolheu, entre os algoritmos criptográficos, os que a
criptografia melhor se adapta aos requisitos e às necessidades dos
usuários. No estudo, foram observadas a força, a fraqueza, o custo
computacional e o desempenho dos algoritmos e foram
implementados os mais difundidos, DES, 3DES, AES, RSA e Blowfish.
Patil et al. (2016), concluíram que o algoritmo Blowfish utiliza a menor
quantidade de memória, enquanto o RSA utilizou a maior quantidade.
Os algoritmos DES e AES mantiveram um consumo mediano de
memória.

Os resultados também mostraram que o algoritmo RSA


(assimétrico) utiliza mais tempo para criptografar e descriptografar
do que todos os outros; o Blowfish utilizou menos tempo entre todos
os algoritmos; o algoritmo AES foi considerado o mais adequado para
aplicações que requerem maior integridade e confidencialidade; para
ataques de adivinhação, o Blowfish se mostrou mais eficiente; e o
protocolo AES exige maior largura de banda para transmissão,
enquanto o DES requer menor largura (PATIL et al., 2016). Os estudos
práticos de Patil et al. (2016) e de Wahid et al. (2018) corroboram
entre si, indicando que a criptografia simétrica se mostra mais
vantajosa, quando é necessária uma maior velocidade de encriptação
e uma maior força na criptografia.

4 Vantagens e desvantagens
Como mencionado anteriormente, a principal desvantagem da
criptografia simétrica reside na complexidade do compartilhamento
da chave secreta, porém, esse fato não é impeditivo para sua
utilização. Quando existe a necessidade da distribuição de chaves
para muitos usuários (emissores e receptores), podemos utilizar
sistemas de distribuição de chaves.

A distribuição de chaves simétricas (secretas) é necessária para


que o emissor e o receptor possam realizar o processo criptográfico
fim a fim (criptografar e descriptografar). Refletindo sobre o aspecto
prático dessa distribuição, quanto maior a quantidade de pessoas
que desejam trocar informações criptografadas, maior será o desafio.
Caso cada usuário tenha sua própria chave para transmitir uma
informação, todos os destinatários deverão conhecer essa chave. O
compartilhamento de chaves deverá, portanto, ser efetuado de
maneira segura. Para lidar com o desafio da distribuição de chaves,
foram desenvolvidos métodos como o key distribution center (KDC)
(em português, centro de distribuição de chaves).
Na figura 5, podemos verificar o funcionamento do KDC. De
maneira simples, ele funciona como uma espécie de concentrador de
chaves, armazenando a chave secreta de cada usuário (membro).
Dessa forma, quando dois usuários (emissor e receptor) necessitam
enviar mensagens entre si, o KDC verifica a autenticidade das chaves
secretas do receptor e do emissor e emite chaves temporárias para a
transmissão. Essas chaves temporárias também são conhecidas
como chaves de sessão (STALLINGS, 2014).

Figura 5 – Cento de distribuição de chaves

Fonte: adaptado de Forouzan (2008, p. 982).


PARA SABER MAIS

As chaves de sessão são criadas a partir de um emissor e um receptor e são


utilizadas por um tempo determinado. Diversos protocolos de autenticação,
como o Kerberos, utilizam chaves de sessão baseados em criptografia
simétrica para efetivar a autenticação e a proteção da comunicação entre
usuários. Para conhecer mais sobre como as chaves de sessão são criadas
e o funcionamento dos protocolos de autenticação, recomenda-se a leitura
da seção 31.7 – Gerenciamento de chaves, do livro Comunicação de dados e
redes de computadores, de Forouzan (2008). Uma alternativa ao problema da
troca de chaves é o método de troca de chaves de Diffie-Hellman. No
[capítulo 4] desse mesmo livro é possível encontrar mais informações a esse
respeito.

A principal vantagem da criptografia simétrica está na velocidade


de encriptação, que chega a ser até 10.000 vezes mais rápida quando
comparada aos métodos assimétricos. Essa maior velocidade
permite cifrar grandes volumes de dados em pouco tempo (CALLAS,
2008). As chaves simétricas de maneira geral são pequenas, nos
algoritmos estudados, por exemplo, são de até 256 bits, permitindo,
mesmo assim, gerar cifradores extremamente complexos e robustos.

Para você refletir: Em quais serviços disponíveis na internet a


criptografia simétrica é mais adequada? Para serviços de envio de
mensagens instantâneas como o WhatsApp e o Telegram ou serviços
de armazenamento de dados em nuvem como o DropBox e o Google
Drive?

Considerações finais
Neste capítulo, foram abordados os aspectos de funcionamento
da criptografia simétrica e demonstrados os detalhes de
funcionamento dos principais algoritmos que são amplamente
utilizados em organizações, governos e empresas por todo o mundo
todos. Dois estudos práticos também foram apresentados, visando
corroborar com as afirmações teóricas a respeito das vantagens, das
desvantagens e do desempenho desses algoritmos.

A principal desvantagem da criptografia simétrica é a


distribuição de chaves, porém um concentrador (KDC) pode ser
utilizado para minimizar essa desvantagem, reduzindo a
complexidade da distribuição do compartilhamento de chaves.
Verificamos que a principal vantagem da criptografia simétrica, em
comparação à assimétrica, é a velocidade e o menor custo
computacional de processamento, sendo amplamente utilizada para
criptografar grandes volumes de dados.

Vale ressaltar que os algoritmos simétricos foram evoluindo


conforme suas vulnerabilidades foram descobertas. O principal
ataque impetrado à criptografia simétrica é o ataque de força bruta.
Porém, outros métodos de criptoanálise podem ser utilizados para
decifrar a criptografia utilizada. A chave secreta é o principal ponto de
atenção para implementação da força dos algoritmos: quanto maior
for o tamanho da chave maior será a força da criptografia. Um
usuário de criptografia deve utilizar senhas fortes e complexas para
garantir um melhor nível de segurança, além de zelar pela guarda e
pelo compartilhamento seguro da chave secreta, para evitar ataques
de força bruta ou simplesmente perder a chave secreta que pode
decifrar um texto criptografado.

Referências
BAARS, Hans et al. Fundamentos de segurança da informação: com
base na ISO 27001 e na ISO 27002. 2. ed. São Paulo: Brasport, 2015.

CALLAS, Jon. An introduction to cryptography. Menlo Park: PGP


Corporation, 2008. Disponível em:
http://cisweb.bristolcc.edu/~ik/Download/CIT18/IntroToCrypto.pdf.
Acesso em: 2 fev. 2020.

CARTILHA de segurança para internet: criptografia. Cert.br, 2017.


Disponível em: https://cartilha.cert.br/criptografia/. Acesso em: 15
jan. 2020.

FOROUZAN, Behrouz A. Comunicação de dados e redes de


computadores. 4. ed. Porto Alegre: AMGH, 2008.

PATIL, Priyadarshini et al. A comprehensive evaluation of


cryptographic algorithms: DES, 3DES, AES, RSA and Blowfish.
Procedia Computer Science, v. 78, n. 1, p. 617-624, 2016.

RFC 1851. The ESP triple DES transform. Ietf.org, set. 1995.
Disponível em: https://tools.ietf.org/html/rfc1851. Acesso em: 7 fev.
2020.

RFC 3565. Use of the advanced encryption standard (AES) encryption


algorithm in cryptographic message syntax (CMS). Ietf.org, jul. 2003.
Disponível em: https://tools.ietf.org/html/rfc3565. Acesso em: 7 fev.
2020.

RFC 4772. Security implications of using the data encryption standard


(DES). Ietf.org, dez. 2006. Disponível em:
https://tools.ietf.org/html/rfc4772. Acesso em: 7 fev. 2020.

STALLINGS, William. Criptografia e segurança de redes: princípios e


práticas. 7. ed. São Paulo: Pearson, 2014.

SYMMETRIC cryptography. WHUK, 2006. Disponível em:


https://www.webhosting.uk.com/blog/symmetric-cryptography/.
Acesso em: 26 jan. 2020.

TANENBAUM, Andrew S.; WETHERAL, David. Redes de


computadores. 5. ed. São Paulo: Pearson, 2012.

WAHID, Mohammed Nazeh Abdul et al. A Comparison of


cryptographic Algorithms: DES, 3DES, AES, RSA and Blowfish for
guessing attacks prevention. Journal Computer Science Applications
and Information Technology, v. 3, p. 1-7, 2018.
Capítulo 3
Criptografia de chave pública e
privada

A criptografia assimétrica é também conhecida como


criptografia de chave pública, em que um par de chaves, uma pública
e outra privada (secreta), deve ser utilizado para realizar os processos
de criptografia e descriptografia. Esse modelo de criptografia mudou
a direção dos algoritmos criptográficos que, até a década de 1970,
eram baseados exclusivamente na criptografia simétrica. Lembrando
que um método não substitui o outro e que os modelos de algoritmos
assimétricos lidam com pontos, como a autenticação e o não
repúdio, que não são endereçados pela criptografia simétrica.

A criptografia assimétrica foi introduzida pelos pesquisadores


Whitfield Diffie e Martin Hellman que, em seu artigo, “New directions
in cryptography” (em português, “Novas direções em criptografia”),
previram que o aumento do processamento de mensagens em redes,
exigiria novos métodos de criptografia, que visam minimizar a
necessidade de canais seguros para distribuição de chaves, além de
fundamentar a criação de um novo modelo de criptografia que
perdurasse por longa data (DIFFIE; HELLMAN, 1976).
Todos os processos de certificação e autenticidade digital
utilizados atualmente são baseados em criptografia assimétrica. Sua
maior vantagem está no fato de que a chave pública pode ser
distribuída sem restrições, ou seja, caso alguém queria se comunicar,
deve usar a chave pública do seu destinatário para criptografar a
mensagem, podendo enviá-la (criptografada) em uma rede não
segura, como a internet. Dessa forma, apenas o destinatário poderá
descriptografar a mensagem enviada, utilizando a sua própria chave
privada (secreta).

Neste capítulo, vamos abordar os principais conceitos da


criptografia assimétrica, como a confidencialidade e a autenticação
são obtidas, quais são as vantagens e as desvantagens, como a troca
de chaves é efetuada e, ao final, os principais algoritmos assimétricos
serão apresentados.

1 Conceitos
Em um sistema criptográfico assimétrico, quando o texto claro é
criptografado por uma chave pública, somente seu par de chave
privado correspondente possibilitará a execução da descriptografia.
Caso outra chave, não pertencente ao par de chaves do usuário, seja
utilizada, não será possível gerar o texto claro novamente. Essa
propriedade possibilita lidar com os problemas relacionados ao
gerenciamento da troca de chaves. Não é necessário que as chaves
secretas sejam compartilhadas entre o emissor e o receptor. Cada
um dos participantes de uma comunicação mantém sua própria
chave privada e pode compartilhar apenas sua chave pública,
dispensando canais seguros para o compartilhamento das chaves
públicas.

NA PRÁTICA

Imagine que, em um sistema de criptografia assimétrico, para cada usuário,


é gerado um par de chaves (pública e privada) utilizado para criptografia e
descriptografia de mensagens. A partir daí, todos os usuários inserem suas
chaves públicas em um repositório ou sistema que disponibilize a chave
pública para todos os usuários. Dessa forma, cada usuário vai manter uma
coleção de chaves públicas dos demais usuários. Se um usuário quiser
transmitir uma mensagem confidencial, basta criptografar a mensagem com
a chave pública do usuário destino. E o usuário destinatário, por sua vez, vai
descriptografar a mensagem utilizando sua própria chave privada
(STALLINGS, 2014).

Para que a criptografia assimétrica funcione, os algoritmos


implementados devem ter as algumas características:

ser computacionalmente inviável determinar a chave de


descriptografia a partir do simples conhecimento do algoritmo
de criptografia utilizado;

ser inviável a obtenção da chave privada a partir da pública; e

qualquer uma das duas chaves relacionadas poder ser usada


para criptografar (chave pública ou privada).

A chave pública utilizada para criptografar uma mensagem deve


ser adequada ao objetivo da criptografia utilizada no sistema.
Percebemos então que a chave privada pode ser armazenada de
diferentes formas, como um token (pendrive específico), um cartão
de acesso (smartcard), um arquivo de texto e assim por diante
(CARTILHA..., 2019).

O conceito de criptografia assimétrico foi desenvolvido para que


qualquer pessoa ou sistema possa utilizá-lo. Seu conceito foi
desenvolvido para disponibilizar a chave de criptografia pública a
qualquer pessoa, como uma chave secreta conhecida apenas pelo
destinatário. Em geral, a criptografia assimétrica é utilizada para
confidencialidade, autenticação, integridade (quando usada em
conjunto com algoritmos de hash) e não repúdio.

Os sistemas de criptografia assimétrica podem ser classificados


em três tipos (STALLINGS, 2014):

Criptografia e descriptografia: o emissor criptografa utilizando a


chave pública do destinatário, seu principal objetivo é a
confidencialidade;

Assinatura digital: o emissor utiliza sua própria chave privada


para garantir a autenticidade da sua mensagem;

Troca de chaves: emissor e receptor trabalham em conjunto


para trocar chaves de sessão, utilizando suas chaves privadas.
Nas próximas seções, abordaremos o funcionamento desses
métodos.

2 Conseguindo confidencialidade
Em um sistema criptográfico assimétrico, a garantia da
confidencialidade está contida na chave privada. Imagine que um
usuário “A” escreve uma mensagem em texto claro, logo, cada letra
do texto claro pode ser presentada por um conjunto X (X = [x1, x2, ...,
xn]). Os “n” elementos de X são letras em algum alfabeto finito (a, b, c,
d, e, f, ... z). A mensagem do usuário A é direcionada para o usuário B.
Para tanto, gera-se um par de chaves relacionado: uma chave pública
(PUb) e uma chave privada (PRb). A chave privada é conhecida
apenas pelo usuário B, enquanto a chave pública do usuário B (PUb)
está disponível para qualquer pessoa, inclusive ao usuário A
(STALLINGS, 2014).

Tendo como entrada do processo a mensagem X e a chave de


criptografia pública do usuário B (PUb), o algoritmo de criptografia
gera o texto cifrado. O texto cifrado é representado pelo conjunto Y=
[y1, y2, ..., yn], que é obtido pela da função Y = E (PUb, X). O usuário B
(destinatário da mensagem), de posse de sua chave privada (PRb), é
capaz de decifrar a mensagem por meio da função X = D (PRb, Y).
Caso um invasor obtenha o texto cifrado Y e a chave pública do
usuário B (PUb), seu objetivo será tentar recuperar X’ e/ou PRb’.
Normalmente, um invasor utiliza a criptoanálise para tentar recuperar
um texto estimado, que poderia ser a mensagem transmitida (X’). Se
o invasor estiver buscando a chave privada, ele tentará estimar a
chave privada do usuário B (PRb) para identificar mensagens futuras,
ou seja, o invasor tentará estimar PRb’. Na figura 1, temos um
exemplo do funcionamento básico desse sistema de criptografia e
descriptografia assimétrico.
Figura 1 – Confidencialidade com criptografia
assimétrica

Fonte: adaptado de Stallings (2014, p. 203).

3 Conseguindo autenticação
Diferentemente do modelo que garantia a confidencialidade, para
obter-se autenticação faz-se o uso de duas funções incorporadas ao
cenário anterior: Y = E (PRa, X) para X = D (PUa, Y), em que Y é o texto
cifrado e X é o texto claro. Logo, a função Y criptografará o texto claro
aplicando a chave privada do usuário A (PRa) e a função X
descriptografará o texto cifrado aplicando a chave pública do usuário
A (PUa) (STALLINGS, 2014).

Durante o processo em que o usuário A envia uma mensagem


para o usuário B, ele vai criptografar a mensagem usando a sua
própria chave privada (PRa). Para descriptografar a mensagem, o
usuário B deve utilizar a chave pública de A (PUa). Como a
mensagem foi criptografada com a chave privada do usuário e
ninguém além do usuário A possui a chave privada, o emissor da
mensagem só pode ser o usuário A. Portanto, podemos considerar
que a mensagem recebida pelo usuário B é autenticada para o
usuário A.

No modelo que visa à autenticidade não há preocupações com a


confidencialidade da mensagem, pois qualquer um de posse do texto
cifrado e da chave pública do usuário A (origem da mensagem)
poderá realizar sua descriptografia. Na figura 2, é demonstrado o
funcionamento da criptografia assimétrica para essa finalidade. Um
invasor (criptoanalista) tem acesso ao conteúdo da mensagem e
utilizando a chave pública do usuário A (PRa) pode decifrar a
mensagem. Sob esse aspecto o objetivo do invasor será tentar
estimar a chave privada do usuário A (PRa’), com o objetivo de forjar
sua autenticidade em novas mensagens.

Figura 2 – Autenticidade com criptografia


assimétrica

Fonte: adaptado de Stallings (2014, p. 204).


4 Conseguindo confidencialidade e
autenticação
Para se obter a confidencialidade e a autenticação com a
criptografia assimétrica é necessário mesclar os dois cenários
demonstrados anteriormente. Utilizando um duplo esquema de chave
pública, teremos as funções: Z = E’’ (PUb, E’ (PRa, X)) e X = D’’ (PUa, D’
(PRb, Z)). A função Z resulta no texto cifrado, que é obtido a partir da
criptografia com a chave privada do usuário A (PRa) e,
posteriormente, criptografada com a chave pública do usuário B
(PUb). Por sua vez, a função X é o resultado da descriptografia
aplicando-se a chave privada do usuário B (PRb), ao texto cifrado pela
função Z. Posteriormente, é aplicada a descriptografia pela chave
pública do usuário A (PUa), seguida da descriptografia do texto
resultante com a chave privada do usuário B (PRb), que vai gerar o
texto claro (STALLINGS, 2014).

No primeiro estágio, a mensagem é criptografada usando a


chave privada do usuário A (emissor da mensagem) (PRa). Esse
primeiro estágio fornece a autenticidade à mensagem, pois somente
o usuário A possui a chave privada (Pra). Em seguida, no segundo
estágio, o usuário A realiza a criptografia novamente. Porém, dessa
vez, utiliza a chave pública do usuário B (PUb), que será o receptor da
mensagem. Nesta etapa, se obtém a confidencialidade, pois a
mensagem criptografada só poderá ser decifrada pelo usuário B, que
possui a chave privada (PRb). A principal desvantagem dessa técnica
é justamente o alto custo computacional necessário, pois, para
realizar o processo de forma completa, será necessária a execução
da criptografia e da descriptografia ao menos quatro vezes, em cada
troca de mensagens. Na figura 3, podemos compreender o
funcionamento desse modelo.

Figura 3 – Confidencialidade e autenticação

Fonte: adaptado de Stallings (2014, p. 205).

5 Vantagens e desvantagens da
criptografia assimétrica
Apesar da criptografia assimétrica se mostrar mais conveniente
do que a criptografia simétrica, principalmente pelo fato de não exigir
um canal seguro para troca de chaves, ela apresenta algumas
desvantagens. Em geral, a criptografia assimétrica requer tamanhos
de chaves mais longos que a criptografia simétrica, o que contribui
para sua velocidade ser mais lenta. A complexidade do cálculo
executado na criptografia assimétrica é outro fator que aumenta seu
tempo de execução. Essa complexidade é necessária para evitar que
a chave privada seja descoberta por tentativas de adivinhação da
senha ou ataques de força bruta (HUGHES, 2020).
Outra desvantagem da criptografia assimétrica é que, para
compartilhar as chaves públicas, uma infraestrutura de chave pública
precisa ser criada e disponibilizada para que os usuários consigam
trocar mensagens criptografadas entre si. Essa estrutura de chave
pública, do inglês public key infrastructure (PKI), tem como objetivo
gerenciar as chaves públicas geradas. Com isso, é necessário que
existam autoridades de certificação, que garantam a identidade da
fonte autora de uma chave pública. As autoridades de certificação
realizam a emissão, a revogação e a validação das chaves públicas
(HUGHES, 2020).

As principais vantagens da criptografia assimétrica estão ligadas


aos pontos demonstrados ao seu princípio de funcionamento. Entre
elas, a não necessidade de troca da chave secreta entre os usuários
para criptografar os dados e a utilização da chave pública que pode
ser disponibilizada para todos usuários. A autenticação, quando a
criptografia é executada utilizando a chave privada do usuário e
descriptografada com sua chave pública. Dessa forma, permite o não
repúdio da fonte, quando está atrelada a uma autoridade de
certificação, ou seja, um emissor de uma mensagem não pode negar
a informação enviada, após autenticada (AMARO, 2008).

6 Trocando chaves
A criptografia assimétrica não substitui a criptografia simétrica,
pois possui maior custo computacional e tempo mais elevado para
sua execução. Em geral, a criptografia assimétrica é utilizada para
distribuir chaves simétricas, que servirão para realizar a criptografia
das mensagens. Essa chave utilizada na comunicação também é
conhecida como chave de sessão, que é obtida quando usuários
precisam se comunicar e não possuem um canal seguro para trocar
a chave simétrica.

O emissor da comunicação inicia o processo de troca de chaves


utilizando apenas as chaves públicas dos usuários envolvidos na
comunicação (origem e destino). Ambos os usuários envolvidos na
comunicação conseguirão, aplicando suas chaves privadas, calcular
o valor da chave de sessão (simétrica) que será utilizada para a
transmissão da mensagem secreta a seguir (NUNES, 2007).

O processo para a troca de chaves foi elaborado por Hellman e


Diffie. Atualmente diversos sistemas utilizam o processo de troca de
chaves, pois possibilita que os usuários troquem uma chave
simétrica sem a necessidade do canal seguro.

7 Principais algoritmos assimétricos


Os algoritmos assimétricos podem ser utilizados em três
finalidades: criptografia/descriptografia, autenticação e troca de
chaves. O quadro 1 demonstra a aplicação prática para alguns
algoritmos. Note que nem todos os algoritmos são indicados para
todas as finalidades. Os algoritmos RSA e o algoritmo de curva
elíptica são capazes de executar as três finalidades (criptografia,
assinatura e troca de chaves), enquanto o algoritmo de Diffie-Hellman
destina-se apenas para a troca de chaves.
Quadro 1 – Aplicação dos algoritmos assimétricos
ALGORITMO (DES)CRIPTOGRAFIA ASSINATURA TROCA DE CHAVE

RSA SIM SIM SIM

Curva elíptica (El Gamal) SIM SIM SIM

Diffie-Hellman NÃO NÃO SIM

Fonte: adaptado de Stallings (2014, p. 206).

O algoritmo RSA é amplamente utilizado em sistemas


criptográficos e recomendado pelo NIST para gerar e verificar a
autenticidade de assinaturas digitais (BARKER, 2020) e, além disso,
como apresentado no quadro anterior, é indicado para todas as
finalidades. Vamos nos aprofundar um pouco mais nesse algoritmo.

7.1 Rivest, Shamir e Adleman (RSA)


A figura 4 ilustra o fluxo da criptografia executada pelo algoritmo
RSA. Para fins de exemplificação, vamos imaginar que, para que Bob
consiga se comunicar com Alice, ele seleciona dois números primos1
muito grandes, p e q. Multiplica-se os dois números primos
escolhidos para obter n, que servirá de módulo (ou seja, o valor
numérico absoluto desconsiderando o seu sinal) para criptografia e
descriptografia. Sua notação matemática simples é n = p x q.
Posteriormente, Bob escolhe um número inteiro aleatório a e, na
próxima etapa, calculará d através da função d = 1 mod Φ (letra grega
fi). Bob transmitirá apenas os valores de a e n, porém os valores de d
e Φ são mantidos em segredo (FOROUZAN,2008).
Para criptografar uma mensagem direcionada a Bob, basta que o
usuário utilize o cálculo com os valores de a e n que foram
publicados. Para isso, o texto cifrado será obtido pela função: C = Pa
(mod n). No exemplo, da figura 4, Alice envia um texto cifrado para
Bob que, para descriptografar a mensagem, aplicará seus valores
secretos à função P = Ca (mod n). O RSA possui a restrição de que o
valor de p, obrigatoriamente, precisa ser menor que o valor de n. Caso
p seja um número grande, o texto claro deverá ser dividido em blocos
para manter essa condição (p < n) (FOROUZAN, 2008).

Figura 4 – Fluxo da criptografia pelo algoritmo


RSA

Fonte: adaptado de Forouzan (2008, p. 949).

Apesar de o RSA poder ser utilizado para criptografia e


descriptografia de mensagens, devido a sua baixa velocidade,
geralmente, se é combinado às funções de resumo Hash. Em termos
práticos o RSA é utilizado em assinaturas digitais. sistemas
criptográficos que utilizem mensagens curtas e sistemas de
autenticação (FOROUZAN, 2008).
PARA SABER MAIS

Para saber mais sobre o funcionamento da criptografia RSA, a Khan


Academy [s. d.], disponibiliza uma série de vídeos dividida em três etapas
sobre esse modelo. Pesquise por “Uma jornada pela criptografia” e acesse o
item criptografia moderna.

7.2 Outros algoritmos assimétricos


Outros algoritmos também foram desenvolvidos para lidar com a
criptografia assimétrica, e um deles foi o “algoritmo da mochila”,
desenvolvido pelo cientista da computação norte-americano Ralph
Merkle. A ideia do algoritmo era uma inferência à mochila, em que
uma pessoa pode carregar certa quantidade de objetos com pesos
diferentes. A chave pública, nesse método, consiste no peso total dos
objetos colocados na mochila e a lista de objetos é a chave privada.

Uma curiosidade sobre esse algoritmo é que Merkle estava tão


seguro sobre a força de seu algoritmo que ofereceu um prêmio para
quem o decifrasse. Tal façanha foi conquistada por Adi Shamir, um
dos inventores do RSA. Merkle reforçou o seu algoritmo e aumentou
o prêmio mais duas vezes e, mesmo assim, o algoritmo foi decifrado,
consecutivamente, por Ronald Rivest e Leonard Adleman (inventores
do RSA) (TANENBAUM; WETHERAL, 2012).

Outros algoritmos foram desenvolvidos pelos estudiosos El


Gamal e Schnorr, e se baseiam nessa dificuldade em calcular
logaritmos discretos. Há outros algoritmos que se baseiam em
curvas elípticas. Porém, os dois principais métodos de cálculo de
chave pública e privada baseiam-se em fatoração de números
extensos, dos quais a base é um número primo, sendo considerados
problemas computacionalmente difíceis de resolver (TANENBAUM;
WETHERAL, 2012).

PARA SABER MAIS

Para saber mais sobre o funcionamento de algoritmos em curva elíptica,


como o El Gamal, recomendamos a leitura do capítulo 10 do livro Criptografia
e segurança de redes de Willian Stallings (2014).

Considerações finais
Neste capítulo, abordamos a criptografia assimétrica, também
conhecida como criptografia de chave pública e privada. Com a
criptografia de chave pública é possível criar uma estrutura para
autenticar a fonte de uma mensagem e, também, transmitir
informações confidenciais em um meio não seguro. Destacamos as
vantagens e desvantagens da criptografia de chave pública e privada
e como podem ser combinadas com a criptografia simétrica para
transmitir chaves secretas (chaves de seção). Verificamos como a
troca segura de chaves é efetuada, podendo ser utilizada sem um
canal seguro (como a internet) e entendemos os detalhes do
funcionamento do algoritmo RSA.

Vale ratificar que nem todos os algoritmos assimétricos são


indicados para criptografia/descriptografia, por serem muito lentos. A
força da criptografia assimétrica está na complexidade de calcular
suas chaves, através do problema do logaritmo discreto ou da
fatoração de números primos grandes. A complexidade do cálculo
torna inviável criptografar uma mensagem grande. Uma estratégia
para isso pode ser dividir a mensagem grande em blocos ou
combinar com técnicas de criptografia simétrica, para
compartilhamento de uma chave de sessão (simétrica). Do ponto de
vista da autenticação, uma mensagem muito grande também pode
ser onerosa. Uma estratégia para redução do custo computacional é
a utilização das funções de resumo hash (assunto que abordaremos
mais à frente).

É importante ter em mente que, para obter a confidencialidade,


se utiliza a chave pública do destinatário para criptografar a
mensagem. De maneira oposta, quando o emissor utiliza sua chave
privada, a mensagem poderá ser descriptografada por sua chave
pública, servindo para autenticar a mensagem sem a manter
confidencial. Quando os dois métodos são combinados, resultam na
autenticidade e na confidencialidade, porém, esse processo exigirá o
cálculo de chaves ao menos quatro vezes, em vez de duas vezes.

Partindo do princípio de que a criptografia assimétrica é mais


lenta do que a criptografia simétrica, e que é menos adequada para
criptografar grandes volumes de dados, chega-se à conclusão de que
os métodos podem ser combinados para garantir os pilares da
segurança da informação. Através da combinação dos métodos,
podemos utilizar a criptografia assimétrica para distribuir chaves
simétricas. Com isso, por exemplo, pode-se criptografar grandes
volumes de dados, com mais segurança e rapidez do que utilizando
os métodos de forma isolada.

Referências
AMARO, George. Criptografia simétrica e criptografia de chaves
públicas: vantagens e desvantagens. 2008. Acesso em: 27 abr. 2020.

BARKER, Elaine. Guideline for using cryptographic standards in the


federal government: cryptographic mechanisms. NIST Special
Publication 800-175B, Rev. 1, 91 p., mar. 2020. Disponível em:
https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-
175Br1.pdf. Acesso em: 25 fev. 2020.

CARTILHA de segurança para internet: criptografia. Cert.br, 2017.


Disponível em: https://cartilha.cert.br/criptografia/. Acesso em: 15
jan. 2020.

DIFFIE, W. Whitfield; HELLMAN, Martin E. New directions in


cryptography. IEEE Transactions on Information Theory, v. 22, n. 6, p.
644-654, nov. 1976.

HUGHES, Alan. The disadvantages of asymmetric encryption.


Techwalla, 2017. Disponível em:
https://www.techwalla.com/articles/the-disadvantages-of-
asymmetric-encryption. Acesso em: 25 fev. 2020.

FOROUZAN, Behrouz A. Comunicação de dados e redes de


computadores. 4. ed. Porto Alegre: AMGH, 2008.
KHAN ACADEMY. Computação. Ciência da Computação. Uma
jornada pela criptografia. Criptografia moderna. [s. d.] Disponível em:
https://pt.khanacademy.org/computing/computer-
science/cryptography#modern-crypt. Acesso em: 27 abr. 2020.

NUNES, Délio Silva. Criptografia assimétrica. Ufrj.br, 2007. Disponível


em:
https://www.gta.ufrj.br/grad/07_2/delio/Criptografiaassimtrica.html.
Acesso em: 23 fev. 2020.

STALLINGS, William. Criptografia e segurança de redes: princípios e


práticas. 7. ed. São Paulo: Pearson, 2014.

TANENBAUM, Andrew S.; WETHERAL, David. Redes de


computadores. 5. ed. São Paulo: Pearson, 2012.
[1] Números primos são números que podem ser divididos sem resto
apenas por 1 e por si mesmos.
Capítulo 4
Troca de chaves Diffie-Hellman

Imagine que você deseja enviar um baú trancado a uma pessoa


através de uma transportadora. Porém, o conteúdo do baú não pode
ser visto por ninguém além do destinatário. No entanto, o destinatário
não possui a chave do baú. Como resolver esse problema?

A solução para esse impasse é análoga ao sistema de troca de


chaves descrito por Martin Hellman e Whitfield Diffie (1976). Para
estabelecer um canal confidencial entre você e o seu destinatário,
basta que você envie o baú com o cadeado aberto ao seu destino.
Quando for recebido, o destinatário deve também adicionar seu
próprio cadeado, também aberto e colocar uma cópia da chave do
novo cadeado aberto dentro do baú. Antes de devolver o baú a você, o
destinatário deverá trancar o baú com o primeiro cadeado, colocado
por você e que foi recebido aberto. Pronto, você receberá o baú
trancado com o primeiro cadeado e, possuindo a chave, poderá abri-
lo. Dentro do baú você obterá a cópia da chave do novo cadeado
devolvido pelo seu destinatário. A partir desse momento, tanto você
quanto seu destinatário, possuem a chave do segundo cadeado
adicionado ao baú e poderão enviá-lo sem que seu conteúdo possa
ser visto pela transportadora.

Diversos padrões, produtos e protocolos de tecnologia aplicados


no campo da segurança da informação utilizam o método da troca de
chaves como base de funcionamento de seus métodos. O principal
exemplo de uso da troca de chaves é o protocolo secure shell
protocol (SSP)(em português, protocolo de acesso seguro ao Shell). O
protocolo SSH fornece comunicação segura para conexão entre um
computador cliente e o computador servidor (geralmente em modo
texto) sob uma rede não segura como a internet (RFC 4419, 2006).

Neste capítulo, você aprenderá os conceitos de funcionamento


do sistema de troca de chaves descrito por Diffie-Hellman (1976), o
processo de troca de chaves, as vantagens e desvantagens, além de
discutirmos a confidencialidade e a falta de autenticação no
processo.

1 Conceitos
Embora Ralph C. Merkle tenha publicado o conceito da chave
pública e privada apenas em 1978, Hellman também atribui crédito a
Merkle em relação à descoberta sobre a troca de chaves (STALLINGS,
2014). Não é incomum encontrar na literatura como algoritmo ou
método de troca de chaves de Diffie-Hellman-Merkle. Sendo assim,
trataremos o método de troca de chaves de forma independente de
seus inventores.
O algoritmo de troca de chaves aborda uma solução para a
principal dificuldade da criptografia simétrica, que é a necessidade de
obter um canal seguro para o compartilhamento da chave de
criptografia/descriptografia. Quando imaginamos um cenário em que
dois usuários não estão próximos, compartilhar uma chave secreta é
uma tarefa difícil.

O método de troca de chave possibilita estabelecer uma chave


secreta comum entre emissor e receptor através de um canal
inseguro, como a internet. Mesmo que terceiros capturem as
mensagens trocadas entre o emissor e o receptor, não é possível
descobrir a chave secreta, mesmo aplicando criptoanálise.

Em linha gerais, o método de troca de chaves determina como as


chaves de sessão únicas são geradas para criptografar de forma
simétrica as mensagens entre um emissor e um receptor. O método
também pode ser aplicado na autenticação, utilizando uma espécie
de assinatura gerada por uma chave privada. Veremos em detalhes
as assinaturas digitais no [capítulo 6].

IMPORTANTE
A principal finalidade do processo de troca de chaves é permitir que dois
usuários troquem uma chave simétrica, de maneira segura, que será usada
para a criptografia de suas mensagens (STALLINGS, 2014).

2 Processo de troca de chaves


O objetivo da troca de chaves é permitir que os usuários
obtenham uma chave de criptografia simétrica para que possam
trocar informações com segurança, garantindo a confidencialidade. O
acordo de troca de chaves de Diffie-Hellman vai gerar as chaves entre
os envolvidos na comunicação – emissor e destinatário. As chaves
geradas serão necessárias para a transmissão da chave secreta
(chave simétrica). Combinando as chaves geradas para cada
envolvido na comunicação, as partes podem, através de uma função
de cálculo, chegar a um número em comum. O valor descoberto pela
função, em ambos os lados, pode ser convertido em uma senha
privada que é utilizada para a codificação da criptografia (RFC 2631,
1999).

O primeiro estágio do processo de troca de chaves é calcular o


número secreto compartilhado, neste capítulo representado pela letra
Z. Quando os pares de chave pública e privada dos usuários de
origem e destino são utilizados, a função matemática do processo de
troca de chaves resultará no mesmo valor Z (RFC 2631, 1999).

Após a obtenção do valor de Z, ele é convertido em uma chave


simétrica compartilhada. Quando o usuário de origem da mensagem
utiliza um par de chaves de pública/privada, um valor aleatório e
público vai garantir que a chave simétrica resultante seja diferente
para cada processo de chave gerado (RFC 2631, 1999).

2.1 Geração da chave Z


De acordo com a RFC 2631 (1999), a norma ANSI-X9.42 (para
criptografia de chave pública) especifica que chave compartilhada Z
deve ser gerada pela função matemática:

Z = g(xb · xa) mod p

Para a geração da chave compartilhada Z, as partes


individualmente realizarão os cálculos:

Z = ybxa mod p

Z = (yaxb) mod p

Em que:

ya é a chave pública do usuário a, calculada pela função ya = (gxa)


mod p;

yb é a chave pública do usuário b, calculada pela função yb = (gxb)


mod p;

xa é a chave privada do usuário a;

xb é a chave privada do usuário b;

p é um primo grande;

q é um primo grande;

g = h {(p-1) / q} mod p, onde:

h é qualquer número inteiro com 1 < h < p-1, de modo que h {(p-1) / q}
mod p > 1;

(g tem ordem q mod p; ou seja, g q mod p = 1 se g! = 1);

j é um o número inteiro grande de modo que p = qj + 1;


A força do processo de troca de chaves de Diffie-Hellman está na
dificuldade para computar um módulo de um logaritmo discreto de
um número primo muito grande. Dessa forma, um invasor conhece g
e p, porém, só descobriria a chave secreta se conseguisse descobrir
os valores de x e y. Ocorre que, até então, não é conhecido nenhum
algoritmo que consiga computar o módulo do logaritmo discreto de
um número primo muito grande. Para descobrir esses valores, a única
forma é testar todas as possibilidades, tarefa que atualmente é
computacionalmente inviável (STALLINGS, 2014).

PARA SABER MAIS

Para entender mais sobre o problema do logaritmo discreto e teste de


primalidade, recomenda-se a leitura do capítulo 8 do livro Criptografia e
segurança de redes de Willian Stallings (2014).

2.1.1 Exemplo de Alice e Bob


Para exemplificar o processo de troca de chaves, vamos simular
o processo de troca de chaves entre dois usuários que desejam se
comunicar de forma secreta, Alice e Bob. É importante ressaltar que o
processo de troca de chaves não executa a criptografia dos dados.
Seu objetivo é gerar uma chave em comum para que Alice e Bob
consigam criptografar uma comunicação. Essa chave gerada é
conhecida como chave de sessão.

Alice e Bob devem concordar sobre dois grandes números, p (um


número primo) e g (um número aleatório), que seguem as condições
descritas anteriormente. Esses números são públicos, dessa forma,
qualquer uma das partes, Alice ou Bob, pode escolher p e g e informar
mutuamente em um canal não seguro. No caso de Alice, para gerar
um número grande x, ela deverá guardar x como um valor secreto.
Então, Alice terá em seu poder os valores de p e x, que servirão para
definir a chave privada utilizada no processo de troca de chaves de
Diffie-Hellman. Esse processo acontece de forma similar ao algoritmo
RSA, discutido anteriormente.

Alice vai calcular ya = (gxa) mod p. Alice tem, então, um expoente


xa (valor privado escolhido). Alice inicia o protocolo do acordo de
chave enviando a Bob uma mensagem contendo (p, g, y), ya será um
valor transmitido por um canal inseguro, portanto, será um valor
público. Bob, por sua vez, vai calcular yb = (gxb) mod p. Bob tem, então,
um expoente xb (valor privado escolhido), o valor resultante de yb
será o valor transmitido pelo canal inseguro para Alice, portanto, será
seu valor público. Bob enviará seu valor que foi calculado para yb à
Alice. Note que nem Alice nem Bob enviaram os valores privados xa e
xb, respectivamente. Alice receberá o valor público de Bob e calculará
o valor da chave secreta por Z = (ybxa) mod p. Bob vai calcular o valor
da chave secreta por Z = (yaxb) mod p.

Acompanhe na figura 1 a troca de chaves entre Alice e Bob.


Figura 1 – Exemplo de troca de chaves entre
Alice e Bob

Fonte: adaptado de Tanenbaum e Wetheral (2012, p. 522).

Utilizando a sequência descrita anteriormente, vamos calcular


um exemplo com valores menores, para exemplificar o processo de
cálculo, mas, lembre-se, em um processo real, os números utilizados
serão muito grandes. Supondo que Alice inicia a comunicação
escolhendo os valores de g = 7 e p = 23, as etapas de cálculo serão
(FOROUZAN, 2008):

1. Alice escolhe xa = 3 e calcula ya = gxa mod p => ya = 73 mod 23 =


21.

2. Bob escolhe xb = 6 e calcula yb = gxb mod p => yb = 76 mod 23 = 4.

3. Alice envia o número 21 (ya) para Bob.

4. Bob envia o número 4 (yb) para Alice.

5. Alice calcula a chave simétrica Z = ybxa mod p => Z = 43 mod 23 =


18.

6. Bob calcula a chave simétrica Z = yaxb mod p => Z = 216 mod 23 =


18.
Perceba que o valor da chave simétrica Z será o mesmo valor
para Alice e para Bob, em que gxa · xb mod p = 718 mod 23 = 18.

NA PRÁTICA
A troca de chaves está presente em diversos protocolos. Quando tratamos
de ambientes seguros, o gerenciamento de chaves utiliza o protocolo
internet key exchange (IKE) (em português, troca de chaves da internet), que
é utilizado para troca de chaves na internet definido pela RFC 2409 (1998). O
IKE é utilizado no IPsec (protocolo de segurança de IP) para estabelecimento
de um túnel seguro (VPN), em uma rede de internet, implementando
autenticação, confidencialidade e gerenciamento de chaves (FOROUZAN,
2008).

3 Vantagens e desvantagens
Notadamente, a principal vantagem do processo de troca de
chaves é o uso da chave de sessão para a criptografia. Dessa forma,
nenhuma chave privada dos usuários em um sistema de
comunicação é enviada ou armazenada, contribuindo para
confidencialidade na troca de informações entre usuários ou
sistemas.

A complexidade computacional é reduzida quando utilizamos a


criptografia assimétrica para a transmissão das mensagens entre os
usuários, para cifrar e decifrar as mensagens. Note que o processo de
troca de chaves, apesar de caracterizar um processo de criptografia
de chave pública e privada (assimétrico), é utilizado apenas para
trocar a chave simétrica estabelecida através do processo
desenvolvido por Diffie-Hellman (1976).
Assim como os métodos de criptografia assimétricos ou de
chave pública e privada, a troca de chaves de Diffie-Hellman possui
complexidade computacional mais elevada do que a criptografia
simétrica, sendo, portanto, mais lenta e, por isso, não é indicado para
criptografar e descriptografar grandes volumes. Esse problema é
endereçado com o uso do acordo de troca de chaves, devendo ser
combinado à criptografia simétrica. Uma desvantagem no processo
de troca de chaves é a necessidade de autenticação da fonte
emissora da comunicação, o que, em termos práticos, requer uma
autoridade de certificação para a chave pública. A falta de
autenticação torna o processo de troca de chaves vulnerável contra
ataques de homem de meio.

4 Confidencialidade na troca
A dificuldade na troca de uma chave simétrica deu origem à
necessidade da criação da criptografia assimétrica, criptografia de
chave pública e privada. Porém, o processo de criptografia é custoso
computacionalmente, sendo inviável para criptografar grandes
volumes de dados. O processo de troca de chaves possibilita a
criação de chaves de sessão para criptografar de forma simétrica
uma comunicação entre dois usuários.

No processo de estabelecimento da troca de chaves, as chaves


privadas não são compartilhadas. Para uma comunicação entre Alice
e Bob, são necessários dois pares de chaves (um valor público e
outro privado) e, a partir do momento em que Alice envia uma
mensagem para Bob, ela usa a chave pública de Bob. De forma
análoga, quando Bob envia uma mensagem a Alice, Bob usa a chave
pública de Alice. Após o estabelecimento da comunicação, Alice e
Bob calculam uma chave secreta em comum dada pelo módulo do
logaritmo discreto de um número primo muito grande. A criptografia
a partir do estabelecimento da chave de sessão é feita por uma chave
simétrica (FOROUZAN, 2008).

PARA PENSAR
Se as chaves de sessão forem trocadas com frequência, maior será a
segurança de um sistema criptográfico. Dessa forma, um atacante teria
menor tempo para tentar decifrar a chave de sessão utilizada. Porém, sobre
o ponto de vista da comunicação e a capacidade de rede, o processo será
mais complexo computacionalmente. Sob esse aspecto, um profissional de
segurança da informação precisa equilibrar os requisitos de segurança e a
viabilidade de uso dos sistemas (STALLINGS, 2014).

5 Falta de autenticação
O principal problema associado ao processo de troca de chaves
é que o emissor de uma mensagem precisa confiar na chave pública
(números públicos p e g usados no exemplo da troca de chaves Diffie
Hellman) de um certo receptor. Utilizando o exemplo da comunicação
entre Alice e Bob, Alice precisa ter completa confiança de que a chave
pública de Bob, utilizada no processo para troca de chave do
processo, é legitima.

O processo de troca de chaves é suscetível a ataques man-in-


the-middle. O processo de troca de chaves de Diffie-Hellman possui
grande complexidade para descoberta da chave privada – números
secretos xa e xb usados no exemplo da troca de chaves Diffie-
Hellman, apenas conhecendo p e g (as chaves públicas), levando
muito tempo, talvez anos, para determinar a chave privada de um dos
participantes da comunicação. Outro ponto importante a se destacar
é que Alice e Bob podem modificar a chave na próxima comunicação.
Contudo, como ponto fraco do processo de troca de chaves, pode
ocorrer um ataque em alguns momentos (FOROUZAN, 2008):

Depois da escolha das chaves públicas p e g, trocadas de forma


aberta entre Bob e Alice, Alice escolhe a chave privada (número
secreto) xa, calcula ya = gxa mod p e envia ya para Bob.

Evelyn, o invasor, intercepta ya. Ela escolhe a chave privada


(número secreto) xc, calcula yc = gxc mod p e envia yc para Alice
como se fosse Bob.

Bob escolhe a chave privada (número secreto) xb, calcula yb = gxb


mod p e envia yb para Alice; yb é interceptada por Evelyn que
jamais a envia para Alice.

Alice calcula Z1 = ycxa mod p e Evelyn calcula Z1 = yaxc mod p, que


se torna uma chave compartilhada entre Alice e Evelyn. Alice,
entretanto, acredita que a chave recebida se trata de uma chave
compartilhada com Bob.

Evelyn calcula Z2 = ybxc mod p e Bob calcula Z2 = yxb mod p, que


se torna uma chave compartilhada entre Evelyn e Bob. Bob, no
entanto, acredita que a chave recebida se trata de uma chave
compartilhada com Alice.

Perceba que a atacante Evelyn está intermediando a


comunicação entre Alice e Bob. Esse cenário configura um ataque de
homem no meio, pois a mensagem será interceptada por Evelyn
sempre que uma comunicação ocorrer entre Alice e Bob. O ataque de
homem no meio corre justamente porque as chaves públicas de Alice
e Bob não foram autenticadas, sendo necessária a combinação de
um processo de autenticação das chaves públicas para impedir
ataques em que se visa passar pela identidade de um usuário
(FOROUZAN, 2008).

Considerações finais
Neste capítulo abordamos o processo de troca de chaves de
Diffie-Hellman. Analisamos as principais vantagens e desvantagens
do processo de troca de chaves e a sua complementariedade para
distribuição de chaves de sessão (simétrica) para criptografia de
mensagens. Assim, o processo de troca de chaves garante a
segurança na distribuição de chaves simétricas, podendo ser
diferentes a cada comunicação, assim como determinado pelo ANSI-
X9.42 e pela RFC 2631.

Uma vez que a troca de chaves pode ser efetuada, a criptografia


simétrica pode ser utilizada para criptografar grandes volumes de
dados. O processo de troca de chaves pode ser utilizado para a
distribuição de chaves públicas em conjunto com autoridades
certificadoras, com o intuito de garantir não somente a
confidencialidade, mas também a autenticidade das chaves públicas.

Referências
DIFFIE, W. Whitfield; HELLMAN, Martin E. New directions in
cryptography. IEEE Transactions on Information Theory, v. 22, n. 6, p.
644-654, nov. 1976.

FOROUZAN, Behrouz A. Comunicação de dados e redes de


computadores. 4. ed. Porto Alegre: AMGH, 2008.

RFC 2409. The internet key exchange (IKE). Ietf.org, 1998. Disponível
em: https://tools.ietf.org/pdf/rfc2409.pdf. Acesso em: 4 mar. 2020.

RFC 2631. Diffie-Hellman key agreement method. Ietf.org, 1999.


Disponível em: https://tools.ietf.org/pdf/rfc2631.pdf. Acesso em: 4
mar. 2020.

RFC 4419. Diffie-Hellman Group Exchange for the Secure Shell (SSH)
Transport Layer Protocol. Ietf.org, 2006. Disponível em:
https://tools.ietf.org/pdf/rfc4419.pdf. Acesso em: 2 mar. 2020.

STALLINGS, William. Criptografia e segurança de redes: princípios e


práticas. 7. ed. São Paulo: Pearson, 2014.

TANENBAUM, Andrew S.; WETHERAL, David. Redes de


computadores. 5. ed. São Paulo: Pearson, 2012.
Capítulo 5
Hash

Um dos objetivos de uma função de resumo hash é garantir a


integridade dos dados, assegurando que valores não sejam
adulterados, ou seja, que qualquer alteração, mesmo que de um bit,
resulte em um valor totalmente diferente de hash. As funções hash
são utilizadas no campo da criptografia, no entanto, apesar de não
funcionarem como os algoritmos de criptografia, por seus cálculos
matemáticos serem de mão única e não poderem ser desfeitos, são
conhecidas como funções hash criptográficas.

Um algoritmo que implementa uma função hash utiliza um


modelo matemático que não possa ser desfeito e, mesmo que um
ataque seja impetrado, não seja possível descobrir o valor em texto
original (antes de calculado o seu valor correspondente em hash). Por
esse motivo, as funções hash são conhecidas como algoritmos de
“mão única”, uma vez que o cálculo reverso não pode ser desfeito.
Diferente da criptografia, as funções hash não possuem chaves para
executar o seu processo, apenas aplica-se a função a um texto
original e a saída do processo produzirá um valor hash com tamanho
determinado, independentemente do tamanho do texto original de
entrada. A propriedade de tamanho fixo para a saída de uma função
de resumo hash, implica alguns problemas de colisão, ou seja, dois
valores de texto original, podem resultar em um mesmo valor de
hash. Por isso, as funções hash são utilizadas principalmente para
determinar se as informações foram alteradas ou se permanecem as
mesmas.

As hashes são utilizadas em diversas aplicações, como


autenticação de mensagens, assinaturas digitais, sistemas de
autenticação de senhas para usuários, sistemas de detecção de
intrusão (intrusion detection system – IDS e intrusion prevention
system – IPS), detecção de vírus e na tecnologia de blockchain.

Neste capítulo, abordaremos os conceitos de funcionamento das


funções de resumo hash, como uma hash é calculada, as
considerações sobre seu uso, como a integridade é garantida, seu
uso para autenticação, o problema de colisão e quebras e, ao final, os
principais algoritmos serão apresentados.

1 Conceitos
Em diversos aspectos do campo da criptografia, é possível notar
a necessidade de utilizar uma função matemática para embaralhar os
dados de forma que seja inviável computacionalmente, tentar reverter
o processo sem uma chave, executando assim uma criptografia forte.
Porém, o objetivo de uma função de resumo hash é ser complexa ao
ponto de não ser possível desfazer o processo executado e, refletindo
sobre os requisitos que motivam esse desejo, entendemos que as
hashes executam um papel fundamental para viabilização da
autenticação e da integridade, através das assinaturas digitais e dos
sistemas de autenticação de usuários (TANENBAUM; WETHERAL,
2012).

Uma função de resumo criptográfico hash produz uma espécie


de valor cifrado, conhecido como valor hash, porém,
independentemente do tamanho do texto original de entrada, será
produzido um valor hash de tamanho fixo. Uma função hash produz
um valor de saída que parece ser aleatório, mas o valor de saída
respeita uma função matemática preestabelecida. O objetivo da
integridade é alcançado, pois, quando qualquer valor é alterado, a
função hash produz um valor totalmente diferente (STALLINGS,
2014).

A figura 1 demonstra o funcionamento típico de uma função


hash que, na maioria dos casos, recebe um valor inteiro, por exemplo,
512 ou 1.024 bits, como entrada L. Se o valor de entrada não é
suficiente para preencher o campo de entrada, ele é complementado
por um valor P em bits. O valor P de complemento é uma forma de
aumentar a segurança do valor hash gerado, para que um invasor não
possa introduzir uma mensagem adicional com o mesmo valor de
hash.
Figura 1 – Fluxo de uma função hash

Fonte: adaptado de Stallings (2014, p. 247).

O processo de criptografia garante a confidencialidade para uma


mensagem, mas não a sua integridade. Por exemplo, se um usuário
redigisse um testamento para determinar sua partilha de bens após a
sua morte, esse testamento não precisaria ser criptografado, porém,
como garantir que o testamento não foi alterado após a morte do
usuário? Podemos gerar um valor hash do testamento e armazená-lo,
para posterior comparação.

O testamento pode ser compartilhado, porém o valor hash


gerado deve ser sigiloso, justamente pela necessidade de efetuar a
comparação posterior. Isso evitará que um novo hash seja gerado
para um documento falso (não íntegro). Caso o resultado obtido pela
comparação seja diferente do valor hash sigiloso que foi emitido pelo
usuário, prova-se que o testamento foi alterado. Esse valor hash
armazenado também é conhecido como digest (resumo) da
mensagem, que é um valor compacto do texto original, criado pela
função de resumo hash (FOROUZAN, 2008).

Em uma mensagem, o digest deve ser criado pelo usuário


emissor, que enviará com a mensagem para o usuário receptor. O
digest servirá para validar a integridade da mensagem enviada. Se o
valor for o mesmo, o receptor tem a confirmação de que a
mensagem original não foi adulterada. Para que isso funcione, o
digest precisa ser enviado de forma segura para o destinatário, o
usuário receptor (FOROUZAN, 2008).

São critérios importantes utilizados pelas funções de resumo


hash (FOROUZAN, 2008; STALLINGS, 2014):

Unidirecionalidade: a função hash deve ser unidirecional, ou


seja, deve ser difícil ou impossível de criar a mensagem a partir
do próprio digest. De forma análoga a um documento ou
impressão digital, podemos comparar uma digital e localizá-la, se
ela existir em um banco de dados com diversos documentos,
porém, se o documento não existir, não se pode criar um
documento a partir de uma digital. Para garantir a
unidirecionalidade, também deve ser inviável inverter a função
parcialmente, ou seja, recuperar alguns bits da entrada.

Resistência a colisões fracas: essa propriedade tem objetivo de


garantir que uma mensagem não seja falsificada facilmente. Se
um usuário criar uma mensagem e um digest e enviar a outro
usuário, não garante que um invasor conseguirá, de forma fácil,
criar uma outra mensagem que faça um hash exato ao mesmo
digest da mensagem enviada. Em outras palavras, não deve ser
possível que um invasor consiga produzir uma mensagem
diferente da mensagem original que produza o mesmo valor
digest. Quando duas mensagens produzem o mesmo digest,
caracteriza-se uma colisão, portanto, uma boa função hash deve
possuir mecanismos para evitar as colisões. Uma colisão fraca
significa que com o algoritmo que implementa a função hash é
muito provável que existam mensagens diferentes com um
mesmo digest. Nesse ponto, o requisito para uma boa função
hash é ser resistente a colisões fracas.

Resistência a colisões robustas: esta é a propriedade que visa


garantir que não será possível encontrar duas mensagens que
produzam um hash para o mesmo digest. Isso garante que um
usuário emissor de uma mensagem, não produza duas
mensagens que façam um mesmo disgest. A função pode, por
exemplo, recusar o envio de uma mensagem informando que ela
já foi enviada. Esse tipo de colisão é considerado robusto, pois a
probabilidade de acontecer é maior, pois o usuário emissor
poderia criar duas mensagens, enviar uma ao usuário destino, e
salvar uma segunda mensagem, diferente da primeira.
Posteriormente pode alegar que a mensagem enviada foi a
segunda (guardada) e não a primeira, uma vez que os seus
digests seriam os mesmos. Relembrando o caso do testamento,
isso poderia acarretar textos diferentes validados pelo mesmo
digest.
Avalanche completa: uma avalanche é um processo de
deslizamento de terra ou neve que geralmente se inicia com um
pequeno deslizamento que gera um deslizamento muito maior.
Partindo dessa analogia, essa propriedade visa garantir que
qualquer alteração de um dos bits de entrada provocará a
alteração de todo valor hash gerado para o texto de entrada do
processo.

Imprevisibilidade: essa propriedade define que deve ser inviável


prever qualquer bit de saída de uma função hash, de forma que
seu resultado pareça totalmente aleatório.

2 Cálculos de hash
Conforme apresentado anteriormente, na saída de uma função
hash (valor hash, ou digest de uma mensagem) é obtido um valor
com tamanho predefinido, pela função. Isso ocorre porque uma
função hash recebe os dados em um comprimento fixo. Esses
valores são chamados de blocos de dados. Os tamanhos dos blocos
de dados são diferentes em cada algoritmo, mas quando utilizamos o
mesmo algoritmo os tamanhos de blocos serão mantidos. Essa
propriedade garante que outro usuário execute o mesmo algoritmo e
conseguirá validar o valor hash.

O algoritmo secure hash algorithm 1 (SHA-1), por exemplo, utiliza


blocos de 512 bits. Caso um usuário necessite criar um valor hash
para 1.024, serão utilizados ao menos 2 blocos, e assim por diante.
Entretanto, nem sempre as mensagens têm o mesmo tamanho, para
isso é utilizada uma técnica chamada “padding” (em português,
preenchimento). Para o valor P demonstrado na figura 1, dessa forma,
sempre é obtido um valor de saída com tamanho padrão.

A figura 2 demonstra o funcionamento do efeito avalanche em


funções hash que, nesse caso, serão executadas quantas vezes
forem necessárias para a criação do valor hash final. Nela, temos o
funcionamento da divisão de uma mensagem em blocos para o
processamento de uma função hash. Seis blocos ao todo são
processados, um de cada vez. A saída do bloco 1 é alimentada como
entrada juntamente com o segundo bloco de dados. A saída do
segundo é alimentada com o terceiro bloco, e assim por diante. Com
isso, a saída final, após o processamento do bloco 6, será resultado
da combinação de todos os blocos. Caso qualquer bit da mensagem
seja alterado, em qualquer que seja o local da mensagem, todo o
valor do bloco será alterado, tornando, assim, a saída final o valor
combinado de todos os blocos. Se você alterar um bit em qualquer
lugar da mensagem, todo o valor do hash será alterado, propriedade
conhecida como efeito avalanche (DECODED..., 2020).

Figura 2 – Efeito avalanche em funções hash

Fonte: adaptado de Decoded... (2020).


3 Considerações sobre o uso de hashes
As funções de resumo hash geralmente são utilizadas para gerar
um manipulation detection code (MDC) (em português, código para
detecção de manipulação) ou message authentication code (MAC)
(em português, código de autenticação de mensagem), que é
utilizado em sistemas de assinatura digital (SENDIN, 1999).

O código MDC é transmitido juntamente com a mensagem,


dessa forma, o hash da mensagem é recalculado no receptor, e a
mensagem só é aceita se o valor recebido e o valor recalculado forem
iguais. O MAC de uma mensagem, de forma resumida, é um valor
hash, função de uma mensagem em que uma chave secreta é
aplicada (chave simétrica). Essa chave é conhecida apenas pelas
duas partes da comunicação e, partindo desse princípio, a
mensagem recebida com MAC, depois de validado, é uma garantia da
origem da mensagem e de que ela não foi alterada (SENDIN, 1999).

3.1 A integridade garantida


A garantia da integridade de dados é a garantia de que uma
mensagem não foi alterada, seja essa alteração acidental ou
proposital (motivada por um invasor). Esse processo visa garantir
que, desde a criação, a transmissão e até o armazenamento, uma
mensagem não foi alterada.
IMPORTANTE
Considera-se uma alteração de mensagem a inserção/deleção de bits,
reordenação/inversão de bits ou quaisquer combinações (SENDIN, 1999).

A validação da integridade pode ser executada por meio da


validação do formato esperado ou pela verificação de redundâncias.
Em alguns tipos de dados, é possível verificar um formato esperado,
assim, em uma alteração acidental, alguma frase ou palavra tende a
ficar fora de contexto, perdendo seu sentido. A verificação de
redundância consiste na análise de informações após uma
transmissão. Em redes, um exemplo disso é a inserção de bits de
paridade. As técnicas de garantia da integridade em criptografia
utilizam a criação e a verificação de redundâncias. Assim como
mencionado anteriormente, as funções de resumo hash são
utilizadas como os métodos MDC (SENDIN, 1999).

O processo para execução do MDC, de acordo com Sendin


(1999), é o seguinte:

1. Criação do MDC, em que MDC (x) = h(x).

2. Transmissão ou armazenamento do MDC (x), através de canal


seguro ou utilizando a criptografia para transmissão.

3. Verificação do valor x’, valor recebido ou armazenado, e do MDC


(x), então calcula-se: Y=h(x’). A mensagem é íntegra somente se
x’ foi igual a x.
Empresas de desenvolvimento de software podem calcular
valores de MDC, para seus softwares, e publicar esses valores em
suas páginas oficiais. Dessa forma, podemos calcular o valor MDC
para um software baixado na internet, e assim, caso aquele software
tenha sido modificado, com a inserção de programas maliciosos, por
exemplo, o valor MDC será diferente, ou seja, x’≠ x (SENDIN, 1999).

3.2 Uso para autenticação


A autenticação é feita através dos métodos MAC, de código de
autenticação de mensagem. O funcionamento de um código MAC
está atrelado ao uso de uma chave secreta compartilhada entre os
envolvidos em uma comunicação. Dessa forma, um usuário emissor
assina uma mensagem com uma chave privada e o usuário
destinatário da comunicação pode autenticar a mensagem enviada
através de sua chave pública. Cabe salientar que uma mensagem
autenticada é implicitamente íntegra, ou seja, uma vez validada a
autenticidade da mensagem, automaticamente, a validação de sua
integridade foi executada. Caso a mensagem seja alterada, ela não
poderá ser autenticada (SENDIN, 1999).

Utilizando as funções de resumo hash para essa finalidade,


obtém-se a autenticação aplicada ao valor hash, ou seja, autentica-se
o digest da mensagem enviada. Do ponto de vista das funções
matemáticas, dois parâmetros são necessários: os dados e uma
chave secreta representados por h(k,x) ou hk(x), para a geração do
digest. Logo, o digest gerado (valor hash) é o chamado de MAC.

A criação e a validação se dão pelas etapas de (SENDIN, 1999):


1. Geração do MAC, na qual se aplicam a função hash e a chave
secreta.

2. Transmissão ou armazenamento da mensagem e do MAC.

3. A verificação da mensagem recebida/armazenada, aplicando-se


o MAC e a chave secreta.

O valor do MAC (valor hash/digest) não precisa ser protegido,


isto é, cifrado ou transmitido em canal seguro. A autenticação da
mensagem será executada pela chave simétrica, que os dois usuários
precisam conhecer. Vale lembrar que os usuários podem utilizar um
modelo de criptografia assimétrico para transmitir essa chave
simétrica. A combinação do MAC com uma chave secreta também é
conhecida como hash-based message authentication code (HMAC)
(traduzido do inglês, código de autenticação de mensagens baseado
em hash).

Outro ponto importante a se ressaltar é que o MAC não garante o


não repúdio, ou seja, a garantia da prevenção da negação de acordos
ou atos transações digitais, pois qualquer uma das pontas da
comunicação que possua a chave secreta compartilhada pode gerar
uma mensagem (SENDIN, 1999).

3.3 Colisões
Uma colisão hash é caracterizada quando valores diferentes de
mensagem (m) podem gerar um mesmo valor hash, em que, h(m) =
h(m’). Isso pode ocorrer, pois uma função hash pode resumir um
texto muito grande em um texto pequeno (SENDIN, 1999). Com isso,
o tratamento dessas possíveis colisões requer uma atenção especial
para um projetista. Esse requisito é fundamental para a criação de
boas funções de resumo hash, como explanado anteriormente.
Segundo Sendin (1999), é importante que a função hash tenha uma
probabilidade baixa para produção de colisões.

Os dois principais métodos para o tratamento das colisões, as


técnicas de encadeamento e hash múltiplo, são executados no
processo de geração de um valor hash. Esses dois métodos tratam,
através do uso de estrutura de dados, de como o valor hash será
gerado.

No encadeamento, a função hash armazena referências para


estruturas dinâmicas de listas. Dessa forma, dois valores que teriam
o mesmo endereço na tabela de geração do hash e, portanto,
colidiriam, são armazenados em uma lista auxiliar. Essa lista cria uma
espécie de cadeia, iniciando com o primeiro valor preenchido na
posição da tabela de geração de hash. Os demais valores que
colidiriam são anexados a essa cadeia como se fossem elos de
corrente. Cada novo valor é um novo elo adicionado. Com isso, cada
posição da tabela de geração de hash possuirá uma lista ligada de
valores, em que os valores que iriam colidir são armazenados um
após o outro na mesma posição. O principal impasse nesse método é
que, como cada posição da tabela possui uma lista atrelada com os
valores que colidiram, o tempo para gerar o valor hash será maior, e
também será demandado maior espaço de armazenamento para
criação das listas auxiliares para cada posição da tabela de geração
de hash (SOUZA, 2012).
No tratamento utilizando hash múltiplo, os dois valores que
colidiram recebem novas posições na tabela de geração do hash,
calculados a partir de uma função matemática, até que seja
encontrada uma posição livre na tabela. O principal impasse nesse
método é que ele é suscetível a sobrecarga, pois durante o processo
de geração do valor hash pode não existir um novo espaço livre na
tabela de geração (SENDIN, 1999; HASH TABLE..., [s. d.]).

PARA SABER MAIS

Para saber mais sobre o funcionamento das estruturas de dados criadas


como o tratamento de colisões em funções hash, acesse o projeto
Visualgo.net. No site é possível visualizar de maneira interativa como os
valores são armazenados nas estruturas de dados utilizadas nas funções
hash (HASH TABLE..., [s. d.]).

3.4 Quebra
As quebras, ou seja, ataques bem-sucedidos no campo das
funções hash, podem se basear nas colisões. Esse tipo de ataque
consiste na tentativa de um invasor em criar duas mensagens que
tenham o mesmo valor hash. Por exemplo, criam-se duas
mensagens: uma informa que será pago determinado valor para a
execução de alguma atividade e outra informa que o valor deverá ser
pago por executar a atividade. A primeira mensagem é apresentada à
vítima, pedindo que faça determinada ação. Posteriormente, a
primeira mensagem, é substituída pela segunda mensagem, que é
validada como inalterada pelo mesmo valor hash (disgest da
mensagem). Dessa forma, o invasor poderia exigir a compensação
financeira por vias legais (RFC 4270, 2005).

Outro ataque conhecido, que também é baseado em colisão, é o


ataque aos certificados digitais do tipo PKIX, em que o objetivo do
atacante é criar duas chaves públicas diferentes que levem para um
mesmo certificado. Mais à frente compreenderemos melhor o
funcionamento dos certificados digitais.

O ataque de dicionário também é uma técnica comum na


tentativa de adivinhação dos valores originais que deram origem a
valores hashes e é utilizado principalmente na tentativa de revelação
de senhas armazenadas em bancos de dados por funções hash. Ele
consiste na comparação de um grande volume de valores hash,
criados para senhas comuns, com a finalidade de encontrar, dentro
de uma base de dados, as senhas, com base em palavras conhecidas
do dicionário, onde se obtêm os correspondentes valores em hash
(ROUBO..., 2019).

Existem também ataques que utilizam uma base de dados


chamada de “tabela arco-íris”, em que um grande repositório de
valores hashes é utilizado para atacar o valor hash de uma senha. A
tabela arco-íris é uma biblioteca de senhas em texto sem formatação,
e os valores hash correspondem a toda e qualquer senha possível
(GILES, 2020). Com isso, um invasor pode obter uma senha, caso
tenha acesso a valor hash cadastrado em um banco de dados, sem
ter que quebrar a função hash. Para se proteger desse tipo de ataque,
um administrador de sistemas deve garantir que a tabela com as
senhas hash das senhas dos usuários nunca seja roubada. Além
disso, deve implementar mecanismos de bloqueio da conta caso a
senha seja repetidamente incorreta durante o processo de logon em
um sistema.

O ataque de força bruta também é uma forma de tentar obter a


quebra de um valor hash. A força bruta é utilizada através do poder
computacional, na tentativa de quebrar alguma propriedade da
função. O sucesso de um ataque dessa natureza depende do
tamanho do problema que deverá ser calculado. Logo, quanto maior a
quantidade de bits que uma função hash implementar, mais
complexo computacionalmente será executar o ataque. O tempo para
deduzir o valor do texto original, a partir de um valor hash também
será maior com o aumento da complexidade, o que tende a
inviabilizar o ataque (SENDIN, 1999).

IMPORTANTE
Além de seguir as boas práticas e utilizar senhas fortes, os sistemas de
senha que adotam as funções hash devem aplicar o SALT, que nada mais é
do que a adição de bits aleatórios de dados, a função hash. O SALT é
enviado juntamente com o texto sem formatação da senha do usuário, para
gerar o valor hash de uma senha que será armazenada em um banco de
dados. Isso garante que cada valor hash gerado seja exclusivo,
inviabilizando o ataque por tabela arco-íris e outros ataques de dicionário
(RFC 8146, 2017; GILES, 2020).

4 Principais algoritmos de hash


Os algoritmos mais comuns para execução das funções hash
criptográficas são os algoritmos das famílias message digest (MD) e
secure hash algorithm (SHA), esta mais importante e mais usada, de
acordo com Stallings (2014). As funções mais conhecidas dessas
famílias são apresentadas no quadro 1.

Quadro 1 – Principais funções das famílias MD e SHA

FUNÇÃO DOCUMENTAÇÃO

MD2 – Algoritmo de resumo da mensagem 2 RFC 1319

MD4 – Algoritmo de resumo da mensagem 4 RFC 1320

MD5 – Algoritmo de resumo da mensagem 5 RFC 1321

SHA1 – Algoritmo seguro de hash 1 RFC 3174

SHA224 – Algoritmo seguro de hash 2 (224 bits) RFC 3874

SHA256 – Algoritmo seguro de hash 2 (256 bits) RFC 6234

SHA384 – Algoritmo seguro de hash (384 bits) RFC 6234

SHA512 – Algoritmo seguro de hash 2 (512 bits) RFC 6234

Fonte: adaptado de Hashing... ([s. d.]).

Conforme o incremento da capacidade computacional, os


ataques às funções hash foram aumentando, de forma que os
algoritmos MD não são mais considerados seguros. Atualmente, os
algoritmos SHA são consideramos mais seguros que os MD. Mais
especificamente, os algoritmos SHA-256 até o SHA-512 são
considerados seguros e recomendados para uso. A última
atualização do National Institute of Standards and Technology (Nist),
em 2015, aprovou o SHA3 como um novo padrão para os algoritmos
para funções hash de criptografia, estendendo a família de funções
hash SHA (DWORKIN, 2015). Cabe informar que as funções hash de
criptografia SHA3 já eram utilizadas anteriormente nas
recomendações do Nist, como a RFC 6931, publicada em abril de
2013 (RFC 6931, 2013).

Um estudo de Gupta e Yadav (2015) analisou a performance das


funções hash chegando à conclusão de que o algoritmo SHA-512 é
mais seguro que o MD2, o MD4, o MD5, o SHA-160 e o SHA-256.
Contudo, o SHA-512 introduz um trade-off (relação de perda e ganho)
entre desempenho e segurança do algoritmo hash. Por meio da
avaliação, verificou-se que o tempo para validar valor hash é muito
alto quando comparado com os demais algoritmos. O estudo
apresenta uma combinação dos algoritmos MD e o SHA-512 como
um possível método de otimização em relação à velocidade e à
segurança (GUPTA; YADAV, 2015).

PARA PENSAR
Apesar da constante evolução dos algoritmos que implementam as funções
hash, além dos dispositivos de proteção como a adição do SALT em bancos
de dados de senhas de usuários, uma função hash não é inquebrável. Porém,
os dispositivos implementados têm a função de atrasar o processo de
quebra de uma função. Esse atraso adicionará dificuldades ao invasor na
tentativa de quebrar o algoritmo utilizado por meio dos ataques conhecidos.

Considerações finais
Neste capítulo, estudamos as funções de resumo hash,
entendemos como elas funcionam, seus requisitos, a questão da
colisão e os métodos que comumente são utilizados para tentar
executar a sua quebra. As funções hash são utilizadas em diversos
cenários da computação, aplicadas principalmente em conjunto com
algoritmos de criptografia. Em geral, as funções hash são utilizadas
principalmente para verificação da integridade e da autenticação de
usuários.

A propriedade de unidirecionalidade é benéfica à criptografia na


verificação da integridade dos dados. O trabalho de verificação da
integridade é custoso, do ponto de vista computacional, para os
algoritmos de criptografia, principalmente quando as mensagens são
grandes. A propriedade de resumo auxilia no tempo de validação de
um texto, em que o valor de hash (digest) tem um tamanho fixo,
independentemente do tamanho do texto original de entrada. Com
isso, é mais fácil validar um valor hash de uma mensagem do que
validar a integridade de uma mensagem inteira. Notadamente, as
funções hash também contribuem para viabilizar o uso das
assinaturas digitais, que serão vistas à frente.

Referências
DECODED: examples of how hashing algorithms work. Cheap SSL
Security, 2020. Disponível em:
https://cheapsslsecurity.com/blog/decoded-examples-of-how-
hashing-algorithms-work/. Acesso em: 26 mar. 2020.
DWORKIN, Morris J. SHA-3 Standard: permutation-bhsed Hash and
extendable-output functions. 2015. Disponível em:
https://csrc.nist.gov/publications/detail/fips/202/final. Acesso em: 30
mar. 2020.

FOROUZAN, Behrouz A. Comunicação de dados e redes de


computadores. São Paulo: McGraw-Hill, 2008

GILES. Rainbow table password attack: o que é e como você se


protege dele. Cyclonis, 24 mar. 2020. Disponível em:
https://www.cyclonis.com/pt/rainbow-table-password-attack-o-que-e-
e-como-voce-se-protege-dele/. Acesso em: 25 mar. 2020.

GUPTA, Smriti; YADAV, Sandeep Kumar. Performance analysis of


cryptographic hash functions. International Journal of Science and
Research (IJSR), v. 4, p. 2319-7064, 2015.

HASH TABLE (open addressing: linear probing, quadratic probing,


double hashing and closed addressing: separate chaining).
Visualgo.net, [s. d.]. Disponível em: https://visualgo.net/pt/hashtable?
slide=1. Acesso em: 26 mar. 2020.

HASHING functions. Octave.org, [s. d.]. Disponível em:


https://octave.org/doc/v4.2.1/Hashing-Functions.html. Acesso em:
26 mar. 2020.

RFC 4270. Attacks on cryptographic hashes in internet protocols.


Ietf.org, nov., 2005. Disponível em: https://tools.ietf.org/html/rfc4270.
Acesso em: 30 mar. 2020.
RFC 6931. Additional XML security URLs. Ietf.org., abr., 2013.
Disponível em: https://tools.ietf.org/rfc/rfc6931.txt. Acesso em: 27
mar. 2020.

RFC 8146. Adding support for salted password databases to EAP-


pwd. Ietf.org., abr., 2017. Disponível em:
https://tools.ietf.org/html/rfc8146. Acesso em: 30 mar. 2020.

ROUBO de senhas: conheça os métodos usados por hackers.


BluePex Control, Protect e Innovate, 2019. Disponível em:
https://bluepex.com.br/roubo-de-senhas/. Acesso em: 30 mar. 2020.

SENDIN, Ivan da Silva. Funções de hashing criptográficas.


Dissertação (Mestrado em Ciência da Computação) – Instituto de
Computação, Universidade Estadual de Campinas, Campinas, 1999.
Disponível em:
http://repositorio.unicamp.br/bitstream/REPOSIP/275900/1/Sendin_I
vandaSilva_M.pdf. Acesso em: 30 mar. 2020.

SOUZA, Jairo Francisco de. Hashing: estrutura de dados II. 2012.


Disponível em: http://www.ufjf.br/jairo_souza/files/2012/11/4-
Hashing-TratamentoColis%C3%A3o.pdf. Acesso em: 10 abr. 2020.

STALLINGS, William. Criptografia e segurança de redes: princípios e


práticas. 7. ed. São Paulo: Pearson, 2014

TANENBAUM, Andrew S.; WETHERAL, David. Redes de


computadores. 5. ed. São Paulo: Pearson, 2012.

TANENBAUM, Andrew S. Sistemas operacionais modernos. 4. ed.


São Paulo: Pearson, 2015.
Capítulo 6
Assinaturas digitais

A autenticidade de documentos é um tema muito importante


para situações em que exista a necessidade de confirmação de
autoria, principalmente para fins legais. Em um contrato, duas partes
lavram e assinam um documento, ou seja, redigem e assinam um
documento, dando fé de que este é verdadeiro e que expressa a
vontade de ambas as partes em um determinado acordo. Entretanto,
não basta que qualquer pessoa assine um documento. Para que os
documentos possuam validade legal, é necessário que o signatário (a
pessoa que assina) seja autorizado a representar a empresa ou uma
das partes, ou que seja o próprio dono do bem ou serviço que é
objeto do acordo (TANENBAUM; WETHERAL, 2012).

Em sistemas computacionais, as mensagens ou documentos


também podem ser assinados de forma digital, e assim como
aqueles que são assinados fisicamente, têm validade legal, se
puderem ser autenticados por uma autoridade de certificação.
Segundo Tanenbaum e Wetheral (2012), diferente dos documentos
físicos que são assinados em papel, nos sistemas computacionais é
necessário encontrar um método que permita que um usuário possa
assinar um documento de modo que, posteriormente, não possa ser
forjada sua assinatura ou que um documento assinado seja
modificado.

Essa verificação posterior é possível através dos sistemas de


assinatura digital. Observe que não podemos confundir um sistema
de assinatura digital com uma assinatura digitalizada, essa última se
trata apenas do ato de copiar uma assinatura em papel para uma
imagem ou quando um usuário assina à mão um documento
eletrônico escrevendo a sua assinatura. Os sistemas de assinatura
digital são mais complexos e utilizam a criptografia combinada às
funções de resumo hash para validarem a autenticidade e a
integridade de um documento firmado por uma assinatura digital
(TANENBAUM; WETHERAL, 2012).

Um sistema que se propõe a substituir assinaturas escritas à


mão é muito complexo. Em geral, para que uma mensagem possa
ser “assinada”, é necessário que (TANENBAUM; WETHERAL, 2012):

1. O receptor consiga validar a identidade do informada pelo


usuário que transmite a mensagem.

2. O transmissor, após o recebimento da mensagem, não possa


repudiar o conteúdo da mensagem, ou seja, alegar que não
enviou aquele conteúdo.

3. O receptor não tenha a possibilidade de inventar ele mesmo a


mensagem ou alterar o seu conteúdo.
Neste capítulo, estudaremos o funcionamento das assinaturas
digitais, como se dá o processo de integridade e autenticação, suas
vantagens e desvantagens. Além disso, vamos entender como o
processo de assinatura e verificação é apoiado pela criptografia
assimétrica.

1 Conceitos
Assinar um documento físico é algo comum, por isso estamos
familiarizados ao conceito. Logo, só assinamos um documento para
demonstrar que ele é de nossa autoria ou que foi aprovado por quem
o assina. A assinatura comprova, ao receptor de uma mensagem, que
foi o emissor que de fato a escreveu. Quando um usuário de uma
conta bancária assina uma folha de cheque, como no exemplo do
cheque demonstrado na figura 1, e o oferece como pagamento por
algum bem ou serviço, a pessoa que o receber descontará o cheque
em uma agência bancária. O banco, por sua vez, vai verificar se a
assinatura contida no cheque confere com a assinatura cadastrada
de forma digital em seu sistema. Se a assinatura for confirmada, ou
seja, a assinatura do cheque for igual à cadastrada no sistema, então,
o valor poderá ser pago ao detentor do cheque. De forma análoga ao
exemplo do cheque bancário, uma assinatura, verificada com
sucesso em um documento, é prova de que o documento é autêntico
(FOROUZAN, 2008).
Figura 1 – Exemplo de folha de cheque
assinada

Conforme apresentamos anteriormente, um message


authentication code (MAC) (ou código de autenticação de
mensagem) pode oferecer integridade e autenticação para
mensagens, utilizando uma chave simétrica preestabelecida entre as
duas partes de uma comunicação. Essa é uma forma de assinar uma
mensagem, porém as assinaturas digitais, discutidas aqui, abordam o
funcionamento de uma assinatura digital com base na criptografia
assimétrica, que utilizam um par de chaves (pública e privada).
Quando um usuário envia uma mensagem assinada, o usuário
receptor precisará validar a mensagem recebida para confirmar que
usuário de origem é o autor. O documento pode ser assinado e
validado digitalmente, utilizando o par de chaves pública e privada do
usuário. Para agilizar o processo de assinatura, podemos assinar
apenas o hash da mensagem. Dessa forma, a função hash
combinada à criptografia de chave pública e privada (assimétrica)
funcionam como assinatura para esse documento. O objetivo do
valor hash gerado será garantir que o texto assinado não foi alterado
(FOROUZAN, 2008).

Quando assinamos um documento fisicamente, a assinatura é


incorporada ao documento, assim como fazemos em um cheque ou
em um contrato. Porém, em documentos digitais, a assinatura é
criada para um determinado documento, por inteiro, e a assinatura
gerada para aquele documento é enviada em um arquivo separado.
Com isso, o emissor da mensagem precisará enviar dois arquivos, o
documento e a assinatura gerada para ele. O destinatário vai receber
os dois arquivos (documento e assinatura) e deverá utilizá-los em
conjunto para validar se de fato o documento foi escrito pelo emissor.
O processo de validação vai fornecer apenas a informação se a
verificação foi bem-sucedida ou se ela falhou. Caso a verificação
falhe, o documento deverá ser rejeitado (FOROUZAN, 2008).

A verificação da assinatura, no exemplo do cheque, é feita


através da inspeção visual da assinatura do cheque e da assinatura
cadastrada no cartão de autógrafos do banco (cartão de assinaturas
do cliente, conforme é demonstrado na figura 2 ). Se forem idênticas,
o documento é autentico, caso contrário, o cheque não é pago, sendo
devolvido como uma possível fraude. Nesse método, o banco precisa
ter uma cópia da assinatura previamente cadastrada para a
comparação.
Figura 2 – Exemplo de um cartão de autógrafos
bancário

Na assinatura digital, o receptor da mensagem receberá a


mensagem e uma assinatura específica para aquele documento,
portanto, nenhuma cópia da assinatura é armazenada pelo receptor.
O receptor deverá, portanto, aplicar a técnica de verificação
combinando a mensagem e a assinatura gerada para verificar a sua
autenticidade. Dessa forma, cada documento assinado terá uma
assinatura diferente, estabelecendo uma relação de 1/1 (um para
um). No exemplo do cheque, uma mesma assinatura pode validar N
número de cheques, uma relação de 1/N (um para N) e uma cópia do
documento pode ser diferenciada do arquivo original. Porém, em uma
assinatura digital, não existe essa diferença. Com isso, se um usuário
enviar um documento solicitando um pagamento, caso ele seja
interceptado por um invasor, ele poderia replicar a solicitação
realizando uma retransmissão. Para evitar esse tipo de ataque se
pode inserir um fator de tempo nas mensagens, uma espécie de
registro de horas informando a validade da mensagem (FOROUZAN,
2008).
Em uma assinatura física, a “chave privada” pertence ao
signatário, a assinatura pessoal de quem firma o documento. A
“chave pública” é o cartão de autógrafo do cliente armazenado no
banco, dessa forma, apenas o banco e mais ninguém poderá utilizá-la
para verificar um documento e compará-la com a assinatura original
(FOROUZAN, 2008). Para tornar essa comparação pública, o usuário
deve ter uma firma reconhecida (assinatura reconhecida) em algum
cartório, para que um documento assinado possa ser verificado e
autenticado publicamente. Com uma assinatura digital, o usuário
signatário utiliza sua chave privada e aplica o algoritmo para assinar
o documento. O usuário receptor, por sua vez, utilizará a chave
pública do signatário (usuário que assinou o documento) para
verificar o documento (FOROUZAN, 2008).

IMPORTANTE
Não devemos utilizar uma chave simétrica para assinar um documento e
verificar a assinatura, justamente porque a chave secreta é conhecida entre
as duas partes, portanto não é possível determinar qual das partes assinou o
documento (FOROUZAN, 2008).

2 Funcionamento
Um documento pode ser assinado por inteiro, quando a
assinatura é gerada para todo o documento de “ponta a ponta”, ou
pode-se assinar o digest do documento, ou seja, podemos assinar
apenas o resultado da função hash gerada para o documento. A
forma mais fácil de se assinar o documento é a sua assinatura
integral, porém, esse método é o menos eficiente. Dessa forma, as
soluções de mercado utilizam a assinatura do digest da mensagem,
pois, apesar de mais complexo, é mais rápido (FOROUZAN, 2008).

A figura 3 ilustra o processo de assinatura e validação, realizada


de forma completa para uma mensagem. Note que o processo é
relativamente simples e similar ao processo de criptografia
assimétrica, apenas invertendo-se a ordem das chaves. A mensagem
é assinada com a chave privada do usuário e validada com a chave
pública do emissor da mensagem (FOROUZAN, 2008).

Figura 3 – Assinatura de uma mensagem

Fonte: adaptado de Forouzan (2008, p. 973).

Em um sistema de criptografia que busque a confidencialidade,


utilizamos as chaves pública e privada do destinatário de uma
mensagem, ou seja, utilizamos a chave pública do receptor da
mensagem para criptografar a informação. Apenas o destinatário
poderá descriptografar a mensagem, com sua chave privada. Em um
sistema de assinatura digital, utilizamos a chave pública e a chave
privada da origem da mensagem, logo, o usuário que enviará a
mensagem utiliza sua chave privada, e qualquer usuário poderá
validar por meio de sua chave pública se a mensagem é autêntica
(FOROUZAN, 2008).

Outra forma mais eficiente de garantir a autenticação e a


integridade de uma mensagem é assinar apenas o digest. Conforme
estudamos anteriormente, podemos gerar um digest de um
documento através de uma função de resumo hash. Com isso, o
destinatário da mensagem deverá verificar o hash para validar sua
autenticidade e integridade. A figura 4 mostra o processo de
assinatura e verificação do digest uma mensagem (FOROUZAN,
2008).

Figura 4 – Processo de assinatura do digest de


uma mensagem

Fonte: adaptado de Forouzan (2008, p. 974).

No processo de assinatura, Alice gera um digest para sua


mensagem e assina apenas o digest com sua chave privada. Ao
receber a mensagem, Bob executará o processo de verificação
gerando novamente o digest para a mensagem recebida. Depois, Bob
vai descriptografar assinatura recebida, com a chave pública de Alice.
Bob vai comparar os dois valores de hash. Se forem iguais, a
mensagem é aceita, caso contrário, a mensagem é rejeitada
(FOROUZAN, 2008).

NA PRÁTICA
Os métodos de autenticação de mensagens não necessitam de uma função
hash para funcionar, porém, são lentos para executar a verificação de textos
grandes. Dessa forma, as funções hash são utilizadas para gerar
representações compactas e únicas das mensagens, com o objetivo de que
o valor hash da mensagem (digest) seja assinado. Esse processo possibilita
que as mensagens possam ser assinadas e verificadas mais rapidamente
(SENDIN, 1999).

2.1 Ciclo de vida de uma assinatura digital


Um processo oficial de assinatura digital envolve: um signatário
(dono da assinatura); uma entidade que vai criar a assinatura digital
que, consequentemente, será responsável por sua validação; um
mediador, que é uma pessoa ou entidade que decide sobre uma
eventual disputa (um tribunal); além de um provedor de serviços de
confiança, que ajuda as entidades de certificação a construir uma
relação de confiança entre o assinante e o verificador. Esses
provedores são responsáveis por suporte, emissão de assinaturas,
entre outros serviços relacionados à autenticação das assinaturas e
dos certificados digitais (BRASIL, 2008).

O ciclo de vida de uma assinatura digital é controlado pelos


provedores de serviços e compreendem algumas etapas (BRASIL,
2008):

Criação: onde é criada a assinatura do usuário, essa assinatura


compreende a geração da chave pública e da chave privada do
usuário.

Verificação/validação: onde o provedor de serviços promove a


verificação de uma assinatura digital emitida para um de seus
clientes.

Armazenamento: trata-se da guarda segura das assinaturas,


tanto pelo usuário quanto pela autoridade certificadora, um
usuário deve zelar pelo documento da assinatura digital e de sua
chave privada para que um documento não seja assinado por
terceiros.

Revalidação do processo: onde o provedor de serviços emite


uma nova assinatura, quando ocorrer uma expiração da
assinatura ou a revogação da assinatura.

PARA SABER MAIS

Uma autoridade certificadora do tempo (ACT) é, na prática, uma autoridade


que pode emitir uma assinatura digital a um usuário em um determinado
tempo (BRASIL, 2017). A Infraestrutura de Chaves Públicas Brasileira (ICP
Brasil) disponibiliza uma relação de provedores de serviços de confiança,
autorizados a emitir assinaturas digitais válidas para a raiz de certificação do
Brasil.

3 Vantagens e desvantagens
As principais vantagens da assinatura digital estão ligadas à
desmaterialização de documentos físicos, uma vez que a firma de um
documento através de uma assinatura digital possui validade legal. A
transmissão de um documento via rede de dados é de fato muito
mais rápida do que a tramitação de papéis por correio ou portadores,
logo, essa também é uma clara vantagem das assinaturas digitais.
Porém, do ponto de vista de tecnologia, existem outras vantagens e
desvantagens em seu modo de execução (SINGH; IQBAL; JAISWAL,
2015).

Quando assinamos uma mensagem utilizando a criptografia


simétrica, através do MAC, temos uma maior velocidade na execução
da criptografia, justamente pelo uso da chave secreta previamente
compartilhada entre os usuários de uma comunicação. Entretanto,
nesse método, não é possível obter a irretratabilidade (não repúdio)
entre as partes, pois ambos possuem a mesma chave. Esse
problema é contornado com o uso das assinaturas digitais, pois com
a utilização da criptografia assimétrica as partes podem assinar com
suas chaves privadas, e a verificação é executada através da
validação pelo processo de descriptografia aplicado com a chave
pública do usuário emissor da mensagem (SINGH; IQBAL; JAISWAL,
2015).
IMPORTANTE
Assinar um texto extenso é uma tarefa de grande custo computacional. O
processo de criptografia assimétrico é muito mais lento que o processo de
criptografia simétrico. Para contornar a baixa velocidade, os processos
atuais de assinatura digital adicionam a assinatura ao digest da mensagem.
Esse processo traz uma melhoria de desempenho ao processo de assinatura
e validação, porém aumenta a complexidade de execução, dada a adição de
uma função de resumo hash ao processo de assinatura e verificação
(SINGH; IQBAL; JAISWAL, 2015).

Diferente de uma assinatura registrada em um cartório de notas


(firma aberta), as assinaturas digitais, para que tenham validade legal,
devem ser adquiridas em uma empresa de certificação válida, uma
autoridade certificadora (AC). Em geral, essas assinaturas digitais
possuem validade mínima de 1 ano, e devem ser recontratadas
conforme a periodicidade estabelecida pela AC. É importante
ressaltar que as assinaturas não são reaproveitadas. Se a assinatura
digital estiver embutida em um sistema, como é o caso de
assinaturas específicas para empresas (e-CNPJ), os sistemas
deverão ser atualizados quando ocorrer a emissão de uma nova
assinatura. Também é comum que ocorram problemas de
compatibilidade entre as diversas plataformas que oferecem os
serviços de assinatura digital. O processo de geração e verificação
das assinaturas digitais também introduzirá uma latência na
comunicação, afinal a assinatura precisa ser validada
constantemente (SINGH; IQBAL; JAISWAL, 2015).

Considerações finais
O processo de assinatura digital é vital para a garantia da
autenticação e da integridade para mensagens trocadas entre duas
partes em uma comunicação eletrônica ou uma emissão de um
documento assinado. O funcionamento das assinaturas é possível
principalmente pelo uso dos algoritmos de criptografia associados ao
processo de assinatura e verificação. Entendemos também que o uso
das funções de resumo hash, apesar de mais complexas, tornam o
processo de assinatura e verificação mais rápidos.

Neste capítulo, verificamos também as vantagens e as


desvantagens do uso das assinaturas digitais. Fica evidente que a
utilização das assinaturas digitais é de extrema importância para a
validação da autenticidade de um uma mensagem e que esse
processo atende de forma segura a validade dos documentos
assinados. Contudo, a fragilidade de uma assinatura digital está
ligada a forças e fraquezas dos algoritmos de criptografia e funções
hash escolhidas para a construção do sistema de assinatura e
validação. Portanto, quanto mais fortes e atuais forem os
componentes de criptografia e hash envolvidos no processo, mais
segura será a assinatura gerada.

Referências
BRASIL. Assinaturas digitais na ICP Brasil. Versão1.0. Instituto
Nacional de Tecnologia da Informação, 2008. Disponível em:
http://www.iti.gov.br/images/repositorio/consulta-
publica/encerradas/DOC-ICP-15-Assinaturas_digitais_na_ICP-
Brasil.pdf. Acesso em: 18 abr. 2020.

BRASIL. Entes da ICP-Brasil. Instituto Nacional de Tecnologia da


Informação, 2017. Disponível em: https://www.iti.gov.br/icp-brasil/57-
icp-brasil/76-como-funciona. Acesso em: 20 abr. 2020.

FOROUZAN, Behrouz A. Comunicação de dados e redes de


computadores. São Paulo: McGraw-Hill, 2008

SENDIN, Ivan da Silva. Funções de hashing criptográficas.


Dissertação (Mestrado em Ciência da Computação) – Instituto de
Computação, Universidade Estadual de Campinas, Campinas, 1999.
Disponível em:
http://repositorio.unicamp.br/bitstream/REPOSIP/275900/1/Sendin_I
vandaSilva_M.pdf. Acesso em: 30 mar. 2020.

SINGH, Shivendra; IQBAL, Md Sarfaraz; JAISWAL, Arunima. Survey on


techniques developed using digital signature: public key cryptography.
International Journal of Computer Applications, v. 117, n. 16, 2015.

TANENBAUM, Andrew S., WETHERAL, David. Redes de


computadores. 5. ed. São Paulo: Pearson, 2012.
Capítulo 7
Certificados digitais

Ao utilizar uma chave pública para autenticar uma mensagem, é


necessário confiar que ela de fato pertence à identidade do emissor
da mensagem e que não se trata de uma fraude, quando um impostor
tenta se passar pelo emissor. O certificado digital existe para proteger
os usuários quanto às identidades e, em termos práticos, ele é um
registro eletrônico, formado por um conjunto de dados que vai
distinguir uma entidade tornando-a uma chave pública, emitida para
pessoas, empresas, equipamentos ou serviços utilizados em rede.
Esse certificado é utilizado para garantir a confidencialidade e a
autenticidade.

Um certificado digital é um documento de informações similar a


uma cédula de identidade (RG), cadastro de pessoa física (CPF) ou
um passaporte, documentos que visam certificar a identidade de uma
pessoa, armazenam todas as informações importantes para
identificar um usuário (nome completo, data de nascimento, filiação,
etc.).

Assim como nos documentos físicos, cujas autoridades do


governo são responsáveis pela sua emissão, revogação e
administração, um certificado digital também possui um órgão
competente que manterá esse conjunto de dados. Essa autoridade é
conhecida como autoridade de certificação (AC) e vai controlar todos
os certificados, devendo efetuar a gestão dos dados e dos
certificados e, inclusive, garantir que os certificados inválidos, ou seja,
que não são mais seguros, sejam eliminados. Os certificados
inválidos são revogados e armazenados em uma lista de certificados
revogados (LCR), dessa forma, um certificado revogado não poderá
mais ser reutilizado.

Outro ponto importante a ser abordado é a tecnologia


blockchain, que é utilizada principalmente para certificar e registrar
transações financeiras em sistemas de criptomoedas. Diferente de
um certificado digital, a blockchain não requer uma autoridade
certificadora para validar a autenticidade de uma transação.

Neste capítulo, estudaremos os conceitos e o funcionamento


dos certificados digitais. Estudaremos também os conceitos de
blockchain, suas vantagens e desvantagens, o conceito de
autenticação com integridade e registro por blockchain.

1 Conceitos
Um certificado digital, de forma resumida, é uma forma de prover
a autenticação de um documento, mensagem ou serviço através de
uma assinatura digital em ambientes computacionais. Por meio da
certificação digital, tanto pessoas físicas quanto jurídicas podem
executar transações entre sistemas e serviços com
confidencialidade, integridade, autenticação e o não repúdio. Para
obter um certificado digital com validade jurídica, uma pessoa ou
empresa precisará contratar o serviço de uma autoridade de
certificação que pertença a uma infraestrutura de chaves públicas (O
QUE É..., [s. d.]).

Na prática, um certificado digital é um arquivo eletrônico que


funcionará como uma assinatura digital com validade jurídica. O
provedor de serviços emitirá o certificado digital para ele funcione
como uma espécie de identidade eletrônica e seja empregado em
ambientes virtuais. Com isso, o detentor do certificado digital emitido
poderá assinar documentos, serviços e acessar sistemas que
estejam preparados para autenticar-se com um certificado digital,
como sistemas da Receita Federal e sites vinculados ao governo
(BRASIL, 2015).

Os formatos comerciais de um certificado digital são (O QUE É...,


[s. d.]):

e-CFP: usado por pessoas físicas para enviar e consultar


declarações de imposto de renda e demais documentos que
precisam ser assinados de forma digital, geralmente é vendido
em formato de arquivo digital ou em um hardware como token
(uma espécie de pendrive).

e-CNPJ: tem as mesmas finalidades e formatos que um


certificado que um e-cpf, porém destina-se a pessoa jurídica
(empresas). O certificado e-cnpj pode ser emitido para o
representante legal da empresa cadastrado na receita federal.
NF-e: é um certificado exclusivo para que uma empresa possa
emitir notas fiscais eletrônicas.

SSL: o secure socket layer é um certificado digital emitido para


troca segura de informações entre os clientes e o site ou sistema
de uma empresa. De maneira simplista, um certificado SSL serve
para garantir que um site ou sistema realmente seja autêntico,
minimizando o risco de ser um site falso.

A figura 1 mostra os detalhes de um certificado SSL emitido para


o site www.senac.br.

Figura 1 – Certificado SSL para site

Também podemos consultar os detalhes técnicos do certificado


emitido para o site do Senac.br, assim como os algoritmos de
criptografia utilizados, os detalhes dos certificados e a cadeia de
certificação (hierarquia das autoridades de certificação).

Na figura 2, verificar as informações gerais do certificado, data


de emissão, para quem o certificado foi emitido e a data de validade.

Figura 2 – Informações gerais do certificado


digital
Na figura 3, na aba de detalhes do certificado, são exibidos os
parâmetros de criptografia do certificado, como o algoritmo de hash
empregado na assinatura (SHA256), o algoritmo de chave pública
utilizada (RSA), emissor, validade, requerente e demais parâmetros.

Figura 3 – Detalhes do certificado

Por fim, na figura 4, é apresentada a cadeia de certificação, que


tem como raiz a autoridade certificadora DigiCert, a autoridade
certificadora intermediária AC RapidSSL e por último o certificado
emitido para o endereço *.senac.br.

Figura 4 – Caminho de certificação

1.1 Autoridade de certificação (AC)


Autoridade de certificação é a forma mais segura de anunciar as
chaves públicas dos usuários. Em termos práticos, a autoridade de
certificação mantém uma lista atualizada de maneira dinâmica para
validar os certificados emitidos. Cada usuário cria uma chave privada
e anuncia uma chave pública na lista da autoridade certificadora. É
responsabilidade da autoridade certificadora verificar a identidade do
usuário que requer um certificado, dessa forma, as autoridades
certificadoras solicitam documentos para que o usuário comprove a
sua identidade. Vários controles adicionais podem ser
implementados pelas autoridades de certificação. Um controle que
geralmente é adicionado consiste na inclusão de uma espécie de
carimbo de tempo, na verificação de uma assinatura, com isso as
horas são inseridas na validação do certificado, para impedir a
interceptação e a reutilização/modificação de uma resposta assinada
por uma autoridade certificadora (FOROUZAN, 2008).

A finalidade das autoridades de certificação é efetuar o


reconhecimento das chaves púbicas emitidas para seus usuários.
Dessa forma, uma AC, geralmente, é uma organização estadual,
federal ou privada com autorização, que irá vincular uma chave
pública de uma identidade (pessoa física ou jurídica) a uma entidade
que executará a certificação. Uma AC tem também uma chave
pública que é reconhecida por uma AC superior, geralmente, uma
organização federal. Com isso, a sua chave pública não pode ser
falsificada. Uma AC precisa manter uma Infraestrutura de chaves
públicas para poder emitir, manter e validar os certificados de seus
clientes. Para impedir que o próprio certificado seja forjado por um
invasor, a AC assina o certificado com sua chave privada. Com isso,
os usuários podem fazer um upload do certificado assinado. Assim,
qualquer usuário pode baixar o certificado assinado e usar a chave
pública da autoridade de certificação e consequentemente extrair a
chave pública do usuário que realizou o upload de seu certificado
(FOROUZAN, 2008). Esse processo de controle de chaves públicas é
demonstrado na figura 5.

Figura 5 – Controle de certificados por uma AC

Fonte: adaptado de Forouzan (2008, p. 988).

Qualquer usuário poderá baixar o certificado assinado por uma


autoridade de certificação e utilizar a chave pública da AC para extrair
a chave pública de um de seus usuários cadastrados. Esse fluxo de
geração da chave pública para um usuário e o seu consequente
anúncio público são demonstrados na figura 6.
Figura 6 – Processo de requisição e anúncio de
chave pública

Fonte: adaptado de Forouzan (2008, p. 988).

Apesar de resolver o problema da distribuição de chaves


públicas e de remover a dúvida de quem é a identidade real do
emissor de uma chave pública, evitando os problemas com fraudes
de identidades, existe outro impasse na geração dos certificados.
Cada autoridade de certificação pode gerar seus certificados em
formatos diferentes. Para resolver esse impasse, foi necessário que
as autoridades certificadoras utilizassem um formato universal. O
formato adotado foi proposto pela International Telecommunication
Union (ITU) (em português, União Internacional de
Telecomunicações), denominado X.509.

2 Blockchain
O blockchain (em português, cadeia de bloco) ficou
popularmente conhecido com o advento das criptomoedas. A mais
conhecida é a bitcoin. Com a estrutura de blockchain é possível
garantir a segurança das entradas financeiras ou dos registros de
transações realizadas pelos usuários dos sistemas de criptomoedas.
Cada valor transacionado pelos usuários das criptomoedas é
assinado digitalmente utilizando os métodos criptográficos já
mencionados. A assinatura digital de cada valor transacionado em
um sistema de criptomoedas possibilita verificar a integridade e
autenticação dos dados transacionados. Logo, o objetivo de utilizar
uma estrutura de blockchain é garantir que ninguém adultere
qualquer valor dentro da cadeia de blocos de transações executadas,
daí o nome blockchain. Se a verificação dos blocos da cadeia de
transações é validada com sucesso, as transações podem ser
consideradas íntegras (FORMIGONI FILHO; BRAGA; LEAL, 2018;
ZHENG et al., 2018).

Similar ao modo de criptografia de bloco encadeada, ou CBC –


cipher block chaining, os registros de transações que são assinadas
na blockchain executam a criptografia de forma distribuída entre os
blocos, criando uma dependência entre eles para validação da
integridade da informação. Em blockchain, esses blocos estão
distribuídos através da infraestrutura computacional do sistema.
Cada computador que executará a validação de uma transação é
conhecido como um nó que assina parte da transação. Além disso,
várias outras camadas de segurança e criptografia são adicionadas
ao sistema, para que os nós possam fornecer um consenso, a
qualquer momento, sobre o estado de um registro de transação, ou
seja, se a transação é de fato autêntica (FORMIGONI FILHO; BRAGA;
LEAL, 2018; ZHENG et al., 2018).

Supondo um cenário em que uma movimentação financeira


precisa ser validada por uma blockchain, os nós deverão validar e
verificar o histórico dessa transação. O computador de cada usuário
de blockchain é também um nó dentro da cadeia. Então, para garantir
que a transação não seja fraudulenta, os nós devem chegar a um
consenso sobre o histórico da transação e, posteriormente, validar ou
não a assinatura da transação. Após uma validação bem-sucedida,
isto é, a transação é autenticada, ela será aceita e incorporada a um
bloco pertencente à cadeia do blockchain. Diferente dos certificados
digitais, esse modelo de validação entre os nós permite que uma
blockchain funcione de forma distribuída sem a necessidade de uma
autoridade central. Assim, em blockchain, não existe uma autoridade
certificadora com a função de validar quais transações são
autênticas e quais não são (FORMIGONI FILHO; BRAGA; LEAL, 2018;
ZHENG et al., 2018).

PARA SABER MAIS

A bitcoin foi criada em 2008 por um grupo de programadores que combinou


várias tecnologias, para criar um sistema de caixa eletrônico completamente
descentralizado, que não dependia de nenhuma autoridade central para
emitir moedas ou validar as transações entre os clientes (HELLANI et al.,
2019). Para saber mais sobre a história da bitcoin, assista ao documentário
Bitcoin: o fim do dinheiro como conhecemos (2015).

2.1 Autenticação, integridade e registro


Em uma blockchain, os dados são estruturados de forma que as
transações executadas são armazenadas em uma lista ordenada e
ligada ao nó anterior, criando um sistema de registro distribuído, onde
um grupo de nós dá origem a um bloco na cadeia. A estrutura de um
bloco se divide em duas partes. A primeira é um cabeçalho com as
informações em um bloco, e a segunda parte armazena as
informações a respeito das transações contidas no respectivo bloco.
Com isso, é possível realizar uma associação entre os endereços de
origem e destino das transações. Cada nó e bloco possui uma
identificação própria gerada por uma função de resumo hash
(CHICARINO et al., 2017).

Esse valor hash é armazenado no cabeçalho do bloco, que


possui um campo específico para armazenar o hash do bloco
imediatamente anterior, formando uma espécie de elo de corrente
entre os blocos. A partir dessa ligação entre os blocos, outro hash é
obtido, combinando o hash de cada bloco ao seu antecessor. Através
dessa combinação entre os blocos, se qualquer bit do bloco anterior
for alterado, o hash do bloco à frente vai mudar, sendo necessário que
o valor hash de todos os blocos descendentes (filhos), conectados,
precisem ser recalculados. Esse cálculo é uma tarefa dispendiosa do
ponto de vista computacional e implica que uma longa cadeia de
blocos descendentes seja inalterada para que os blocos sejam
validados. Essa imutabilidade garante a segurança das transações
armazenadas, do ponto de vista de integridade e autenticidade
(CHICARINO et al., 2017).

De forma resumida, o cabeçalho consiste em um conjunto de


metadados (informações referenciais sobre os dados) contendo no
mínimo (CARVALHO, 2018):
Hash do bloco anterior, que visa garantir a interligação entre os
blocos e permite detectar alterações em qualquer ponto da
estrutura da blockchain.

O valor hash do bloco, obtido por meio da árvore Merkle.

O timestamp (em português, carimbo de tempo), que registra


data e hora e que cada novo bloco foi adicionado.

O nonce, que é um identificador único para cada bloco.

A raiz da árvore Merkle, que é obtida através do resumo de todas


as transações adicionadas a um bloco.

Uma árvore Merkle é utilizada para resumir e averiguar a


integridade de dados em grandes volumes. Em uma estrutura de
blockchain, tem a função de sumarizar todos os registros presentes
em um bloco, criando uma espécie de impressão digital de todos os
registros pertencentes a um bloco. Diferente de uma estrutura de
dados convencional de uma árvore (da raiz até as folhas), a
representação de uma árvore Merkle acontece de forma oposta, ou
seja, essa estrutura é construída por meio de repetidas submissões
de pares dos nós filhos de hashes, até que reste somente um único
nó raiz, o bloco pertencente à cadeia (CARVALHO, 2018).

A figura 7 exemplifica essa estrutura. Observando os registros


nos blocos, na base da árvore temos os nós filhos (as folhas da
árvore), cada um deles é submetido a uma função hash que é
combinada ao seu nó par. O resultado da combinação dos resultados,
combinado às informações do próximo nó, resulta no hash do nó
superior, um nó pai. Seguindo o mesmo princípio, os dois nós
adjacentes, “pais” dos nós filhos (folhas da base), são combinados
por uma função hash, dando origem ao nó raiz. Cabe destacar que a
árvore Merkle é binária, portanto, sempre serão combinados pares de
nós filhos para dar origem a um nó pai.

Figura 7 – Estrutura da árvore Merkle

Fonte: adaptado de Carvalho (2018, p.27)

Através da tarefa de validação entre os nós, cada nó filho (folha


da árvore) consiste no resultado de uma função hash para o
respectivo registro e a raiz. Com qualquer alteração da hash raiz,
todos os ramos são também alterados de forma conjunta, o que
provocará um erro de validação no próprio bloco e no bloco mais à
frente. Essa propriedade, em conjunto com a validação distribuída
efetuada entre os blocos, garante a imutabilidade de qualquer
informação registrada em uma estrutura de blockchain, alcançando
assim o critério de imutabilidade, respeitando o não repúdio e a
integridade dos dados (CARVALHO, 2018).
Quando uma nova transação é realizada em um nó de um bloco,
ela precisa ser validada pela blockchain. Quando a transação é
validada, significa que pode ser incorporada a um bloco. Porém, antes
de ser incorporada, será mantida em uma estrutura temporária
chamada de pool (piscina). No pool, o nó determina as transações
que serão incorporadas ao bloco, para que sejam submetidas à
criação de uma nova árvore Merkle e depois para a validação pelo
mecanismo de consenso, que resultara na validação do bloco. A
partir de um bloco formado, todos os nós da estrutura de blockchain
são notificados e inicia-se um processo de autenticação pelos
demais nós (CARVALHO, 2018).

IMPORTANTE
O processo de autenticação de um novo bloco, incorporado a uma estrutura
de blockchain, utilizada para criptomoedas, é conhecido como mineração
(CARVALHO, 2018).

Em uma estrutura de blockchain, o mecanismo de consenso


decide qual é próximo nó que vai se tornar um bloco. Essa definição
surgiu pela adaptação aos problemas dos generais bizantinos, que
consistia na busca de um consenso em que “n” generais de um
exército deviam concordar mutuamente sobre um plano de ataque,
através de mensageiros. Entretanto, se “z” número de generais são
traidores e tentam boicotar o ataque através da checagem da
confirmação, dois terços dos generais, pode-se determinar quem é o
general traidor. O problema de determinar um nó inválido na
blockchain é similar ao problema dos generais bizantinos, em chegar
a um consenso sobre qual é o general traidor. A estrutura de
blockchain utiliza um algoritmo de consenso que busca, por meio de
seu sistema distribuído, identificar o agrupamento de nós que se
tornara um novo bloco e eles que não são confiáveis entre os seus
participantes (DIAS, 2019).

O registro por blockchain garante que não existam registros


duplos. A informação, uma vez registrada e validada para todos os
nós, não pode ser mais negada (repudiada), a alteração de uma base
também não é mais possível. Com isso, novos registros são
adicionados aos nós, que darão origem a novos blocos (elos da
corrente), garantindo a integridade dos dados. A autenticidade é
garantida pelo processo de assinatura digital. Logo, uma estrutura de
blockchain pode ser utilizada para obter-se autenticidade, integridade
e registro.

PARA PENSAR
Uma blockchain pode substituir os cartórios convencionais, para registro de
documentos, ou até mesmo as autoridades certificadoras?

2.2 Vantagens e desvantagens


Em geral, as estruturas de blockchain são construídas de forma
distribuída e funcionam, em temos práticos, como um livro contábil
aberto e distribuído. Todas as informações registradas são
armazenadas nos blocos de dados em ordem cronológica. Podemos
observar grandes vantagens e aplicabilidade da blockchain, pois seu
sistema provê a confiança entre os seus usuários sem a necessidade
de uma autoridade intermediária. Porém, o formato descentralizado
traz consigo algumas desvantagens ligadas à eficiência e à
complexidade computacional de sua execução, além da crescente
demanda por espaço de armazenamento (VANTAGENS..., [s. d.]).

Notadamente, as vantagens das blockchain podem ser


destacadas como:

a distribuição dos nós, que geralmente possuem milhares de


participantes, sendo resistentes a falhas entre eles, uma vez que
o sistema está distribuído;

a imutabilidade das informações, o que garante a integridade, a


autenticidade e o registro das informações.

As principais desvantagens podem ser, de certa forma,


antagônicas às vantagens, como a imutabilidade. Se uma informação
errada for registrada e validada pelos blocos, dificilmente poderá ser
modificada, pois isso exigiria autenticar todos os blocos da cadeia.
Os algoritmos de consenso são muito ineficientes, o processo de
mineração em bitcoins é um exemplo do desperdício de recursos,
pois, somente o usuário que finalizar a mineração primeiro é
remunerado, ou seja, se dois usuários tentam minerar um mesmo
bloco, somente o que finalizar primeiro é pago. A tarefa de mineração
é extremamente competitiva e dispendiosa do ponto de vista
computacional. A questão do armazenamento de dados também é
uma grande desvantagem, pois cada vez mais a estrutura de
blockchain irá crescer e, para garantir o registro histórico de suas
transações, os volumes de informações armazenadas também
crescerá (VANTAGENS..., [s. d.]).

Considerações finais
Neste capítulo, foram apresentados os conceitos iniciais
relacionados aos certificados digitais. Entendemos como uma
autoridade de certificação divulga as chaves públicas de seus
usuários, quais tipos de certificados podem ser emitidos e para quais
finalidades, como o certificado SSL utilizado para páginas de website
e sistemas ou o e-CPF para pessoas físicas. Cabe relembrar que o
processo de certificação elimina a principal dúvida envolvida em uma
assinatura digital, que é garantir que a chave pública utilizada para
assinatura de um documento ou mensagem, de fato, pertence a uma
identidade em questão.

Compreendemos também que a tecnologia blockchain é uma


abordagem atual e que pode garantir a autenticidade, a integridade e
o registro de transações, de forma não centralizada, ou seja, não
requer uma autoridade central para certificar as transações. O
blockchain é utilizado principalmente para certificar e registrar
transações financeiras em sistemas de criptomoedas. Porém, sua
aplicabilidade vai além das criptomoedas, pode inclusive substituir
sistemas antigos, utilizados para o registro de documentos em
cartórios. Atualmente, alguns serviços já começaram a ser oferecidos
com base na estrutura de blockchain, o primeiro recém-nascido
registrado por uma blockchain no Brasil ocorreu em 2019, totalmente
on-line, através do sistema da IBM no estado do Rio de Janeiro
(ANTUNES, 2019).

Referências
ANTUNES, Flávia. Nasce o primeiro bebê registrado de forma digital
no Brasil. Bebe.com.br, 2019. Disponível em:
https://bebe.abril.com.br/familia/nasce-o-primeiro-bebe-registrado-
de-forma-digital-no-brasil/. Acesso em: 11 maio 2020.

BRASIL. Sistema de certificação digital do Serpro. Serpro, 2015.


Disponível em: https://certificados.serpro.gov.br/arcorreiosrfb/.
Acesso em: 5 maio 2020.

CARVALHO, Leonardo Rodrigues. Tecnologia blockchain e as suas


possíveis aplicações no processo de comunicação científica. 2018.
95 f., il. Trabalho de Conclusão de Curso (Bacharelado em
Biblioteconomia) – Universidade de Brasília, Brasília, 2018.

CHICARINO, Vanessa R. L. et al. Uso de blockchain para privacidade e


segurança em internet das coisas. Livro de minicursos do VII
Simpósio Brasileiro de Segurança da Informação e de Sistemas
Computacionais. Brasília: SBC, 2017. p. 28.

DIAS, Rui Pedro das Neves. Análise de plataformas blockchain.


Dissertação (Mestrado em Engenharia Informática) – Faculdade de
Ciências e Tecnologia, Universidade de Coimbra, Coimbra, 2019.

FORMIGONI FILHO, José Reynaldo; BRAGA, Alexandre Mello; LEAL,


Rodrigo Lima Verde. Tecnologia blockchain: uma visão geral. 2018.
Disponível em: https://www.cpqd.com.br/wp-
content/uploads/2017/03/cpqd-whitepaper-blockchain-impresso.pdf.
Acesso em: 11 mai. 2020.

FOROUZAN, Behrouz A. Comunicação de dados e redes de


computadores. São Paulo: McGraw-Hill, 2008.

HELLANI, Hussein et al. On blockchain technology: overview of bitcoin


and future insights. In: IEEE INTERNATIONAL MULTIDISCIPLINARY
CONFERENCE ON ENGINEERING TECHNOLOGY, 2018, Beiruth.
Annals [...]. Beiruth: IMCET, 2018. p. 1-8.

O QUE É certificado digital. Certisign, [s. d.]. Disponível em:


https://www.certisign.com.br/certificado-digital. Acesso em: 2 maio
2020.

VANTAGENS e desvantagens da blockchain. Binance Academy, [s. d.].


Disponível em: https://www.binance.vision/pt/blockchain/positives-
and-negatives-of-blockchain. Acesso em: 12 maio 2020.

ZHENG, Zibin et al. Blockchain challenges and opportunities: a survey.


International Journal of Web and Grid Services, v. 14, n. 4, p. 352-
375, 2018. Disponível em:
https://www.researchgate.net/publication/328338366_Blockchain_ch
allenges_and_opportunities_A_survey. Acesso em: 11 mai. 2020.
Capítulo 8
Infraestrutura dos certificados
digitais

Anteriormente, compreendemos que um certificado digital é um


arquivo eletrônico que funciona como uma assinatura digital. O
certificado digital pode ser emitido e utilizado tanto para pessoas
físicas como para jurídicas. Entre as diversas aplicações e usos do
certificado digital, entendemos que sua função é garantir a confiança
na identidade de quem emitiu a assinatura digital. Se o certificado
emitido for validado por uma autoridade de certificação, possuirá
validade legal, o que irá garantir a autenticidade de uma pessoa física
ou jurídica.

Uma infraestrutura de chave pública (ICP) (em inglês, public key


infrastructure – PKI) é necessária para que o processo de validação
de chaves públicas das assinaturas contidas nos certificados digitais
ocorra. Essa infraestrutura de chave pública consiste em dar suporte
ao uso da criptografia de chave pública e privada, para autenticar as
partes envolvidas em uma transação. Para que isso ocorra, uma ICP
deverá ser capaz de prover a emissão, a validação, a revogação e a
distribuição de chaves públicas (INFRAESTRUTURA..., [s. d.]).
Apesar de não existir um padrão que determine o funcionamento
e os componentes necessários a uma ICP, eles geralmente incluem
as autoridades de certificação (AC) e as autoridades de registro (AR)
(INFRAESTRUTURA..., [s. d.]). Com isso, uma ICP deverá manter em
um repositório de certificados (RC) e em uma lista de certificados
revogados (LCR) certificados que não são mais válidos. Uma ICP
também pode fornecer ferramentas para o gerenciamento de
certificados digitais a seus clientes (solicitantes), incluindo serviços
de criptografia e assinaturas digitais para documentos, por exemplo,
entretanto não são essenciais ou mandatórios para o funcionamento
de uma ICP.

Neste capítulo, estudaremos o padrão X.509, definido pelo ITU na


RFC 3280 (2002) como base para ICPs, sendo este amplamente
utilizado como padrão de mercado. Para fazer uso de um certificado,
os usuários devem observar a política de certificação de sua AC e,
depois, se concordarem, devem, então, confiar nos serviços de
autenticação e não repúdio atrelados à chave pública de um
certificado específico (RFC 3280, 2002). Dessa forma, o padrão X.509
não especifica regras ou deveres jurídicos vinculados a uma AC, isto
é, feito de acordo com seus contratos e políticas de sua área de
atuação. O ICP-Brasil, por exemplo, é a autoridade de certificação raiz
para os certificados emitidos no Brasil, tendo a mesma validade
jurídica que documentos assinados em papel (BRASIL, 2017).

O principal objetivo de uma ICP é atender à necessidade de


identificação de forma determinística e automatizada da
autenticação, do controle de acesso e das funções de autorização em
sistemas, principalmente na internet. Isso é obtido por meio de uma
padronização, portanto, a ICP determinará os atributos que devem
conter um certificado, assim como as informações adicionais que
serão necessárias para controlar os certificados emitidos para seus
usuários. Entre essas informações estão dados como as políticas e
as restrições de caminhos da certificação (RFC 3280, 2002).

Vamos aprender como se dá o funcionamento, a validação e a


revogação dos certificados digitais, utilizando o conceito padronizado
pela RFC 3280, que consiste na validação dos certificados através de
uma árvore de certificação. Vamos entender a finalidade das
entidades finais (EF), das autoridades certificadoras (AC), das
autoridades registradoras (AR), os tipos de certificados digitais
disponíveis, o que é o repositório de certificados (RC) e a lista de
certificados revogados (LCR).

1 Conceitos
O uso dos centros de distribuição de chaves (key distribution
center – KDC) foi uma iniciativa para distribuição de chaves públicas,
porém, esse método se mostrou ineficiente, pois seria necessária
uma estrutura muito robusta para validar o tempo todo as chaves
públicas de usuários. Imagine a estrutura que seria necessária para
validar todos os certificados de uma cidade, estado, de um país ou
todos os usuários da internet. Além disso, a estrutura do KDC não é
escalável; caso o KDC ficasse indisponível, todas as chaves públicas
também ficariam. Ao contrário do KDC, uma infraestrutura de chave
pública (ICP), utiliza uma autoridades de certificação (AC) que não
precisa estar on-line o tempo todo. Em vez disso, uma organização
certifica chaves públicas que são utilizadas pelos usuários
(TANENBAUM; WETHERAL, 2012).

O certificado emitido para um usuário cria um vínculo com a sua


chave pública, dessa forma, o objetivo do certificado é ser totalmente
público. Caso um usuário queira emitir um certificado para si, ele deve
procurar uma autoridade de certificação, munido de seus
documentos de identificação pessoal ou da empresa que representa.
O usuário deve pagar uma taxa à AC e o certificado é emitido para o
período de validade contratado. A AC assina o hash do certificado
emitido com sua chave privada e o usuário receberá o arquivo digital
contendo o certificado e seu hash assinado pela AC (TANENBAUM;
WETHERAL, 2012).

Apesar da função primária de um certificado digital estar


vinculada à autenticação de uma chave pública, um certificado
também pode registrar atributos relevantes para um usuário
(TANENBAUM; WETHERAL, 2012), como atributos referentes ao
número de documentos, por exemplo. Em sistemas do governo,
como a receita federal, o atributo CPF é utilizado para que um usuário
consiga autenticar-se. Dessa forma, o detentor do certificado com o
CPF preenchido prova a autenticidade de um sistema e garante o
acesso do usuário pela validação dos atributos do certificado. O
padrão mais utilizado para emissão de certificados digitais é o X.509,
que especifica os atributos que serão registrados nos certificados
emitido por uma AC. A tabela 1 mostra os principais atributos do
padrão X.509 e suas funções.
Tabela 1 – Principais atributos para certificados emitidos no padrão
X.509
ATRIBUTO DESCRIÇÃO

Version (versão) Versão utilizada do padrão X.509

Serial number Identificador exclusivo do certificado na AC, quando somado ao


(número de série) nome da CA torna o certificado único

Signature algorithm
Algoritmo utilizado para assinar o certificado do usuário
(algoritmo da assinatura)

Issuer (emissor) Nome do emissor do certificado no padrão X.500

Validity period
Data de início e término da validade do certificado
(período de validade)

Subject name
Entidade para qual o certificado foi emitido
(nome de sujeito)

Public key A chave pública da autoridade certificadora e identificação do


(chave pública) algoritmo que foi utilizado

Issuer ID
Identificação exclusiva opcional para o emissor do certificado
(Id do emissor)

Subject ID
Identificação exclusiva opcional para entidade certificada
(Id do sujeto)

Extensions (extensões) Diversas extensões utilizadas nos certificados

Assinatura do certificado emitido, assinado pela chave privada da


Signature (assinatura)
Autoridade Certificadora

Fonte: adaptado de Tanenbaum e Wetheral, (2012, p. 508).


A denominação X.500 especifica o formato para identificação
dentro da AC, onde C é o país, O é a organização, OU é a unidade
organizacional e CN é o nome comum. Supondo que o usuário João
da área de marketing tivesse seu certificado emitido para sua
empresa TRUST, no Brasil, seu endereço X.500 poderia ser
“/C=BR/O=TRUST/OU=MARKETING/CN=JOAO”. O padrão X.509
define o uso do formato X.500 para serviços de diretório, que são
uma espécie de banco de dados para autenticação de usuários em
redes de computadores distribuídos. As informações guardadas nos
serviços de diretório incluem o nome do usuário, endereço de rede,
entre outros atributos e informações sobre os usuários
(TANENBAUM; WETHERAL, 2012).

PARA SABER MAIS

O active directory (AD) é um produto criado pela Microsoft para ser utilizado
como serviço de diretório no protocolo LDAP. O lightweight directory access
protocol (LDAP) (em português, protocolo de acesso a diretórios leves)
fornece diversos tipos de funcionalidades para usuários em rede, como
autenticação, grupos e gerenciamento de usuários. Também é possível
administrar políticas para usuários e computadores conectados em produtos
como no AD (O QUE É..., 2020). Porém, o active directory da Microsoft não é
a única opção para uso do protocolo LDAP, existem soluções como
OpenLDAP, Red Hat Serviço de Diretório, Apache Directory Server, entre
outros.

2 Infraestrutura de chave pública (ICP)


Criar uma única AC para emitir todos os certificados gerados no
mundo seria algo inviável, pois a estrutura representaria um ponto
único de falha. Outra solução seria criar várias ACs gerenciadas por
apenas uma organização, o que resolveria o problema de ponto único
de falha. Porém, a mesma chave privada teria que ser utilizada em
todas as ACs, o que comprometeria a confiabilidade de todo o
sistema de certificação com a possibilidade de vazamento de chaves.
Logo, o uso de uma única AC para todo o mundo seria uma estratégia
muito arriscada (TANENBAUM; WETHERAL, 2012).

Em função do risco e das dificuldades atreladas na


operacionalização de uma AC única global, a ICP foi criada com base
no compartilhamento da confiança através da derivação em uma
estrutura de árvore entre as ACs. Uma vez que existe a confiança em
uma autoridade certificadora, todos os certificados emitidos por ela
serão considerados válidos, segundo seus critérios, como validade e
não revogação (TANENBAUM; WETHERAL, 2012; PUODZIUS, 2017).

De forma similar à emissão de uma cédula de identidade (RG),


que é feita pelo Ministério da Justiça, através da Secretaria de
Segurança Pública de cada estado e de um instituto de identificação.
O certificado digital é o produto final emitido por uma autoridade de
certificação, por meio de uma autoridade de registros e de
autoridades certificadoras intermediárias. A figura 1 mostra a
comparação da emissão de um RG e um certificado digital.
Figura 1 – Estrutura de uma ICP comparada a
emissão de um RG

Fonte: adaptado de Nunes (2007).

A figura 2 demonstra uma estrutura de hierarquias para


validação de uma AC, ou seja, como as autoridades estão
interconectadas. No exemplo, são apresentados três níveis de uma
árvore: na base, temos as autoridades de certificação; no nível
intermediário, temos as autoridades certificadoras regionais, também
conhecidas como ACs intermediárias; no último nível (o mais alto),
temos a raiz da infraestrutura de certificação.
Figura 2 – Árvore de infraestrutura de chave
pública

Fonte: adaptado de Tanenbaum e Wetheral (2012, p. 509).

Analisando os três níveis, temos que a raiz da árvore nada mais é


do que uma autoridade de certificação superior, que certifica o
segundo nível, também conhecido como nível intermediário. Podem
ser chamadas também de autoridades de certificação regionais
(ACR), que têm a função de controlar autoridades de certificação
abaixo delas, para determinada região, país ou continente. As ACs na
base da árvore são as que de fato emitem os certificados no padrão
X.509 para as organizações ou indivíduos. Essas ACs são autorizadas
pela autoridade de certificação superior, em nosso exemplo, as ACRs
(TANENBAUM; WETHERAL, 2012; PUODZIUS, 2017).
IMPORTANTE
Outro importante componente dessa infraestrutura é a entidade final (EF).
Uma entidade final é um termo genérico para indicar os usuários finais dos
certificados. Esses usuários finais podem ser: usuários de sistemas,
equipamentos (como servidores ou roteadores) ou qualquer entidade que
possua CNPJ e que tenha a necessidade pode solicitar um certificado digital
para uma chave pública.

Em termos simples, a autoridade certificadora é um terceiro


confiável que emite os certificados digitais. Esse terceiro garante que
a chave pública de uma entidade final realmente pertence a tal
entidade. Suas funções incluem receber os pedidos de certificados
digitais, validar a identidade do solicitante, assinar e devolver o
certificado à entidade final. Também fornece a chave pública de sua
própria AC em seu certificado e publica a lista de certificados que não
são mais confiáveis ou lista de certificados revogados (LCR)
(INFRAESTRUTURA..., [s. d.]).

A autoridade certificadora raiz da ICP Brasil é o Instituto Nacional


de Tecnologia da Informação (ITI). O instituto está no topo da árvore
hierárquica de certificação, sendo a primeira autoridade na cadeia. A
função da AC-Raiz é gerenciar as questões e as normativas técnicas,
além das políticas de certificados estabelecidas pelo comitê gestor. A
AC-Raiz tem poder para emitir, distribuir, expedir, revogar e gerenciar
os certificados das autoridades certificadoras que estão sob seu nível
hierárquico, ou seja, todas a ACs abaixo de sua hierarquia. Também
são funções de uma AC-Raiz fiscalizar e auditar suas ACs, ARs ou
quaisquer outros prestadores de serviços associados a sua estrutura
(BOFF, 2017).

As autoridades de registro (AR), ou registradoras, são


responsáveis por realizar a intermediação entre os usuários e uma
autoridade certificadora. Uma autoridade de registro se vincula a uma
AC com a finalidade de executar a intermediação presencial entre as
ACs e os usuários finais, que solicitam os certificados digitais (BOFF,
2017).

3 Tipos de certificados digitais


Os tipos de certificados disponíveis para aquisição no ICP Brasil
estão divididos quanto a sua aplicação e os seus requisitos de
segurança (BOFF, 2017):

Tipo A: é o certificado mais comum, usado para assinatura de


documentos e transações eletrônicas.

Tipo S: utilizado exclusivamente para garantir o sigilo ou


criptografia de dados, em geral protege documentos e tráfego de
informações em redes.

Tipo T: utilizado para certificação da data e hora em que um


documento eletrônico é assinado, registrando também a
identificação do signatário (entidade que assina).

A forma de armazenar e a validade-padrão dos certificados


também são padronizados. A tabela 2 resume a organização dos
certificados.

Tabela 2 – Tipos de certificado


TIPO ARMAZENAMENTO VALIDADE MÁXIMA

A1/S1 Software 1 ano

A3/S3 Hardware Até 5 anos

A4/S4 Hardware Até 6 anos

Fonte: adaptado de Boff (2017).

Na tabela 2, verificamos que a validade dos certificados varia no


tempo padrão de 1 a 6 anos, seu armazenamento pode ser em
hardware ou software. O armazenamento em hardware é feito por
meio de token, em formato de pendrive ou cartão. No
armazenamento via software o certificado é disponibilizado em
formato eletrônico ao usuário final, que deve configurá-lo para uso em
seu computador pessoal ou em seu servidor. Conforme estudamos
no [capítulo 7], os certificados podem ser emitidos para usos
específicos, como os certificados e-CPF, e-CNPJ, e-NFE e SSL.

O secure socket layer (SSL) (em português, camada de soquete


seguro) garante uma comunicação criptografada entre o navegador
de internet de um usuário e o servidor da página web acessada por
ele. Para criar essa conexão segura entre o navegador de internet e o
website, uma AC pode emitir um certificado SSL que deve ser
instalado no servidor da aplicação web. O certificado SSL terá a
função de autenticar a identidade do site acessado, garantindo aos
usuários que o site é autêntico e também efetua a criptografia dos
dados transmitidos entre o site e o navegador.

Os certificados SSL podem ser de três tipos (TUDO..., [s. d.]):

Único: apenas para um endereço site específico;

Wildcard (curinga): para todos os endereços abaixo de um


domínio (todos os subendereços de um site principal);

Multidomínio: para diferentes domínios de endereços de sites.

4 Repositório de certificados (RC)


Um repositório de certificados, de forma simples, é utilizado para
indicar um método de armazenamento de certificados válidos, para
que sejam recuperados pelos usuários finais. Gerenciar
adequadamente a própria chave privada de seu certificado pode ser
um problema, inclusive a guarda inadequada colocará a identidade do
usuário em risco.

O arquivo eletrônico de um certificado digital, em geral, é


armazenado em um sistema de arquivos comum, porém também
pode ser armazenado em um repositório físico, ou seja, um hardware
específico como os smartcards ou tokens. Conforme apresentamos
anteriormente, esses dispositivos são utilizados para guardar as
chaves privadas e os certificados emitidos para os usuários. Para
adicionar os certificados em um computador pessoal, basta
configurar o repositório em seu navegador de internet. A figura 3
mostra a configuração do repositório de certificados no navegador
Internet Explorer. Para visualizar os detalhes do certificado basta
selecionar o certificado e clicar no botão exibir (NUNES, 2007).
Figura 3 – Configuração do repositório de
certificados no navegador Internet Explorer
Um repositório centralizado também pode ser facilmente
mantido e gerenciado em uma infraestrutura de chave pública. Nesse
repositório centralizado, os usuários podem efetuar um processo de
autenticação (login) e, utilizando suas credenciais (usuário e senha),
acessar o repositório para utilizar o certificado em questão. O
repositório armazenará a chave privada do usuário e seu respectivo
certificado. Essa abordagem de uso, apesar de se mostrar prática,
deve ser executada com cuidado, pois uma invasão poderia colocar
em risco todas as chaves privadas e os certificados, armazenados no
repositório (RFC 3820, 2002; TANENBAUM; WETHERAL, 2012).

5 Lista de certificados revogados (LCR)


Assim como uma habilitação para dirigir ou passaportes, os
certificados digitais têm data de validade e podem ser revogados,
conforme o critério do órgão emissor ou por solicitação da entidade
final (usuário). Uma autoridade certificadora pode revogar um
certificado emitido por ela se a chave privada foi exposta ou se a AC
foi comprometida. Com isso, uma ICP precisa estar preparada para
lidar coma revogação de certificados executadas pelas ACs
(TANENBAUM; WETHERAL, 2012).
Para isso, as ACs emitem periodicamente uma lista de
certificados revogados (LCR), também conhecida como certificate
revocation list (CRL). Essa lista fornece o número de série de todos os
certificados que a AC revogou. Uma vez que os certificados digitais
possuem data de validade, a LCR precisa conter apenas o número de
série dos certificados revogados que ainda não venceram. Os
certificados vencidos não precisam ser informados, pois, uma vez
que a validade expira, o certificado é automaticamente invalidado,
não sendo necessário fazer qualquer distinção entre um certificado
revogado e um certificado expirado, pois em ambos os casos os
certificados não são mais utilizáveis (TANENBAUM; WETHERAL,
2012).

Utilizar uma LCR implica que, ao validar um certificado, deve-se


também consultar a LCR para verificar se o certificado em questão
não foi revogado. Essa operação, portanto, deve ser feita sempre que
um certificado for utilizado, pois o que garante que um certificado que
acabou de ser validado não será revogado antes do próximo uso?
Outro fator complicador no uso das LCRs é que um certificado
revogado pode ser reabilitado em situações como o pagamento em
atraso de uma taxa. A revogação ou reativação obrigará que um
usuário tenha que entrar em contato com a autoridade certificadora
(TANENBAUM; WETHERAL, 2012).

As LCRs precisam ser armazenadas no mesmo local que os


certificados, para isso, uma boa estratégia é a AC publicar de forma
ativa e periódica a LCR, obrigando os diretórios a processar apenas a
remoção dos certificados revogados. Caso os diretórios de
certificados não forem utilizados para armazenar as LCRs, elas
poderão ser armazenadas em cache nos locais convenientes da rede.
Um fator importante é que as LCRs também devem ser assinadas
pelas ACs. Logo, mesmo que um invasor tente fraudar uma LCR, essa
ação poderá ser detectada facilmente (TANENBAUM; WETHERAL,
2012).

IMPORTANTE
Certificados digitais com validade de longa duração implicam em LCRs
também de longa duração. Para lidar com LCRs longas, pode-se emitir uma
lista principal com pouca frequência e emitir atualizações frequentes para a
lista (TANENBAUM; WETHERAL, 2012).

Considerações finais
Neste capítulo, entendemos que o processo de validação de um
certificado se dá pela reconstrução da hierarquia (o caminho de
certificação) partindo do certificado até a AC-Raiz. A verificação da
árvore é necessária para determinar a confiança em um certificado
emitido. Conhecemos também os principais atributos existentes em
um certificado que são especificados pela estrutura X.509.
Discutimos o funcionamento das ICPs e seus principais aspectos,
como as entidades finais (EFs), a função das autoridades
certificadoras (ACs), as autoridades registradoras (ARs) e os tipos de
certificados digitais disponíveis comercialmente. Apresentamos a
função dos repositórios de certificados (RCs) e compreendemos que
os certificados podem ser armazenados localmente (no navegador
de internet dos usuários) ou de forma centralizada. Entendemos a
importância do uso da lista de certificados revogados (LCR), para que
um certificado revogado não seja validado por uma AC.

Sem dúvida, os certificados garantem a seus titulares e aos


usuários de sistemas a autenticidade das informações nos meios
digitais. Possibilitam a assinatura e a confiança vinculada a seus
documentos ou as transações executadas nos mais diversos
sistemas. Os certificados digitais representam um uso prático e
seguro da criptografia, garantindo a segurança da informação nos
seus níveis de confiabilidade, integridade, autenticidade e não
repúdio.

Referências
BOFF, Marcel. O que é ICP Brasil e como funciona? Santo Contrato,
2017. Disponível em: https://www.santocontrato.com.br/o-que-e-icp-
brasil/. Acesso em: 20 maio 2020.

BRASIL. Certificação digital. Instituto Nacional de Tecnologia da


Informação, 2017. Disponível em: https://www.iti.gov.br/perguntas-
frequentes/41-perguntas-frequentes/112-sobre-certificacao-digital.
Acesso em: 15 mai. 2020.

INFRAESTRUTURA de chave pública (KPI). IBM Knowledge Center, [s.


d.].Disponível em: https://www.ibm.com/support/knowledgecenter/pt-
br/SSFKSJ_9.0.0/com.ibm.mq.sec.doc/q009900_.htm. Acesso em:
15 maio 2020.
NUNES, Delio Silva. Armazenagem. Ufrj, 2007. Disponível em:
https://www.gta.ufrj.br/grad/07_2/delio/Armazenagem.html. Acesso
em: 25 maio 2020.

O QUE É Active Directory (AD)? Portal GSTI, 2020. Disponível em:


https://www.portalgsti.com.br/active-directory/sobre/. Acesso em: 17
jun. 2020.

PUODZIUS, Cassius. Certificados digitais e infraestrutura de chaves


públicas. WeLiveSecurity, 2017. Disponível em:
https://www.welivesecurity.com/br/2017/04/28/certificados-digitais-
e-infraestrutura-de-chaves-publicas/. Acesso em: 20 maio 2020.

RFC 3280. Internet X.509 public key infrastructure: certificate and


certificate revocation List (CRL) Profile. Ietf.org, abr. 2002. Disponível
em: http://www.ietf.org/rfc/rfc3280.txt?number=3280. Acesso em: 15
maio 2020.

TANENBAUM, Andrew S., WETHERAL, David. Redes de


computadores. 5. ed. São Paulo: Pearson, 2012.

TUDO o que você precisa saber sobre os ceritificados SSL. Verisign,


[s. d.]. Disponível em: https://www.verisign.com/pt_BR/website-
presence/online/ssl-certificates/index.xhtml. Acesso em: 21 maio
2020.
Sobre o autor

Hebert de Oliveira Silva é graduado em redes de computadores


pela Universidade Paulista, com pós-graduação em gestão e
governança de TI pelo Centro Universitário Senac. Obteve seu título
de mestrado em tecnologia, na área de sistemas da informação e
comunicação pela Universidade Estadual de Campinas (Unicamp),
onde segue sua formação como doutorando em tecnologia.
Atualmente, é especialista em soluções de TI na sede do Sesi e do
Senai de São Paulo. Também é professor universitário nos cursos de
graduação em sistemas da informação e ciência da computação.
Possui ampla experiência em gerenciamento de redes, segurança da
informação e arquitetura de sistemas, atuando no planejamento, na
implantação e na gestão dos serviços críticos de TI.

Link para o Currículo Lattes:


http://lattes.cnpq.br/9689028080261016.
Administração Regional do Senac no Estado de São Paulo
Presidente do Conselho Regional
Abram Szajman

Diretor do Departamento Regional


Luiz Francisco de A. Salgado

Superintendente Universitário e de Desenvolvimento


Luiz Carlos Dourado

Editora Senac São Paulo


Conselho Editorial
Luiz Francisco de A. Salgado
Luiz Carlos Dourado
Darcio Sayad Maia
Lucila Mara Sbrana Sciotti
Jeane Passos de Souza

Gerente/Publisher
Jeane Passos de Souza

Coordenação Editorial/Prospecção
Luís Américo Tousi Botelho
Dolores Crisci Manzano

Administrativo
grupoedsadministrativo@sp.senac.br

Comercial
comercial@editorasenacsp.com.br

Acompanhamento Pedagógico
Otacília da Paz Pereira

Designer Educacional
Hágara Rosa da Cunha Araujo

Revisão Técnica
Anderson Aparecido Alves da Silva

Preparação e Revisão de Texto


Eloiza Mendes Lopes

Projeto Gráfico
Alexandre Lemes da Silva
Emília Correa Abreu

Capa
Antonio Carlos De Angelis

Editoração Eletrônica
Michel Iuiti Navarro Moreno

Ilustrações
Michel Iuiti Navarro Moreno

Imagens
iStock Photos

Produção do ePub
Ricardo Diana
Beatriz Bevilacqua

Proibida a reprodução sem autorização expressa.


Todos os direitos desta edição reservados à Editora Senac São Paulo
Rua 24 de Maio, 208 – 3º andar Centro – CEP 01041-000 – São Paulo – SP
Caixa Postal 1120 – CEP 01032-970 – São Paulo – SP
Tel. (11) 2187-4450 – Fax (11) 2187-4486
E-mail: editora@sp.senac.br
Home page: https://www.livrariasenac.com.br/

© Editora Senac São Paulo, 2021


Dados Internacionais de Catalogação na Publicação (CIP)
(Jeane Passos de Souza - CRB 8ª/6189)

Silva, Hebert de Oliveira


Criptografia / Hebert de Oliveira Silva. – São Paulo : Editora
Senac São Paulo, 2021. (Série Universitária)
Bibliografia.
e-ISBN 978-65-5536-389-0 (ePub/2021)
1. Segurança da informação 2. Criptografia de dados 3.
Proteção de dados digitais 4. Certificados digitais I. Título. II.
Série.

20-1199t CDD – 005.8


BISAC COM043050

Índice para catálogo sistemático


1. Criptografia de dados : Segurança da informação 005.8
MODAGASTRONOMIATURISM
ODESIGNTECNOLOGIAEDUCAÇ
ÃOARTESHOTELARIACIÊNCIA
SHUMANASFOTOGRAFIACOM
UNICAÇÃOARQUITETURAGEST
ÃOMEIOAMBIENTESAÚDE

Você também pode gostar