2011-07-20 14 views
6

Według Wikipedia TripleDES obsługuje klucze o długości 56, 112 i 168-bitowe, ale System.Cryptography.TripleDESCryptoServiceProvider.LegalKeySizes twierdzi, że akceptuje tylko długości kluczy o długości 128 i 192 bitów.Wielkość klucza TripleDES - .NET vs Wikipedia

System, który rozwijam, musi być interoperacyjny (dane zaszyfrowane przez mój kod muszą być możliwe do odszyfrowania w PHP, Java i Objective-C) i nie wiem, kto jest w tym przypadku poprawny.

Więc, kogo mam wierzyć? Jak mogę się upewnić, że moje zaszyfrowane dane są przenośne?

Odpowiedz

13

Wikipedia nie mówi, że TripleDES obsługuje 56-bitowe klucze. "Opcje klucza" mówią o kluczach "o potrójnej długości" i "podwójnej długości", a te ostatnie "zmniejszają rozmiar klucza do 112 bitów". Efektywny rozmiar klucza oryginalnego DES to 56-bitowy. Taki klucz jest zbudowany z 64-bitowego wejścia, gdzie 8 bitów pozostaje niewykorzystanych. Opcja klucza "potrójnej długości" działa z trzema bitami 56 bitów (= 168) zbudowanymi z trzech razy 64 bitów (= 192 bitów), a opcja "podwójnej długości" działa z dwoma bitami 56-bitowymi (= 112) skonstruowany z dwóch razy 64 bitów (= 128).

Jako że Twój TripleDESCryptoServiceProvider musi najpierw wyprowadzić rzeczywiste klucze z wejścia 64-bitowego, pobierze tylko 128 bitów (podwójnej długości) lub 192 bity (potrójnej długości), a następnie wewnętrznie wyprowadzi 168 lub 112 bitów rzeczywistych z tego wejścia.

To standardowa procedura dla TripleDES, więc nie powinno być problemów z przenoszalnością na różnych platformach.

+0

trzech dniach patrząc na bezużytecznych przykładów wtedy ta odpowiedź pomogła mi zrozumieć, jak .NET obsługuje klucze 128bit i CCCrypt siły funkcyjnych you into 192bit. .. kopiuje pierwsze 64-bitowe 128-bitów na końcu, więc K3 = K1. iOS <-> Interoperacyjność # .Net. Tak prosty. –

0

Potrójny DES użyje tylko 112/168 bitów klucza 128/192 bitowego. .NET prosi o więcej bitów w celu wyrównania (każdy 56-bitowy podklucz jest wyrównany na 64-bitowej granicy).

56-bitowy DES jest uszkodzony i można się spodziewać, że utrudni to korzystanie.

0

Wierzę, że niektóre (wszystkie?) Implementacje DES używają tylko 7 bitów na znak klucza (kodowanie ASCII). Nie jestem pewien, czy definicja DES pozwala na 8-bitowe znaki w kluczach, czy też faktycznie ignoruje wysoki bit każdego bajtu. Myślę, że to drugie.

Jednak w kluczach .NET rozmiary są zależne od liczby bajtów, razy 8 bitów na bajt, nawet jeśli bazowy algorytm ignoruje ten najwyższy bit. To prawdopodobnie główna rozbieżność.

TripleDES działa DES trzy razy z potencjalnie trzema różnymi 56-bitowymi kluczami DES. W niektórych implementacjach, środkowy przebieg jest odwrócony (szyfrowanie-deszyfrowanie-szyfrowanie lub "EDE"), więc użycie tego samego 56-bitowego klucza DES dla wszystkich trzech duplikuje szyfrowanie prostego DES. Dokonano tego w celu zapewnienia zgodności ze starszymi systemami, w których oba używają szyfrowania sprzętowego. Nie jestem pewien, czy TripleDESCryptoServiceProvider używa tego podejścia "EDE" lub "EEE" (lub daje ci wybór). Co więcej, ten sam 56-bitowy klucz DES może być użyty do pierwszego i trzeciego uruchomienia, używając klucza 112-bitowego zamiast klucza 168-bitowego, którego mógłby również użyć.

