Библиотеки шифрования?

Мне было поручено внедрить библиотеку PKI на C# для проекта компании, и я не смог найти ее хорошую реализацию. Похоже, что есть несколько библиотек и много неработающих ссылок, указывающих на библиотеки MSDN, которые были удалены. Я видел людей, использующих Crypt32.dll, людей, создающих свои собственные библиотеки, людей, использующих P/Invoke для доступа к системным хранилищам сертификатов, людей, расширяющих встроенные библиотеки, примеры, которые просто не применимы к C# (например, примеры Java), и коммерческие библиотеки.

Мой вопрос: какая реализация/библиотека наиболее рекомендуется для простого шифрования/дешифрования данных?

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

Я бы предпочел не хранить открытые/закрытые ключи в диспетчере сертификатов Windows, если это вообще возможно, но если это значительно упрощает реализацию, пусть будет так.

Я понимаю, что PKI и шифрование - это большая и сложная тема, но я все равно надеюсь на относительно простую библиотеку... (можно надеяться, верно?)

Спасибо!


person Gabriel    schedule 23.09.2008    source источник


Ответы (2)


Ну, вы не упомянули, что встроенный класс не покрывает ваши потребности, так как насчет System.Security.Cryptography.RSACryptoServiceProvider?

Он имеет большой набор квалифицированных способов асимметричного шифрования/дешифрования потоков.

Есть несколько учебников / руководств, которые помогут вам в этом:

Через Google можно найти множество других.

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

Update2: Да, в моем примере был RSACryptoProvider, но вы можете использовать любой класс, производный от System.Security.Cryptography.AsymmetricAlgorithm, если вам нужно решение с открытым/закрытым ключом. Или построить свой собственный... а может и нет :)

person Seb Nilsson    schedule 23.09.2008
comment
Фактически применяется все пространство имен System.Security.Cryptography. Он должен содержать все примитивы, необходимые для большинства криптосистем. - person Nick Johnson; 23.09.2008
comment
Не могли бы вы пояснить алгоритм буфера? Кроме того, мне интересно, является ли это стандартным для расшифровки/шифрования RSA. Часть этого шифрования будет отправлена ​​​​клиентам, и я не могу гарантировать, что они будут использовать тот же алгоритм буфера, который я решил использовать. Это может быть проблемой или нет? - person Gabriel; 23.09.2008

Да что не так со встроенными классами?

И если вы не хотите использовать хранилище сертификатов Windows, вы можете использовать что-то вроде этого

RSACryptoServiceProvider rscp = new RSACryptoServiceProvider();
rscp.FromXmlString("<RSAKeyValue><Modulus>key data gere</Modulus><Exponent></Exponent></RSAKeyValue>");

Однако не уверен, что это хорошая идея для закрытых ключей.

На эту тему есть хороший учебник здесь

person Alan Mendelevich    schedule 23.09.2008