Сегодня хочу рассказать о сертификатах не-X.509 формата, которые называются card verifiable self-descriptive certificate (CV). Они описаны в двух документах:

  1. BSI TR-03110 «Advanced Security Mechanisms for Machine Readable Travel Documents and eIDAS Token». Этот стандарт описывает механизмы обеспечения безопасности международных проездных документов (aka загранпаспорта) и европейских токенов eIDAS. Это технический базис для европейских идентификационных документов, включая водительские удостоверения.

  2. ISO 7816 (в основном часть 6) «Identification cards — Integrated circuit cards». Стандарт, посвященный механизмам, применяемым в смарт-картах.

Название документа из п.1 уже говорит, кому вообще нужны эти сертификаты: документы нового поколения, включая загранпаспорт.

Откуда эти сертификаты появились? Подойдем к теме на примере загранпаспорта. За его глобальное развитие как проездного документа отвечает международная организация гражданских авиаперевозчиков (ИКАО). Доступ к данным микросхемы паспорта должен быть надежно защищен, особенно если речь идет о биометрических признаках. Именно для такого случая был придуман механизм Extended Access Control (EAC). Изначально в спецификации ИКАО Doc 9303 было указано только название этого механизма, просто как задел на будущее. Про него только и было сказано, что это опциональный механизм с особыми ключами доступа к биометрическим данным владельца документа. Через некоторое время  Федеральное управление по информационной безопасности Германии (BSI, Bundesamt für Sicherheit in der Informationstechnik) выпустило документ (см п.1), где описало вариант EAC собственной разработки для считывания изображения отпечатков пальцев и радужной оболочки глаза из микросхемы загранпаспортов. Ключевым элементом стали CV-сертификаты. Это инструмент, который смог еще теснее «подружить» PKI и смарт-карты. Этот прием настолько успешно себя зарекомендовал, что предложенный вариант EAC превратился из чисто европейского в международный, а со временем идею EAC улучшили и распространили на европейские идентификационные карты и токены для ЭЦП (eIDAS token), а РФ позаимствовало его для нового паспорта (ПЭН). Эту же технологию как обкатанную и проверенную применяют лидеры европейского рынка, когда разрабатывают национальные документы нового поколения для стран третьего мира.

CV-сертификат — это по сути сертификат, упрощенный настолько, что его разобрать и проверить может даже смарт-карта (для этого всё и задумывалось). Тем не менее, на его основе можно развернуть инфраструктуру со своим корневым и промежуточными УЦ. Задача заключается в том, чтобы во время аутентификации карта могла получить открытый ключ терминала через проверку цепочки сертификатов, изданных в рамках некой единой ИОК. Тогда для карты это будет не просто какой-то ключ снаружи, а величина, которой можно доверять. Попутно карта может проверить уровень полномочий терминала на основе данных сертификатов. Этот прием оказался весьма эффективным, потому что теперь только владелец корневого УЦ решает, кому предоставить доступ к данным микросхемы, а кому – нет, причем решает это на уровне выдачи сертификатов с заданными сроком действия и уровнем полномочий. Для смарт-карт это стало большим шагом вперед с точки зрения управления доступом, потому что традиционно доступ регулировался на основе паролей и симметричной криптографии, т.е. чтобы некто мог считать защищенные данные из микросхемы, надо чтобы существовало общее секретное значение, записанное в память карты заранее (на этапе персонализации). Теперь круг лиц, имеющих доступ к микросхеме, ограничивается только с помощью ИОК.

Например, для доступа к изображению отпечатков пальцев в загранпаспортах в каждой стране развернута национальная трехуровневая ИОК на базе CV-сертификатов:

  1. CVCA (card verifiable CA) — уровень корневого УЦ;

  2. DV (document verifier) — промежуточный уровень;

  3. IS (inspection system) — уровень терминала.

Жизнь этой ИОК описывается в соответствующих внутренних документах. У сертификатов на каждом уровне есть своё время жизни. Чаще всего меняются IS сертификаты, а реже всего – CVCA. В микросхеме хранятся только корневые сертификаты (максимум 2 штуки – текущий и предыдущий, если есть). Этого достаточно, чтобы карта верифицировала всю цепочку сертификатов терминала.

