A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Criptografia Numaboa

SHA-1 *

Qui

7

Set

2006


20:06

(22 votos, média 4.64 de 5) 


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). 

Informações adicionais