3DES с открытым ключом .cer? - PullRequest
       23

3DES с открытым ключом .cer?

0 голосов
/ 23 сентября 2008

Я не эксперт по криптографии, но, насколько я понимаю, 3DES - это симметричный алгоритм шифрования, что означает, что он не использует открытый / закрытый ключи.

Тем не менее, мне было поручено зашифровать данные с помощью открытого ключа (в частности, файла .CER). Если вы игнорируете весь симметричный / асимметричный танг, я просто смогу использовать данные ключа из открытого ключа в качестве ключа TripleDES. Однако у меня возникают трудности при извлечении байтов ключа из файла .CER. Это код в том виде, в каком он есть ..

TripleDESCryptoServiceProvider cryptoProvider = new TripleDESCryptoServiceProvider();
X509Certificate2 cert = new X509Certificate2(@"c:\temp\whatever.cer");
cryptoProvider.Key = cert.PublicKey.Key.

Самый простой метод, который я могу найти для извлечения необработанных байтов ключа из сертификата, - это ToXmlString (bool), а затем выполнить некоторую хакерскую подстроку для возвращаемой строки. Тем не менее, это кажется таким хакерским, что мне не хватает более простого и очевидного способа сделать это.

Мне не хватает более простого способа использования .cer-файла для предоставления ключевых данных в криптографический класс C # 3DES или же вырубка из строки сертификата xml действительно лучший способ сделать это?

Ответы [ 5 ]

4 голосов
/ 23 сентября 2008

Не рекомендуется использовать ключи, сгенерированные для асимметричной криптографии, для симметричной криптографии. Ничто не мешает вам придумать способ использования открытого ключа в качестве ключа шифрования для 3DES, но конечным результатом будет то, что любой, имеющий доступ к открытому ключу (а это значит каждый!), Сможет расшифровать ваш зашифрованный текст. .

2 голосов
/ 23 сентября 2008

cryptoProvider.Key = cert.GetPublicKey ()?

1 голос
/ 23 сентября 2008

Реальная проблема здесь в том, что открытый ключ, ну, в общем, открытый . То есть в свободном доступе, то есть обеспечивает нулевую безопасность шифрования.

Черт, любой в этой теме имеет всю информацию, необходимую для расшифровки всего. Как и гуглеры.

Пожалуйста, попытайтесь убедить своих пользователей не использовать такие данные с открытым ключом. По крайней мере, попросите их дать пароль или какой-нибудь другой, более защищенный блок, который вы можете использовать для генерации согласованного ключа.

Еще одна вещь. Ключи сертификата различаются по размеру. Вероятно, он может обработать выбрасывание лишних байтов в ключе, но вы, вероятно, получите исключение Array Index / Out Of Bounds, если ключ окажется короче, чем требуется ключу 3DES. Я сомневаюсь, что это произойдет, 3DES нужно только 56 бит, а ключи сертификатов почти всегда 256 бит или больше.

1 голос
/ 23 сентября 2008

Шифрование больших объемов данных с помощью асимметричной криптографии - не самый лучший способ. Вместо этого зашифруйте данные с помощью симметричного алгоритма и зашифруйте симметричный ключ (и IV) с помощью вашего открытого ключа.

Эта страница из MSDN действительно помогла мне начать работу с .Net-симметричной криптографией.

0 голосов
/ 23 сентября 2008

Я думаю, что вам не хватает преобразования байтов из строки, содержащей байты ключа.

Надеюсь, что метод FromBase64String поможет вам:

byte[] keyBytes = Convert.FromBase64String(sourceString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...