Как интегрировать шифрование HSM с C#?

Как бы я интегрировал шифрование Hardware Security Module с приложением C#?

3 ответа

Решение

Если это устройство, совместимое с PKCS #11, вы можете использовать NCryptoki. С их сайта:

NCryptoki - это библиотека для.NET Framework, которая реализует спецификации PKCS #11 и предоставляет API для C#, VB.NET, Visual Basic 6, Delphi и других языков взаимодействия COM для интеграции токена, совместимого с PKCS #11, в любое приложение.

[...]

Основные характеристики:

  • Соответствует спецификации PKCS #11 2.20
  • Соответствует любой смарт-карте / токену / HSM PKCS #11
  • 32 или 64-битная платформа
  • .NET Framework 2.0, 3.0, 3.5 и 4.0

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

Доступ к криптографическим возможностям HSM может осуществляться через несколько API. Включая PKCS#11, Chil (OpenSSL). Поставщики MSCAPI и CNG также существуют для использования HSM.

Большинство поставщиков HSM предоставят вам библиотеку PKCS#11 или поставщика CAPI/CNG. Если у вас есть это, это вопрос программирования на основе опубликованного API.

Как правило, использование HSM выглядит примерно так:

provider = HSM.Connect()
keyhandle = provider.LoadKey("my_rsa_key")
signature = provider.Sign( keyhandle, "Sha1WithRSA", "myData" )
provider.UnloadKey( keyhandle )

К сожалению, в управляемой части CAPI и CNG не разрешен доступ к сторонним поставщикам, которым необходимо использовать HSM CAPI/CNG через C#. Вы должны будете напрямую вызывать неуправляемый код библиотеки CAPI/CNG или PKCS#11 с помощью вызовов PInvoke.

Мы использовали Pkcs11Interop, и он работал очень хорошо. Это лицензионная библиотека с открытым исходным кодом Apache 2.0. Насколько я вижу, это довольно актуально и все еще поддерживается.

Другие вопросы по тегам