Будет ли PKCS11 всегда находить объекты в одном и том же порядке? - PullRequest
1 голос
/ 20 сентября 2019

Я заметил, что и команда bash, и, вероятно, соответствующий метод из библиотеки Python PyKCS11, всегда находят объекты в одном и том же порядке.Мой код полагается, что это правда, но я нигде не читал его, просто наблюдал за этим.

В терминале:

$ pkcs11-tool --list-objects 
Using slot 0 with a present token (0x0)
Public Key Object; RSA 2048 bits
  label:      bob_key
  ID:         afe438bbe0e0c2784c5385b8fbaa9146c75d704a
  Usage:      encrypt, verify, wrap
Public Key Object; RSA 2048 bits
  label:      alice_key
  ID:         b03a4f6c375e8a8a53bd7a35947511e25cbdc34b
  Usage:      encrypt, verify, wrap

С Python:

objects = session.findObjects([(CKA_CLASS, CKO_PUBLIC_KEY)])
for i, object in enumerate(objects):
    d = object.to_dict()
    print(d['CKA_LABEL'])

Выход:

bob_key
alice_key

objects имеет тип list и каждый элемент в objects имеет тип <class 'PyKCS11.CK_OBJECT_HANDLE'>

Будет session.findObjects([(CKA_CLASS, CKO_PRIVATE_KEY)]) при запуске из зарегистрированного сеанса также всегда будет список с точно таким жепорядок как выражение выше?В этом случае с двумя ключами, Элис никогда не захочет видеть перед Бобом Алису.

1 Ответ

3 голосов
/ 21 сентября 2019

(Хотел написать комментарий, но он получился довольно длинным ...)

PKCS # 11 не гарантирует какой-либо определенный порядок возвращаемых дескрипторов объекта, так что дело доконкретная реализация.

Несмотря на то, что ваша реализация может показывать один и тот же порядок объектов, есть несколько примеров, когда это может неожиданно измениться:

  • обновление ключа (ключине вечны. В будущем вам нужно будет сгенерировать несколько новых ключей)

  • обновление промежуточного программного обеспечения (более новые реализации могут возвращать объекты в другом порядке)

  • Обновление прошивки HSM (крупные обновления могут изменить способ хранения объектов и изменить порядок перечисления объектов)

  • Восстановление HSM из резервной копии (порядок объектов может измениться после восстановления HSM)

  • восстановление данных хост-ОС (некоторые реализации хранят объекты HSM, зашифрованные во внешних папках, и порядок поиска объектов может совпадать с каталогомПорядок листинга, который может измениться без предупреждения)

  • Изменение HSM (вы уверены, что будете использовать одно и то же устройство в течение всего срока службы вашего приложения)

Полагаться на неопределенное поведение в целом - плохая практика.Особенно в области безопасности вы должны быть очень осторожны.

Определенно стоит потратить время на безопасную сторону.


Я бы порекомендовал выполнить отдельный поиск для каждого требуемого объекта (используя некоторый строгий идентификатор - например, метку) - таким образом, вы можете выполнить дополнительные проверки (например, принудительно установить ожидаемый тип объекта, убедиться, что объект уникален и т. д.).


Аналогичным примером является дескриптор объекта Cryptokiповторное использование.PKCS # 11 утверждает, что дескриптор объекта привязан к определенному сеансу (т. Е. Если вы получили дескриптор объекта в сеансе A, вы не должны использовать его в сеансе B - даже если оба сеанса выполняются в одном приложении).

Существуют реализации, которые сохраняют дескриптор объекта для одного и того же объекта через сеансы.Существуют даже реализации, которые сохраняют один и тот же дескриптор объекта в разных приложениях (т. Е. Если вы получите дескриптор 123 объекта в приложении A, вы получите дескриптор 123 объекта в приложении B для одного и того же объекта).

Это поведение даже описанов соответствующем руководстве разработчика.Но если вы спросите поставщика, можете ли вы положиться на него, вам скажут, что для некоторых настроек есть некоторые угловые случаи и что вы должны выполнить дополнительные проверки, чтобы быть на 100% уверенными в том, что он будет работать должным образом ...

Удачи в вашем проекте!

...