Ответ 1
Это зависит от того, какой тип тега вы используете и какой уровень защиты от клонирования вы хотите.
-
Теги NFC (как определено NFC Forum) не имеют защиты от клонирования. Такие теги предназначены как контейнеры для свободно читаемых данных (так называемые сообщения NDEF). Любой может прочитать сообщение NDEF из одного тега и дублировать его на другой тег.
-
Многие теги NFC также содержат уникальный идентификатор, который предварительно запрограммирован производителем тегов и не может быть изменен на обычных тегах. Вы можете использовать этот уникальный идентификатор, чтобы определить, был ли тег выпущен вами (т.е. Вы знаете его идентификатор) или подделаны (т.е. Вы не знаете его идентификатор). Вместо использования списка настоящих идентификаторов вы также можете создать цифровую подпись над идентификатором тега и его данными. Таким образом, вы можете узнать, используются ли данные и подпись в теге с другим уникальным идентификатором. Однако все данные могут быть извлечены из вашего тега. Поэтому вам следует знать, что специализированное оборудование (например, Proxmark и т.д.) и готовые теги доступны там, где злоумышленник может изменить уникальный идентификатор значения вашего идентификатора тега. Таким образом, это, безусловно, не идеальная защита от клонирования.
-
Вы можете использовать бесконтактную смарт-карту/тег, которая обеспечивает шифрование связи и управление доступом на основе общих ключей (например, MIFARE DESFire). При таком подходе вы можете хранить данные, которые вы не хотите, чтобы злоумышленник мог клонировать в области памяти, защищенной ключами. Однако, если вы хотите иметь возможность читать эти данные из своего приложения (т.е. Не иметь онлайн-бэкэнда, который напрямую общается с картой), вам нужно будет сохранить ключ для доступа к области памяти в вашем приложении. Следовательно, в автономном сценарии (т.е. Ключ, хранящийся в приложении), злоумышленник может извлечь этот ключ и использовать его для клонирования тега.
-
Вы можете использовать тег/смарт-карту, которая содержит секретный асимметричный ключ, и предоставляет команду для подписи криптографической задачи с этим ключом. В этом случае, чтобы проверить подлинность тега, вы можете запросить такую подпись из тега для случайного вызова и проверить подпись на теги, соответствующие открытому ключу. Это, безусловно, будет самым безопасным решением, так как вам не нужно хранить общий секрет в своем приложении. Единственное готовое решение тега NFC (которое я знаю в настоящее время), предоставляющее такую функциональность, похоже, является Inside Secure VaultIC. Хотя вы можете создать его самостоятельно на основе асимметричных криптофункциональных функций бесконтактной смарт-карты (например, Java-карты).
Обратите внимание, что для всех описанных выше сценариев защиты от клонирования вам нужно будет создать приложение, которое проверяет подлинность или клонирование тега. По умолчанию телефоны NFC используют информацию в (1) и поэтому не выполняют никаких таких проверок.