Пример сценария: если некая страна Утопия хочет считывать отпечатки пальцев граждан РФ из паспортов, то она должна создать свой промежуточный УЦ (DV) и получить для него сертификат от российского корневого УЦ (CVCA). Далее этот промежуточный УЦ в рамках срока действия своего сертификата может по своему усмотрению издавать сертификаты терминалов для чтения данных. При этом со стороны самой микросхемы российского паспорта не потребуется никаких дополнительных телодвижений. Если в ней хранится корректный корневой сертификат родной ИОК, то новые терминалы в Утопии смогут прочитать отпечатки пальцев из российского загранпаспорта.

Важное свойство: микросхема паспорта на основе всех валидных сертификатов, изданных домашними УЦ (УЦ в Утопии не в счет — он зарубежный), постоянно оценивает текущее время. Именно благодаря этому у паспорта есть возможность узнавать, что некоторые предоставленные ему сертификаты уже истекли.

Формат сертификата

Базовый формат сертификата — BER–TLV в трактовке ИКАО. Кратко о нем можно прочитать тут. Если говорить о загранпаспортах, то элементы CV-сертификата представляют собой следующую древовидную структуру TLV-узлов.

Тег

Описание

 

7F21

CV Certificate

Сертификат

7F4E

 

Certificate Body

Тело сертификата

5F29

 

 

Certificate Profile Identifier

Версия формата

42

 

 

Certification Authority Reference (CAR)

Идентификатор издателя

7F49

 

 

Public Key

Открытый ключ

5F20

 

 

Certificate Holder Reference (CHR)

Идентификатор владельца

7F4C

 

 

Certificate Holder Authorization Template

Роль сертификата и полномочия

5F25

 

 

Certificate Effective Date

Дата выдачи

5F24

 

 

Certificate Expiration Date

Дата окончания

5F37

 

Certificate Signature

ЭЦП

Формат пока что существует только один, поэтому значение Certificate Profile Identifier всегда равно 0.

CHR и CAR — это идентификаторы владельца сертификата и родительского сертификата, соответственно. Состоят они из ASCII букв и цифр, где первые две буквы обозначают страну (RU, например), далее название уровня сертификата, а далее – всё, что хочешь, например: если CHR=“RUDVTEST0001”, то это российский сертификат промежуточного уровня.

Дата выдачи (Certificate Effective Date) и дата окончания (Certificate Expiration Date) указываются в формате ГГММДД на основе кодировки Binary Code Decimal (BCD).

Элемент Public Key содержит OID алгоритма из списка утвержденных в рамках системы, а далее те элементы, которые требуются согласно алгоритму. Например, для ECDSA этот элемент будет иметь следующую структуру.

Тег

Описание

7F49

Public Key

06

 

OID

81

 

Prime modulus p

82

 

First coefficient a

83

 

Second coefficient b

84

 

Base point G

85

 

Order of the base point r

86

 

Public Point Y

87

 

Cofactor

Так принято, что перечисленные параметры, кроме 0x86 и 0x06, в сертификатах уровня DV и IS не указываются, а наследуются от корневого.

 Шаблон авторизации владельца сертификата состоит из следующих элементов:

Тег

Описание

7F4С

Certificate Holder Authorization Template

06

 

OID шаблона авторизации для паспорта.

53

 

Данные: уровень сертификата + права на чтение критических данных

Именно по этому значению OID определяют, что данный CV-сертификат относится к загранпаспортам ИКАО:

id-EAC-ePassport OBJECT IDENTIFIER ::= {
    bsi-de applications(3) mrtd(1) roles(2) 1
}

bsi-de OBJECT IDENTIFIER ::= {
    itu-t(0) identified-organization(4) etsi(0) 
    reserved(127) etsi-identified-organization(0) 7
}

