Assinatura Digital

1. Introdução

No dia-a-dia a veracidade de um documento se dá a assinatura que está presente nele, somente assim ele pode ser levado em conta legalmente.
Com a Internet cada vez mais presente em nosso dia-a-dia, encontramos um problema: Como dar veracidade e autenticidade à um documento enviado pela web ?
É por essas e outras razões que a assinatura digital foi criada. Apesar de não ser 100% segura, a probabilidade de haver uma falsificação da mesma pode ser comparada à de alguém falsificar sua assinatura no papel. Para quebrá-la por força bruta, é necessário um poder computacional inimaginável, já que os algoritmos de criptografia estão ficando cada vez mais complexos e as chaves geradas pelos mesmos, cada vez maiores.

2. História da Criptografia

Desenvolvida por Arthur Scherbius em 1918, a Enigma levantou um grande interesse por parte da marinha de guerra alemã em 1926, quando passou a ser usado como seu principal meio de comunicação e ficaram conhecidas como Funkschlüssel C.

graphic
Máquina Enigma – Versão da Marinha

Em 1928, o exército elaborou sua própria versão, a Enigma G, e passou a ser usado por todo o exército alemão, tendo suas chaves trocadas mensalmente.
A máquina era elétrico-mecânica e funcionava com rotores (primeiramente com 3 e depois com até 8 rotores). Ao pressionar uma tecla, o rotor mais da esquerda avançava uma posição, o que ocasionava a rotação dos outros rotores da direita. Esse movimento contínuo dos rotores ocasionava em diferentes combinações na encriptação.
A codificação de uma mensagem criptografada pela Enigma era considerada impossível na época (já que para tal, seria necessário uma alta força bruta computacional).
A título de curiosidade, os Aliados só conseguiram decifrar os códigos da Enigma graças ao roubo de uma dessas máquinas, e que com graças à engenharia reversa, foram construídas máquinas capazes de ler e codificar os códigos alemães, os Colossus.

graphic
Colossus

A Enigma acabou por gerar diversos descendentes, tais como a Typex, a SIGABA e a M- 134-C, que apesar de serem semelhantes à Enigma em seus princípios básicos, eram muito mais seguras.
A criptografia passou a ser usada em larga escala por todas as ações, principalmente em épocas de guerra, tal como durante a Guerra Fria, onde Estados Unidos e União Soviética usaram esses métodos a fim de esconder do inimigo suas ações e movimentações, criptografando-as e impedindo que outros que não possuíssem a chave pudessem ler, forçando-os a usar diversos métodos para quebrar os códigos de criptografia.
Depois disso surgiram diversos tipos de criptografia, tais como a por chave simétrica, por chave assimétrica e por hash (podemos citar ainda a criptografia quântica, que ainda está em fase de testes).

3. Tipos de Criptografia

No caso das Chaves (tanto Simétrica quanto Assimétrica), o nível de segurança de uma criptografia é medido no número de bits, ou seja, quanto mais bits forem usados, mais difícil será quebrar a criptografia na força bruta.
Ex: Se tivermos uma criptografia de 10 bits, existirão apenas 2¹º (ou 1024) chaves, porém, ao usarmos 64 bits, o número de chaves possíveis subirá para aproximadamente 20 x 10^18 chaves, um número alto até mesmo para um computador.

No caso da função Hash, o nível de segurança é dado pela dificuldade de se criar colisões intencionais, evitando que haja sequência iguais para dados diferentes.


Criptografia Hash

A criptografia hash permite que, através de uma string de qualquer tamanho, seja calculado um identificador digital de tamanho fixo, chamado de valor hash. O valor hash geralmente é formado por 16 bytes (no caso do MD-2, MD-4 e MD- 5) ou 20 bytes (no caso do SHA-1), mas pode se estender, embora não passe de 512 bytes.
Seja uma função hash H, e x uma string qualquer, teremos que H(x) será o valor hash para a string x.
As características básicas de uma função hash são:

  • O valor de entrada da função possui qualquer tamanho;
  • O valor de saída da função possui tamanho fixo;
  • H(x) é relativamente fácil de ser computado, para qualquer valor de x;
  • H(x) é uma função “one-way”;
  • H(x) é livre de colisão.

Uma função hash é dita "one-way” pois uma vez obtido o valor hash h para uma string x, é computacionalmente impossível fazer o processo inverso, ou seja, encontrar um valor x tal que H(x) = h.

Diz-se ainda que H(x) é livre de colisão, significando que as funções hash devem garantir uma probabilidade mínima de que duas strings diferentes acabem por resultar no mesmo valor hash. Qualquer alteração na string original que deu origem ao identificador digital, mesmo que de um único bit, acabará por gerar uma alteração significativa no valor hash final.


Chaves Simétricas

É o tipo mais simples de criptografia, já que tanto o emissor quanto o receptor da mensagem possuem a mesma chave, ou seja, a mesma chave é usada tanto na codificação quanto na decodificação.
Para ser realizada, basta que o emissor, antes de enviar a mensagem criptografada, envie a chave privada que será utilizada para descriptografá-la.


graphic
Retirado do site da USP

Existem diversos algoritmos criptográficos que fazem uso da Chave Simétrica, tais como:

- DES (Data Encryption Standard)

Criado pela IBM em 1977, usa criptografia de 56 bits, o que corresponde a cerca de 72 quadrilhões de chaves diferentes. Apesar de ser um valor bastante alto, foi quebrado por em 1997 por força bruta (tentativa e erro), em um desafio feito na Internet.

- IDEA (Internacional Data Encryption Algorithm)

Criado em 1991 por Massey e Xuejia Lai, utiliza chaves de 128 bits com uma estrutura semelhante ao anteriormente citado DES, porém, possui uma implementação mais simples.

- RC (Ron’s Code ou Rivest Cipher)

Desenvolvido por Ron Rivest, é largamente utilizado em e- mails. Possui diversas versões (RC2, RC4, RC5 e RC6), com chaves que vão de 8 à 1024 bits

Podemos citar ainda o 3DES, o Twofish e o Blowfish, entre outros.

Porém, a Chave Simétrica apresenta alguns problemas graves, tais como a necessidade da troca constante dessas chaves e a impossibilidade de serem usados com fins de autentificação (já que a transmissão da chave privada de um para o outro pode não ser segura e acabar caindo em outras mãos), apesar de seus algoritmos serem mais rápidos do que os algoritmos assimétricos.



Chaves Assimétricas

Diferentemente do método de Chave Simétrica, esse tipo utiliza 2 chaves, uma pública e uma privada. O sistema funciona da forma que alguém cria uma chave e envia essa chave à quem quiser mandar informações à ela, essa é a chamada chave pública. Com ela é feita a codificação da mensagem. Para decodificação será necessário utilizar uma outra chave que deve ser criada, a chave privada – que é secreta.

graphic
Retirado da Wikipedia
graphic
Retirado da Wikipedia
Na figura, a chave verde representa a chave pública, enquanto a chave rosa reprenta a chave privada.
Esse esquema de chaves pública e privada atuando em conjunto funciona muito bem, principalmente quando queremos garantir a confiabilidade nos dados, já que somente o proprietário da chave privada será capaz de descriptografar a mensagem e vice-versa (nem mesmo o dono da chave pode descriptar a mensagem que ele encriptou, a não ser que ele possua a outra chave), ou seja, mesma que ela caia em “mãos erradas”, essa pessoa não será capaz de lê-la.
Existem diversos algoritmos criptograficos que fazem uso da Chave Simétrica, tais como:

- RSA (Rivest, Chamir e Adleman)

Criado em 1977 por Ron Rivest, Adi Shamir e Len Adleman, é um dos algoritmos de chave assimétrica mais utilizados. Seu funcionamento consiste na multiplicação de 2 números primos muito grandes para a geração de um terceiro número. Para quebrar essa cripografia, seria necessário a fatoração desse número para encontrar os 2 números primos que o geraram, porém, para isso é necessário um poder muito alto de processamento, o que acaba inviabilizando a tarefa. A chave privada são os dois números primos e a pública é o terceiro número.

- ElGamal

Desenvolvido por Taher ElGamal, faz uso de um algoritmo conhecido como “logaritmo discreto” para se tornar seguro. É frequente seu uso em assinaturas digitais.
Podemos citar ainda o DSS (Digital Signature Standard), entre outros.

Assim como a Chave Simétrica, a Assimétrica também tem seus problemas. A utilização de algoritmos reversos para desencriptação de mensagens acaba por elevar o tempo computacional dos algoritmos de criptografia assimétrica, tornando inviável o seu uso em uma comunicação intensa.



Combinação dos Tipos

Com os dois tipos de Chaves (Simétrica e Assimétrica) tendo suas vantagens e desvantagens, era natural o surgimento um método que buscasse mixar as vantagens de cada um, eliminando assim, suas desvantagens.
Os protocolos TLS (Transport Layer Security) e SSL (Secure Sockets Layer) são exemplos desse mix. Para compensar o problema do segredo pré-estabelecido da chave simétrica e o alto poder computacional necessário na chave simétrica, foi elaborado um meio onde em sua primeira etapa (handshake), seja utilizado a criptografia assimétrica, autenticando assim os nós e combinando uma chave secreta para um uso posterior na criptografia simétrica. Como o algoritmo de chave pública garante que a negociação foi realizada em um canal seguro, não havendo a necessidade da troca periódica da chave (problemas no caso da Chave Simétrica), todo o restante do processo pode passar a ser realizado utilizando algoritmos de chave simétrica, o que diminui potencialmente a necessidade do poder computacional, permitindo seu uso em uma comunicação mais intensa (problemas encontrados na Chave Assimétrica).

4. Funcionamento da Assinatura Digital

O processo de criação de uma assinatura digital, consiste em:

  • Aplicar uma função hash sobre a menssagem que se deseja assinar;
  • Usando uma chave privada, encriptar o valor hash;

O resultado será uma mensagem assinada digitalmente. Em seguida, o emissor deve encaminhar a mensagem, junto com a chave pública. O receptor, por sua vez, deverá usar esta chave para descriptografar a assinatura. Se o resultado obtido for igual ao valor hash da mensagem recebida, significa que aquela assinatura é válida, e que a mensagem não sofreu nenhuma alteração ao longo da transmissão.

Imagem ilustrativa do funcionamento de uma Assinatura Digital:

Funcionamento

É importante notar que, assinar um mensagem é diferente de criptografá-la. O objetivo da criptografia é esconder o conteúdo, para que este não esteja acessível a terceiros. Já a assinatura digital visa garantir a autoria do documento, e que a mensagem não tenha sido modificada durante sua transmissão.

5. Algoritmos de Asssinatura Digial


RSA-PSS

Este algoritmo é baseado no algoritmo RSA de criptografia. Seu funcionamento pode ser expresso pela fórmula:

S = SigPrim (private key, Transform (Hash (M)))

Ou seja, aplicando uma primitiva de assinatura sobre a chave privada e uma transformação do valor hash da mensagem, é gerada a assinatura. Esta transformação em geral representa um sistema de “padding”(enchimento).
Na criptografia RSA essa formula pode ser traduzida como:

S = [(EM)^d] mod n
Onde (n, d) é a chave privada e EM é um inteiro que representa a mensagem criptografada.
O receptor então pode obter EM a partir da assinatura S, utilizando-se da chave pública:
EM = [(S)^e] mod n
Onde (n, e) é a chave pública.

Sistemas de Enchimento
Os sistemas de enchimento se fazem necessários neste tipo de criptografia para evitar que mensagens gerem valores não seguros para a aplicação do algoritmo. Isto é, existem valores para os quais a função modular se torna facilmente reversível, e portanto, não são seguros. Para evitar que isso ocorra, um enchimento – que pode ser fixo ou aleatório – é concatenado ao valor hash da mensagem.

Um Exemplo Funcional
Um exemplo numérico do funcionamento deste algoritmo é apresentado abaixo:
Sejam dois números primos p e q:
p= 61 e q= 53
Computa-se n =p*q:
n= 61*53 = 3233
Computa-se fi(n) = (p-1)(q-1)
fi(n)= (61 -1)*(53 -1) = 3120
É escolhido um número inteiro positivo qualquer, que seja coprimo em relação ao valor encontrado para fi(n):
e = 17
Computa-se d tal que o produto (d*e) seja concruente a [1 mod fi(n))]:
d= 2753
Agora já temos a chave privada (n, d) para assinar digitalmente a mensagem:
S = [(EM)^d] mod n , onde EM é um inteiro que representa a mensagem após ser aplicada uma transformação sobre o valor hash da mensagem.
Seja 123 o valor obtido para EM:
S = (123)^2753 mod 3233 = 2746
O destinatário então – de posse da mensagem, da assinatura S, e da chave pública(n, e) – poderá verificar a autenticidade da assinatura computando:
EM = [(S)^e] mod n , onde (n, e) é a chave pública.
EM = (2746)^17 mod 3233 = 123
Se o número obtido pela decriptação da assinatura for igual ao obtido pela transformação da mensagem recebida, a autenticidade da assinatira estará garantida.


ElGamal

Este algoritmo permite confirmar a autenticidade de uma mensagem enviada, mesmo que tenha sido enviada em um canal não seguro, além de fazer uso do problema de logaritmo de algoritmo discreto.
A geração de suas chaves segue o padrão das chaves públicas, ou seja, cada entidade gera um par de chaves e acertam a forma como vão distribuir as chaves públicas.

Geração das Chaves
A entidade A procede do seguinte modo:
Gera de forma aleatória um número primo p de grande dimensão e g, que é uma raiz primitiva módulo p;
Seleciona aleatoriamente um inteiro a, onde 1 ≤ ap-2 e calcula r = g^a (mod p);
A chave pública da entidade será (p, g, r), e sua chave privada será a.

Encriptação
A entidade B obtém a chave pública de A (p, g, r);
Representa a mensagem como se m fosse um inteiro no intervalo {0, 1, ..., p-1};
Seleciona aleatoriamente um inteiro k, 1 ≤ kp – 2;
Calcula γ = g^k (mod p) e δ = m x r^k (mod p);
O texto cifrado será c = (γ, δ).

Desencriptação
Para haver a recuperação, A deve:
Usando a chave privada a, calcular γ^(p – 1 – a) (mod p);
Recupera a mensagem m calculando γ^(-a) x δ (mod p).
O problema da cifra ElGamal é que ele possui um valor de expansão de mensagem cifrada de 2, ou seja, o comprimento da mensagem cifrada é o dobro da mensagem clara.
O uso de aleatoriedade em seu código busca aumentar sua segurança ao evitar a eficiência dos ataques através da análise estatística.

Um Exemplo Funcional
Um exemplo numérico do funcionamento deste algoritmo é apresentado abaixo:
A entidade A seleciona o número primo p = 2357 e uma raiz primitiva módulo 2357, g = 2;
Para chave privada, a entidade A escolhe a = 1751 (1 ≤ ap – 2);
g^a mod p = 2^1751 mod 2357 = 1185
Portanto, a chave pública de A é (p = 2357, g = 2, r = g^a = 1185);
Para encriptar a mensagem m = 2035, B seleciona de forma aleatória um inteiro k = 1520 (1 ≤ k ≤ 2355) e calcula:
γ = 2^1520 mod 2357 = 1430 e δ = 2035 x 1185^1520 mod 2357 = 697
Portanto, a mensagem encriptada é c = (1430, 697)
Para realizar a desencriptação, a entidade A calcula:
γ^(p – 1 – a) = 1430^605 mod 2357 = 872
A mensagem original encriptada m é então obtida quando calculamos:
m = 872 x 697 mod 2357 = 2035

6. Possibilidades de Fraude

Violação da chave privada

Como o sistema de assinatura digital se baseia numa criptografia de chaves assimétricas, uma das possibilidades de fraude seria o roubo da chave privada. Normalmente, esta chave fica guardada no computador pessoal do usuário. Portanto, a segurança da assinatura dependerá da segurança deste computador.

Uma das opções para tornar a chave privada mais difícil de ser roubada é o uso de smart cards. Esses cartões são capazes de armazenar a chave privada do usuário, e assinar digitalmente qualquer documento. A grande vantagem é que não há como ler a chave privada armazenada em um smart card. O chip do cartão é que faz o processo de criptografia dos dados, fazendo com que o computador usado pelo usuário não tenha acesso à sua chave privada, apenas à mensagem já assinada.


SmartCard


Leitores de SmartCard

Retirado do site Club Do Hardware

Existe ainda o eToken da Aladdin, que é basicamente igual ao SmartCard. É uma chave que é ligada ao USB do computador e que contêm o mesmo chip encontrado no SmartCard., ou seja, é um SmartCard USB. Sua vantagem perante o SmartCard ? Compare o número de computadores que possuem leitor de cartões e o número de computadores que possuem porta USB, aí está a sua resposta.

Aladdin eToken
Retirado do site da Aladdin

Distribuição da chave pública

Como em todo tipo de criptografia com chave assimétrica, a segurança da divulgação da chave pública é muito importante. Caso contrário, uma pessoa pode distribuir chaves públicas em nome de outras pessoas. Por exemplo:

Digamos que um atacante deseje transmitir uma mensagem em nome de uma pessoa A. Ele cria uma chave pública e a distribui, como se esta fosse a chave pública de A. Em seguida, ele pode encriptar qualquer mensagem usado sua chave privada, assinar digitalmente o documento e enviá-lo para um destinário B. B verificará a assinatura e não encontrará fraude. Para previnir este tipo de ataque, é necessário que haja uma ICP (Infra-estrutura de Chaves Públicas) ou, em inglês, PKI (Public Key Infrastructure).

As ICPs garantem a autenticidade das chaves públicas. No Brasil, a ICP-Brasil controla seis Autoridades Certificadoras*: a Presidência da República, a Receita Federal, o SERPRO, a Caixa Econômica Federal, a Serasa e a CertiSign.

* Autoridades Certificadoras são órgãos responsáveis pela emissão de Certificados Digitais**.
** Certificados Digitais são documentos que contém a chave pública de um usuário e os dados necessários para garantir sua identidade.

Timing Attacks

Outra possibilidade de descoberta da chave privada é quando o atacante conhece muito bem o hardware do usuário que assina uma mensagem digitalmente e é capaz de interceptar as mensagens assinadas por este. Se o atacante tiver conhecimento do tempo de encriptação(assinatura) de diversas mensagens, é possível que ele descubra a chave privada do usuário. Em geral, esse tipo de ataque era usado contra smart cards, no entanto Dan Boneh e David Brumley mostraram que é possível descobrir a chave privada de um servidor de uma rede local, com segurança baseado em OpenSSL, o que foi publicado no artigo Remote Timing Attacks are Practical (2003).

Uma forma de evitar timing attacks é garantir que o processo de encriptação seja feito sempre em tempo constante, para qualquer texto que seja assinado, apesar de acarretar uma perda de eficiência.

7. O Futuro
Anterior ao conceito de Chave Assimétrica, o conceito de Criptografia Quântica foi desenvolvida por Stephen Wiesner em 1970. Consiste no uso de fótons, que permite que 2 pessoas possam trocar uma chave secreta sem jamais terem trocado alguma mensagem.

Diferentemente da criptografia atual, que tem a Matemática como seu pilar central, a Criptografia Quântica se utiliza da Física. Suas principais características são:

      • Não necessidade de um segredo nem contato prévio entre as partes;
      • Detecção de intrusos tentando interceptar o envio das chaves;
      • Segura, mesmo perante a um poder computacional ilimitado.

Os problemas atuais dessa tecnologia são as altas taxas de erros em suas transmissões, principalmente quando a distância é maior do que 70 km (para fibras óticas) e algumas centenas de metros (no caso de transmissão aérea). Porém, com o desenvolvimento de novas tecnologias que possam dar suporte, além do aperfeiçoamento de tecnologias já existentes (como as fibras óticas), a Criptografia Quântica promete ser o novo padrão em termo de segurança de dados.
8. Perguntas
Qual a diferença entre criptografia e assinatura digital?

O objetivo da criptografia é esconder o conteúdo, para que este não esteja acessível a terceiros. Já a assinatura digital visa garantir a autoria do documento, e que a mensagem não tenha sido modificada durante sua transmissão.

Como é possível detectar se uma mensagem assinada digitalmente sofreu modifições?

Verificando se o valor hash da mensagem é igual ao valor obtido pela descriptação da assinatura, usando a chave pública do emissor.

Qual a difença entre asssinatura digital e certificado digital?

Assinatura digital é o método de autenticação de uma informação digital. Certificado Digital é um documento que contém a chave pública de uma pessoa (física ou jurídica) e os dados necessários para garantir sua identidade.

Qual a importância das ICPs?

As ICPs são importãntes para controlar a distribuição das chaves públicas, evitando fraudes. A ICP de um país controla as suas Autoridades Certificadoras, órgãos responsáveis pela emissão de Certificados Digitais.

Porque Chave Simetrica não poderia ser usada para assinatura digital?

Pois uma assinatura digital visa garantir a autoria de uma mensagem, e portanto a chave usada para a assinatura deve estar nas mão de uma única pessoa: o emissor que assina gitalmente a mensagem. Como na criptografia por chaves simétricas é necessário que emissor e receptor sempre possuam a mesma chave, ela não se torna apropriada para fins de autentificação.



9. Bibliografia
INFO Wester, Assinatura Digital. .

INFO Wester, Criptografia. .

VOLPI, MARLON MARCELO. ASSINATURA DIGITAL -
ASPECTOS TECNICOS, PRATICOS E LEGAIS, 1ª Edição, editora AXCEL BOOKS.

Clube do Hardware. >

Edson's Home Page.

http://www.gta.ufrj.br/grad/01_2/tls/toc2.htm

eCOMMERCE e a Assinatura Digital. .

Planalto Federal. .

Brumley, David; Boneh, Dan. Remote Timing Attacks are Practical timing.pdf/boneh03remote.pdf>.

Quaresma, P. Códigos e Criptografia


Postar um comentário

Postagens mais visitadas deste blog

MANUAL DE REDAÇÃO DA PRESIDÊNCIA DA REPÚBLICA

Plural de substantivos compostos

Atualidades - 15 de agosto de 2016