NFC — коммуникация ближнего поля

Notice: Undefined index: HTTP_ACCEPT in /home/n/newavtjc/nfcexpert.ru/public_html/wp-content/plugins/realbig-media/textEditing.php on line 823

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

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

Телефон-карта. В этом случае для осуществления идентификации необходимо прислонить смартфон или планшет с активированным приложением к считывателю. Расстояние считывания в этом режиме – до 7 см.

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

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

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

NFC — коммуникация ближнего поля

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

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 и пр.

NFC — коммуникация ближнего поля

NDEF_DISCOVERED, TECH_DISCOVERED, TAG_DISCOVERED

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

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

Пример: Разработка приложения на базе NFC, использующего карту MifareClassic

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

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

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

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

NFC — коммуникация ближнего поля

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

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

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

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

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

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

Насколько NFC безопасна

Устройства с NFC могут одновременно и получать, и передавать данные, что позволяет им обнаруживать противоречия, если полученный сигнал не соответствует переданному.

Риск перехвата ваших данных крайне мал, особенно учитывая минимальный радиус действия технологии. Тот же 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();	}

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

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

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