Я использую класс класса .NET 3.0 System.Security.Cryptography.MACTripleDES
для генерации значения MAC. К сожалению, я работаю с аппаратным устройством, которое использует "1111111111111111
" (как hex) как одноразмерный 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. К сожалению, я не смог решить свою проблему, используя эту технику, но там есть еще кое-что интересное.