В документах другого типа тут указывается другой OID. Объект с тегом 0x53 описывает уровень сертификата (CVCA, DV, IS) и указывает, что именно из биометрических данных можно считать в случае успешного прохождения всей аутентификации с микросхемой.

Пример сертификата CVCA, алгоритм ECDSA

Данные сплошняком:

0000: 7F218201 8D7F4E82 014D5F29 01004210 44454356 43414550 41535330 30303031
0020: 7F4981FD 060A0400 7F000702 02020202 811CD7C1 34AA2643 66862A18 302575D1
0040: D787B09F 075797DA 89F57EC8 C0FF821C 68A5E62C A9CE6C1C 299803A6 C1530B51
0060: 4E182AD8 B0042A59 CAD29F43 831C2580 F63CCFE4 41388707 13B1A923 69E33E21
0080: 35D266DB B372386C 400B8439 040D9029 AD2C7E5C F4340823 B2A87DC6 8C9E4CE3
00A0: 174C1E6E FDEE12C0 7D58AA56 F772C072 6F24C6B8 9E4ECDAC 24354B9E 99CAA3F6
00C0: D3761402 CD851CD7 C134AA26 4366862A 18302575 D0FB98D1 16BC4B6D DEBCA3A5
00E0: A7939F86 3904AE54 D71E532C 16D3CCE8 54DD1298 D1068F70 BD2C0F68 E62A32BC
0100: D87BA20E 7534683D 1ED8B94D E64A6E5A 63277FAD 738EA907 C5049B99 7B018701
0120: 015F2010 44454356 43414550 41535330 30303031 7F4C0E06 0904007F 00070301
0140: 02015301 C35F2506 00070004 00015F24 06000900 0303015F 37381DAF 7AA198B9
0160: 48A6DFB6 26BDDDAD 3C0343AB D1F1049C 4CA1B098 21C77A5A 3BBB18A5 D2F6D9AF
0180: 0A2463B4 C137287B AFF19DB8 684C1441 989F

Разобранные данные в виде

tag [length] value // comments
7F21 [82018D] // CV Certificate
  7F4E [82014D] // Certificate Body
    5F29 [01] 00 // Certificate Profile Identifier
    42 [10] 44454356434145504153533030303031 // CAR
    7F49 [81FD] // Public key
      06 [0A] 04007F00070202020202 // Algorithm OID
      81 [1C] D7C134AA264366862A18302575D1D787
              B09F075797DA89F57EC8C0FF // Prime modulus p
      82 [1C] 68A5E62CA9CE6C1C299803A6C1530B51 // First coefficient a
              4E182AD8B0042A59CAD29F43
      83 [1C] 2580F63CCFE44138870713B1A92369E3 // Second coefficient b
              3E2135D266DBB372386C400B
      84 [39] 040D9029AD2C7E5CF4340823B2A87DC6 // Base point G
              8C9E4CE3174C1E6EFDEE12C07D58AA56
              F772C0726F24C6B89E4ECDAC24354B9E
              99CAA3F6D3761402CD  
      85 [1C] D7C134AA264366862A18302575D0FB98 // Order of the base point r
              D116BC4B6DDEBCA3A5A7939F
      86 [39] 04AE54D71E532C16D3CCE854DD1298D1 // Public Point Y
              068F70BD2C0F68E62A32BCD87BA20E75
              34683D1ED8B94DE64A6E5A63277FAD73
              8EA907C5049B997B01
      87 [01] 01                               // Cofactor
    5F20 [10] 44454356434145504153533030303031 // CHR
    7F4C [0E] // Certificate Holder Authorization Template
      06 [09] 04007F000703010201 // 0.4.0.127.0.7.3.1.2.1 - OID шаблона авторизации
      53 [01] C3 // данные шаблона: уровень сертификата + полномочия
    5F25 [06] 000700040001 // 2007-APR-01 - Certificate Effective Date
    5F24 [06] 000900030301 // 2009-MAR-31 - Certificate Expiration Date
  5F37 [38] 1DAF7AA198B948A6DFB626BDDDAD3C03 // Certificate Signature
            43ABD1F1049C4CA1B09821C77A5A3BBB
            18A5D2F6D9AF0A2463B4C137287BAFF1
            9DB8684C1441989F

