PKCS # 11 не предоставляет такие методы, но некоторые модели HSM позволяют расширять их встроенное программное обеспечение с помощью собственных алгоритмов / механизмов или даже запускать собственное приложение внутри устройства, так что, несомненно, есть способ достичь того, чего вы хотите.Только не с PKCS # 11 API.
Кстати, я обсуждал именно этот сценарий в список рассылки с комментариями pkcs11 из Технический комитет OASIS PKCS # 11 в 2013 году. К сожалению, я не получил никакой обратной связи ¯\_(ツ)_/¯
, но позже, когда я захотел присоединиться к техническому комитету для работы над этим предложением, я получил прайс-лист с членскими взносами :D
.
Моя почта от 2013 года:
Я хотел бы открыть дискуссию о безопасном перекодировании данных и способах его обработки с помощью API PKCS # 11.Допустим, есть некоторые данные, зашифрованные с помощью симметричного ключа A
, и по какой-то причине (т. Е. Время жизни ключа истекло, алгоритм шифрования больше не считается безопасным и т. Д.), Необходимо повторно зашифровать данные ключом B
.Какие опции предоставляет PKCS # 11 API?
ОПЦИЯ # 1: Расшифровывать данные с помощью функций A
и C_DecryptInit/C_Decrypt/C_DecryptUpdate/C_DecryptFinal
, а затем шифровать данные с помощью ключей B
и C_EncryptInit/C_Encrypt/C_DecryptUpdate/C_DecryptFinal
функции.
Преимущества:
- использует текущий хорошо известный API PKCS # 11
Недостатки:
- возможные проблемы безопасности- открытый текст неоправданно подвергается памяти хоста
- накладные расходы на связь - необходимо дважды обменяться открытым текстом между приложением cryptoki и модулем cryptoki
OPTION # 2: Let'sскажем, будут введены новые функции PKCS # 11 для повторного шифрования данных.Он должен принимать зашифрованный текст, созданный с помощью ключа A
, в качестве входных данных и предоставлять зашифрованный текст, созданный с помощью ключа B
, в качестве выходных данных.Другими словами, он должен расшифровать, а затем зашифровать данные за один вызов.Это может быть достигнуто, например, путем введения функции C_DecryptEncryptUpdate
с поведением, аналогичным C_DecryptVerifyUpdate
(скорее всего, у него будут аналогичные проблемы с конвейерной обработкой).
Преимущества:
Недостатки:
- Необходим новый (-ые) метод (-ы)представленный в PKCS # 11 API
Лично я определенно хотел бы видеть API для безопасного перешифрования даты.Каковы ваши мнения?Кто-нибудь еще пропускает API для безопасного повторного шифрования данных?