2008-09-23 2 views
0

Я не специалист по криптографии, но, как я понимаю, 3DES является симметричным алгоритмом шифрования, а это означает, что он не использует общедоступные/закрытые ключи.3DES с открытым ключом .cer?

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

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

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

Я пропустил более простой способ использования файла .cer, чтобы предоставить ключевые данные классу C# C# C# C# C#, или взломать его из строки xml сертификата действительно лучший способ сделать это?

+0

Не было бы лучше выяснить, что они _actually_ хотят, так как запрос криптографии с открытым ключом с симметричным алгоритмом явно не так ли? – 2008-09-23 14:50:34

+0

Я не знаю о вас, Арахнид, но, по моему опыту, мне просто легче идти с потоком. Вопроситель, похоже, совершенно осознает несовместимость здесь, так почему бы просто не позволить ему делать то, что его попросили сделать? – 2008-09-23 15:15:47

ответ

0

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

Надежда метод FromBase64String поможет:

byte[] keyBytes = Convert.FromBase64String(sourceString); 
1

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

This page от MSDN действительно помог мне разобраться с .Net симметричной криптографией.

4

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

1

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

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

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

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

Смежные вопросы