Certyfikowany program TripleDESCryptoServiceProvider nie akceptowałby kluczy 56-bitowych (64-bitowych), ponieważ nie jest tak naprawdę zabezpieczeniem 3DES (zamiast tego można użyć DESCryptoServiceProvider?). W pewnym momencie ustalono, że 168-bitowy EEE (lub EDE?) 3DES nie zapewnia większego bezpieczeństwa niż przy użyciu 112-bitowego klucza (128-bitowego). Mogą jednak wystąpić ekstremalne (zazwyczaj niedostępne) ataki, w których krótszy klucz teoretycznie jest bardziej podatny na ataki. Może to również dotyczyć pytania EDE i EEE.

W przypadku pytań dotyczących zgodności z innymi językami, klasy .NET * CryptoServiceProvider to tylko interfejs API otaczający bibliotekę Windows CRYPTO.Jeśli inne języki również używają biblioteki Windows CRYPTO, powinna być kompatybilna. W przeciwnym razie musisz sprawdzić, czy używają EDE lub EEE i upewnić się, że wszyscy używają tego samego (możesz mieć lub nie ma na to elastyczności) i oczywiście używać tej samej długości klucza. Prawdopodobnie wszystkie używają tej samej kolejności bajtów, ale jeśli okaże się, że rzeczy nadal nie pasują do siebie, może to być kolejna rzecz do sprawdzenia. Najprawdopodobniej w systemie Windows wszystkie używają CRYPTO i prawdopodobnie będą pasować tak długo, jak długo możesz ustawić opcje w taki sam sposób dla wszystkich.

+0

Późno, ale: definicja DES zarezerwowała * niski * bit każdego bajtu klucza dla (nieparzystej) parzystości; w latach siedemdziesiątych krypto było wykonywane w dedykowanym dyskretnym sprzęcie, a błędy bitowe stanowiły realną możliwość. Dzisiaj prawie wszystko w oprogramowaniu lub oprogramowaniu sprzętowym niektóre implementacje ignorują parzystość, a niektóre wciąż sprawdzają, czy nie ma kompromisów; Nie wiem, co robi kropka-NET (lub CAPI). ASCII nie powinno być zakładane ani wymagane dla kluczowych wartości iz pewnością nie miało nic wspólnego z definicją. ... –

+0

... Zarówno EDE, jak i EEE zostały uwzględnione w latach 90., kiedy okazało się, że konieczne jest "ulepszenie" DES, ale tylko EDE został ustandaryzowany i byłbym bardzo zaskoczony, gdybym znalazł jakąkolwiek implementację EEE. –

+0

@ dave_thompson_085 dziękuję za wyjaśnienia dotyczące standaryzacji z EDE. Na bicie parzystości byłoby dość kiepsko, gdyby implementacja oprogramowania (przekładająca się na możliwą implementację sprzętową) zajęła 7 bitów każdego z dostarczonych bajtów, gdy w niższych 7 bitach jest więcej entropii (w przypadku, gdy hasło szyfrujące zostało dostarczone bezpośrednio- - może nawet głupio). Sądzę, że najbardziej sensowne jest to, że zachowuje 7 bitów każdego bajtu i przenosi je wraz z obliczoną parzystością do implementacji 3DES. Oczywiście zamiast tego może zrobić coś mniej sensownego i stracić entropię. –

0

Des używa wielokrotności kluczy 64-bitowych, ale wyrzuca 8 bitów pozostawiając użyteczne długości 64-bitowe.
Potrójne des może wykorzystywać długość klucza podwójnego lub potrójnego.
Jednak ponieważ powtórzenie des z tym samym kluczem odszyfrowuje wiadomość, która jest uruchamiana des równą liczbę razy, może częściowo odszyfrować dane, jeśli klucze udostępniają wzorce.

Z tego powodu des jest zawsze uruchamiana nieparzystą liczbę razy.

Dlatego nigdy nie powinieneś wybierać klucza, w którym powtarzają się części 64-bitowe.

Z Triple DES 192 bit wy zatem mieć efektywną długość klucza 112 bitów

Powiązane problemy