Трактовка данных шаблона авторизации (значение 0xC3):

биты: 1 1 0 0 0 0 1 1
      x x - - - - - -  Уровень сертификата: 11 - CVCA
      - - - - - - x -  Право чтения радужной оболочки глаза (1 - можно)
      - - - - - - - x  Право чтения отпечатка пальца (1 - можно)

В европейском идентификационном приложении eID используются такие же сертификаты за исключением того, что элемент Certificate Holder Authorization Template (0x7F4C) содержит OID с другим значением, а TLV-объект с тегом 0x53 наполнен другими данными, которые содержат несколько десятков флагов-индикаторов, точно указывающих, что можно/нельзя читать и изменять. Кроме этого, в интересах приложения eID в состав сертификата могут включаться расширения. Этот элемент опционален и его может не быть в сертификате. Их добавили для уточнения параметров онлайн взаимодействия владельца документа с удаленными сервисами.

CV-сертификат — с одной стороны, всего лишь кирпичик большого и сложного механизма обеспечения безопасности в документах нового поколения. С другой стороны, он является её ключевым элементом, и интересен сам по себе. Я в статье не коснулся еще многих вопросов, имеющих отношение к ИОК и контексту применения. Задачей было знакомство. Если есть желание изучить тему подробнее, ниже привожу ссылки.

1. ИКАО Doc 9303

2. BSI TR-03110

3. Use case: personalausweis (German ID card)

Комментарии (7)


  1. HamerUA
    06.10.2022 13:57

    Важное свойство: микросхема паспорта на основе всех валидных сертификатов, изданных домашними УЦ (УЦ в Утопии не в счет — он зарубежный), постоянно оценивает текущее время. Именно благодаря этому у паспорта есть возможность узнавать, что некоторые предоставленные ему сертификаты уже истекли.

    Каким образом микросхема определяет реальное время?


    1. NVF4V Автор
      06.10.2022 14:06
      +1

      Она его только лишь оценивает (ибо таймера реального времени в смарт-картах нет) по данным самих сертификатов. Если карте предъявили сертификат, например, домашний IS, то в нем есть дата выдачи: допустим 12-августа-2022. Это значит, что текущая реальная дата или 12-августа-2022 или позже. Микросхема запоминает эту дату как оценочную. В следующий раз, если кто предъявит сертификат, оканчивающийся, например, в июне 2022 года, то микросхема поймет, что этот сертификат просрочен, потому что июнь 2022 года идет раньше 12-августа-2022. В ходе эксплуатации загранпаспорта оценка текущей даты в памяти микросхемы постоянно актуализируется более свежими значениями.


      1. mr_tron
        06.10.2022 19:03

        А потом случайно на все терминалы Утопии случайно раскатят сертификат выданный 1 января 2222 года и этот паспорт больше не будет читаться в россии, германии и других странах :)


        1. NVF4V Автор
          06.10.2022 21:53

          (1) Никакая Утопия не испортит паспорта РФ, потому что на дату влияют только сертификаты, выданные домашними УЦ, т.е. испортить можно только загранпаспорта в своей стране (2) Слишком много случайностей должно синхронно произойти, чтобы это все-таки случилось.


          1. revoltex
            07.10.2022 09:45

            Не совсем так. Dv сертификаты другой страны могут быть подписаны CVCA первой (в этом и смысл промежуточного DVCA). Это позволяет на определенный срок другой стране генерировать IS сертификаты для доступа к защищённым данным данным первой страны. Дата последнего доступа берется как раз из IS сертификата. И упс можно портить паспорта другой страны.


            1. NVF4V Автор
              07.10.2022 09:48

              Не получится. Испортить текущую дату в чужих паспортах невозможно. Читайте сам стандарт BSI TR-03110 и BSI TR-03105 "Test plan for eMRTDs with EACv1". Там всё объяснено.


          1. patisam
            07.10.2022 09:45

            Закон Мерфи в этом случае не работает?