Недавно мне выпала возможность потестировать платежный терминал с возможностью бесконтактной оплаты. Ну а раз оплата бесконтактная, значит сигнал передается по радио, и разумеется, я не смог отказаться от искушения посмотреть с помощью SDR-приемника, какие же данные передаются и принимаются во время совершения платежа.
Фото (с) Verifone
Сразу нужно отметить, что никакого официального описания протокола обмена терминала с картой у меня нет, такие данные обычно распространяются только компаниям-партнерам после подписания NDA, но послушать эфир и сделать какие-то предположения нам никто не запрещает.
Итак, приступим.
Спектр сигнала
Начнем с самого простого — запустим приемник, включим терминал, произведем оплату и посмотрим, что есть в эфире. Поиск сигнала оказывается элементарным, виден огромный пик на частоте 13.56МГц:
Уровень сигнала неудивителен, ведь его должно быть достаточно для работы индуктивной связи с картой, которая собственного источника питания не имеет. Как подсказывает гугл, 13.56МГц это стандартная частота для RFID-устройств. Симметрия сигнала подсказывает на возможное использование АМ-модуляции.
Теперь, когда сигнал найден, несложно посмотреть на него подробнее и увидеть разные фазы оплаты:
Рассмотрим их подробнее.
1. Режим бездействия
В этом режиме терминал ничего не излучает, на экране только логотип банка или магазина.
2. Запрос платежа и ожидание карты
Кассир инициирует платеж на определенную сумму. В этот момент терминал переходит в режим ожидания оплаты. Оплата картой может быть совершена либо с помощью магнитной полосы, либо путем вставления карты, либо бесконтактным методом, который нас и интересует. Чтобы определить, когда карту поднесли к терминалу, запрос посылается каждые 0.12с. Короткие посылки в виде вертикальных линий на спектре, в увеличенном виде выглядят так:
Хорошо видно, что данные повторяются. Блок данных («на глаз», 24 или 32 бита) скорее всего содержит битовую маску, содержащую форматы карт, поддерживаемых данным ридером. По крайней мере, на другие карты (например на транспортную), ридер не «отзывается».
3. Обмен данными с картой
Когда карта обнаружена, её контроллер в ответ посылает свои данные — вероятно, номер карты и служебную информацию. В самой карте нет источника питания, поэтому ответ от неё очень слабый по мощности. Как можно видеть, на каждый запрос терминала карта посылает свой ответ, «радиообмен» между ними довольно активный:
Увеличенный сигнал, принятый от карты, выглядит примерно так:
4. Проверка карты
Когда данные о карте получены, терминал вероятно проверяет ключи шифрования на карте, процесс занимает порядка 0.6с. RFID-модуль в этот момент отключен. Возможно, терминал запрашивает статус карты онлайн.
5. Ожидание изъятия карты
В тот момент, когда терминал прочитал все данные и проверил карту, на экран выводится сообщение «уберите карту», каждые 5мс терминал проверяет на месте ли карта:
Мы видим одинаковые сообщения, также виден ответ карты. В увеличенном виде можно показать момент, как карта перестала отвечать:
Сам ответ от карты кстати, довольно простой и короткий, «на глаз», не больше 24бит:
На этом радиообмен заканчивается, и со всеми полученными данными, терминал посылает запрос на проведение платежа к банку. От банка приходит ответ, и если платеж прошел успешно, мы получаем наш товар.
Заключение
Как можно видеть, на бинарном уровне все довольно просто. В протоколе RFID используется обычная амплитудная модуляция, никакого rocket science. Но разумеется, основная работа выполняется на логическом уровне, проверка карты и выполнение платежа довольно сложный процесс, в котором также задействовано шифрование.
Напоследок, можно ответить на вопрос, который наверное интересует многих, возможно ли скрытное снятие денег с чужой карты на большом расстоянии. Судя по анализу радиосигнала, можно сказать что это очень маловероятно. Во-первых, сама карта не имеет встроенного источника питания — чтобы её процессор заработал, напряженность поля должна быть весьма большой. Нормальное расстояние чтения карты составляет 2-3см, чтобы увеличить его хотя бы до 100см, напряженность поля должна быть в третьей степени больше этой разницы. Второй момент, это получение ответа от карты — её сигнал очень слабый, и принять его на большом расстоянии тоже непросто (плюс не стоит забывать, что длина волны с частотой 13МГц составляет порядка 20 метров, и короткие антенны при таких длинах волн неэффективны). Наконец, не стоит забывать об организационных моментах — каждый платежный терминал привязывается к банковскому счету юридического лица, и если будут поступать жалобы на списание средств, этот счет могут просто заблокировать. Сам терминал кстати, имеет уникальный ID, и если его будут постоянно привязывать к разным счетам, это тоже будет подозрительно. В общем, хотя теоретически удаленное чтение RFID может быть возможным, судя по
Фото (с) Verifone
Сразу нужно отметить, что никакого официального описания протокола обмена терминала с картой у меня нет, такие данные обычно распространяются только компаниям-партнерам после подписания NDA, но послушать эфир и сделать какие-то предположения нам никто не запрещает.
Итак, приступим.
Спектр сигнала
Начнем с самого простого — запустим приемник, включим терминал, произведем оплату и посмотрим, что есть в эфире. Поиск сигнала оказывается элементарным, виден огромный пик на частоте 13.56МГц:
Уровень сигнала неудивителен, ведь его должно быть достаточно для работы индуктивной связи с картой, которая собственного источника питания не имеет. Как подсказывает гугл, 13.56МГц это стандартная частота для RFID-устройств. Симметрия сигнала подсказывает на возможное использование АМ-модуляции.
Теперь, когда сигнал найден, несложно посмотреть на него подробнее и увидеть разные фазы оплаты:
Рассмотрим их подробнее.
1. Режим бездействия
В этом режиме терминал ничего не излучает, на экране только логотип банка или магазина.
2. Запрос платежа и ожидание карты
Кассир инициирует платеж на определенную сумму. В этот момент терминал переходит в режим ожидания оплаты. Оплата картой может быть совершена либо с помощью магнитной полосы, либо путем вставления карты, либо бесконтактным методом, который нас и интересует. Чтобы определить, когда карту поднесли к терминалу, запрос посылается каждые 0.12с. Короткие посылки в виде вертикальных линий на спектре, в увеличенном виде выглядят так:
Хорошо видно, что данные повторяются. Блок данных («на глаз», 24 или 32 бита) скорее всего содержит битовую маску, содержащую форматы карт, поддерживаемых данным ридером. По крайней мере, на другие карты (например на транспортную), ридер не «отзывается».
3. Обмен данными с картой
Когда карта обнаружена, её контроллер в ответ посылает свои данные — вероятно, номер карты и служебную информацию. В самой карте нет источника питания, поэтому ответ от неё очень слабый по мощности. Как можно видеть, на каждый запрос терминала карта посылает свой ответ, «радиообмен» между ними довольно активный:
Увеличенный сигнал, принятый от карты, выглядит примерно так:
4. Проверка карты
Когда данные о карте получены, терминал вероятно проверяет ключи шифрования на карте, процесс занимает порядка 0.6с. RFID-модуль в этот момент отключен. Возможно, терминал запрашивает статус карты онлайн.
5. Ожидание изъятия карты
В тот момент, когда терминал прочитал все данные и проверил карту, на экран выводится сообщение «уберите карту», каждые 5мс терминал проверяет на месте ли карта:
Мы видим одинаковые сообщения, также виден ответ карты. В увеличенном виде можно показать момент, как карта перестала отвечать:
Сам ответ от карты кстати, довольно простой и короткий, «на глаз», не больше 24бит:
На этом радиообмен заканчивается, и со всеми полученными данными, терминал посылает запрос на проведение платежа к банку. От банка приходит ответ, и если платеж прошел успешно, мы получаем наш товар.
Заключение
Как можно видеть, на бинарном уровне все довольно просто. В протоколе RFID используется обычная амплитудная модуляция, никакого rocket science. Но разумеется, основная работа выполняется на логическом уровне, проверка карты и выполнение платежа довольно сложный процесс, в котором также задействовано шифрование.
Напоследок, можно ответить на вопрос, который наверное интересует многих, возможно ли скрытное снятие денег с чужой карты на большом расстоянии. Судя по анализу радиосигнала, можно сказать что это очень маловероятно. Во-первых, сама карта не имеет встроенного источника питания — чтобы её процессор заработал, напряженность поля должна быть весьма большой. Нормальное расстояние чтения карты составляет 2-3см, чтобы увеличить его хотя бы до 100см, напряженность поля должна быть в третьей степени больше этой разницы. Второй момент, это получение ответа от карты — её сигнал очень слабый, и принять его на большом расстоянии тоже непросто (плюс не стоит забывать, что длина волны с частотой 13МГц составляет порядка 20 метров, и короткие антенны при таких длинах волн неэффективны). Наконец, не стоит забывать об организационных моментах — каждый платежный терминал привязывается к банковскому счету юридического лица, и если будут поступать жалобы на списание средств, этот счет могут просто заблокировать. Сам терминал кстати, имеет уникальный ID, и если его будут постоянно привязывать к разным счетам, это тоже будет подозрительно. В общем, хотя теоретически удаленное чтение RFID может быть возможным, судя по
Для просмотра ссылки необходимо нажать
Вход или Регистрация
, реальных случаев такого снятия средств зарегистрировано не было. И наконец, лимит бесконтактных платежей весьма небольшой, так что «прибыль» вероятно не будет соответствовать риску и стоимости оборудования.
Для просмотра ссылки необходимо нажать
Вход или Регистрация