SHA-1
Z Wikipedii
SHA (Secure Hash Algorithm) - rodzina powiązanych ze sobą funkcji skrótu zaprojektowanych przez NSA (National Security Agency) i publikowanych przez National Institute of Standards and Technology.
Pierwszy z nich opublikowany w 1993 oficjalnie nazwany SHA (nieoficjalnie, żeby nie pomylić z następcami określany jako SHA-0). SHA-1 opublikowany został w 1995 i całkowicie zastąpił wycofanego (ze względu na nieujawnione oficjalnie wady) z użytku SHA-0. Potem od 2001 powstały cztery następne warianty określane jako SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512).
W 2004 zgłoszono udane ataki na funkcje skrótu mające strukturę podobną do SHA-1 co podniosło kwestię długotrwałego bezpieczeństwa SHA-1. NIST ogłosił, że do 2010 zaprzestanie stosować SHA-1 na rzecz różnych wariantów SHA-2. SHA-0 i SHA-1 tworzą 160-bitowy skrót z wiadomości o maksymalnym rozmiarze 264 bity i jest oparty o podobne zasady co MD5. Podstawowym celem publikacji SHA był Standard Podpisu Cyfrowego (Digital Signature Standard), którego SHA był częścią. SHA jest podstawą szyfru blokowego SHACAL.
Spis treści |
[edytuj] Pseudokod
Wartości początkowe:
h0 := 0x67452301 h1 := 0xEFCDAB89 h2 := 0x98BADCFE h3 := 0x10325476 h4 := 0xC3D2E1F0
Przetwarzanie wstępne: dopisz '1' do wiadomości dopisz k '0', gdzie k jest minimalną liczbę >= 0 taką, że wynikowa długość wiadomości jest kongruentna do 448 modulo 512 dopisz długość wiadomość (przed wypełnieniem), w bitach, jako 64-bitową liczbę całkowitą zakodowaną big-endian
Przetwarzaj wiadomość 512-bitowymi porcjami: podziel wiadomość na 512-bitowe porcje for (każda porcja)
podziel porcję na 16 32-bitowych słów kodowanych big-endian w(i), 0 ≤ i ≤ 15
Rozszerz 16 32-bitowych słów w 80 32-bitowych słów: for i from 16 to 79 w(i) := (w(i-3) xor w(i-8) xor w(i-14) xor w(i-16)) <<< 1
Zainicjuj zmienne dla tej porcji: a := h0 b := h1 c := h2 d := h3 e := h4
Główna pętla: for i from 0 to 79 if 0 ≤ i ≤ 19 then f := (b and c) or ((not b) and d) k := 0x5A827999 else if 20 ≤ i ≤ 39 f := b xor c xor d k := 0x6ED9EBA1 else if 40 ≤ i ≤ 59 f := (b and c) or (b and d) or (c and d) k := 0x8F1BBCDC else if 60 ≤ i ≤ 79 f := b xor c xor d k := 0xCA62C1D6
temp := (a <<< 5) + f + e + k + w(i) e := d d := c c := b <<< 30 b := a a := temp
Dodaj skrót tej porcji do dotychczasowego wyniku: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e
Wytwórz ostateczną wartość skrótu (zakodowaną big-endian): skrót = h0 dopisz h1 dopisz h2 dopisz h3 dopisz h4
[edytuj] Ciekawostka
Cały mechanizm ochrony przed nielegalnym kopiowaniem microsoftowego Xboksa zależy od bezpieczeństwa SHA-1. Jeśli zostanie przeprowadzony skuteczny atak wykorzystujący przeciwobraz będzie możliwe dowolne kopiowanie gier bez pomocy modchipa.
[edytuj] Opisy Algorytmu
- RFC 3174, US Secure Hash Algorithm 1 (SHA1)
- FIPS PUB 180-2, Secure Hash Standard (SHA-1, SHA-256, SHA-384, i SHA-512)
- passcrack.spb.ru SHA-1 Rainbow Tables