bcrypto / btok

Cryptographic tokens
4 stars 4 forks source link

Конфигурация для первого уровня стойкости #49

Closed agievich closed 5 years ago

agievich commented 5 years ago

Для однозначной идентификации возможностей криптографической подсистемы предлагается добавить в ASN.1 модуль переменную типа конфигурация-128, которая отражает согласованный набор поддерживаемых объектов: bign-curve256v1, eID на первом уровне без необязательных групп данных, eSign на первом уровне.

btok-configv1 OID ::= {btok-config 1}

Базовые AIDы предлагается продлить для отражения факта поддержки первого уровня или конфигурации: добавить в ASN.1 модуль id-eID-config1 OID ::= {id-eID 1} id-eSign-config1 OID ::= {id-eSign 1} и использовать их в AID

Originally posted by @andrewkostevich in https://github.com/bcrypto/btok/issues/22#issuecomment-468191035

agievich commented 5 years ago

Идея разумна и понятна: сузить возможности реализации. Но предлагаемый способ сужения вызывает вопросы. Насколько я понимаю, идет речь о том, что клиентская программа будет выбирать программы разных уровней стойкости, используя те или иные AID.

Но: ведь сужение можно реализовать по-другому, возвращая ошибки в тех случаях, где возможности реализации ограничены. Например сейчас eSign сейчас позиционируется как универсальная программа, которая в принципе умеет работать с ключами и ЭЦП на всех уровнях стойкости. Если все-таки не умеет, то не проблема -- возвращается ошибка "не поддерживается". Если мы вводим упрощенную реализацию eSign-128, то наверное должны ввести и ее альтернативы eSign-192, eSign-256. И тут сразу много вопросов (должна ли Sign-256 покрывать функционал Sign-128? Могут ли на одном КТ размещаться и Sign-128, и Sign-256?). Возникающее разнообразие кажется громоздким и искусственным.

Возможно идентификаторы конфигураций нужны для описания возможностей карты в ATR. Но описание через OID/AID снова кажется громоздким. Возможно в ATR (формат этого фактически проприетарного объекта, как я считаю, не должен определяться в BTOK) следует предусмотреть поле для указания максимального уровня стойкости, который поддерживает КТ.

Предложение: оставить все как есть. Понятно, что сейчас и eId, и eSign будут работать на уровне l = 128. При попытках (маловероятных) перехода на повышенные уровни программы будут возвращать коды ошибок.

agievich commented 5 years ago

Кстати, при описании команд eSign сказано о необязательности поддержки ключей 2-го и 3-го уровней.