Assinatura Digital

Assinatura digital é uma informação que garante que quem enviou uma informação é realmente quem diz ser, e ao mesmo tempo, garante que esta informação não foi alterada, ou seja, garante a autenticidade e a integridade da informação, mas não visa garantir a confidenciabilidade.

A idéia da assinatura digital é misturar hash com Chaves publico/privado, e consiste em gerar a hash da informação a ser assinada, e criptografar esta hash usando a chave privada. Por que destes 2 passos?

Simples: A hash garante a integridade da informação, mas não garante a autenticidade: Um atacante pode alterar a informação e alterar também a hash – neste caso, a informação continuará integra (uma comparação de hash irá garantir isto), porém não será, necessariamente, autentica.

Criptografar a Hash usando a chave privada torna possível que esta hash seja descriptografada usando a chave publica.

Lembrando o conceito da criptografia assimétrica: O que a chave publica criptografa, a chave privada descriptografa. E o que a chave privada criptografa, a chave publica descriptografa. Ou seja: Somente o proprietário da chave privada é capaz de gerar uma informação descriptografavel pela chave publica, portanto, criptografar a hash usando a chave privada garante que ninguém mais poderá adulterá esta hash, enquanto permitirá que todos consigam descriptografar esta informação para fazer a comparação de hashs. Se a descriptografia ocorrer com sucesso, e a hash descriptografada for igual a hash do arquivo, então o arquivo está integro e autentico.

Bom, vamos fazer uns arquivos assinados digitalmente?

A primeira coisa a fazer é criar a chave privada:

openssl genrsa -out chaveprivada.key 1024

e em seguida extrair a chave publica:

openssl rsa -in chaveprivada.key -pubout -out chavepublica.key

Para este exemplo, a chave privada gerada foi:

—–BEGIN RSA PRIVATE KEY—–
MIICXQIBAAKBgQDSp/DRv03dqxH4uNYdW5pE7tpgpprIrOwSw0k6Ihda08+kTjPn
jdnytjQ4o6LMfq0BUMBUtPRRE79/HrHE3Lp3C4xfy7tVdCemTdQGb2iTdoOZFkJ7
WgzPfLUJzTsEoExPAGq9Wkbnw3jJSiXenykWfP07i85FbAt6LOX6PCeSKwIDAQAB
AoGACjLxWOZfOb0/mIAydadqt62sywMl+VNN9raXxAXEhbQ9mGHk53AZvkOOEbPy
fN4hODAVr8Q3E/nVyqzMxJA/Qs/B0RKP+/Sf92Bvq7D5zC4n3j1Ywekx3afUpgFs
daMOrBIRk9nY7y+GmxZQPIrjFKOy41ZU6hOAEfl9oskjKxkCQQDsWwGkw1SRbz1c
scV11QJb5xpaHx0rWDi0ZPH9jamd1qsz2rOR75PYSk5Yy7rYTh2/g8jkcUhbvMfB
B1FWIdvFAkEA5CoeyYkv35SBwlXMa3VMh3IbE61PqexFUcSwnWAjnvSKUyqhBlI+
BF7rf7o9/PEdylc8f88zFhrH6vkucYXlLwJBAOtGCBPP0J3YwpdD6pBJ0khTexrc
v/eGoSOJHI3N91rD9rXubTPG7T+vb9/aJQrub5RVhaNI1MNk3t7Z/vAjUhUCQDYJ
J6txOw5HXIfKzBPy/sHhKzp4xDIpC6222GEdILKHla7mnKYjmh5s4Hcqg33BGN4P
1Psr9hxZEVm709z86e8CQQC7PEokzT+rr00z/95odlozNiH2/JnOmWM06E/yaXXB
+/8HWCvAKM3LhZ4tdYilx8SmaeE9Qki3CAtrR+eedBSl
—–END RSA PRIVATE KEY—–

enquanto a chave publica foi:

—–BEGIN PUBLIC KEY—–
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDSp/DRv03dqxH4uNYdW5pE7tpg
pprIrOwSw0k6Ihda08+kTjPnjdnytjQ4o6LMfq0BUMBUtPRRE79/HrHE3Lp3C4xf
y7tVdCemTdQGb2iTdoOZFkJ7WgzPfLUJzTsEoExPAGq9Wkbnw3jJSiXenykWfP07
i85FbAt6LOX6PCeSKwIDAQAB
—–END PUBLIC KEY—–

O arquivo a ser assinado digitalmente tem o seguinte conteúdo:

“Frederico Pandolfo – Arquivo Assinado digitalmente 12345”

crie-o usando o seguinte comando:

echo -n “Frederico Pandolfo – Arquivo Assinado digitalmente 12345” > arquivo.txt

Por que da opção -n no echo? É que sem ela, o echo adicionará um caractere de nova linha automaticamente após o texto.

Para assinar usa-se o seguinte comando:

openssl dgst -sha1 -sign chaveprivada.key -out arquivo.sig arquivo.txt

O arquivo arquivo.sig é a assinatura digital. Não colarei ele aqui pois o arquivo gerado é binário.

Se alguém disponibilizar este arquivo na internet, e fornecer o arquivo de assinatura junto, assim como a chave publica, é possivel verificar se o arquivo é realmente autêntico usando o comando:

openssl dgst -sha1 -verify chavepublica.key -hex -signature arquivo.sig arquivo.txt
se a resposta for:
Verified OK

então o arquivo é autêntico.

Ta, é complicado fazer na linha de comando – na realidade, eu estou “forçando” o uso do OpenSSL para chegar no tópico de certificação digital.🙂

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: