ИССЛЕДОВАНИЕ БЕЗОПАСНОСТИ БЕСКОНТАКТНЫХ СМАРТ-КАРТ НА ПРИМЕРЕ MIFARE CLASSIC

DOI: https://doi.org/10.23670/IRJ.2021.106.4.015

ИССЛЕДОВАНИЕ БЕЗОПАСНОСТИ БЕСКОНТАКТНЫХ СМАРТ-КАРТ НА ПРИМЕРЕ MIFARE CLASSIC

Научная статья

Шинкевич Н.Н.*

Белорусский государственный университет информатики и радиоэлектроники, Минск, Беларусь * Корреспондирующий автор

Аннотация

В статье рассмотрены основные уязвимости карт MIFARE Classic, а также реализованы атаки, эксплуатирующие описанные уязвимости. Интерес к данной тематике обусловлен тем, что MIFARE Classic покрывает более 70% рынка бесконтактных смарт-карт, и широко используется в различных областях, таких как финансы, транспорт и другие. Показано, что потоковый шифр Crypto 1, который используется для защиты данных на карте, на сегодняшний день не является надежным; обнаруженные уязвимости при грамотной эксплуатации позволяют в теории восстановить секретные ключи за короткое время. Помимо уязвимостей потокового шифра, будут рассмотрены уязвимости стека протоколов; экспериментально подтверждена возможность восстановления ключа.

Ключевые слова: уязвимость, потоковый шифр, Crypto 1, безопасность, атака, секретный ключ.

A STUDY OF THE SECURITY OF CONTACTLESS SMART CARDS VIA MIFARE CLASSIC

Research article

Shinkevich N.N.*

Belarusian State University of Informatics and Radioelectronics, Minsk, Belarus * Corresponding author

Abstract

The article discusses the main vulnerabilities of the MIFARE Classic cards as well as demonstrates the exploits of the vulnerabilities described. The interest in this topic arises due to the fact that MIFARE Classic covers more than 70% of the contactless smart card market and is widely used in finance, transport, and other areas. The study shows that the stream cipher Crypto1, which is used to protect the data on the card, is currently not reliable; the vulnerabilities discovered with proper operation, in theory, allow the recovery of the secret keys in a short amount time. In addition to the vulnerabilities of the stream cipher, the study considers vulnerabilities of the protocol stack as well as experimentally confirm the possibility of key recovery.

Keywords: vulnerability, stream cipher, Crypto1, security, attack, secret key.

Введение

В настоящее время системы, использующие RFID-метки, стали очень популярными, в частности из-за простоты использования, многофункциональности, относительно недорогих карт и считывателей. Смарт-карты используются в таких областях как финансы, безопасность, социальные программы, транспорт и др. Многофункциональность в данном случае подразумевает тот факт, что на смарт-карте может храниться несколько независимых приложений: личные сведения (аналог паспорта), водительских прав, финансовые, идентификационные, транспортные и иные приложения. С ростом роли Internet в мировой экономике интерес ведущих технологических и финансовых организаций к бесконтактной технологии, а также к стандартизации процедур взаимодействия различных интеллектуальных систем и смарт-карт является вполне оправданным и предсказуемым. Таким образом, возникает вполне реальная проблема обеспечения должного уровня безопасности во избежание нарушения функционирования системы вследствие вмешательства потенциального злоумышленника. Данный вопрос особенно актуален для так называемых открытых систем коммерческого применения, обрабатывающих информацию ограниченного доступа, и стремительно развивающихся во всем мире и, в частности, в нашей стране.

Большинство систем используют карты семейства MIFARE производства компании NXP Semiconductors. Наиболее популярным типом карт является Classic (более 1.2 х 1012 выпущенных чипов, и около 250 млн активно использующихся карт по всему миру [1]). Реализация MIFARE является секретной, и надежность чипа подтверждена только его создателями. Более того, алгоритм шифрования Crypto1, применяющийся для защиты данных на картах MIFARE Classic, был изобретен в NXP. Документации к данному шифру не существует, шифр является проприетарным. Надежность шифра, как и надежность чипа, подтверждается только NXP.

Таким образом, целью настоящей статьи является анализ безопасности смарт-карт на примере MIFARE Classic и стойкости шифра Crypto1, используемого для защиты данных на карте, проверка осуществимости и эффективности атак, возможность взлома ключа и снятия дампа с карты. Стоит также отметить, что анализ безопасности смарт-карт есть анализ комплекса факторов, способствующих их использованию [2], [3]. Сюда входит использование шифра Crypto1 для защиты данных на карте, использование определенной инфраструктуры, где применяются смарт-карты; таким образом, безопасность данных на карте прямо зависит от стойкости шифра ко взлому, которая в свою очередь может оказаться бесполезной, если инфраструктура реализована с ошибками и позволит злоумышленнику обойти шифрование. Безопасность всей системы есть безопасность ее самого слабого звена, поэтому в контексте данной статьи будут описаны различные методы, так или иначе позволяющие получить доступ к данным на карте, вне зависимости от локализации уязвимости.

Типы карт MIFARE Classic

Интегральные микросхемы NXP MIFARE Classic стали первыми чипами для бесконтактных смарт-карт с возможностью чтения/записи, поддержкой стандарта ISO 14443 и работающими в частотном диапазоне 13.56 МГц.

