
Когда я был зимой в Японии, одним из самых удивительных для меня явлений этой страны оказалась невероятная система общественного транспорта. Она не только была эффективной и надёжной, но и турникеты на станциях работали подозрительно быстро. Турникеты лондонской подземки не сравнятся с ними по скорости работы с Google Pay и другими моими бесконтактными картами. В чём же причина? Я решил изучить, почему японская система транспортных карт (IC-карт) так уникальна по сравнению с западными, и в процессе этого исследования узнал пару любопытных фактов.
Основы NFC
Near-field communication (NFC) — это набор протоколов, позволяющий двум устройствам общаться друг с другом без физического контакта посредством радиоволн с частотой 13,56 МГц (она определена в ISO/IEC 14443). Эта технология применяется во множестве сфер:
При использовании бесконтактных дебетовых карт, Apple Pay или Google Pay, EMV (то есть Europay, Mastercard, Visa (архив статьи)), работающих по стандарту ISO/IEC 14443.
При оплате поездки на станции метро Лондона при помощи карты Oyster; эта карта взаимодействует со считывателем турникета через MIFARE DESFire (но если вы используете платёжную карту, то задействуется EMV). Стоит отметить, что в лондонском метрополитене изначально применялись MIFARE Classic, но «их защита... ужасна» (архив статьи), поэтому карты тривиальным образом можно было клонировать, обойдя меры их защиты.
В системах контроля доступа (архив статьи) зданий (офисов, спортзалов), дверей и так далее обычно применяется MIFARE Classic.
Постойте... разве защита MIFARE Classic не ужасна? Кто-то уже мог клонировать мой ключ-карту или забраться куда-нибудь даже без него?
Да, и ситуация хуже, чем вы думаете. Именно поэтому эта технология считается устаревшей, и можно лишь надеяться, что MIFARE Classic не применяется в критичных с точки зрения безопасности местах.
Япония (и Азия в целом) любопытна тем, что у неё есть собственный тип NFC, по сути, на Западе не существующий: FeliCa — это разработанный Sony стандарт, официально классифицируемый как NFC type F (MIFARE — это type A). На самом деле, FeliCa появился первым, его разработали ещё в 1988 году; MIFARE компании Philips (ныне NXP) появился в 1994 году. Изначально FeliCa широко распространялся не в Японии, а в Гонконге, где его применяли в транспортных картах Octopus уже в 1997 году. И только в ноябре 2001 года JR East начала применять FeliCa в своих транспортных картах Suica, а Rakuten — в своих картах Edy (это название мне кое-что напоминает...) После этого стандарт распространился во многих странах Азии, например, во Вьетнаме и Бангладеш. В этих странах они занимают ту же нишу, что и в Японии: используются в качестве бесконтактных карт с предоплатой и транспортных билетов.
В местах наподобие Гонконга и Токио пригородным сообщением пользуется множество людей, поэтому на турникетах станций возникают большие очереди. Поэтому Sony сильно вложилась в повышение пропускной способности своей технологии — карты FeliCa могут похвастаться скоростью передачи до 424 Кбит/с, благодаря чему скорость обработки на турникетах значительно выше, чем на Западе. Можно сравнить скорость прохождения через турникет в Лондоне и в Токио (см. обсуждение на HackerNews) — в последнем случае пассажир буквально пробегает через турникет. Частично это связано с тем, что для транзакции достаточно лишь карты и самого считывателя — для выполнения транзакции считыватель не связывается с внешним сервером. IC — это карты с хранимой стоимостью, то есть стоимость хранится внутри них, а не в бэкенде, полностью контролируемом оператором. Кроме того, в карте хранится история последних транзакций, для считывания которой можно воспользоваться любым считывателем NFC, в том числе и в смартфоне. Но эта модель хранения стоимости поднимает интересные вопросы о безопасности... к которым мы вернёмся чуть позже.
Также у этих карт есть функции, повышающие удобство пользования, например, устранение конфликтов — считыватель может распознавать, что одновременно считывает несколько карт FeliCa, и в этом случае предотвращает считывание:
Можно лишь недоумевать, как Philips, имея фору в 8 лет, умудрилась спроектировать карту, которая и медленнее, и менее защищённая, чем FeliCa? Не знаю, халатность ли это, экономия или что-то ещё, но это привело к реальным проблемам с безопасностью! Security through obscurity не работает.
Osaifu-Keitai
Osaifu-Keitai (saifu — «кошелёк», keitai — «мобильный») — это система, позволяющая использовать в качестве IC-карты телефон, имитируя Suica, Pasmo или любые другие карты. Похоже, уже люди давно путаются в FeliCa, IC-картах, Osaifu-Keitai и их связи с телефонами Apple и Google. Когда я начал изучать эту тему, во всём этом мне тоже было сложно разобраться, но я вёл заметки о своих находках. Кучу полезной информации я получил от FelicaDude (Reddit, Twitter) — пропавшего несколько лет назад анонимного Интернет-незнакомца, похоже, обладавшего знаниями о работе FeliCa. Я не могу подтвердить эту информацию, но она кажется мне логичной; к тому же, вряд ли кто-то будет врать в Интернете, правда?
В современных смартфонах есть оборудование NFC. Чтобы телефон можно было сертифицировать, как поддерживающий NFC, он должен поддерживать NFC-A, NFC-B и NFC-F (FeliCa). Все поддерживающие NFC телефоны поддерживают и FeliCa. Благодаря NFC-F телефон может взаимодействовать с физической IC-картой. В этом можно убедиться при помощи приложения, например, Suikakeibo — ниже показан скриншот с моего Xiaomi Redmi Note 13 Pro: я приложил к нему свою карту PASMO и считал хранимую стоимость и историю транзакций:

Однако поддержки NFC-F недостаточно для того, чтобы использовать телефон в качестве IC-карты. Для этого ещё требуется и поддержка Osaifu-Keitai. Изначально Osaifu-Keitai разрабатывалась NTT Docomo как функция фичерфонов компании, позволявшая звонить по телефону и применять его как IC-карту. Позже её интегрировали в смартфоны благодаря использованию secure element, уже существующих в телефоне для других функций, требующих безопасного хранения криптографических ключей (Apple Pay, Google Pay, биометрической разблокировки). В современных телефонах есть всё необходимое для того, чтобы применять их в качестве IC-карт, но, вероятно, в secure element отсутствуют необходимые для этого ключи. Изготовители телефонов (Apple, Google), скорее всего, платят FeliCa Networks за каждый генерируемый и записываемый в устройство ключ (лицензирование или что-то подобное). Так как нет смысла генерировать ключи для устройства, которое не будет использоваться в Японии, в неяпонских моделях нет функций Osaifu-Keitai. Поэтому если даже активировать рут в телефоне и получить полный доступ к secure element, если в secure element телефона нет ключа, то вы не сможете использовать его в качестве IC-карты.
Уточнение: предложение о неяпонских моделях относится к Android; Apple встроила затраты на ключи в свои телефоны, поэтому во всех них есть функциональность Osaifu-Keitai. Система Osaifu-Keitai работает на всех современных iPhone, вне зависимости от рута и страны продаж.
Возможно, наряду с отсутствием ключей есть и другие причины недоступности функций Osaifu-Keitai в устройствах Android. Предполагаю, здесь есть ещё и проблем с лицензированием или патентами, но мне не удалось найти никакой публичной информации об этом, поэтому свои подозрения я ничем подтвердить не могу. Комментатор на HN упомянул репозиторий GitHub, в котором, похоже, есть больше подробностей об этом.
Защита
Когда я узнал о том, что карта сама хранит свою стоимость, то сразу подумал, что это не может обеспечить полной защиты. Изучив вопрос, я пришёл к выводу, что на самом деле эти карты невероятно защищены, и меня поразило то, насколько хорошо они прошли проверку временем (с 1988 года, напомню!). Это свидетельство того, насколько качественно можно реализовать систему, если всё спланировать правильно изначально, а не притворяться, что скрытность — это безопасность и не пытаться засудить тех, кто укажет, насколько ужасна такая система. Мне не удалось найти никакой информации об успешных атаках на FeliCa, за исключением единственной статьи с подробным описанием бага, использованного кассиром; впрочем, его всё равно поймали благодаря логам аудита и системе клиринговой компании гонконгских карт Octopus. Единственная реальная проблема — это проприетарность криптографии, вероятно, сокрытой под горой NDA, из-за чего её независимый аудит невозможен.
В целом, можно сказать, что IC-карты защищены от:
клонирования (ключи считать невозможно),
успешной атаки на другую карту (у каждой карты есть собственные ключи),
атак воспроизведением (в запросе-ответе генерируются уникальные для каждой сессии ключи).
Возможным вектором атаки мог бы стать эксплойт реализации IC-карт Apple. Если iPhone может имитировать IC-карту, то где-то в системе должен быть код, способный выполнять все необходимые процедуры handshake, ведь так? Однако ключи для этого handshake хранятся в Secure Enclave. Добраться до SE вы сможете, только если вы Моссад, NGO Group или какая-то другая пугающая трёхбуквенная организация; а если вам это удастся, то:
вы сможете гораздо больше, чем просто подделать японскую транспортную карту,
вы, вероятно, заработаете миллионы в любой приятной вам валюте, нанявшись или продав уязвимость нулевого дня,
срок вашей жизни существенно снизится.
Единственный дополнительный вектор атаки — это сам считыватель. Записывающие на карты стоимость автоматы и турникеты, возможно, подвержены подобным атакам, но даже если провернуть её, то они (вероятно) отправляют логи транзакций на какой-нибудь центральный сервер аудита, и ваши шалости легко можно будет выявить, как аномалии. Именно так и произошло в статье, о которой я говорил выше. Как только вашу карту пометят, её ID, вероятно, добавляется в список подозрений, который синхронизируется между всеми терминалами считывателей под управлением оператора, а если считыватель обнаружит карту из списка, он сразу же отклонит транзакцию. Если вы особенно удачливы, то он может и вызывать полицию. Память под этот список у считывателей ограничена, поэтому, вероятно, можно сгенерировать миллионы карт, переполнить списки, а позже использовать одну из старых/новых карт без блокировок? Я просто предполагаю; понятия не имею, как это всё работает. Но идея всё равно интересная.
С офлайн-терминалами история другая: например, вендинговые автоматы обычно обслуживаются не операторами карт, а третьей стороной, использующей считыватель IC-карт оператора. Подобные автоматы, вероятно, не подключены к сети, не синхронизируют списки подозрительных карт и не отправляют логи аудита — вполне возможный вектор атак! К сожалению, из-за геометрических проблем я не смог привезти домой вендинговый автомат, поэтому изучить это не могу.
Идеи на будущее
Поизучав FeliCa какое-то время, я придумал несколько идей на будущее.
Я хочу создать ПО для миниатюрной версии сети железнодорожных станций. Весь стек ПО, от уровня турникетов (программирование встроенных микроконтроллеров) и контроллера станции (возможно, стоит исследовать возможность использования шины CAN для подключения нескольких турникетов к одной станции) вплоть до панели управления, отслеживающей поездки между станциями и сохраняющей лог аудита транзакций. Очевидно, что это никогда не будет использовано в реальной транспортной системе, но в качестве хобби-проекта выглядит интересно.
Кроме того, можно изучить, почему конкретно FeliCa настолько быстрее. В чём заключаются физические основы? Есть ли возможность повысить скорость, чтобы для прохода через турникет требовалось меньше 100 мс? Это крайне далеко от сферы моего опыта, но если кто-то, обладающий подобными знаниями, сможет поделиться информацией или написать пост, то статья определённо выйдет интересной!
Я очень доволен тем, что узнал про FeliCa. Я даже близко не специалист в NFC, системах мобильных платежей, криптографии или кибербезопасности, но мне хотя бы одним глазком удалось заглянуть в этот необычный мир. Интересно, смогу ли я когда-нибудь применить эти знания где-то ещё?
Комментарии (9)
sshmakov
21.07.2025 13:04IC — это карты с хранимой стоимостью, то есть стоимость хранится внутри них, а не в бэкенде, полностью контролируемом оператором. Кроме того, в карте хранится история последних транзакций, для считывания которой можно воспользоваться любым считывателем NFC, в том числе и в смартфоне.
Московская карта "Тройка" и кошелек на ней. А также "Подорожник" в Питере, и, наверное, есть аналогичные в других больших городах.
vesowoma
21.07.2025 13:04Есть ли возможность повысить скорость, чтобы для прохода через турникет требовалось меньше 100 мс?
А зачем? Олимпийский норматив в беге на 100 м для мужчин - 10 секунд. За 100 мс (0,1 секунды) следовательно - 1 метр. Длина турникета (не знаю как в Японии, но вообще) - примерно тоже 1 метр. Это значит 10 человек должны за секунду его пройти, не мешая друг другу (а спринтеры бегут по отдельным дорожкам) и при этом успеть поднести карту или телефон к считывателю.
kenomimi
21.07.2025 13:04А зачем вообще защищать карту? Пусть она перезаписывается и читается как угодно. Просто подписываем записаное своим ключом, и весь левак будет отклонен при проверке. Для смартфона или вендингового аппарата подпись выполняется/проверяется удаленным бекендом, на турникете где надо скорость - защищеным считывателем локально. Хеши старых данных храним энное время на бекенде, если этот же хеш где-то вылез снова (карту клонировали) - добавляем карту в стоп-лист. Ломать такую систему станет экономически неэффективно, так как клон карты даст 1-2 транзакции и сдохнет.
Margutoop
21.07.2025 13:04Примерно так у нас сейчас это и происходит с картами "Тройка", вот только додумались до этого, уже после того, как систему взломали школьники, постоянно перезаписывая баланс карты. Насколько мне известно, даже новые турникеты, отчасти, были введены для борьбы с этой историей
dvb1
21.07.2025 13:04EMV стандарт не проверяет есть ли деньги на карте. Проверяется (локально) только подпись через цепочку сертификатов.Это позволяет клиентам украинских банков жульничать в Европе. Они открывают счёт на котором нет денег и добавляют цифровую карту в Google Pay. В течение дня пользуются транспортом. В конце дня backend понимает что денег на карте нет и блокирует ее.
Они открывают новый счёт.
Подпись проверяется локально потому что проверять что-то на backend ( online authorization) нет времени.
MountainGoat
21.07.2025 13:04Одно из главных достижений транспорта Японии не относится к транспорту. У них земля в городе размечается не по назначению, а по классу шумности и вредности. В результате среди жилых домов вперемешку стоят, и их не сразу можно отличить, маленькие офисы, клиники, даже производства из тех, что не воняют. Что это даёт?
Треть работающего населения города имеют работу в пределах пешей доступности и вообще никуда не ездят каждый день.
greenlittlefrog
Помню покупал в Японии специальную версию Apple Watch с поддержкой Suica, обычный Apple Pay не работал.