(Хотел написать комментарий, но он получился довольно длинным ...)
PKCS # 11 не гарантирует какой-либо определенный порядок возвращаемых дескрипторов объекта, так что дело доконкретная реализация.
Несмотря на то, что ваша реализация может показывать один и тот же порядок объектов, есть несколько примеров, когда это может неожиданно измениться:
обновление ключа (ключине вечны. В будущем вам нужно будет сгенерировать несколько новых ключей)
обновление промежуточного программного обеспечения (более новые реализации могут возвращать объекты в другом порядке)
Обновление прошивки HSM (крупные обновления могут изменить способ хранения объектов и изменить порядок перечисления объектов)
Восстановление HSM из резервной копии (порядок объектов может измениться после восстановления HSM)
восстановление данных хост-ОС (некоторые реализации хранят объекты HSM, зашифрованные во внешних папках, и порядок поиска объектов может совпадать с каталогомПорядок листинга, который может измениться без предупреждения)
Изменение HSM (вы уверены, что будете использовать одно и то же устройство в течение всего срока службы вашего приложения)
Полагаться на неопределенное поведение в целом - плохая практика.Особенно в области безопасности вы должны быть очень осторожны.
Определенно стоит потратить время на безопасную сторону.
Я бы порекомендовал выполнить отдельный поиск для каждого требуемого объекта (используя некоторый строгий идентификатор - например, метку) - таким образом, вы можете выполнить дополнительные проверки (например, принудительно установить ожидаемый тип объекта, убедиться, что объект уникален и т. д.).
Аналогичным примером является дескриптор объекта Cryptokiповторное использование.PKCS # 11 утверждает, что дескриптор объекта привязан к определенному сеансу (т. Е. Если вы получили дескриптор объекта в сеансе A, вы не должны использовать его в сеансе B - даже если оба сеанса выполняются в одном приложении).
Существуют реализации, которые сохраняют дескриптор объекта для одного и того же объекта через сеансы.Существуют даже реализации, которые сохраняют один и тот же дескриптор объекта в разных приложениях (т. Е. Если вы получите дескриптор 123 объекта в приложении A, вы получите дескриптор 123 объекта в приложении B для одного и того же объекта).
Это поведение даже описанов соответствующем руководстве разработчика.Но если вы спросите поставщика, можете ли вы положиться на него, вам скажут, что для некоторых настроек есть некоторые угловые случаи и что вы должны выполнить дополнительные проверки, чтобы быть на 100% уверенными в том, что он будет работать должным образом ...
Удачи в вашем проекте!