Controlo de Integridade e Assinatura DigitalControlo de IntegridadeEm poucas palavras o "Controlo de Integridade" destina-se a verificar se uma mensagem sofreu algum tipo de alteração de conteúdo entre a origem e o destino. Neste aspecto pode fazer recordar o problema da detecção de erros durante a transmissão de dados. O controlo de integridade é contudo muito mais complexo porque temos de entrar em consideração com todo o tipo de acções de terceiros no sentido de "furar" o sistema. Para implementar o controlo de integridade é adicionada à mensagem alguma informação adicional que representa o resultado da aplicação de algum tipo de algoritmo ao conteúdo da mensagem. Quando a mensagem chega ao destino o algoritmo é novamente aplicado e compara-se o resultado obtido com aquele que a mensagem transporta. Até este ponto este mecanismo é semelhante a uma vulgar "detecção de erro". Implementado deste modo, nada impede que um terceiro capture a mensagem, produza alterações no seu conteúdo e aplique o algoritmo para gerar o resultado correcto a adicionar à mensagem, a entidade de destino não vai poder detectar este tipo de situação. Sob o ponto de vista de segurança, os mecanismos de controlo de integridade só são válidos quando associados a algum tipo de autenticação. CifragemA simples aplicação de cifragem é capaz de garantir tanto a integridade como a autenticação. Considere-se a o envio de uma mensagem cifrada de A para B:
"Checksum" CriptográficoEsta técnica envolve a utilização de uma chave secreta, em conjunto com um algoritmo são aplicados à mensagem e produzem um bloco de dados de dimensão fixa conhecido por "Checksum" Criptográfico ou "Message Authentication Code" (MAC). MAC = checksum(MENSAGEM,CHAVE SECRETA) O MAC é enviado em conjunto com a mensagem da entidade A para a entidade B, a entidade B gera também um MAC e verifica se coincide com o que chegou juntamente com a mensagem. Como apenas A e B conhecem a chave secreta, B sabe que a mensagem veio de A e não foi adulterada. Como sempre alguém pode recorrer à força bruta para tentar obter a chave secreta. Supondo que não se implementa confidencialidade, então existe acesso público à mensagem M e ao respectivo MAC, basta executar MAC1 = checksum(MENSAGEM,CHAVE) para todas as chaves possíveis, tentando obter MAC = MAC1. Sendo k o número de bits da CHAVE, então existe um total de 2k chaves possíveis, este será também o número de MAC's obtidos, contudo sendo n o número de bits do MAC, se n < k então apenas serão produzidos 2n < 2k MAC's diferentes. Nestas condições ao empregar a força bruta vão ser obtidas 2(k-n) chaves possíveis. Será necessário recorrer a outro exemplar (M,MAC) e aplicar a mesma técnica, agora apenas serão testadas as 2(k-n) chaves obtidas no passo anterior, serão então obtidas 2(k-2xn) chaves possiveis. Em média serão necessários k/n passos destes até obter uma chave única. Uma implementação comum de "Checksum" Criptográfico é o FIPS PUB 113 ou ANSI X9.17. O X9.17 basia-se no DES em modo CBC, com um vector inicial zero. Este algoritmo também é conhecido por DAA ("Data Authentication Algotithm"), usa uma chave DES de 56 bits e produz um resultado de 64 bits, neste algoritmo o MAC é também designado de DAC ("Data Authentication Code"). Para DAC pode utilizar-se menos do que os 64 bits produzidos pelo DAA. Neste caso utilizam-se pelo mesnos os 16 bits da esquerda. Funções "Hash"Uma função "hash" tipica recebe como "input" uma mensagem de comprimento variável e produz um bloco de comprimento fixo que representa o conteúdo da mensagem. A função deve ser tal que a minima alteração da mensagem produz uma alteração no bloco de saida. Por outro lado a probabilidade de duas mensagens diferentes produzirem o mesmo bloco deve ser praticamente nula. Os algoritmos "hash" mais conhecidos são:
Um função "hash" não proporciona autenticação, qualquer um pode criar uma mensagem e gerar o respectivo "message digest" ou "hash code", para se conseguir autenticação é necessário usar conjuntamente algum mecanismo de cifragem, convencional ou não:
(*) este tipo de assinatura pode ser atacado do seguinte modo ("birthday attack"):
O grau de dificuldade com que este tipo de fraude é realizado depende do número de "bits" do "hash-code", para m bits será necessário começar por gerar dois conjuntos de 2m/2 mensagens, nesta situação a probabilidade de se conseguir um par adequado (mesmo hash-code) é de 0,5 (50%). Assinatura DigitalAnteriormente foram já abordados mecanimos que permitem a implementação da assinatura digital. A assinatura digital tem objectivos equivalentes aos das assinaturas manuscritas. As principais propriedades de uma assinatura digital são:
A estas propriedades adicionam-se algumas da caracter prático: "deve ser fácil produzir a assinatura", "deve ser fácil verificar a assinatura", "deve ser fácil armazenar assinaturas". "Direct Digital Signature"A implementação directa ("Direct Digital Signature") envolve a cifragem da mensagem com a chave privada do autor ou a geração de um "hash-code" que é depois cifrado da mesma forma. Este tipo de implementação tem um ponto fraco, em caso de disputa o autor pode negar a autoria alegando que a sua chave privada foi roubada ou forjada por alguém. "Arbitrated Digital Signature"A solução para o problema apontado envolve o recurso a uma entidade na qual todas as partes são obrigadas a confiar ("Arbitrated Digital Signature"). A entidade A assina a mensagem e envia-a à entidade C ("árbitro"), esta entidade é então responsável por tomar todas as medidas e verificações necessárias para autenticar a origem da mensagem, adiciona-lhe uma etiqueta temporal e envia-a à entidade de destino. Todas as transações (A para C e de C para B) são devidam autenticadas e com confidencialidade garantida. Existem inumeras implementações, em algumas C tem acesso ao conteúdo decifrado da mensagem, noutras não. |