Segurança em Sistemas Computacionais
Introdução à Criptografia II
Prof. Esp. Gustavo Cardial
Tipos de operação de cifras
simétricas
Cifras de fluxo
Também chamadas de “cifras de estado”
Encripta um fluxo de dados, um bit (ou byte) de cada
vez
Cifras de bloco
Texto claro dividido em blocos de n bits (geralmente 64
ou outras potências de 2)
Cifras de fluxo
Baseadas na cifra OTP, mas com uma chave
pseudo-aleatória
São mais velozes
Exigem hardware mais simples
Pseudo aleatoriedade
Números pseudoaleatórios são criados por Geradores
de Números Pseudo Aleatórios (PRNGs, na sigla em
inglês)
Os PRNGs geram números cujas propriedades
estatísticas se aproximam às dos números
aleatórios
“Pseudo” aleatórios porque, apesar de tudo, os
Cifra de Feistel
Cifra antiga, mas é a base de muitas das cifras de bloco em uso atualmente
Exs: Blowfish, DES, RC5, 3DES, etc...
Uma de suas vantagens
As operações de encriptação e decriptação são muito similares, até mesmo idênticas em alguns casos, bastando aplicar operações em ordem inversa. Portanto, apenas metade do código (ou de circuitos) tipicamente necessário para implementar tal cifra
Ela promove duas propriedades importantes, que são a base das cifras de bloco
Difusão → cada bit do texto limpo deve afetar o maior número de bits do texto cifrado. Desta forma, escondemos propriedades estatísticas da
mensagem.
Confusão → cada bit do texto cifrado deve ser uma função complexa dos bits do texto limpo. Desta forma torna-se “complicada” a relação entre
Confusão e difusão
Para alcançar as propriedades de “difusão” e
“confusão”, a cifra de Feistel utiliza duas operações (já
vistas)
“Difusão” é obtida com
permutações
“Confusão” é obtida com algoritmos de
substituição
Criptografia de chave pública
Ou criptografia assimétricaExistência de 2 chaves
● Uma encriptará
● Outra decriptará
Nomenclatura da chave na criptografia simétrica...
● 1 chave → chamada de chave secreta Na criptografia assimétrica...
● 2 chaves → chamada de chave pública e chave privada
Operações na criptografia simétrica → substituições e permutações
Operações na criptografia assimétrica → funções matemáticas
Por que surgiu?
Surgiu da tentativa de
atacar 2 problemas da criptografia
simétrica
Distribuição de chaves
●
Como distribuir a chave secreta (que encripta e decripta) de
forma segura?
Assinaturas digitais
●
Se o uso da criptografia é cada vez mais comum, seria
Chaves
Na criptografia assimétrica, as chaves são geradas sempre em dupla
Em geral, na criptografia simétrica uma chave com mais de 128 bits
é tida como segura. Bruteforce levaria muitos e muitos anos
Na criptografia assimétrica, chaves de pelo menos 1024 bits (!)
Chaves secretas (cripto. simétrica) são totalmente aleatórias, portanto um ataque bruteforce contra uma chave secreta de 128 bits possui a complexidade (ou “dificuldade”) de 2128, segura o bastante Chaves privadas (cripto. assimétrica) advém de funções matemáticas. E a complexidade do cálculo de tais funções pode não aumentar na mesma proporção que o número de bits da chave.
Chaves
Na criptografia assimétrica, as chaves são geradas sempre em dupla
Em geral, na criptografia simétrica uma chave com mais de 128 bits
é tida como segura. Bruteforce levaria muitos e muitos anos
Na criptografia assimétrica, chaves de pelo menos 1024 bits (!)
Chaves secretas (cripto. simétrica) são totalmente aleatórias, portanto um ataque bruteforce contra uma chave secreta de 128 bits possui a complexidade (ou “dificuldade”) de 2128, segura o bastante Chaves privadas (cripto. assimétrica) advém de funções matemáticas. E a complexidade do cálculo de tais funções pode não aumentar na mesma proporção que o número de bits da chave.
Exemplo
Em certos algoritmos de criptografia assimétrica, a chave privada é um número primo.
Supondo um caso em que a chave tenha 128 bits, o número de chaves a serem testadas num ataque de bruteforce não é 2128 (que seria o caso da criptografia simétrica)
Pois de antemão já poderemos descartar diversas chaves que, sabidamente, não são números primos
Por exemplo, supondo que utilizemos um algoritmo simétrico com uma chave de 3 bits. Para atacá-la com força bruta, teremos que testar um total de 8 chaves: { 000, 001, 010, 011, 100, 101, 110, 111}
Com uma chave de mesmo tamanho, mas utilizando um algoritmo assimétrico que utiliza números primos como chaves, teríamos
Exemplo ilustrado
Cada pixel do quadrado ao lado representa
um número inteiro positivo. Os pixels
pretos são números primos.
Claramente
percebe-se
a
maior
quantidade de números não-primos, e
portanto de possíveis chaves que, de cara,
seriam
descartadas,
facilitando
o
bruteforce.
Efeito colateral de chaves
grandes
Ok, na criptografia precisa-se adotar chaves maiores
para tornar o bruteforce inviável
Mas há um efeito colateral!
O tempo para encriptar e decriptar depende do
tamanho da chave!
Chaves tão grandes quanto as utilizadas na
criptografia assimétrica tornam tais cifras muito lentas
para uso geral
Problema: troca de chave +
arquivos grandes
Dada a velocidade limitada das cifras assimétricas, geralmente opta-se por não utilizá-las durante longas trocas de dados, preferindo-se as cifras simétricas...
À princípio, então, permanece o problema da troca da chave secreta (criptografia simétrica), que pode facilmente ser interceptada por um atacante.
Um uso comum da criptografia assimétrica, porém, é justamente em encriptar não os dados, mas encriptar a chave secreta.
Supondo que A e B queiram se comunicar. A gera um par de chaves pública/privada, e divulga sua chave pública. B gera uma chave secreta (simétrica) , criptografa essa chave secreta com a chave pública de A, e envia. Ao receber dados criptografados com sua própria chave pública, A é o único que pode decriptá-los, pois é o único que possui a chave privada correta. A, então, realiza a decriptação, e com isso obtém a chave secreta (simétrica).
Envelope digital
No exemplo anterior, pode-se transmitir a mensagem cifrada
(com chave secreta) e a chave secreta cifrada (com a chave
pública) ao mesmo tempo, formando um tipo de mensagem
Recapitulando...
Cifras assimétricas surgiram para resolver 2
problemas
●
Distribuição/troca de chaves (solução = envelope
digital)
●
Assinatura digital
Vimos envelope digital. E quanto a assinatura digital?
É importante garantir a autenticidade – que uma
No diagrama anterior, Bob criptografou sua mensagem não com a chave pública de seu destinatário, como de costume.
A encriptação foi realizada com sua própria chave privada
Desta forma, ao receber a mensagem, o destinatário pode tentar decriptá-la com a chave pública de Bob, o remetente. Se a decriptação ocorrer com sucesso, a autenticidade da mensagem está provada: apenas Bob seria capaz de gerar uma mensagem que fosse decodificada com sucesso com sua chave pública. Afinal, só ele possui o par (chave privada).
Isto é possível pois no par de chaves pública/privada, tanto uma quanto outra pode ser usada para criptografar, bastando que a outra seja usada para decriptar.
Atenção: com este uso da criptografia assimétrica, ganhamos autenticidade, mas perdemos confidencialidade!
Assinatura digital
Caso você precise “assinar um arquivo” grande,
utilizando a técnica anterior para provar que o envio
do mesmo foi realmente realizado por você, qual
problema podemos encontrar?
Problema de performance → criptografar o arquivo
grande com sua chave privada é demorado
Funções hash
As funções hash mapeiam uma entrada de tamanho variável
(domínio) numa saída de tamanho fixo (imagem)
onde H é a função hash, Z2 é {0, 1} (binário), m é o tamanho
da entrada e n é o tamanho da saída (ambos em número de
bits).
Funções não reversíveis
Após codificar um dado, em posse de tal codificação, não será
possível decodificá-la
Funções hash
Voltando à assinatura digital
Na prática, podemos fornecer qualquer arquivo grande para
uma função hash, e teremos uma saída de alguns poucos bits
Essa saída equivale a uma assinatura do arquivo
A ideia da assinatura digital é calcular o hash de uma
mensagem e encriptar este hash com sua chave privada
Envia-se a mensagem + o hash encriptado. O destinatário
visualiza a mensagem normalmente, mas para ter certeza que
a mensagem partiu de você, decripta o hash recebido com sua
chave pública e recalcula o hash da mensagem recebida.
Envelope + Assinatura Digital
Distribuição da chave-pública
Ok, pra conferir se um documento foi mesmo enviado
por alguém (e não foi adulterado),
decripto a
assinatura digital do mesmo usando a
chave-pública do remetente
, e então comparo o hash
resultante com o hash que eu passei na mensagem.
Certificados digitais
Também conhecidos como
certificados de chave
pública
“Documentos eletrônicos usados para provar a posse
de uma chave pública” (Wikipedia)
Autoridade Certificadora
Também chamadas de Certificate Authorities (CA's)
Autoridade Certificadora
Queríamos resolver um problema: como confiar que a chave
pública de uma pessoa é dela mesmo? Precisamos dessa
certeza, para verificar a validade de uma assinatura digital.
A solução vista consiste no certificado digital, que é
basicamente um documento que atesta a validade de uma
chave pública.
Como sabemos que esse documento é válido?
Verificamos a assinatura dele! Ele está assinado pela
autoridade certificadora.
Ora, mas para verificar a validade da assinatura da autoridade
certificadora, precisamos usar a chave pública dela. Como
saberemos se a chave é realmente dela?
Infraestrutura de chave pública
A solução para o problema de saber se uma determinada chave pública realmente pertence a uma autoridade certificadora está na confiança.
Os sistemas computacionais que dependem de certificados digitais simplesmente possuem uma lista de autoridades certificadoras que confiam (em sua maioria, empresas que seguem determinadas normas técnicas vigentes em cada país) e suas respectivas chaves públicas.
Ou seja, trata-se de um sistema de confiança centralizado (com os CA's
no centro).