Prévia do material em texto
WBA0470_v1.0
Criptografia Hash e Hacking
Segurança de sistemas e seus
aspectos
Bloco 1
Marcelo Ferreira Zochio
Cifras simétricas
• Esse tipo de criptografia, baseia-se em uma
chave que é compartilhada pelo receptor e
pelo emissor.
• Ela é responsável tanto pela operação de cifra
quanto pela decifração do conteúdo cifrado.
• É como uma chave que abre e fecha uma
porta.
Cifras simétricas
Exemplos de cifras simétricas:
DES (Data Encryption Standart).
3DES (Three Data Encryption Standart).
AES (Advanced Encryption Standart).
Cifras de fluxo
• As cifras de fluxo fazem a
criptografia do conteúdo a ser
cifrado bit a bit sequencialmente.
• O mais conhecido algoritmo de
cifra de fluxo conhecido é o RC4,
o qual está ilustrado na figura ao
lado:
Figura 1 – Cifra de fluxo RC4
Fonte: elaborada pelo autor.
Cifras de bloco
• As cifras de bloco operam da seguinte forma: o
conteúdo a ser cifrado é dividido em blocos de
tamanhos iguais e aplicado o algoritmo de cifra
simétrica escolhido para sua cifra em cada bloco
separadamente.
• Caso o último bloco não atinja o tamanho dos
antecessores, ele é preenchido com dados de
preenchimento (pad), que são retirados na sua
decifração.
• Há vários modos de operar cifras de bloco. A seguir,
serão mostrados os principais:
Modos de cifra
Figura 2 – Modo ECB (Electronic Code Book)
Fonte: elaborada pelo autor. Fonte: elaborada pelo autor.
Figura 3 – Modo CBC (Cipher Block Chaining)
Modos de cifra
Figura 4 – Modo CFB (Cipher Feedback Block)
Fonte: elaborada pelo autor. Fonte: elaborada pelo autor.
Figura 5 – Modo OFB (Output Feedback Block)
Modos de cifra
Figura 6 – Modo CTR
Fonte: elaborada pelo autor.
Cifras assimétricas
• Esse tipo de criptografia, usa duas chaves para seu
funcionamento: a chave pública e a chave privada.
• A chave pública deve ser disponibilizada a todos
os interessados com os quais se quer manter
comunicações sigilosas.
• A chave privada é de uso exclusivo de seu
proprietário, não podendo de forma alguma ser
revelada, pois, se isso acontecer, as comunicações
dele deixarão de ser sigilosas ou poderá haver
falsificação de assinatura digital.
Cifras assimétricas
• Elas são matematicamente relacionadas: o que se cifra com
a chave privada, só se consegue decifrar com a chave
pública relacionada, e vice-versa.
• Para transmitir uma mensagem codificada para um
destinatário, você usa a chave pública dele para cifrar sua
mensagem, a qual ele disponibilizou para você, enviando
para ele sua mensagem cifrada.
• Ao receber essa mensagem, ele a abrirá com a chave
privada dele. Se ele quiser responder para você da mesma
forma, ele usará a sua chave pública, que você
disponibilizou para ele, cifrará a mensagem com ela,
enviando-a para você, que abrirá com sua chave privada.
Cifras assimétricas
• Caso você queira assinar digitalmente alguma
mensagem, você deve usar sua chave privada.
• O conteúdo a ser assinado será cifrado com a
chave privada, e poderá ser aberto por qualquer
um que tiver sua chave pública.
• Isso garante a autenticidade de autoria, pois em
tese, você não compartilha sua chave privada
com ninguém, não havendo como negar a
autoria do conteúdo assinado digitalmente.
Segurança de sistemas e seus
aspectos
Bloco 2
Marcelo Ferreira Zochio
Hashes
• Hashes são usados basicamente para verificação de
integridade de conteúdos digitais.
• Quando fazemos um resumo criptográfico de um
arquivo digital (não confunda com a criptografia, que é
totalmente diferente), usamos um algoritmo de hash
que faz cálculos de forma idiossincrásica, gerando uma
saída hexadecimal de tamanho fixo.
• O hash calculado com determinado algoritmo de hash,
gerará sempre a mesma saída para o mesmo
conteúdo; caso seja mudado apenas um bit desse
conteúdo, o resultado do hash altera-se
consideravelmente.
Hashes
• O cálculo do hash é irreversível, ou seja, não é possível saber,
por meio de sua saída, sua entrada, diferente da criptografia,
que usa uma chave para obter o conteúdo original.
• Hashes possuem várias aplicações: podem ser usados para
garantir integridade de arquivos que contêm vestígios a serem
analisados por peritos forenses computacionais; podem ser
usados em bancos de dados para serem armazenados no lugar
de seus conteúdos originais, como no caso de senhas, para
evitar seu roubo, caso o banco de dados seja invadido (uma
vez que o hash é irreversível, o invasor não conseguirá saber a
senha de fato).
Hashes
• São usados também para verificar se o
download de um arquivo foi executado na
íntegra (tendo o hash do arquivo a ser baixado
calculado e divulgado previamente, o usuário
poderá calcular o hash do arquivo baixado com
o mesmo algoritmo usado anteriormente no
cálculo para ver se coincidem).
• Também são usados para verificação de
integridade de documentos digitais assinados
(calcula-se o hash desse documento assinado; se
coinciderem, ele está íntegro).
Hashes
• Exemplos de hashes:
Vamos calcular o hash da string “eu amo
criptografia” em alguns algoritmos de cálculo de
hash:
MD5 = 9cafb6097114abd68b3a1f5a96f0a505
SHA1 =
36a2bff40bbc217ca59de3d09df162e25c2b5725
SHA256 =
2ef8ca01b29e716a0be62f7a8b8f1d4e0295c6e5d45f
01b8f1e28171f62e6edd
Segurança de sistemas e seus
aspectos
Bloco 3
Marcelo Ferreira Zochio
Protocolos criptográficos
Os algoritmos criptográficos, funcionam dentro
de uma comunicação em rede, por meio de
protocolos criptográficos. Um protocolo muito
usado para esse fim é o TLS (Transport Layer
Security).
Protocolos criptográficos
• Outro algoritmo que foi muito usado antes do TLS
é o SSL (Secure Socket Layer), mas devido às suas
falhas de segurança, foi abandonado em prol do
TLS.
• A versão do TLS atualmente em uso é a 1.3.
• As anteriores, também possuem falhas de
segurança, mas foram corrigidas com a atual
versão.
Geradores pseudoaleatórios
• Sua função é gerar um número aleatório a partir
do qual será feita a criptografia, para não
uniformizar a aplicação do algoritmo
criptográfico no conteúdo a ser cifrado,
dificultando sua criptoanálise (exploração de
falhas na criptografia).
• É o método para se gerar o IV (vetor de início, ou
em inglês, Initial Vector).
• Veja a seguir um exemplo em Python:
Geradores pseudoaleatórios
import random
caracter = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
tamanho = 16
iv = ''
while len(iv) < tamanho:
iv = iv+random.choice(caracter)
print("IV = ", iv)
Geradores pseudoaleatórios
• Esse programa, gera uma sequência hexadecimal
de 16 bytes de forma “aleatória”.
• A biblioteca random, gera sequências
pseudoaleatórias, e escolhe de forma mais
aleatória possível os caracteres dentro de uma
série.
• Sobre o Python, caso se queira usar uma geração
aleatória mais próxima da definição técnica de
seu nome, usamos a biblioteca urandom (Ultra
Random).
Hackerismo
• Você já deve ter ouvido notícias tais como: “hacker invade
conta bancária e desvia milhões de dólares”; “empresa X
teve seus dados sequestrados por hacker”, “hacker rouba
senhas de usuários”. Mas, agora, você vai aprender os
termos corretos. O que é um hacker?
• Hacker, no jargão da T.I., é um profundo entendedor de
computação. Um hacker possui espírito autodidata,
pesquisador e não se contenta em saber apenas o
necessário para exercer suas funções. Ele vai além do óbvio,
e por isso conhece mais que a maioria.
• Aquele que faz os estragos que você costuma ouvir nos
noticiários é o cracker, esse sim o vilão da história. Ele usa
seus conhecimentos para proveito próprio e não possui
ética, nem princípios e nem legalidade nas suas ações.
Hackerismo
• O hacker que se dedica a aprimorar a segurança de
sistemas e usa seus conhecimentos na busca de falhas e
como mitigá-las, é o “hacker ético”, que é uma profissão no
mundo da T.I..
• Ele compõe o “red team”, ou seja, a equipe responsável por
atacar sistemas(com autorização de seu dono) para testar
sua segurança, enquanto o “blue team”, a equipe
responsável pela segurança desse sistema, procura
protegê-lo o mais adequadamente possível.
• Há também certificações profissionais nessa área: Ethical
Hacking Foundation (EXIN), CEH (Certified Ethical Hacker,
da EC-Council) e a Pentest+ (CompTIA) são algumas delas.
Hackerismo e a legislação brasileira
Invasão de dispositivo eletrônico alheio sem
autorização de seu proprietário é CRIME!
Portanto, para realizar um teste de invasão, você
precisa da autorização por escrito de seu
proprietário.
Mesmo que a legislação reconheça a autorização
tácita, garanta-se legalmente!
Hackerismo e a legislação brasileira
A Lei nº 12.737, de 30 de novembro de 2012, a Lei
“Carolina Dieckmann”, altera e acrescenta alguns artigos
no Código Penal brasileiro sobre crimes de informática. Ela
acrescenta o art. 154A no Código Penal, que diz:
“Invadir dispositivo informático alheio, conectado ou não à
rede de computadores, mediante violação indevida de
mecanismo de segurança e com o fim de obter, adulterar
ou destruir dados ou informações sem autorização
expressa ou tácita do titular do dispositivo ou instalar
vulnerabilidades para obter vantagem ilícita:
Pena - detenção, de 3 (três) meses a 1 (um) ano, e multa”.
Teoria em Prática
Bloco 4
Marcelo Ferreira Zochio
Reflita sobre a seguinte situação
Você é um analista de redes de uma empresa que necessita de um programa que
tenha uma criptografia muito forte para transmitir informações sigilosas muito
importantes via rede.
Sua chefia lhe solicitou que desenvolvesse um pequeno aplicativo que
criptografasse as informações que seriam transmitidas usando uma criptografia
feita apenas com uma operação lógica XOR (OU-EXCLUSIVO) mas que tivesse
implementado o conceito de “one-time-pad” em seu algoritmo, ou seja, gerasse
chaves aleatórias descartáveis do tamanho da mensagem a ser transmitida.
Use a linguagem com o qual você possui domínio e mãos à obra!
Norte para a resolução...
• Como o aplicativo funcionará diretamente na shell do sistema operacional, não
precisará ter modo gráfico.
• Como você vai trabalhar com o conceito de “one-time-pad”, seu aplicativo deve gerar
senhas aleatórias do mesmo tamanho da mensagem a cada mensagem a ser cifrada.
• Linguagens como Python, C, C++ e Java, costumam ter módulos criptográficos que
auxiliam você na construção de seu programa.
• Você deverá usar operação lógica XOR para cifrar e decifrar as mensagens. Então, seu
aplicativo deve cifrar e também decifrar as mensagens, podendo o usuário escolher
qual das operações quer fazer.
Solução proposta
import random
from Crypto.Cipher import XOR
def cifra():
caracter = "abcçdefghijklmnopqrstuvwxyzABCÇDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%&*()-_+=§{}[]|\/:;<>.,"
mensagem = raw_input("Digite aqui a mensagem a ser cifrada: ")
tamanho_da_senha = len(mensagem)
if (tamanho_da_senha < 0):
print "Erro: valor negativo!"
elif (tamanho_da_senha == 0):
print "Erro: Tem que ter pelo menos 1 caracter!"
Solução proposta
else:
senha = ""
while len(senha) != tamanho_da_senha:
senha = senha+random.choice(caracter)
print "Senha gerada: ", senha
xor1 = XOR.new('senha')
mensagem_cifrada = xor1.encrypt(mensagem)
print mensagem_cifrada.encode('hex')
def decifra():
mensagem = raw_input("Digite aqui a mensagem a ser
decifrada: ")
mensagem1 = mensagem.decode('hex')
senha = raw_input("Digite a senha: ")
xor2 = XOR.new('senha')
mensagem_decifrada = xor2.decrypt(mensagem1)
print mensagem_decifrada
Solução proposta
def menu():
a = raw_input("Digite 1 para cifrar ou 2 para decifrar: ")
if a == '1':
cifra()
elif a =='2':
decifra()
else:
print "Escolha certo!"
menu()
menu()
Dica do Professor
Bloco 5
Marcelo Ferreira Zochio
Dica do professor
Quer saber qual a referência histórica sobre a cifra de César? Procure na
internet a obra De Vita Caesarum, Divus Iulius, do historiador romano
Suetônio. Ela é escrita em latim, mas há algumas traduções para o inglês.
Nela, você encontrará a citação desse historiador sobre a cifra em questão.
Quer ler a obra de Friedrich Kasiski no original? Procure a obra Die
Geheimschriften und die Dechiffrir-Kunst. Parte dela é dedicada à descrição
de seu método para a quebra da cifra de Vigenère.
Referências
STALLINGS, W. Criptografia e Segurança de Redes. 6. ed. São Paulo: Prentice
Hall Brasil, 2015.
TKOTZ, Viktoria. Criptografia – segredos embalados para viagem. São Paulo:
Novatec, 2005.
ZOCHIO, Marcelo F. Introdução à Criptografia. São Paulo: Novatec, 2016.
Bons estudos!