Criptografia Numaboa
SHA-1 *
Qui 7 Set 2006 20:06 |
- Detalhes
- Categoria: Funções Hash
- Atualização: Domingo, 06 Dezembro 2009 22:22
- Autor: vovó Vicki
- Acessos: 20463
O SHA-1 (Secure Hash Algorithm - Algoritmo Hash Seguro) foi aprovado pelo governo dos EUA em 1995 para ser usado por todos os departamentos e agências federais na autenticação de documentos digitais.
O que é o SHA-1
O SHA-1 é um padrão usado para calcular a representação condensada de uma mensagem ou arquivo de dados. Partindo de uma mensagem menor do que 264 bits, o SHA-1 produz uma saída de 160 bits chamada de digesto da mensagem. Este digesto pode ser a entrada para o DSA (Digital Signature Algorithm - Algoritmo de Assinatura Digital), o qual gera ou faz a verificação da assinatura da mensagem. Criar uma assinatura para o digesto, ao invés de criar uma para a mensagem, costuma melhorar a eficiência do processo porque o digesto da mensagem habitualmente é muito menor do que a mensagem. Tanto o verificador, quanto o criador, precisam usar o mesmo algoritmo hash para gerar e verificar uma assinatura digital.
O SHA-1 foi considerado seguro porque é impraticável encontrar uma mensagem que corresponda a um determinado digesto ou encontrar duas mensagens diferentes que produzam o mesmo digesto. Qualquer alteração feita numa mensagem em trânsito, com grande probabilidade dará como resultado um digesto diferente e a assinatura não poderá ser confirmada. O SHA-1 é uma revisão técnica do SHA - foi adicionada uma operação de deslocamento circular para a esquerda para aumentar a segurança oferecida por este padrão. O SHA-1 foi baseado em princípios semelhantes aos usados no algoritmo MD4, criado pelo professor do MIT, Ronald L. Rivest.
Aplicações do SHA-1
O SHA-1 pode ser aplicado, juntamente com o DSA, em e-mails, transferências eletrônicas de fundos, distribuição de software, armazenamento de dados e outras aplicações que requeiram garantia de integridade de dados e autenticação da origem dos dados. O SHA-1 também pode ser utilizado sempre que for necessário gerar uma versão condensada de uma mensagem.
O algoritmo SHA-1
Antes do cálculo do digesto propriamente dito, o tamanho em bits da mensagem precisa ser ajustado, as funções para os cálculos precisam ser preparadas e algumas constantes precisam ser definidas.
Ajuste do tamanho da mensagem
O objetivo deste ajuste é transformar o comprimento da mensagem num múltiplo de 512 bits porque o cálculo do digesto pelo SHA-1 processa sequencialmente blocos do referido tamanho. Se a mensagem que servirá de base para o cálculo do digesto for menor do que 264 bits, a primeira etapa é adicionar 1 bit no final da mensagem. Se usarmos a mensagem teste como base, seus bits serão os mostrados na linha identificada por ASCII (binário):
Mensagem | t | e | s | t | e | ASCII (hexa) | 74 | 65 | 73 | 74 | 65 | ASCII (binário) | 0111 0100 | 0110 0101 | 0111 0011 | 0111 0100 | 0110 0101 |
Ou seja, o primeiro passo é transformar a mensagem
01110100 01100101 01110011 01110100 01100101
em
01110100 01100101 01110011 01110100 01100101 1
Neste caso temos apenas um bloco de 41 bits, longe dos 512 necessários. Para completar este número, após o bit delimitador são acrescentados tantos bits zero quantos forem necessários para alcançar o tamanho desejado. Acontece que os últimos 64 bits do último bloco da mensagem devem ficar reservados para guardarem o tamanho original da mensagem. Neste nosso exemplo temos apenas um bloco, ou seja, é o primeiro e último. Neste caso, ao invés de adicionarmos 512 - 41 = 471 bits zero, acrescentaremos 512 - 64 - 41 = 407 bits zero. Em notação hexadecimal, a fonte para o SHA-1 com os zeros adicionados passa a ser:
74657374 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Os últimos 64 bits serão adicionados levando o valor do comprimento da mensagem original, ou seja, 40 (o bit delimitador não é contado). A representação binária do valor 40 é 0010 1000, e a representação hexadecimal do valor 40 ocupando 64 bits é 00000000 00000028. Adicionando este valor, o bloco completo fica
74657374 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000028
As funções do SHA-1
O SHA-1 usa uma sequência de funções lógicas conhecidas por f0, f1, ..., f79. Cada uma destas funções atua sobre três words de 32 bits (B, C e D) para produzirem apenas um word. Para estes três words B, C e D, a função ft(B,C,D) é definida como:
ft(B,C,D) = (B AND C) OR ((NOT B) AND D) ( 0 <= t <= 19) ft(B,C,D) = B XOR C XOR D (20 <= t <= 39) ft(B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40 <= t <= 59) ft(B,C,D) = B XOR C XOR D (60 <= t <= 79).
As constantes do SHA-1
A seguinte sequência de constantes de 32 bits K(0), K(1), ... , K(79) é usada. Os valores hexadecimais destas constantes são:
K = 5A827999 ( 0 <= t <= 19) Kt = 6ED9EBA1 (20 <= t <= 39) Kt = 8F1BBCDC (40 <= t <= 59) Kt = CA62C1D6 (60 <= t <= 79).
- Anterior
- Próximo >>