Criptografia, Hash, Assinatura Digital: Qual a diferença?

Nos últimos anos temos vivido um crescimento exponencial do volume de dados gerados por sistemas em geral – redes sociais, sensores, internet das coisas, aparelhos móveis, tudo conectado e gerando dados a todo tempo. São inúmeros os artigos sobre os conceitos e técnicas de Big Data, que fornecem informações sobre como lidar com tamanha quantidade de dados. Entretanto, acompanhamento tal crescimento, aumenta também a preocupação com a segurança e privacidade da informação.

No mercado financeiro especialmente, com milhares de transações ocorrendo a todo instante, a preocupação se torna ainda maior, pois a menor falha sde segurança pode causar um impacto financeiro e de marketing muito grande para as instituições.

Em termos de algoritmos e codificação, existem alguns conceito diretamente ligados à segurança e que muitas vezes são usados de forma errada por desenvolvedores. Vamos neste post procurar esclarecê-los, usando analogias do mundo real.

Hash

O hash é o conceito mais simples entre os que vamos abordar. Trata-se de uma função matemática aplicada sobre um conjunto de dados que gera outro número, este conhecido como hash. De forma bem simplista, pode ser equivalente a um dígito verificador. Um exemplo bem simples do dia-a-dia é o boleto bancário. Quando temos uma representação numérica como 23790.12301 60000.000053 25000.456704 1 63380000013580, o dígito destacado é calculado em função de todos os outros digítos do boleto, de forma que qualquer alteração nos demais dados do boleto geraria um novo dígito verificador, permitindo assim que perceba-se facilmente qualquer erro de digitação em um sistema de Internet Banking por exemplo. Neste caso, o hash contendo apenas um dígito apenas é bem simples e tem propósito simples também, apenas validar eventuais erros de digitação.

Outra aplicação de hashes é o download de arquivos da Internet. Especialmente no caso de arquivos grandes, é comum que sejam disponibilizados nos sites a informação do hash do arquivo. Desta forma, após a conclusão do download, pode-se calcular o hash sobre o arquivo baixado, comparando-o com o esperado. Em caso de qualquer alteração no conteúdo do arquivo durante o download, o hash calculado será diferente do esperado, e o erro será detectado.

Claro, para que tudo isso funcione, os algoritmos de hash devem ser públicos, para que qualquer entidada possa calculá-lo e validar os dados. No caso dos boletos, o algoritmo é definido pela Febraban, enquanto para os arquivos é comum se usar algoritmos bem conhecidos, como MD5, SHA1, SHA-256, SHA-512. Outra característica de hashes é que cada algoritmo sempre gerará o mesmo hash para a mesma entrada, e não é possível calcular a entrada a partir do hash.

Assinatura Digital

A assinatura digital é um hash mais elaborado. Também consiste de uma função matemática aplicada sobre os dados de entrada – um arquivo, uma mensagem de texto, etc. Porém neste caso além de garantir que o conteúdo não foi alterado, também queremos garantir a autenticidade de quem o gerou. Uma aplicação bem comum de assinatura é o envio de dados para a Receita Federal. Neste caso podemos utilizar um certificado digital para garantir que sua declaração de imposto de renda não foi alterada na transmissão e que não foi gerada por outro contribuinte tentando se passar por você.

Para que isso funcione, o cálculo da assinatura deve levar em consideração não só os dados, mas também uma informação que identifique o emissor. Poderíamos usar o CPF, pois ele identifica unicamente o contribuinte, então? Não, pois o CPF é uma informação facilmente obtida e assim qualquer pessoa poderia se passar por outra. Para que o processo funcione, é necessário que a informação seja conhecida apenas pelo emissor. O receptor, por sua vez, precisa conferir que os dados recebidos são autênticos, validando a assinatura. Mas como ele não conhece a chave usada na assinatura, não pode regerar a assinatura para validar.

Neste caso, o processo precisa ser mais avançado. O emissor deve gerar 2 informações, conhecidas como chave privada e chave pública. A chave privada, como o nome induz, é de conhecimento apenas do emissor da mensagem, enquanto a chave pública pode ser divulgada. As chaves possuem uma relação matemática muito forte, de tal forma que o receptor da mensagem pode conferir que a mesma foi de fato emitida pela pessoa esperada usando apenas a chave pública.