Семейство MIFARE Classic состоит из карт MIFARE Classic 1K, MIFARE Classic 4K, MIFARE Classic EVI 1K [4], MIFARE Classic EV1 4K, MIFARE ID и MIFARE Mini (таб. 1) [5].

Таблица 1 - Технические характеристики карт семейства MIFARE Classic

Карта EEPROM RFID -интерфейс Защита данных UID

MIFARE Classic 1K 1024 байт; 16sx4bl 13,56 MHz; ISO 14443 A Crypto1; ключи A/B 4 байта

MIFARE Classic 4K 4096 байт; 32sx4bl/8sx16bl 13,56 MHz; ISO 14443 A Crypto1; ключи A/B 4 байта

MIFARE Classic EV1 1K 1024 байт; 16sx4bl 13,56 MHz; ISO 14443 A Crypto1; ключи A/B 7 байт

MIFARE Classic EV1 4K 4096 байт; 32sx4bl/8sx16bl 13,56 MHz; ISO 14443 A Crypto1; ключи A/B 7 байт

MIFARE ID 64 байта; 1sx4bl 13,56 MHz; ISO 14443 A

MIFARE Mini 320 байт; 5sx4bl 13,56 MHz; ISO 14443 A

Примечание: bl = block = 16 байт; p = page

Организация памяти

Память EEPROM карт MIFARE Classic организована в виде секторов, разделенных на блоки. В одном секторе обычно содержится 4 блока. В одном блоке содержится 16 байт. В качестве примера будет рассмотрена организация памяти для карты MIFARE Classic 1K, EEPROM 1024 байта, 16 секторов по 4 блока (таб. 2).

Таблица 2 - Организация памяти MIFARE Classic 1K

Сектор Блок Номер байта в блоке Описание

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 [0] 0 Manufacturer Block

[1] 1 Data block

[2] 2 Data block

[3] 3 Key A Access bits Key B Sector 0 trailer

i [0] Data block

[1] Data block

[2] Data block

[3] Key A Access bits Key B Sector i trailer

15 [0] 60 Data block

[1] 61 Data block

[2] 62 Data block

[3] 63 Key A Access bits Key B Sector 15 trailer

В первом блоке данных - blockO - первого сектора - sectorO - хранятся данные о производителе чипа и 4-байтный идентификатор - UID. Данный блок программируется при производстве чипа и имеет защиту от перезаписи. Второй и третий блок данных - blockl, block2 - первого сектора - sectorO - используются для хранения пользовательских данных. Четвертый блок данных - block3 - первого сектора - sectorO - называется «трейлер» [4], он содержит по два ключа доступа к каждому блоку и условия доступа.

Трейлер хранит:

- ключи A (обязательный; чтение) и B (опциональный; запись);

- условия доступа к блокам, которые хранятся в байтах 6...9 [4].

Биты доступа также определяют тип блока (данные или хранение значения). В девятый байт трейлера сектора могут быть записаны пользовательские данные. Для байта 9 применяются те же условия доступа, что и к байтам 6, 7 и 8 [6]. При чтении трейлера сектора байты ключа A не могут быть прочитаны, при верном ключе A вернется 00 00 00 00 00 00. Если ключ В используется, байты 10-15 могут быть считаны. По умолчанию для всех ключей новых чипов установлено значение FF FF FF FF FF FF, а значение байтов 6, 7 и 8 равно FF0780h.

Перед выполнением любой операции с памятью, карту необходимо выбрать (посредством операции Select) и провести аутентификацию (операция Auth). То, какие операции можно произвести с блоками памяти, зависит от ключей, предъявленных при аутентификации, а также от условий доступа (таблица 3), представленных группами из трех битов, хранящихся в трейлере соответствующего сектора [4]. Биты хранятся в инвертированном и не инвертированном виде, для проверки целостности данных. Условия могут быть изменены при условии знания ключа (ключей).

Таблица 3 - Условия доступа к памяти

Биты Операция Номер блока Описание

С1з С2з С3з Read Write 3 Трейлер

C12 С22 С32 Read Write Inc Dec Transfer Restore 2 Блок данных

C1i, С21 СЗ1 Read Write Inc Dec Transfer Restore 1 Блок данных

С1о С2о СЗо Read Write Inc Dec Transfer Restore 0 Блок данных

В качестве примера можно рассмотреть трейлер нулевого сектора карты MIFARE Classic 1K. Данные блока были прочитаны при помощи PM3 RDV4.01, ключ FF FF FF FF FF FF (рис. 1). Условия доступа представлены значением ff 07 80 69 (таб. 4), ключ A представлен как 00 00 00 00 00 00. Следует отметить, что невозможность прочитать ключ A установлена текущими условиями доступа, поэтому на месте ключа A отображены нули. В байте 9 хранятся пользовательские данные [4].

[usl ] ршз —> 1 hf mf rase 0 A ffffffffffff

—sector по 0, key A - FF FF FF FF FF FF

isOk: 01

Э 1 01 CS 35 3D Cl 08 04 00 01 6F 01 6D 45 68 F8 1D

1 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

2 1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

з 1 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF

ïector trailer decoded :

iev A

Рис. 1 - Чтение данных с карты при помощи PM3 RDV4.01

Таблица 4 - Условия доступа к т рейлеру, пример

Номер байта Значение (hex) Значение (bin) Биты условий доступа

6 ff 11111111 С23 С22 С21 С20 CI3 СЪ CI1 CI0

7 07 00000111 С13 С12 С11 С10 СЗ3 СЗ2 СЗ1 СЗ0

8 80 10000000 С33 С32 С31 С30 С23 С22 С2: С20

Исходя из данных таблиц 3, 4 имеем условия доступа:

1. Трейлер, C13 C23 C33, 001, ключ B может быть прочитан, транспортная конфигурация**;

2. Блок данных 2, C12 C22 C32, 000, данные могут быть прочитаны, записаны, также можно совершить операции инкремента, декремента, трансфера и восстановления, при условии знания ключа A или B*;

3. Блок данных 1, C1i C2i C3i, 000, данные могут быть прочитаны, записаны, также можно совершить операции инкремента, декремента, трансфера и восстановления, при условии знания ключа A или B*;

4. Блок данных 0, C1o C2o C3o, 000, данные могут быть прочитаны, записаны, также можно совершить операции инкремента, декремента, трансфера и восстановления, при условии знания ключа A или B* [5].

* Исходя из того, что ключ B может быть прочитан (блок 3, трейлер), он не может использоваться для аутентификации.

** Транспортная конфигурация возможна сразу после производства карты, ключ B можно прочитать при предъявлении ключа A.

Потоковый шифр Crypto 1

Crypto1 - проприетарный алгоритм шифрования, созданный NXP Semiconductors для использования MIFARE Classic картами. Несколько исследований, проведенные в 2008 [7] и 2009 [8] годах, показали, что безопасность данного алгоритма является невысокой. Reverse engineering, или обратное проектирование, Crypto 1 впервые было произведено в декабре 2007 года, и представлено на конференции в Берлине [9]. Метод являлся очень трудоемким, поскольку потребовал физического вмешательства в структуру чипа, и дорогостоящего оборудования (например, микроскоп с возможностью съемки фотографий высокого разрешения). Криптоанализ шифра подробно описан в работах [10], [11].

Cryptol является потоковым шифром, очень похожим на предшествующий Hitag2 [2]. Cryptol (рис. 2) состоит из:

- одного 48-битного LFSR для хранения секретного состояния линейной функции;

- двухуровневой нелинейной функции;

- 16-битного LFSR, который используется при аутентификации. Некоторыми картами может использоваться как ГПСЧ.

Рис. 2 - Схема шифра Crypto1 После успешной аутентификации данные между картой и считывателем передаются в зашифрованном виде. 48-Ьй LFSR

Начальное состояние 48-битного LFSR определяется секретным ключом, известным карте и считывателю. Каждый новый бит ключевого потока (keystream) генерируется на основании 18 бит состояния LFSR в определенный момент времени (1). После чего регистр сдвигается влево на один бит, а новый сгенерированный бит вдвигается справа [7].

L(XqXi. . Л47) — Xq ф X5 ф X9 ф X10 ф X-12 Ф ^14 Ф ^15 Ф ^17 Ф ^19 Ф ^24 Ф ^25 Ф ^27 Ф ^29 Ф ^35 Ф ,

Л41 ^ X42  Л43

Двухуровневая нелинейная функция, или filter function. "Первый уровень" фильтр-функции представлен функциями /й(2) и fb (3) (рис. 3) [12], использующихся 2 и 3 раза соответственно. "Второй уровень" состоит из одной функции /с(4), принимающей 5 аргументов - результатов работы функций предыдущего уровня [10] (рис. 3).

Рис. 3 - Двухуровневая нелинейная функция ¡а(а,Ъ,с,й) = ((а V Ь) ф (а Л Ь)) ф (с Л (о ф й) V й) /ь(а,Ъ,с,й) = ((а Л Ь)V с) ф ((а ф Ь) Л (с V /с (а, Ъ, с, й, е) = (а V ((Ь V е) Л (^ ф е))) ф ((а ф (<2 Л Ь)) Л ((с ф V (Ь Л е))) Соответственно, значение фильтр-функции на выходе будет определено согласно (5) [2].

/

16-ЬН LFSR. 16-битный LFSR используется картой как ГПСЧ. Стоит отметить, что генерируемые значения должны быть 32-х битными, это необходимо для корректной работы шифра. Каждый новый бит (6) вдвигается в регистр справа.

х1. . х15) — х0 ФХ2ФХ3Ф Х5

Состояние LFSR в каждый момент времени определяется текущим значением, сдвинутым влево на 1 бит, и сгенерированным битом (6) [12], который вдвигается в регистр справа. В зарубежной литературе для обозначения функции, результатом работы которой будут 32-х битные значения, сгенерированные при помощи 16-битного LFSR (7) [2], используется обозначение suc, (successor, букв. функция следования). В данной статье будем придерживаться обозначения suc.

suc(x0xi.. Х31) — Xi%2.. X3iL(Xi6Xi7.. Х3^

Для вычисления NT, NR,AT,AR значений определим функцию sucn, означающую применение suc к текущему состоянию п раз [2]. Обозначим 32-х битное значение, сгенерированное при помощи 16-битного LFSR в момент времени i как S tat et, и определим sucn (8) [2].

sucn(Statei) — suc(sucn 1(Statei)),Statei — x0.x1...x3

Обмен информацией

Процесс обмена (рис.4) начинается с так называемого POR состояния карты, Power-on Reset, или Сброс при включении питания, означающего, что карта будет выдавать сигнал Reset до тех пор, пока напряжение Vcc не стабилизируется [13].

Далее от считывателя поступает команда REQA - запрос карты, или WUPA - запрос всех карт. Карта должна ответить кодом ATQA (ATQA, Answer To reQuest A - ответ на запрос, тип A). Данный код зависит от модели карты и производителя.

Механизм антиколлизии (команда ANTICOLLISION, код 0x93) используется для определения уникального номера карты, UID, с которой считыватель будет продолжать работу при одновременном нахождении в поле считывателя нескольких карт. UID, полученный считывателем в процессе обмена информацией (рис. 4) состоит из 4-х байт и контрольного байта BCC, вычисленного при помощи операции XOR побитно над этими байтами. 4 байта UID и контрольный байт BCC находятся в нулевом блоке нулевого сектора памяти карты [13].

Рис. 4 - Схема процесса обмена информацией тега и считывателя

В основе механизма антиколлизии лежит принцип представления бит, получаемых считывателем от карты. При наличии в поле считывателя одновременно нескольких карт они синхронно отвечают считывателю своими UID-кодами. Поскольку каждая карта имеет свой, отличный от других UID, то в некотором бите при передаче UID произойдет наложение «1» на «0». Считыватель определит эту ситуацию как коллизию и по определенному алгоритму, допустим в месте наложения бит, установит значение бита равным «1» и повторной командой антиколлизии пошлет часть UID, заканчивающуюся этим битом, и только те карты, у которых совпадает переданная считывателем часть UID, должны ответить оставшейся частью своих UID. За несколько циклов антиколлизии считыватель будет знать UID карты, с которой он продолжит работу.

После того, как считывателю становится известен UID карты, он посылает команду SELECT (код 0x93, такой же, как и у команды ANTICOLLISION [6]). Далее следует байт NVB, равный размеру посылаемой команды, т.е. 7 полных байт, далее UID карты (4 байта), байт BCC. Формат команды приведен на рис. 5.

1 byte 1 byte 4 bytes 1 byte

SELECT NVB UID BCC

0x93 0x7 OxabcdefOO Oxld

Размер

Данные

Пример

Рис. 5 - Формат команды SELECT 97

Команда SELECT завершается двумя байтами CRC (CRC, или Cyclic Redundancy Check - алгоритм нахождения контрольной суммы, предназначенный для проверки целостности данных. Порождающий полином для вычисления CRC MIFARE [9]), вычисленного по семи предыдущим байтам.

СДС1604)

X16 + X12 + X5 + 1

Команда останова, HALT (код 0x5), состоит из 4-х байт, где первые 2 байта это сама команда, и вторые 2 байта -CRC код. Формат представлен на рис. 6.

Рис. 6 - Формат команды останова HALT

По команде останова HALT карта переходит в режим ожидания и не реагирует на все остальные команды, за исключением команды запроса всех карт WUPA [6].

Процедура аутентификации. Для того, чтобы получить доступ к данным на карте, считыватель должен пройти процедуру аутентификации [10] (рис. 7).

Данная процедура состоит из трех этапов, основанных на предположении, что и карта, и считыватель знают секретный ключ, исходя из чего каждый из трех этапов завершится успешно и состояние шифра карты и считывателя будет одинаковым, что в свою очередь сделает возможным шифрование и дешифрование данных.

На любом этапе процедуры аутентификации считыватель может ответить командой HALT, которая была описана ранее.

На этапах 1, 2 и 3 показан обмен значениями {Мй}, (Лг), {Лй}, где передается в незашифрованном виде от тега считывателю, и формируется согласно (7) [7].

Значения {Мй}, {Лг} и {Лй} передаются уже в зашифрованном виде, и формируются отдельно тегом и считывателем в процессе аутентификации согласно (10), (11) и (12) соответственно [2].

Рис. 7 - Аутентификация

Afc = suc32

Лй = suc64

= suc96

Ключевой поток, или keystream, на этапах 1, 2 и 3 обозначен как ZiSi, /с$2

и fcs3 соответственно. Далее будут

подробно рассмотрены этапы аутентификации.

Обозначим состояние шифра в момент i как 5;(13).

$ = 5i5i + 15i + 2 "5i+47

Когда считыватель отправляет запрос тегу на проведение какой-либо операции с памятью, он должен доказать, что имеет право на ее проведение. Доказательством является знание секретного ключа K блока или сектора, операцию с данными которого считыватель хочет провести. В процессе аутентификации состояние шифра считывателя и тега будет изменяться последовательно, и в результате будет одинаковым, что позволит передавать данные уже в зашифрованном виде [2]. После того, как считыватель отправляет запрос на проведение операции тегу, состояние шифра считывателя и тега инициализируется секретным ключом K (14).

Si = ; = + + 2 .. fcÎ+47

Далее, тег формирует значение NT, при помощи 16-битного ЬР8Я. В самом начале коммуникации это значение зависит от физических параметров ИС тега, как показали исследования [1], от времени подачи энергии на сам чип. NT отправляется считывателю в незашифрованном виде. Далее, состояние шифра изменяется (15), где ию означает уникальный идентификатор тега, а NTl означает I — й бит NT.

51+48 = .. б1+47) е ^ е ию1,1 6 [0. .31]

Например, при I = 0 получим бит 548 (16), который будет вдвинут в регистр справа, а бит 50 будет выдвинут из регистра.

548 = Ь

После сдвига регистра на 32 позиции влево, его состояние будет представлять ничто иное, как кБ^^ [8]. Отметим, что операция должна быть выполнена считывателем и тегом.

Далее, считыватель формирует значение NR, исходя из состояния своего 16-битного ЬР8Я. Стоит отметить, что состояния регистров тега и считывателя связаны, что, с одной стороны, позволяет передавать данные в зашифрованном виде, а с другой стороны, сделать верные выводы о состоянии регистра считывателя или тега, имея доступ лишь к одному участнику коммуникации, либо перехватив данные начального этапа, находясь в режиме прослушивания.

Считыватель формирует NR, и шифрует его при помощи кБ1 (10). После этого считыватель формирует значение AR (11). На данном этапе на стороне считывателя состояние регистра изменяется (17) для генерации кБ2.

51 + 80 = ^

После сдвига регистра на 32 позиции влево, его состояние будет представлять ничто иное, как к 2. После чего считыватель отправляет тегу значения }, (А^.

Далее, тег расшифровывает значение NR при помощи кБ1, и изменяет свое состояние шифра (17), чтобы получить кБ2, после чего он также расшифровывает AR. Тег формирует значение Ат (12), и изменяет состояние своего шифра, чтобы сформировать к 3. На предыдущем этапе (когда был сформирован к 2) 32 бита состояния были использованы для шифрования AR, размер регистра равен 48 битам, соответственно имеем 16 "неиспользованных" бит, и останется сформировать еще 16 (18), для того чтобы зашифровать Ат. Тег отправляет считывателю значение {Ат}.

51 + 112 = ^

Считыватель на своей стороне изменяет состояние своего шифра (18), расшифровывает и проверяет полученное значение Ат. В случае успеха весь дальнейший обмен данными между тегом и считывателем будет производиться в зашифрованном виде.

Уязвимости

Ненадежный ГПСЧ. Карта использует 16-битный ЬР8Я для генерации 32-битных значений, использующихся в процессе аутентификации для корректной работы шифра, это означает, что первая половина сгенерированного значения будет определять вторую половину [7], [8]. Соответственно, имеем 216 — 1 = 65535 возможных значений, валидность каждого сгенерированного значения определяется (19).

пк е пк+2 е пк+з е пк+5 е пк+и = о,кб [о. .15]

Неиспользуемые фильтр-функцией биты и функция отката состояния регистра. Двухуровневая нелинейная фильтр-функция использует 20 бит для генерации ключевого потока [8], а именно биты 9, 11,13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47 (рис. 3). Биты 0 - 8 не используются, что в свою очередь делает возможным реализовать функцию отката состояния регистра (20) (21) вплоть до восстановления секретного ключа [12]. Процесс отката заключается в выполнении обратных операций. применяемых к регистру во время процедуры аутентификации [2]. Пусть состояние регистра на этапе 2 известно, т.е. сразу после вычисления состояния (17) (е NR). Соответственно, можно вычислить бит, который будет вставлен на 47-ю позицию, после чего регистр будет сдвинут влево, и бит с позиции 0 будет смещен [7]. Известно также, что биты 0-8 не используются фильтр-функцией. Таким образом, используя вычисленный бит (47-й), можно вычислить смещенный с нулевой позиции бит, выполнив ХОЯ данного бита с NRзl, то есть откатить состояние регистра на предыдущее. Выполнив данную операцию еще 31 раз, получим состояние регистра до применения операций второго этапа аутентификации, т.е. состояние после первого этапа (е ию е NT) [7]. Применив последовательно функцию отката к данному состоянию 32 раза, получим первоначальное состояние регистра до начала процедуры аутентификации, когда регистр был инициализирован секретным ключом.

к(х1х2 . . х48) = х5 е х9 е х10 е х12 е х14 е х15 е х17 е х19 е х24 е х25 е х27 е х29 е х35 е х39 е Х41 /ла\

Фу ¿Ъ -и ¿Ъ -и

х42 е х43 е х48

х48 =

Ь

Утечка битов ключа через Parity bits. Согласно стандарту ISO14443A, каждый байт передаваемой информации должен сопровождаться так называемым parity bit, или битом четности. Parity bit представляет собой ничто иное, как применение операции XOR ко всем битам передаваемого байта [10]. При передаче данных бит четности вычисляется для незашифрованных данных (plaintext), и зашифровывается при помощи 1 бита ключа (рис. 8) [9]. Первый бит следующего байта информации шифруется тем же битом ключевого потока, что и бит четности, вычисленный ранее. Это приводит к ситуации, когда становится возможным вычислить 3 бита ключевого потока при помощи одних лишь битов четности.

Рис. 8 - Вычисление битов четности

Утечка битов ключа через код ошибки. На втором этапе аутентификации считыватель отправляет тегу значения {Мй}, {Лй}, каждый байт сопровождается битом четности. При условии, что биты четности будут верными, а ответ считывателя Лй - нет, карта ответит кодом команды HALT, зашифрованным при помощи 4-х бит ключа соответственно. Таким образом, имеет место утечка еще 4-х бит ключа [2].

Аутентификация нескольких секторов при помощи одного ключа. Эксплуатацию данной уязвимости можно произвести при условии знания хотя бы одного ключа к любому сектору карты. Если ключ известен, то после успешной аутентификации состояния регистра тега и считывателя примут определенное значение, и будут использоваться для дальнейшего шифрования передаваемых данных, в том числе новых аутентификаций. При запросе считывателя на проведение операции с данными для какого-то сектора, отличного от того, где аутентификация уже произошла, состояние регистра не сбрасывается, что делает возможным доступ к информации секторов с неизвестными ключами [2].

Реализация практических атак

Оборудование. Все эксперименты, описываемые в данной статье, проводились при помощи карт MIFARE Classic 1K со слабым ГПСЧ (9), MIFARE Classic 1K типа "hardened", обратно совместимая с исходной версией MIFARE Classic, RFID карта MIFARE M1 S50.

В качестве считывателя выступали Proxmark3 Easy, RDV4.01 [15]. Почти все модели Proxmark3 используют AT91SAM7S контроллеры в качестве CPU. AT91SAM7S - серия микроконтроллеров с малым количеством выводов, выполненных на основе 32-разрядного процессора ARM с архитектурой RISC. RDV4.01 использует микроконтроллер SAM7S512 (SAM7S512 на базе ARM от Microchip входит в серию микроконтроллеров SAM7S на базе 32-разрядного процессора RISC ARM7TDMI. Он работает на максимальной скорости 55 МГц и имеет 512 КБ флэш-памяти с 64 КБ двухканальной SRAM); Easy использует микроконтроллер более ранней версии: AT91SAM7S256, (меньший объем памяти, 256 Кб).

Атаки. Существует группа атак, направленных на "восстановление" секретных ключей карты. После успешного осуществления злоумышленник может скопировать данные карты или же изменить их. Есть 2 способа осуществления таких атак: card-only attacks (злоумышленнику достаточно только карты для осуществления атаки, он сам выступает в качестве считывателя), и перехват информации во время обмена данными карты и считывателя.

Nested Attack. Данная атака использует уязвимости ГПСЧ [9], утечку битов через код ошибки и parity bits. Для ее успешного осуществления достаточно знать один секретный ключ любого блока. Далее, возможно восстановить секретные ключи к остальным блокам карты [8]. Работает для любых карт с CRYPTO1 (MIFARE Classic и эмуляции).

Для тестирования атаки была использована карта MIFARE Classic 1K, все секретные ключи на которой были намеренно перезаписаны таким образом, чтобы исключить успешный перебор по словарям с наиболее распространенными ключами. Для генерации ключей использовался скрипт на языке Python, для записи ключей использовался shell-скрипт для Proxmark3 RDV4.01 (рис. 9).

Рис. 9 - Код скрипта Proxmark3 RDV4.01 для записи новых A и B ключей на карту mifare Classic 1K

Для проведения атаки использовалась MFOC [14], утилита с открытым исходным кодом, написанная на языке программирования С Для успешного осуществления данной атаки нужно знать хотя бы 1 секретный ключ любого блока карты. Предположим, известен секретный ключ A от блока 0, 0x45a47777d6b3. Время восстановления 1 ключа составляет в среднем 1-5 секунд, общее время выполнения атаки составило 68.85 секунд; на рис. 10-12 представлены начало, успешное восстановление ключа B сектора 0 блока 0, и последовательное восстановление всех ключей карты соответственно.

{3 - ~/research/lab/mfoc-mifare-classic-test >> mfoc -k 45a47777d6b3 -0 card.mfd The custom key 0x45a47777d6b3 has been added to the default keys Found Mi fare Classic lk tag ISO/IEC 14443A (136 kbps) target: ATQA £SENS_RES): 00 04

* UID size: single

* bit frame anticollisi on supported

UID (NFCID1): 3a da 67 16

Рис. 10 - Nested Attack start

lector 00 - Found Key A: 45a47777d6b3 Found Key E: 22609aS20491 lector 01 - Unknown Key A Unknown Key E

Рис. 11 - Восстановление ключа B блока 0

Using secto Sector: 1, Found Key Data read Sector: 2, Found Key Data read Sector: 3, Found Key Data read Sector: 4, Found Key Data read Sector: 5, Found Key Data read Sector: 6.

r 00 as an exploit sector type A, probe 0, distance 32 : A [3f9f44338599] with Key A revealed Key B: type A, probe 0, distance 32 : A [4bdf3f676734] with Key A revealed Key B: type A, probe 0, distance 32 : A [7ddd3ff34d58] with Key A revealed Key B: type A, probe 0, distance 32 : A [f8f47a638fea] with Key A revealed Key B: type A, probe 0, distance 32 : A [3a0bf6079a3b] with Key A revealed Key B: type A, probe 0, distance 32

[6567787fc991] - checking Auth:

[9c5cb713635b] - checking Auth:

[a697f9f52448] - checking Auth:

[3560f858clc9] - checking Auth:

[bfd7a78f2e7Q] - checking Auth:

d with Key A revealed Key B: [da67a402cf77]

type A, probe 0, distance 32 .....

y: A [063e2212fb89]

d with Key A revealed Key B: [a04813d56ddc]

type A, probe 0, distance 32 .....

y: A [4eela039b4bc]

d with Key A revealed Key B: [0e2729dd95d7]

type A, probe 0, distance 32 .....

y: A [ad29018f9012]

d with Key A revealed Key B: [56b81a423f90]

, type A, probe 9, distance 32 .....

y: A [b88eeea25435]

d with Key A revealed Key B: [f9ccd2550fdd]

, type A, probe 0, distance 32 .....

y: A [d735bc204816]

d with Key A revealed Key B: [f75cb209f853]

ing Auth: OK

ing Auth: OK

ing Auth: OK

ing Auth: OK

ing Auth: OK

ing Auth: OK

Рис. 12 - Последовательное восстановление ключей карты

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

Таким образом, «легкие» ключи: содержатся в словаре, имеют большое количество повторяющихся групп символов, тогда как «сложные» ключи не содержатся в словаре, символы ключа генерируются случайным образом.

Исходя из информации, представленной на графике (рис. 13), можно сделать следующие выводы: время восстановления не зависит от сложности ключа, лишь в некоторых случаях (ключ имеется в словаре) программа способна определить его валидность быстрее. Время, необходимое для восстановления, колеблется в пределах от 2 -х до 5 секунд, т.е. используется уязвимость самого алгоритма и реализации, не зависит от ключа, что еще раз доказывает ненадежность CryptoL

Darkside Attack. Данная атака использует уязвимости ГПСЧ, утечку битов через код ошибки и parity bits, а также NACK bug (NACK, Not ACKnowledgement - transmission error, ошибка передачи; тег отвечает кодом NACK когда биты четности неверны). Атаке подвержены теги, ГПСЧ которых реализован с помощью операции XOR [8] (9).

400 600

Номер попытки

Рис. 13 - Зависимость времени восстановления ключа от его сложности

Работает на картах MIFARE Classic поколения до EV1 (в EV1 уязвимость ГПСЧ уже устранена). Для осуществления атаки нужна только карта.

usb] ртЗ —> hf mf darksi de

=] Executing darkside attack. Expected execution time: 25sec on average =] press pm3-button on the Proxmark3 device to abort both Proxmark3 and client

Parity is all zero. Most likely this card sends NACK on every authentication. 9 no candidates found, trying again

found 33 candidate keys.

9 all key candidates failed. Restarting darkside attack

Parity is all zero. Most likely this card sends NACK on every authentication. 9 no candidates found, trying again

found 29 candidate keys.

9 all key candidates failed. Restarting darkside attack

Рис. 14 - Darkside Attack start

Для тестирования атаки была использована карта MIFARE Classic 1K (использованная ранее в тестировании Nested Attack).

[ ]  no candidates found, trying again

[ ] "Found 14 candi date keys. [ ] found valid key: 083C.10357148

Рис. 15 - Ключ успешно восстановлен

Наличие NACK уязвимости позволяет в среднем осуществить 128 запросов к карте, чтобы выяснить все биты секретного ключа.

Тестирование атаки проводилось при помощи Proxmark3 RDV4.01, процесс представлен на рис. 14, 15 соответственно.

Ключ карты, обнаруженный при помощи Darkside атаки, можно использовать для восстановления других секретных ключей, используя Nested Attack.

Communication interception attack. Цель этой атаки - восстановить ключ, использованный для шифрования перехваченной фазы аутентификации между тегом и считывателем при условии, что и тег, и считыватель знают секретный ключ.

Восстановление ключа выполняется в автономном режиме после успешного перехвата связи. Ключ сектора, участвующего в аутентификации, может быть восстановлен, в результате чего могут быть получены все данные из этого сектора.

Эта атака использует два ключевых недостатка в потоковом шифре Crypto1, а именно возможность восстановления состояния LFSR вследствие того, что в генераторе фильтров используются только нечетные биты, что в свою очередь позволяет откатить состояние регистра до первоначального из-за того, что первые девять битов LFSR не используются генератором фильтров [8].

Итак, для тестирования атаки были использованы карта MIFARE Classic 1K (использованная ранее в тестировании Nested Attack), Proxmark3 Easy в качестве считывателя, Proxmark3 RDV4.01 в качестве сниффера. Карта находится между двумя устройствами и доступна для проведения операций с ней (рис. 16).

Рис. 16 - Proxmark3 Easy, RDV4.01 и карта MIFARE Classic

Считыватель делает запрос на чтение данных карты, в это время сниффер находится в режиме активной прослушки. В результате работы сниффера был получен список команд (рис. 17).

usb] pm3 —> hf 14a list =] downloading tracelog data from device ] Recorded activity

Start | End | Src | Data (! denotes parity error) | CRC | Annotation

б 1 992 Rdr 152(7) WUPA

2244 | 4612 Tag | 04 00

7040 | 9504 Rdr | 93 20 ANTICOLL

10692 | 16580 Tag 1 3d da 67 16 91

19072 | 29600 Rdr | 93 70 3a da 67 16 91 3a aS ok SELECT_UID

30788 | 34308 Tag | 08 Ьб dd

35968 | 40736 Rdr | 60 04 dl 3d ok | AUTH-A

42692 | 47428 Tag | 29 0e 17 94

56832 | 66208 Rdr | 92 da lc. 32 66: 77: 3d Ъ2\ : crc |

67396 | 72068 Tag \ът. 5a аб: af

77952 | 82720 Rdr | 69 02 98 16 : ore |

84036 | 104836 Tag | c9 7a! Ь8! 4f 75: 0a: a9 74 04 23 03 c2 77: 5d 51 97: c9 10: : crc |

117888 I 122656 Rdr a5 86 481 d3 : crc 7

Рис. 17 - Данные, перехваченные при помощи PM3 RDV4.01

Исходя из представленной выше информации (рис. 16), UID = 0x3ada6716, = 0x290e1794, {Ык} = 0x92da1c32, {Лй} = 0x66773db2, {Ат} = 0xb75aa6af. Используя уязвимости, описанные ранее, производим откат состояния регистра до первоначального состояния и восстанавливаем секретный ключ, который был использован легальным считывателем при аутентификации карты (рис. 18).

V rOOl <a - /opt/proxmark3-4rdv4/toolsymfkey >> ./mfkey64 3ada6716 29Eel794 92dalc32 66773db2 b75aa6af

MIFARE Classic bey recovery - based 64 bits of keystream

Recover key from only one complete authentication!

Recovering key for:

uid: 3ada6716

nt: 29Bel794

(nr): 92dalc32

tar): 66773db2

(at): b75aa6af

LFSR succesors of the tag challenge:

nt' : : 1651f9e5

nt1  : : 175fcSSl

Keystream used to generate {ar} and {at}:

ks2: : 7026c457

ks3: : a0056eae

Found Key: [3f9f4433S599]

Рис. 18 - Успешное восстановление ключа

Заключение

На основании полученных результатов можно сделать вывод, что использовать теги MIFARE Classic небезопасно, однако большое количество предприятий, финансовых и других учреждений (отели и гестхаусы, магазины, сервисы платной парковки и т.д.) все еще используют их в настоящее время в целях экономии средств (полное обновление системы с использованием новых технологий стоит достаточно дорого), или ввиду отсутствия необходимых знаний (часто можно встретить ошибки конфигурации, например неправильно настроенные права доступа позволяют использовать секретный ключ B для изменения данных; или использование транспортной конфигурации для некоторых блоков, что позволяет успешно применить к ним Nested Attack).

Защита данных на картах MIFARE Classic осуществляется при помощи Сrypto 1, который обладает рядом серьезных уязвимостей. Процесс обмена данными также имеет слабые места, например, отправка зашифрованного при помощи секретного ключа кода ошибки. Эти недостатки позволяют злоумышленнику восстановить секретный ключ за секунды.

Поскольку протокол реализован аппаратно, невозможно предложить каких-либо окончательных мер противодействия этим атакам, которые не потребовали бы замены всей инфраструктуры. Однако стоит отметить, что в настоящее время существуют преемники карт Classic, а именно Plus, разработанные компанией NXP, в которых, согласно отчетам, устранены перечисленные уязвимости, используется другой алгоритм шифрования.

Конфликт интересов Conflict of Interest

Не указан. None declared.

Список литературы / References

1. NXP Semiconductors. - [Electronic resource]. - URL: https://www.nxp.com; (accessed 01.10.2020).

2. Sarrias M. B.Security in RFID devices / Marti Berini Sarrias, Jordi Herrera Joancomarti, Universitat Autonoma de Barcelona. Escola d'Enginyeria. 2013.

3. Meijer C. F. J. Ciphertext-only cryptanalysis on hardened mifare classic cards extended / C. F. J. Meijer, 31 Aug 2016;

4. MIFARE Classic EV1 1K- Mainstream Contactless SmartCard IC for fast and easy solution development; Rev. 3.2 -23.05.2018.

5. NXP Semiconductors. MIFARE Classic 1K Card IC functional specification (October 2020).

6. Mytnik K. Ya. Smart cards and information security / K. Ya. Mytnik, S. P. Panasenko ; edited by Professor V. F. Shangin - Moscow: DMK Press, 2019. - 516 p.

7. Garcia, Flavio D. Dismantling MIFARE Classic / Garcia, Flavio D.; Gerhard de Koning Gans; Ruben Muijrers et al. // 13th European Symposium on Research in Computer Security (ESORICS 2008), LNCS, Springer (4.10.2008).

8. Garcia, Flavio D. Wirelessly Pickpocketing a Mifare Classic Card / Garcia, Flavio D.; Peter van Rossum; Roel Verdult; Ronny Wichers Schreur. // 30th IEEE Symposium on Security and Privacy (S&P 2009), IEEE.

9. Nohl K.Mifare, little security, despite obscurity / Karsten Nohl and Henryk Pl otz. // Presentation on the 24th Congress of the Chaos Computer Club in Berlin (24C3), December 2007;

10. Courtois N.T. Algebraic attacks on the Crypto1 stream cipher in Mifare Classic and Oyster Cards / Nicolas T. Courtois, Karsten Nohl, and SeanO'Neil. // Cryptology ePrint Archive, Report 2008/166, 2008;

11. Nohl K. Reverse-engineering a cryptographic RFID tag / Karsten Nohl, David Evans, Starbug Starbug et al. // In Proceedings of the 17th conference on Security symposium (SS'08). USENIX Association, USA, 185-193;

12. Gerhard G. A practical attack on the MIFARE classic / Gans, Gerhard & Hoepman, Jaap-Henk & Garcia, Flavio.. 5189. 10.1007/978-3-540-85893-5_20;

13. MIFARE CLASSIC 1K/4K USER MANUAL; Release 1.1.0; 2017;

14. MFOC; open source implementation of "offline nested" attack by Nethemba [Electronic resource]. - URL: https://github.com/nfc-tools/mfoc; (accessed 09.10.2020).

15. Proxmark3 RDV4.01 [Electronic resource]. - URL: https://lab401.com/products/proxmark-3-rdv4; (accessed 10.10.2020).