TripleDES: указанный ключ является известным слабым ключом для TripleDES и не может использоваться
Я использую класс .NET 3.0System.Security.Cryptography.MACTripleDES
класс для генерации значения MAC. К сожалению, я работаю с аппаратным устройством, которое использует1111111111111111
"(в шестнадцатеричном виде) как ключ DES одинарной длины.System.Security.Cryptography
библиотека выполняет некоторую проверку работоспособности ключа и возвращает исключение, если вы пытаетесь использовать криптографически слабый ключ.
Например:
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);
}
бросает исключение
System.Security.Cryptography.CryptographicException : Specified key is a known weak key for 'TripleDES' and cannot be used.
Я знаю, что это не безопасный ключ. В производстве устройство будет мигать с новым, безопасным ключом. В то же время, есть ли способ запретить это исключение? Возможноapp.config
или настройки реестра?
Изменить: Ключ на самом деле будет 101010 ... из-за алгоритма форсирования нечетной четности. Я не уверен, является ли это универсальным для алгоритма DES или просто требованием в работе по обработке платежей, которую я выполняю.
Редактировать 2: ответ Даниэля ниже содержит очень хорошую информацию о взломе .NET. К сожалению, я не смог решить мою проблему, используя эту технику, но там все еще есть некоторые интересные чтения.