bcrypto / btok

Cryptographic tokens
4 stars 4 forks source link

Инициализация BPACE #72

Closed andrewkostevich closed 5 years ago

andrewkostevich commented 5 years ago

63CX: протокол инициализирован успешно ... (при X = 1 пароль приостановлен, а при X = 0 — заблокирован)

Код 63C0 нельзя называть кодом успеха: протокол BPACE не должен выполняться или должен?

Код 63C1 нельзя называть кодом успеха при использовании PIN до подтверждения CAN: протокол BPACE не должен выполняться или должен? Команда инициализации должны быть повторена с CAN. Код 63C1 не позволяет понять, нужно ли проверить CAN для начала сеанса BPACE для разблокировки PIN (#71)

При успешном выполнении команды защищенное соединение «терминал — КТ», если оно было установлено ранее, закрывается

В случае 63C0 нужны ли дополнительные действия: закрывать защищенное соединение «КП — КТ»

olegotory commented 5 years ago

В п. 12.2.16 предлагается написать следующим образом:

  1. 63CX: протокол не может быть инициализирован ... (при X = 1 пароль приостановлен, а при X = 0 — заблокирован).
  2. При успешной инициализации протокола защищенное соединение «терминал — КТ», если оно было установлено ранее, закрывается.

Коды 63C0, 63C1 могут быть возвращены только при инициализации протокола для PIN (CAN и PUK не могут быть приостановлены и заблокированы, см. п. 6.3). Про управление паролем (подтверждение, изменение, разблокировка) сказано в п. 12.3.4. Дополнительно про возобновление PIN по CAN и разблокировку PIN по PUK сказано в п. 6.3, в частности, про возобновление сказано:

Если счетчик достигает значения 1, то PIN приостанавливается и далее требуется ввести CAN. Ввод CAN не изменяет счетчик. При верном CAN пароль PIN возобновляется — его снова можно ввести.

andrewkostevich commented 5 years ago

63CX: протокол не может быть инициализирован

Это не корректное исправление:

При успешной инициализации протокола защищенное соединение «терминал — КТ», если оно было установлено ранее, закрывается.

А что делать с защищенным соединением «КП — КТ»?

Или требовать чтобы перед инициализацией BPACE все защищенные соединения были закрыты и инициализацию делать только из состояния IS?

olegotory commented 5 years ago

В TR-03110 "Advanced Security Mechanisms for Machine Readable Travel Documents and eIDAS Token – Part 3: Common Specifications" для команды инициализации проткола PACE (п. B.14.1) коды 63CX, 6283 отнесены к предупреждению (Warning), т.е. они не рассматриваются как ошибка при инициализации. При выполнении первого шала протокола PACE, если будут возвращены коды 63C0, 63C1, 6283, то это уже рассматривается как ошибка выполнения шага протокола (Authentication failed).

Защищенное соединение «терминал — КТ» после выполнения команды инициализации должно быть разорвано после успешного выполнения команды инициализации, т.е. после возврата одного из кодов 9000, 63CX, 6283.

Защищенное соединение «КП — КТ» после выполнения команды инициализации должно быть разорвано только в случаях, указанных в п. 12.4.5. Новое защищенное соединение «КП — КТ» устанавливается после успешного выполнения всех шагов протокола BPACE.

В п. 12.2.16 предлагается написать следующим образом:

  1. 6984: протокол инициализирован успешно, но пароль деактиворован.
  2. При успешной инициализации протокола защищенное соединение «терминал — КТ», если оно было установлено ранее, закрывается.
andrewkostevich commented 5 years ago

Так какой код возврата у APDU если

Как КП понять, что нужно проверить CAN если она получил от карты код 63C1 (см. также #71)? Если CAN проверен - то 63C1 уже не является кодом ошибки (иначе невозможно получить 63C0).

olegotory commented 5 years ago

У apdu инициализации протокола код будет один и тот же как для приостановленного (1), так и для возобновленного (2) PIN -- 63C1. У apdu выполнения первого шага протокола будет возвращен код 63С1 в первом случае и код, отличный от 63С1 (например, 9000, если шаг протокола выполнен успешно) -- во втором.

agievich commented 5 years ago

Предлагаю корректировки команд. В виде PR #73.

agievich commented 5 years ago

Реализовано в https://github.com/bcrypto/btok/commit/fab876b43ecf23e9d5800847c2f9a7b35b8ac5b7.