Laboratório de Criptografia - OpenSSL

De Peotta-Wiki
Ir para: navegação, pesquisa

OpenSSL é um conjunto de bibliotecas e algoritmos criptográficos amplamente utilizado. Baseado na biblioteca SSLeay deenvolvida por Eric A. Young e Tim J. Hudson.

Conteúdo

Instalação

Linux

apt-cache search libssl | grep SSL

libssl0.9.6 - SSL shared libraries (old version)
libssl-dev - SSL development libraries, header files and documentation
libssl0.9.7 - SSL shared libraries
In the above example, you would most likely want to install the current OpenSSL library, which appears in the output as libssl0.9.7 (like sudo apt-get install libssl0.9.7. Install the following packages libssl0.9.7 (see InstallingSoftware). You may also need to install ca-certificates.

Windows

Apesar de existir alguns pacotes compilados para o sistema Windows, recomendo o uso através do cygwin

Primeiros passos

Verificando a versão do OpenSSL instalada

$ openssl version
OpenSSL 1.0.1c 10 May 2012

Obtendo ajuda

$ man openssl

Informações sobre cifras criptográficas

$ openssl enc -h

Lista todas os algoritmos disponíveis

$ openssl ciphers -v

Apresenta um benchmark do seu computador em relação à velocidade do processamento de cada algoritmo.

$ openssl speed

Geração de chaves Alice

Chave privada de Alice:

$ openssl genrsa >alice.private

Chave pública de Alice:

$ openssl rsa -pubout <alice.private >alice.public

Geração de chaves Bob

Chave privada de Bob:

$ openssl genrsa >bob.private

Chave pública de Bob:

$ openssl rsa -pubout <bob.private >bob.public

Alice cria a mensagem

$ echo "Alice ama você" >mensagem.txt

Gera MD5 da mensagem

$ openssl.exe dgst -md5 mensagem.txt
MD5(mensagem.txt)= d65d1625d8b6d130486e25f70ca39498

Caso a mensagem seja criada no sistema windows o hash md5 será diferente, pois o sistema de codificação utilizado pelo Linux interpreta que as linhas terminam onde existe o caractere LF e o windows onde as linhas terminam com CR/LF.

md5sum mensagem.txt
MD5: 6FACD198D839606FBDC473AC7BF8ABC1

Alice encripta a mensagem usando a chave pública de Bob (bob.public)

$ openssl rsautl -encrypt -in mensagem.txt -out mensagem.encrypted -pubin -inkey bob.public

Bob decripta a mensagem de Alice usando a chave privada dele

$ openssl rsautl -decrypt -in mensagem.encrypted -out mensagem.decrypted -inkey bob.private

Bob envia a resposta para Alice

$ echo "Quer casar Comigo?" >mensagem.txt

Bob assina a mensagem com sua chave privada (bob.private)

$ openssl rsautl -sign -in mensagem.txt -out mensagem.signed -inkey bob.private

Alice verifica a mensagem usando a chave pública de Bob (bob.public)

$ openssl rsautl -verify -in mensagem.signed -out mensagem.verified -pubin -inkey bob.public

Mensagem secreta de Alice para Bob (contrato de casamento)

$ echo "Contrato de casamento"  >mensagem.txt

Alice gera uma chave randomica que será usada na encriptacão da mensagem

$ openssl rand 16 -out key.txt

Alice encripta a mensagem com a chave aleatória gerada

$ openssl des3 -e -kfile key.txt -in mensagem.txt -out mensagem.encrypted

Alice cria um digest da mensagem para assinar

$ openssl dgst -binary mensagem.txt >mensagem.digest

Alice assina o digest (hash) com sua chave privada

$ openssl rsautl -sign -in mensagem.digest -out digest.signed -inkey alice.private

Alice encripta a chave randomica com a chave pública de Bob

$ openssl rsautl -encrypt -in key.txt -out key.encrypted -pubin -inkey bob.public

Alice envia para Bob:

  1. - A mensagem encriptada
  2. - A chave encriptada
  3. - O Hash assinado

Bob decripta a chave aleatória de Alice usando a chave privada dele

$ openssl rsautl -decrypt -in key.encrypted -out key.decrypted -inkey bob.private

Bob decripta a mensagem usando a chave decriptografada

$ openssl des3 -d -kfile key.decrypted -in mensagem.encrypted -out mensagem.decrypted

Bob verififica o Hash assinado por Alice usando a chave pública dela

$ openssl rsautl -verify -in digest.signed -out mensagem.digest1 -pubin -inkey alice.public

Bob calcula o hash da mensagem

$ openssl dgst -binary mensagem.txt >mensagem.digest2

Bob compara os dois hash

$ diff mensagem.digest1 mensagem.digest2

Se os hash combinam está tudo certo.

Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas