Você está na página 1de 6

Um hash é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal,

que permite a visualização em letras e números (0 a 9 e A a F), representando 1/2 byte cada. O conceito teórico diz que
"hash é a transformação de uma grande quantidade de informações em uma pequena quantidade de informações".

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio
eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal
forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a
partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para
dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.

Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele. Enquanto o ideal seria gerar
identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-
domínio de nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama
muito maior de valores do que (o resultado da função de hash).

Os mais usados algoritmos de hash são os de 16 bytes MD4 e MD5 ou o SHA-1, de 20 bytes. Características de alguns
algoritmos:

1. MD4: Desenvolvido em 1990/91 por Ron Rivest, vários ataques foram detectados, o que fez com que o algoritmo
fosse considerado frágil. [carece de fontes?]
2. MD5: O MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela
RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo par-a-par (P2P, ou
Peer-to-Peer, em inglês), verificação de integridade e logins. Existem alguns métodos de ataque divulgados para
o MD5[1][2].
3. SHA-1 (Secure Hash Algorithm): Desenvolvido pelo NIST e NSA. Já foram exploradas falhas no SHA.[3]
4. WHIRLPOOL: função criptográfica de hash desenvolvida por Paulo S. L. M. Barreto e por Vincent Rijmen (co-
autor do AES). A função foi recomendada pelo projeto NESSIE (Europeu). Foi também adotado pelo ISO e IEC
como parte do padrão internacional ISO 10118-3.

