Я сделал очень простой Soft-HSM - только для личного обучения. Я хочу добавить к нему интерфейс PKCS#11. Где я могу узнать об этом, или, возможно, найти что-то уже написанное с открытым исходным кодом для изучения?
Я понимаю, что за это можно было бы проголосовать только за то, что подняли этот вопрос (плохая безопасность и т. д.), Но я хотел убедиться, что это строго для учебных целей.
Сначала вам нужно ознакомиться со спецификацией PKCS#11. Я создал git-репозиторий PKCS11-SPECS со всеми его версиями в одном месте. Я лично считаю PKCS#11 v2.20 последней «пригодной для использования» версией, потому что в более поздних версиях авторы удалили важные части, которые имеют решающее значение для понимания всеми, кто разрабатывает интероперабельные библиотеки PKCS#11 (время жизни сеанса и т. д.). Я предупредил их об удалении этой части, но, похоже, им было все равно. Так что IMO PKCS # 11 v2.20 - ваш лучший выбор, если вам не нужно использовать какие-то другие блестящие причудливые новые алгоритмы, которых нет в v2.20.
Еще один мой проект, который может быть вам полезен, это EMPTY-PKCS11. Это минималистичная библиотека C, которая максимально просто реализует API PKCS#11 v2.20 — все функции PKCS#11, кроме C_GetFunctionList
функции, возвращают CKR_FUNCTION_NOT_SUPPORTED
возвращаемое значение. Он был протестирован на нескольких настольных и мобильных платформах и поэтому может использоваться в качестве облегченного каркаса для разработки переносимых библиотек PKCS#11.
После этого вы также можете взглянуть на PKCS11-MOCK, еще одну минималистическую библиотеку PKCS#11 v2.20. Это не настоящий криптографический модуль, а просто фиктивный объект, разработанный специально для модульного тестирования некоторых других моих проектов.
Я надеюсь, что эти проекты могут стать надежной отправной точкой в вашем процессе обучения.