Używam klasy .NET 3.0 klasy System.Security.Cryptography.MACTripleDES
do generowania wartości MAC. Niestety pracuję z urządzeniem sprzętowym, które używa "1111111111111111
" (jako hex) jako klucz DES o pojedynczej długości. Biblioteka System.Security.Cryptography
wykonuje pewne sprawdzanie poprawności na kluczu i zwraca wyjątek, jeśli spróbujesz użyć słabego klucza kryptograficznego.TripleDES: Określony klucz jest znanym słabym kluczem dla "TripleDES" i nie może być używany
Na przykład:
byte[] key = new byte[24];
for (int i = 0; i < key.Length; i++)
key[i] = 0x11;
byte[] data = new byte[] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
byte[] computedMac = null;
using (MACTripleDES mac = new MACTripleDES(key))
{
computedMac = mac.ComputeHash(data);
}
zgłasza wyjątek
System.Security.Cryptography.CryptographicException : Specified key is a known weak key for 'TripleDES' and cannot be used.
wiem, że to nie jest bezpieczny klucz. Podczas produkcji urządzenie będzie migać nowym, bezpiecznym kluczem. Czy w międzyczasie istnieje jakiś sposób, aby powstrzymać ten Wyjątek przed rzuceniem? Być może ustawienia rejestru lub app.config
?
Edytuj: Klucz byłby w rzeczywistości 101010 ... z powodu algorytmu wymuszającego nieparzystą parzystość. Nie jestem pewien, czy jest to uniwersalne dla algorytmu DES, czy tylko wymaganie w przetwarzaniu płatności, które wykonuję.
Edycja 2: Poniższa odpowiedź Daniela zawiera bardzo dobre informacje o hakowaniu .NET. Niestety, nie mogłem rozwiązać mojego problemu za pomocą tej techniki, ale wciąż jest tam interesująca lektura.
(Re: Twój edit) DES i 3DES tylko korzysta z Top 7 bitów każdy bajt w kluczu. Najmniej znaczący bit jest zwykle używany jako bit parzystości. –
Chciałbym wrócić do domu. Wydaje się dziwne, że coś takiego byłoby egzekwowane na poziomie biblioteki. Osoby używające szyfrowania powinny wiedzieć, jak trudniej odgadnąć klucze, a biblioteka nie powinna egzekwować tych rzeczy. – Kibbee
@Kibbee, Słaby klucz w tym kontekście nie oznacza "trudny do odgadnięcia". Oznacza to klucz, dla którego określony algorytm wykazuje pewne zdegenerowane zachowanie, które je osłabia. – caf