Используем NFC для автоматизации – «Хакер»

Как устроены пластиковые карты

Платежная карта (или смарт-карта) представляет собой микропроцессор, помещенный в металлический корпус, который в свою очередь, установлен в пластиковый прямоугольник определенного размера. В микропроцессоре установлена своя операционная система, куда записывается платежное приложение конкретного поставщика услуги, которое затем «совмещается» с платежными данными конкретного клиента.

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

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

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

Архитектура NFC

Технология NFC основана на технологии радиометок RFID с использованием частоты 13,56 МГц. Типовое рабочее расстояние составляет до 10 см, а скорость передачи данных может достигать 424 кбит/с. Основным преимуществом NFC по сравнению с другими технологиями передачи данных является быстрота и простота использования. На следующем рисунке показано сравнение NFC с другими технологиями обмена данными.

Рисунок 1. Сравнение технологий передачи данных ближнего действия.

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

Рисунок 2. Семейства протоколов NFC

Используем NFC для автоматизации - «Хакер»

В режиме эмуляции карт NFC работает как бесконтактная смарт-карта с радиометкой RFID и с модулем безопасности, что позволяет пользователям безопасно осуществлять покупки. В режиме обмена данными можно передавать данные между двумя находящимися рядом устройствами, поддерживающими NFC. Можно очень быстро и удобно создавать подключения WiFi* или Bluetooth* с помощью NFC, а затем передавать крупные файлы по подключению WiFi или Bluetooth. В режиме считывания и записи можно использовать устройства, поддерживающие NFC, для считывания меток NFC и запуска различных задач.

Все режимы более подробно описаны ниже.

Платежная функция телефона

Следующий обратный вызов класса переходов показывает функцию считывания. Если класс переходов вещания системы равен NfcAdapter.ACTION_TAG_DISCOVERED, то можно прочитать информацию в радиометке и отобразить ее.

@Override
	protected void onNewIntent(Intent intent){
		if(NfcAdapter.ACTION_TAG_DISCOVERED.equals(intent.getAction())){
		mytag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);  // get the detected tag
		Parcelable[] msgs =
intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
			NdefRecord firstRecord = ((NdefMessage)msgs[0]).getRecords()[0];
			byte[] payload = firstRecord.getPayload();
			int payloadLength = payload.length;
			int langLength = payload[0];
			int textLength = payloadLength - langLength - 1;
			byte[] text = new byte[textLength];
			System.arraycopy(payload, 1 langLength, text, 0, textLength);
			Toast.makeText(this, this.getString(R.string.ok_detection) new String(text), Toast.LENGTH_LONG).show();
					}
	}

Следующий код показывает функцию записи. Перед определением значения mytag нужно узнать, обнаружена ли радиометка, а затем записать информацию в mytag.

If (mytag==Null){
	……
}
else{
……
write(message.getText().toString(),mytag);
……
}
	private void write(String text, Tag tag) throws IOException, FormatException {
		NdefRecord[] records = { createRecord(text) };
		NdefMessage  message = new NdefMessage(records);
// Get an instance of Ndef for the tag.
		Ndef ndef = Ndef.get(tag); // Enable I/O
		ndef.connect(); // Write the message
		ndef.writeNdefMessage(message); // Close the connection
		ndef.close();
	}

В зависимости от информации, прочтенной с метки, можно выполнять и другие действия: запускать различные задачи, открывать веб-сайты и т.п.

Мы используем карту Mifare для теста считывания карты и используем тип TAG карты MifareClassic. Карта MifareClassic широко используется в самых различных целях: как удостоверение личности,для оплаты проезда на общественном транспорте и т. п. Память традиционной карты MifareClassic разделяется на 16 секторов, каждый сектор включает 4 блока, а каждый блок может содержать 16 байт данных.

Последний блок в каждой области называется трейлером, он используется главным образом для сохранения локального ключа блока для чтения и записи данных. Он содержит два ключа, A и B, длиной по 6 байт каждый, значение по умолчанию обычно равно FF или 0 для всего ключа согласно определению MifareClassic.KEY_DEFAULT.

При записи на карту Mifare нужно сначала получить правильное значение ключа (для защиты). Перед тем как пользователь получит возможность чтения и записи данных в эту область, нужно пройти проверку подлинности.

Используем NFC для автоматизации - «Хакер»

Для того чтобы воспользоваться мобильным телефоном в качестве носителя платежных карт, в него необходимо установить похожий микропроцессор, куда можно будет записывать платежные приложения. Такой микропроцессор в телефоне называется Secure Element, а NFC-модуль выполняет функции контроллера.

Secure Element может быть либо встроенным в материнскую плату телефона, либо находиться на отделяемом модуле: SIM-карте или SD-карте.

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

Первыми в РФ попытались перенести карту в телефон сотовые операторы, например, «МТС» и банк «Русский Стандарт», «Мегафон» и транспортная карта в г. Екатеринбург, «Билайн» и транспортная карта в г. Казань и т.п. Чтобы сделать это, им понадобилось закупить специальные SIM-карты с Secure Element, договориться с транспортной компанией или банком о записи на эти карты платежного приложения, осуществить процесс «контактной персонализации», а затем обменивать старые SIM-карты абонентов на новые.

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

Введение в разработку приложений для Android, поддерживающих NFC

Android поддерживает NFC в двух пакетах: android.nfc и android.nfc.tech.

Используем NFC для автоматизации - «Хакер»

NfcManager: Можно использовать устройства Android для управления всеми указанными адаптерами NFC, но, поскольку в большинстве случаев устройства Android поддерживают только один адаптер NFC, вызов NfcManager обычно осуществляется непосредственно с getDefaultAdapter для получения определенного адаптера.

NfcAdapter: Работает в качестве агента NFC (наподобие сетевого адаптера в компьютере), с помощью которого сотовые телефоны получают доступ к оборудованию NFC для запуска обмена данными NFC.

NDEF: Стандарты NFC определяют общий формат данных. Он называется NFC Data Exchange Format (NDEF) и используется для хранения и передачи различной информации — от объектов с типом MIME до сверхкратких документов, передаваемых по радио, например URL-адресов. NdefMessage и NdefRecord являются двумя видами NDEF для форматов данных, определенных форумом NFC. Они используются в нашем образце кода.

Tag: Согласно определению Android, этот класс представляет пассивные объекты, такие как радиометки, карточки и т. п. Когда устройство обнаруживает метку, Android создает объект tag и помещает его в объект Intent, который отправляется соответствующему действию.

Пакет android.nfc.tech также содержит множество важных подклассов. Эти подклассы обеспечиваю доступ к функциям технологии радиометок, в том числе к операциям чтения и записи. В зависимости от типа используемой технологии эти классы разделяются на различные категории, например NfcA, NfcB, NfcF, MifareClassic и пр.

NDEF_DISCOVERED, TECH_DISCOVERED, TAG_DISCOVERED

Мы используем здесь тип intent-filter для обработки всех типов от TECH_DISCOVERED до ACTION_TECH_DISCOVERED. Файл nfc_tech_filter.xml используется для всех типов, определенных в файле TAG. Подробные сведения см. в документации Android. На приведенном ниже рисунке показано действие соответствующего процесса при обнаружении телефоном радиометки.

Используем NFC для автоматизации - «Хакер»

Рисунок 6. Процесс работы при обнаружении метки NFC

Удаленная загрузка карт

К счастью, телефон является интерактивным устройством, которое всегда на связи. Следовательно, в него можно удаленно записывать платежные карты и именно тех поставщиков услуг, которые нужны конкретным пользователям. Для осуществления этой функции была сформулирована роль TSM (Trusted Service Manager), который объединяет с одной стороны поставщиков услуг (Service Provider TSM), а с другой стороны чипы Secure Element в любых форма-факторах (Secure Element Issuer TSM). Такая платформа TSM и была разработана нами в компании i-Free и сертифицирована на соответствие всем необходимым мировым стандартам.

TSM позволяет владельцам Secure Element не интегрироваться с каждым поставщиком услуг и не отвозить к ним всем «носители карт» для контактной персонализации, а поставщикам услуг не подключаться ко всем операторам и производителям телефонов. Сотовым операторам, производителям телефонов и поставщикам услуг достаточно подключиться к TSM по стандартному протоколу и они одновременно интегрируются с множеством партнеров.

Взаимодействие смартфона и платформы TSM

Платформа TSM удаленно управляет чипами Secure Element в телефонах пользователей через безопасный канал связи, используя сам телефон в качестве модема. Ключи от Secure Element хранятся на специальных серверах HSM (Hardware Security Module), являющихся неотъемлемой частью TSM, и без участия последнего получить доступ к чипу невозможно.

На основании распоряжения поставщика услуги TSM записывает (или удаляет, например, в случае утери смартфона) данные карты в Secure Element, а также позволяет проводить удаленный аудит выпущенных карт или, например, просматривать актуальный баланс по картам оплаты проезда или картам лояльности для отображения на экране телефона.

Для какой именно выпущенной карты активировать режим оплаты выбирает пользователь, через пользовательское приложение «Кошелёк», которое отображает выпущенные и доступные для выпуска карты, а также принимает заявки на выпуск новых. Поставщик услуги, получая заявку на выпуск карты, передает эти данные Secure Element телефона через платформу TSM.

Оплата банковской картой в телефоне

На сегодняшний день выпущенной в «Кошельке» банковской картой можно оплачивать покупки в магазинах, принимающих карты MasterCard PayPass по всему миру, и доступ в интернет в телефоне для этого не требуется. Банковские терминалы в таких точках продаж обозначаются логотипом бесконтактной оплаты (овальный логотип с волнами вправо), который размещается именно в том месте, где находится антенна в считывателе, и прикладывать телефон (местом где в его корпусе расположена антенна) необходимо к этому логотипу, даже если он находится на экране терминала.

Местонахождение антенны различается в зависимости от модели телефона. Например, в смартфонах Philips Xenium W336 и Philips Xenium W5888 антенна находится чуть ниже центра задней панели, а вот в HTC One она расположена выше — за задней камерой, так как корпус телефона металлический,  радио сигнал проходит через узкие пластиковые участки в форме буквы «Т».

На банковских терминалах, оборудованных бесконтактными считывателями, имеется 4 цветовых индикатора. Первый означает готовность к работе, второй — считывание, третий — считывание завершено и можно убирать карту, а четвертый — результат считывания.

Используем NFC для автоматизации - «Хакер»

При оплате банковской картой в телефоне, как и при оплате обычной пластиковой картой, вас могут попросить ввести PIN-код (который можно получить по звонку в банк) или поставить подпись на чеке. Для покупок на сумму менее 1000 рублей ни PIN-код, ни подпись не потребуются.

Любая карта в любом телефоне

Платежные карты в телефон не переносятся, не привязываются и не дублируются, а именно выпускаются. Для выпуска карты поставщик услуги должен подключиться к TSM, а TSM должен иметь доступ к Secure Element. Поэтому на сегодня пока еще невозможно выпустить любую карту в любой телефон, но движение идет именно в этом направлении.

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

Автор текста: Константин Савченко

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *