|
|
www.ehaker.com
mail@ehaker.com
|
|
|
|
|
Algorytm SHA-1 (Secure Hash Algorithm).
|
|
Algorytm SHA-1 jest wymaganą funkcją haszującą
(Funkcja haszująca, funkcja rozpraszająca, funkcja zwężająca, funkcja mieszająca) w algorytmie Digital Signature Algorithm (DSA) będącym składnikiem standardu Digital Signature Standard (DSS).
Algorytm SHA-1 jest używany do obliczania skrótu (digest) dla dowolnej wiadomości lub pliku danych dostarczonego na wejściu.
1) Message padding - dopełnienie wiadomości
Celem operacji "Message padding" jest uczynienie aby wiadmość do haszowania miała długość będącą wielokrotnością 512. SHA-1 sekwencyjnie procesuje bloki 512 bitów podczas obliczania skrótu dla wiadomości.
Uzupełnianie polega na dopisaniu na końcu wiadomości:
- Bitu "1"
- m bitów "0"
- 64 bitowej liczby mówiącej o długości wiadomości
Dopełniona wiadomość będzie zawierać 16 *n słów 32 bitowych (n>0). A zatem możemy wiadomość uważać za sekwencję n bloków M1 , M2, ... , Mn, gdzie każdy Mi zawiera 16 słów (32 bity).
2) Funkcje w algorytmie SHA-1
Sekwencja 79 funkcji jest użyta w algorytmie SHA-1. Każda funkcja ft, dla t: 0 <= t <= 79 operuje na trzech 32-bitowych słowach B,C,D i produkuje 32-bitowe słowo jako wynik. Funkcje ft(B,C,D) są zdefiniowane następująco:
|
Sekwencja
|
Funkcja
|
Zapis JavaScript
|
|
(0 <= t <= 19)
|
ft(B,C,D) = (B AND C) OR ((NOT B) AND D)
|
( B & C) | ( (~B) & D)
|
|
(20 <= t <= 39)
|
ft(B,C,D) = B XOR C XOR D
|
B ^ C ^ D
|
|
(40 <= t <= 59)
|
ft(B,C,D) = (B AND C) OR (B AND D) OR (C AND D)
|
(B & C) | (B & D) | (C & D)
|
|
(60 <= t <= 79)
|
ft(B,C,D) = B XOR C XOR D
|
B ^ C ^ D
|
Cykliczne przesunięcie w lewo: Sn(X):
Sn(X) = (X << n) OR (X >> 32-n)
3) Wartości stałe algorytmu SHA-1
Sekwencja stałych wartości K(0), K(1), ... , K(79) jest użyta w algorytmie SHA-1:
|
Sekwencja
|
Stała
|
|
(0 <= t <= 19)
|
Kt = 5A827999
|
|
(20 <= t <= 39)
|
Kt = 6ED9EBA1
|
|
(40 <= t <= 59)
|
Kt = 8F1BBCDC
|
|
(60 <= t <= 79)
|
Kt = CA62C1D6
|
4) Obliczenie skrótu wiadomości (message digest)
Obliczenie skrótu wykonywane jest dla finalnie dopełnionej do 512 bitów wiadomości. Obliczenia używają dwu buforów, każdy składający się z 5-ciu 32 bitowych słów oraz sekwencji 80-ciu 32 bitowych słów.
- Sekwencja pierwszych 5 słów pierwszego bufora oznaczana jest: A,B,C,D,E.
- Sekwencja pierwszych 5 słów drugiego bufora oznaczana jest: H0, H1, H2, H3, H4
- Sekwencja 80-ciu słów oznaczana jest: W0, W1,..., W79
- Słowo TEMP oznacza w całości bufor.
16 bloków po 32 bity (512 bitów) oznaczone M1, M2,..., Mn są przetwarzane po kolei.
Inicjalizacja dodatkowych stałych:
H0 = 67452301
H1 = EFCDAB89
H2 = 98BADCFE
H3 = 10325476
H4 = C3D2E1F0
Procesowanie: M1, M2, ... , Mn . Dla każdego Mi, obliczamy:
a. Dzielimy Mi na 16 słów W0, W1, ... , W15, gdzie W0 jest pierwszym słowem.
b. Dla t = 16 do 79 liczymy (w pętli) Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16).
c. Podstawiamy A = H0, B = H1, C = H2, D = H3, E = H4.
d. Dla t = 0 do 79 wykonujemy w pętli:
TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt;
E = D; D = C; C = S30(B); B = A; A = TEMP;
e. Let H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.
Po obliczeniu Mn, skrótem wiadomości jest 160-bitowa reprezentacja 5-ciu słów:
H0 H1 H2 H3 H4.
Źródło:
http://e-handel.mm.com.pl/crypto/opis_algorytmu_sha.htm
|
|
|
|
|
|
|
Wyślij go na adres e-mail: mail@ehaker.com
|
|
|
|
Co byś chciał zobaczyć w serwisie ?
|
|
|