2010-12-12 8 views
9

Definicja SHA-256 wydaje się być taka, że ​​wejście składające się z pojedynczego bitu "1" ma dobrze zdefiniowaną wartość skrótu, różniącą się od bajtu "01" bajt (ponieważ wypełnienie jest wykonywane na podstawie długość wejścia w bitach).Co to jest skrót SHA-256 pojedynczego bitu "1"?

Jednak z powodu problemów z endianizmem i faktu, że żadne implementacje, które mogę znaleźć, nie obsługują podawania w pojedynczych bitach, nie jestem w stanie określić, jaka jest ta poprawna wartość.

Co to jest poprawny skrót jednego wejścia 1-bit długi składający się z bitu "1"? (nie 8-bitowy długi bajt [] {1} wejście).

+1

dlaczego ???????????? –

+1

Można to obliczyć ręcznie: http://en.wikipedia.org/wiki/SHA-2#SHA-256_.28a_SHA-2_variant.29_pseudocode, ale byłoby dość nudne dość szybko. – MatrixFrog

+3

@dan: dlaczego nie ???????????? –

Odpowiedz

8

OK, według własnej realizacji:

1-bitowy ciąg "1":

B9DEBF7D 52F36E64 68A54817 C1FA0711 66C3A63D 384850E1 575B42F7 02DC5AA1 

1-bitowy ciąg „0 ":

BD4F9E98 BEB68C6E AD3243B1 B4C7FED7 5FA4FEAA B1F84795 CBD8A986 76A2A375 

ja testowałem tej implementacji O n kilka standardowych wielokrotności-8 bitów, w tym 0-bitowy ciąg, a wyniki były poprawne.

(oczywiście chodzi o to pytanie było zweryfikować powyższe wyjścia w pierwszej kolejności, więc należy używać z rozwagą ...)

+1

Potwierdzam te wartości. Moja własna implementacja SHA-2 pochodzi ze sphlib (http://www.saphir2.com/sphlib/). Kod C obsługuje wejścia o długościach nie wielokrotność 8. –

+0

Dziękuję @Thomas, zaznaczę to jako zaakceptowane. –

+0

Również potwierdzone przez implementację Perla, która akceptuje ciągi w kodowaniu binarnym. –

2

Nie jestem pewien, czy dobrze rozumiem Twoje pytanie.

SHA-256 pracuje z blokami o wielkości 64 bajtów (= 512bits). Oznacza to, że mniejsze wejścia muszą być najpierw wyściełane. Wynikiem padding wygląda następująco:

For Bit 1: 1100000000000...00000000001 
For Bits 01: 0110000000000...00000000010 

Jak to wyniki są różne, wyniki następujących funkcji kompresji będzie zbyt. I dlatego wartości mieszania są. Standardowy dokument wyjaśnia padding dość opisowego: http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf

+0

nie tylko SHA-256, nie mogę wymyślić żadnego algorytmu, który nie padłby lub powtórzyłby małe wejścia. –

+1

Rozmiar bloku dla SHA256 to 512 bitów, a nie 256 bitów. Zobacz RFC: 4634 "Bezpieczne algorytmy US Hash (SHA i HMAC-SHA)", http://www.ietf.org/rfc/rfc4634.txt –

2

Jest kod C dostępny w section 8 z RFC 4634 obliczyć hash danych to niekoniecznie wielokrotność 8 bitów. Zobacz metody, których nazwy to SHA*FinalBits(...).