O processo é unidirecional e impossibilita descobrir o conteúdo original a partir do hash. O valor de conferência ("check-
sum") muda se um único bit for alterado, acrescentado ou retirado da mensagem.

MAC

• Message Authentication Code


• O MAC é calculado como uma função da Mensagem e de uma Chave
o MAC=F(K,M)
o A chave secreta tem de ser partilhada
o É usado habitualmente o DES para obter o MAC
• Dificuldade: O Peso de cifrar mensagens longas (ficheiros), para obter autenticidade
• Ideia: Usar funções de HASH

padding Byte

ANSI X.923

Em bytes ANSI X.923 preenchido com zeros (0) 's são preenchidos eo último byte define os limites de preenchimento ou
o número de bytes acolchoada.

Exemplo: No exemplo a seguir o tamanho do bloco é de 8 bytes, eo preenchimento é necessário para 4 bytes (em
formato Hexadecimal)

... | DD DD DD DD DD DD DD | DD DD DD DD DD 00 00 00 04 |
ISO 10126

ISO 10126 (retirado de 2007 [2] [3] ) especifica que o preenchimento deve ser feito no final desse último bloco com bytes
aleatórios, eo limite de preenchimento devem ser especificadas por último byte.

Exemplo: No exemplo a seguir o tamanho do bloco é de 8 bytes e preenchimento é necessário para 4 bytes

... | DD DD DD DD DD DD DD | DD DD DD DD DD 81 A6 23 04 |

PKCS7

PKCS7 é descrito na RFC 3852 .

O preenchimento é em bytes inteiro. O valor de cada byte adicionado é o número de bytes que são adicionados, isto é,
N bytes, cada valor de N são adicionadas. O número de bytes adicionados vai depender do limite de bloco ao qual a
mensagem deve ser prorrogado.

O preenchimento será de:

01
02 02
03 03 03
04 04 04 04
05 05 05 05 05
etc

Exemplo: No exemplo a seguir o tamanho do bloco é de 8 bytes e preenchimento é necessário para 4 bytes

... | DD DD DD DD DD DD DD | DD DD DD DD DD 04 04 04 04 |

Zero Padding

Todos os bytes que são necessários para ser preenchido são preenchidos com zero.

Exemplo: No exemplo a seguir o tamanho do bloco é de 8 bytes e preenchimento é necessário para 4 bytes

... | DD DD DD DD DD DD DD | DD DD DD DD DD 00 00 00 00 |

padding Zero não pode ser reversível se o arquivo original termina com um zero ou mais bytes, o que torna impossível
distinguir entre bytes e bytes de dados em texto puro preenchimento.

SHA1

A família de SHA (Secure Hash Algorithm) está relacionada com as funções criptográficas. A função mais usada nesta
família, a SHA-1, é usada numa grande variedade de aplicações e protocolos de segurança, incluindo TLS, SSL, PGP,
SSH, S/MIME e IPSec. SHA-1 foi considerado o sucessor do MD5. Ambos têm vulnerabilidades comprovadas[1]. Em
algumas correntes, é sugerido que o SHA-256 ou superior seja usado para tecnologia crítica. Os algoritmos SHA foram
desenhados pela National Security Agency (NSA) e publicados como um padrão do governo Norte-Americano.

O primeiro membro da família, publicado em 1993, foi oficialmente chamado SHA; no entanto, é frequentemente
chamado SHA-0 para evitar confusões com os seus sucessores. Dois anos mais tarde, SHA-1, o primeiro sucessor do
SHA, foi publicado. Desde então quatro variantes foram lançadas com capacidades de saída aumentadas e um design
ligeiramente diferente: SHA-224, SHA-256, SHA-384, e SHA-512 — por vezes chamadas de SHA-2.

Foram feitos ataques a ambos SHA-0 e SHA-1[2]. Ainda não foram reportados ataques às variantes SHA-2, mas como
elas são semelhantes ao SHA-1, pesquisadores estão preocupados, e estão a desenvolver candidatos para um novo e
melhor standard de hashing.

RSA
RSA é um algoritmo de criptografia de dados, que deve o seu nome a três professores do Instituto MIT (fundadores da
actual empresa RSA Data Security, Inc.), Ronald Rivest, Adi Shamir e Leonard Adleman, que inventaram este algoritmo
— até a data (2008), a mais bem sucedida implementação de sistemas de chaves assimétricas, e fundamenta-se em
teorias clássicas dos números. É considerado dos mais seguros, já que mandou por terra todas as tentativas de quebrá-
lo. Foi também o primeiro algoritmo a possibilitar criptografia e assinatura digital, e uma das grandes inovações em
criptografia de chave pública.

Funcionamento

O RSA envolve um par de chaves, uma chave pública que pode ser conhecida por todos e uma chave privada que deve
ser mantida em sigilo. Toda mensagem cifrada usando uma chave pública só pode ser decifrada usando a respectiva
chave privada. A criptografia RSA atua diretamente na internet, por exemplo, em mensagens de emails, em compras on-
line e o que você imaginar; tudo isso é codificado e recodificado pela criptografia RSA.

Geração das chaves

No RSA as chaves são geradas desta maneira:

1. Escolha de forma aleatória dois números primos grandes e , da ordem de 10100 no mínimo.
2. Compute
3. Compute a função totiente em : .
4. Escolha um inteiro tal que 1 < < , de forma que e sejam primos entre si.
5. Compute de forma que , ou seja, seja o inverso multiplicativo de em
.

• No passo 1 os números podem ser testados probabilisticamente para primalidade


• No passo 5 é usado o algoritmo de Euclides estendido, e o conceito de inverso multiplicativo que vem da
aritmética modular

Por final temos:

A chave pública: o par de números e


A chave privada: o par de números e

Cifração

Para transformar uma mensagem , onde , numa mensagem cifrada usando a chave pública do
destinatário e basta fazer uma potenciação modular:

A mensagem então pode ser transmitida em canal inseguro para o receptor. Há um algoritmo para realizar esta potência
rapidamente.

Decifração

Para recuperar a mensagem da mensagem cifrada usando a respectiva chave privada do receptor e , basta
fazer outra potenciação modular:

Implementação

Em traços gerais, são gerados dois pares de números – as chaves – de tal forma que uma mensagem criptografada com
o primeiro par possa ser apenas decriptada com o segundo par; mas, o segundo número não pode ser derivado do
primeiro. Esta propriedade assegura que o primeiro número possa ser divulgado a alguém que pretenda enviar uma
mensagem criptografada ao detentor do segundo número, já que apenas essa pessoa pode decriptar a mensagem. O
primeiro par é designado como chave pública, e o segundo como chave secreta.
RSA baseia-se no fato de que, embora seja fácil encontrar dois números primos de grandes dimensões (p.e. 100
dígitos), conseguir factorizar o produto de tais dois números é considerado computacionalmente complexo (em outras
palavras, o tempo estimado para o conseguir ronda os milhares de anos). De fato, este algoritmo mostra-se
computacionalmente inquebrável com números de tais dimensões, e a sua força é geralmente quantificada com o
número de bits utilizados para descrever tais números. Para um número de 100 dígitos são necessários cerca de 350
bits, e as implementações atuais superam os 512 e mesmo os 1024 bits.

Assinatura digital
Ver artigo principal: Assinatura digital

O algoritmo RSA é extensível a este contexto, pelas suas propriedades. Para implementar um sistema de assinaturas
digitais com RSA, o utilizador que possua uma chave privada d poderá assinar uma dada mensagem (em blocos) m com
a seguinte expressão:

Como se pode deduzir, é difícil descobrir s sem o conhecimento de d. Portanto, uma assinatura digital definida conforme
esta equação é difícil de forjar. Mas o emissor de m não pode negar tê-la emitido, já que mais ninguém poderia ter criado
tal assinatura. O receptor recupera a mensagem utilizando a chave pública e do emissor:

Como tal, o receptor consegue validar a assinatura do emissor calculando se mod n. Podemos verificar então que o
algoritmo RSA satisfaz os três requisitos necessários de uma assinatura digital.

É fácil deduzir que a assinatura varia dependentemente da mensagem em si, e que operando sobre mensagens longas o
tamanho da assinatura seria proporcional. Para colmatar esta situação, faz-se operar o algoritmo sobre um resumo
(digest) da mensagem, que identifique essa mensagem como única – geralmente o digest de uma mensagem varia
alterando um único byte –, o que mantém, como consequência, que uma assinatura varia de mensagem para
mensagem, para um mesmo emissor. Exemplo de função geradora do digest é o Secure Hash (SHA-1).

DSS

Origem: Wikipédia, a enciclopédia livre.


Ir para: navegação, pesquisa

O Padrão de assinatura digital (DSS) é o padrão que usa o algoritmo de assinatura digital (DSA) para seu algoritmo de
assinatura e SHA-1 como algoritmo de hash de mensagens. O DSA é uma codificação de chave pública usada apenas
para gerar assinaturas digitais e não pode ser usada para criptografia de dados.

- O que é SSL?

SSL ( Secure Sockets Layer) é uma tecnologia de segurança que é utilizada para codificar os dados transferidos entre o
computador de um utilizador e um website. O protocolo SSL, através de um processo de encriptação dos dados, previne
que os dados transmitidos possam ser interceptados, ou mesmo alterados no seu percurso entre o navegador (browser)
do utilizador e o site com o qual ele está ligado, garantindo desta forma a troca de informações confidenciais como os
dados de cartão de crédito.

- Como identificar um site que utiliza SSL?

Quando um visitante de uma loja ou website se liga a um servidor que está utilizando o protocolo SSL, eles irão notar na
barra de endereços, que o protocolo passa a ser https:// ( no lugar do http:// padrão). Aliado a isto, a maioria dos
browsers mostram um cadeado. Quando este cadeado está visível, o utilizador passa a saber que está estabelecida uma
ligação segura.

- Como gerar um certificado SSL?

Para obter um certificado digital SSL é necessário fornecer informações sobre o detentor do Website, tais como
endereço, documentação e pessoa de contacto. Com estes dados, é gerado um par de chaves de encriptação, que irão
garantir o processo de codificação dos dados. Estas chaves são duas: Uma chave privada, que deverá ficar somente no
servidor e uma chave pública que será utilizada, em conjunto com as informações de registo, para gerar um CSR
(Certificate Signing Request).

Este CSR é então submetido a uma autoridade certificadora (CA) que irá validar os dados de registo, através da
comprovação da autenticidade dos documentos e da propriedade do website, garantindo que aquele certificado foi
realmente emitido para o proprietário do website.

A autoridade certificadora, gera então o certificado definitivo, que deverá ser instalado pelo responsável do alojamento
do website.

- O que é uma autoridade de certificadora (CA)?

As "Certification Authority" ou Autoridade Certificadora (CA) são empresas que realizam a emissão dos certificados
seguros SSL. As autoridades certificadoras são responsáveis por validar a indentidade de um website. O que mais se
aproxima de uma entidade normalizadora das autoridades certificadoras é o "Webtrust Compliancy Program"
administrado pela AICPA/CICA. A maioria das CA's obedecem aos critérios da Webtrust.

- Como escolher o certificado apropriado?

O critérios mais importantes a serem considerados para escolher um certificado, são o reconhecimento inserido nos
browsers e a marca do emissor do certificado.
O reconhecimento pelos web browsers (navegadores) é importante, porque existem muito tipos de utilizadores que
utilizam Windows, Linux, Macintosh e em cada um destes sistemas operativos, existe mais de uma opção de navegador.
O facto de utilizar um certificado que não tem o reconhecimento pela maioria dos browsers, poderá fazer com que um
número significativo de visitantes do seu site se veja impossibilitado de poder utilizar o certificado.
Para evitar este tipo de problema, deve-se procurar um certificado de uma autoridade certificadora que tenha renome no
mercado, conquistado através da aprovação por parte dos utilizadores e também pelos desenvolvedores dos
navegadores, que consequentemente irão incluir o suporte directamente no navegador.
Com relação ao tipo específico de certificado, é de escolher sempre os certificados a partir de 128 bits de codificação.
Actualmente já existem certificados de 256 bits, estes aumentam de forma clara a segurança na troca de dados e
credibilizam ainda mais a loja online.

S/MIME

O S/MIME foi desenvolvido para prover segurança ao MIME. Um agente S/MIME é um software que pode atuar como
um agente de envio e/ou recebimento. Um agente de envio é um software capaz de criar objetos S/MIME CMS e
mensagens MIME que contenham objetos CMS. Um agente se recebimento é um software capaz de interpretar e
processar esses objetos.
Um agente S/MIME deve suportar os principais algoritmos de criptografia. Por exemplo: algoritmos de hash: SHA-1 e
MD-5; algoritmos de assinatira digital: DSS e RSA-PSS; algoritmos de encriptação: rsaEncryption e Diffie-Hellman
key exchange.
Definições
Aqui são apresentados alguns conceitos que serão necessários para a compreensão do restante do trabalho.

o Assinatura Digital: mecanismo para garantir autenticidade e integridade de um documento digital. É


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.
o Autoridades Certificadoras: são órgãos responsáveis pela emissão de Certificados Digitais.
o Certificado Digital: 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.

o PKI: PKI em português significa Infra-estrutura de Chaves Públicas (ICP). As ICPs têm a função de
garantir 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.

O PGP(Pretty Good Privacy) é utilizado para criptografia a fim de proteger a privacidade dos e-
mails, permitindo desta forma a comprovação de que os e-mails não foram modificados. O PGP
pode, ainda, ser utilizado como um sistema à prova de falsificações de assinaturas digitais
permitindo, desta forma, a comprovação de que arquivos ou e-mails não foram modificados