O algoritmo mais conhecido para geração deste par de chaves é o RSA, também de domínio público. E para que não haja fraudes, existe todo um processo, com envio de diversos documentos comprobatórios de identidade para autoridades certificadoras.

Criptografia

Até o momento falamos de processos para garantir a integridade e autencidade de uma informação qualquer, mas nada que garanta a confiencialidade da informação transmitida. Qualquer entidade que intercepte a comunicação poderia ter acesso ao conteúdo da mensagem. Isto, claro, não é adequado em um ambiente onde são trafegados dados estratégicos e confidenciais.

Para resolver  este cenário, surge o conceito de criptografia, que consiste em uma função que transforma uma mensagem legível em outra ilegível para transmissão. Você possivelmente já criptografou mensagens na infância, sem mesmo ter conhecimento deste termo, quando trocou cada letra por outra para embaralhar um bilhete antes de enviá-lo a outra pessoa. Apesar se muito simples, trata-se de um algoritmo de criptografia adequado às suas necessidades e recursos computacionais da época.

Durante a Segunda Guerra Mundial, processo semelhante foi usado em transmissões via rádio para evitar que as mensagens pudessem ser interceptadas. Cada letra era substituída por outra, porém desta vez o hardware utilizado para criptografia possuía uma configuração que alterava o resultado do processo.

Perceba que em ambos os casos temos os dados de entrada, os dados de saída criptografados, um algoritmo bem definido (trocar uma letra por outra), e uma chave. No caso do bilhete, a chave é tabela de-para com as letras. Já na segunda guerra , a chave era a configuração do hardware. E a chave usada na criptografia também era usada na descriptografia. Este tipo de criptografia é conhecida como criptografia de chave simétrica e hoje existem algoritmos bem sofisticados para o processo, como AES, DES e Triple DES.

Existe ainda um outro tipo de criptografia – assimétrica – onde as chaves usadas para criptografar e descriptografar são diferentes. Similar ao processo de assinatura, temos uma função matemática que criptografa a mensagem. Porém neste caso os papeis das chaves se invertem. A mensagem é criptografada com a chave pública do destinatário – para que qualquer entidade possa enviar mensagens criptografadas ao mesmo – e descriptografada com a chave privada do mesmo – para que apenas ele possa abrir a mensagem. A relação matemática entre as chaves precisa ser bem definida para que se possa criptografar a mensagem sem o conhecimento da chave que irá descriptografá-la. Aqui também o algoritmo mais conhecido é o RSA, e normalmente existe todo um processo para emissão das chaves.

Evolução dos algoritmos

Apesar de muito eficientes, os algoritmos de criptografia não são inquebráveis. Com a evolução e barateamento do poder computacional, aos poucos vai tornando-se menos difícil a utilização de força bruta para descriptografia de mensagens. Para que isto não se torne realmente viável, os algoritmos também precisam evoluir, seja aumentando o tamanho das chaves utilizadas (RSA com chaves de 1024, 2048, ou 4096 bits), ou pesquisando-se novos algoritmos.

Criptografia no SPB

Dentre os produtos MATERA, o SPB é aquele que faz mais uso dos conceitos acima. O Sistema de Pagamentos Brasileiro é responsável pela transmissão de mensagens entre instituições financeiras e o Banco Central. Dada a natureza dos dados trafegados, é fundamental garantir autencidade e sigilo em todas as transações, e para isso o Banco Central definiu um protocolo de segurança a ser seguido por todos os participantes, utilizando todas as técnicas e algoritmos citados acima. A especificação do protocolo pode ser consultada no manual de segurança, listados nos links externos.

Links Externos

  • http://en.wikipedia.org/wiki/Hash_function
  • http://en.wikipedia.org/wiki/Digital_signature
  • http://en.wikipedia.org/wiki/Cryptography
  • http://www.bcb.gov.br/sfn/ced/ManualdeSeguran%C3%A7adaRSFN-v32.pdf

Por LUIS SERGIO F. CARNEIRO

Postado em: 27 de fevereiro de 2015

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário