Как интегрировать шифрование 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. Насколько я вижу, это довольно актуально и все еще поддерживается.