O modelo de criptografia quântica como existe hoje só é aplicável na distribuição de chaves privadas em setores que exijam muita segurança em curtas distâncias e não se importam de gastar um alto valor para isso. Portanto o uso da criptografia quântica está atrelado a zonas de pesquisas ou órgãos militares, para um consumidor normal essa criptografia é ainda impraticável já que a criptografia tradicional atende a maioria das necessidades com uma fração do custo.
Não faz sentido utilizar criptografia quântica para a transmissão de mensagens inteiras: a alta taxa de erros inviabilizaria a transmissão e o esquema de chaves públicas e chaves privadas é igualmente seguro.
Quando lidamos com dados de certo grau de importância como documentos identificados ou dados de transação comercial/bancária fica inevitável tratar de três problemas principais:
-Que os dados foram enviados por quem realmente diz ter enviado [Autenticidade]
-Que o receptor da mensagem possa assegurar que os dados não foram alterados no meio do caminho. [Integridade]
-Que o emissor não possa negar a autenticidade da mensagem. [Não-Repúdio]
Uma solução para esse problema foi proposta com o uso de criptografia de chave pública.
A função Hash de certa forma resume os dados, transformando um conjunto grande de bits em uma sequência razoavelmente pequena, geralmente não mais que 512 bits.
O algoritmo é criado de forma que minimize efeitos de colisão, quando dados diferentes geram códigos hash iguais. Outro requisito é de uma pequena alteração nos dados gere um Hash completamente diferente do original.
Teste para mensagem gerada pelo algoritmo MD5
1ac8149b3cad7f3a4b0b71fb9e012fb1
Teste para mensagem gerada pelo algoritmo MD5.
0486b86c1007a19b249b85af298bfcd1
Podemos ver que apenas um ponto adicionado altera quase que completamente o código.
Atualmente as funções mais usadas são o MD5 e o SHA-1. O algoritmo MD5 já foi considerado quebrado, mas ainda é muito usado, principalmente quando seu uso é apenas para testar a integridade do arquivo. O Governo americano está mudando seus aplicativos para adotarem o sistema SHA-2. Há uma competição de livre participação aberta pelo U.S. National Institute of Standards and Technology para escolher o algoritmo do SHA-3. O algoritmo vencedor será proclamado em 2012.
Uma tabela com as funções hash já quebradas e outras ainda postas a prova pode ser vista no site de um dos criadores do WHIRPOOL.
http://www.larc.usp.br/~pbarreto/hflounge.html
Esse Hash é adotado pela ISO (International Organization for Standartization). Foi desenvolvida por Paulo S.L.M. Barreto em conjunto com Vincent Rijmen, o Rij da criptografia Rijndael(AES).
Adotando o WHIRPOOL temos uma chance aproximada de 1-10^(-154) de ter um código diferente para uma pequena alteração nos dados.
O algoritmo implementado em C pode ser encontrado na página abaixo
http://www.larc.usp.br/~pbarreto/WhirlpoolPage.html
O Hash gerado é encriptado usando a chave privada do emissor. Essa é a assinatura digital.
O processo de verificação ocorre desencriptando a assinatura com a chave pública do emissor, o Hash original então é comparado com um novo Hash gerado pelos dados recebidos. Se forem iguais então pode-se assegurar da integridade e da autenticidade do arquivo, o emissor também não poderá repúdiar a mensagem a não ser em caso de roubo de sua chave privada.
Imagine que uma pessoa queira provar a outra a posse de uma 'verdade' sem que revela-la. Esse tipo de comunicação chamamos Zero-knowledge proof.
Uma analogia corriqueira para exemplificar o caso é a de uma caverna:
Nessa analogia temos uma pessoa (C) querendo provar para outra (D) que possui a chave que destranca uma passagem dentro da caverna. Para isso (D) espera fora da entrada enquanto (C) entra na caverna. (D) então anda até a entrada e grita para avisar qual o lado quer que (C) apareça. Repetindo esse caso, até a chance de (C) ter dado sorte nas escolhas fique ínfima, (C) terá provado possuir o código de abertura sem revelá-lo.
Protocolo Feige-Fiat-Shamir de identificação simplificado
Temos que N=p*q, p e q dois números primos. N é posto a público. Se (C) quer provar que possui uma sequência de números S primo em relação a N, e menor ou igual a (N-1), então (C) computa um valor V, tal que V=S²(módulo N). V e N são de conhecimento de (D). O processo para saber S por meio de V é complicado e requer um algoritmo que trabalha com complexidade não-polinomial.
Os seguintes passos são tomados:
(C) escolhe R um inteiro aleatório não revelado e calcula X=R²(módulo N), esse valor X é enviado.
(D) responde com um desafio,manda um valor E aleatório restrito a 0 ou 1 e pede por Y tal que Y=R*S^(E) (módulo N)
(C) envia como resposta Y; ou Y=R(módulo N) ou Y=R*S(módulo N)
A prova é descartada se (D) receber Y=0, em outro caso é verificado se Y²=X*V^(E) (módulo N). Ou Y²=X(módulo N) ou Y²=X*V(módulo N).
O processo então é repetido várias vezes para garantir a segurança.