Тег, совместимый с NFC, для использования при шифровании по эллиптической кривой

У меня есть проект Android, который требует, чтобы я использовал тег NFC для шифрования/подписания данных с использованием алгоритма эллиптической кривой.

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

Мне также нужно защитить от записи все теги, чтобы данные могли быть записаны в них только в том случае, если они подписаны мной.

Я бы хотел, чтобы форма метки была круглой и как можно меньше.

Судя по моим исследованиям, я должен использовать карты Java, но я не уверен в этом.

Может ли кто-нибудь подтвердить подходящие устройства, которые я мог бы использовать?


person user1233983    schedule 16.08.2012    source источник


Ответы (1)


Вам нужна карта микроконтроллера. Я никогда не видел их в какой-либо другой форме, кроме стандартной формы кредитной карты (ID-1).

Карта Java Card, безусловно, является опцией, такой как карта NXP JCOP или Gemalto TOP. Их можно купить онлайн в разных местах. Чтобы написать апплет для такой карты, требуется доступ к SDK для этой карты (часто доступный только в рамках соглашения о неразглашении). Программирование на Java Card совершенно не похоже на программирование на Java, кроме того, оно требует знания таких вещей, как ISO 7816-4 и (в вашем случае) крипто.

Другой возможностью может быть ZeitControl BasicCard. Карты можно приобрести в различных интернет-магазинах смарт-карт и непосредственно в ZeitControl (не все карты поддерживают ECC). SDK является бесплатным и доступен на веб-сайте ZeitControl. Однако к языку программирования для карты нужно привыкнуть, но многие детали связи обрабатываются автоматически. Если вам нужна помощь в сопряжении апплета BasicCard с приложением Android, вы можете запросить дополнительную информацию у ZeitControl (они очень помогли, когда я связался с ними). Однако это не слишком сложно.

person NFC guy    schedule 16.08.2012
comment
Использование SDK, поставляемого с картой Java Card, может быть самым простым способом разработки апплета и его запуска на этой карте, но я бы не сказал, что это сложное требование. Если у вас есть стандартный JDK, бесплатный комплект разработчика Java Card от Sun/Oracle, некоторые файлы экспорта и глобальные ключи платформы, то есть инструменты (командной строки) для выполнения этой работы. - person martijno; 16.08.2012
comment
@martijno проблема в том, что SDK Oracle Java Card не включает эмулятор, который использует все крипто-примитивы. Это означает, что отлаживать приложение сложно. Для правильной отладки вам потребуются специальные инструменты поставщика. Также помогает то, что эти инструменты обычно настраивают среду для вас (правильные уровни API для использования и т. д.). - person Maarten Bodewes; 17.08.2012
comment
@owlstead, да, хорошее замечание по поводу отладки и эмулятора. Тем не менее, разве хорошо написанный, протестированный апплет, разработанный в одном пакете, не будет легко установлен на карту другого производителя (если он поддерживает тот же набор крипто-примитивов)? А если нет, то какой смысл иметь Java Card в стандартной комплектации? - person martijno; 18.08.2012
comment
@martijno да, обычно это должно быть возможно. Однако есть довольно много загвоздок, таких как доступность ОЗУ, количество и типы криптографии, которые поддерживают карты, необязательная целочисленная поддержка, различия в версиях, другие необязательные части API, дополнительные библиотеки для конкретных поставщиков, неясности в отношении использования API. и, наверное, многое другое :) - person Maarten Bodewes; 18.08.2012
comment
Спасибо за информацию. Я обращаюсь к различным производителям/поставщикам карт Java Card, чтобы узнать, могут ли они производить их в надежной упаковке, такой как упаковка. Что касается криптографии, мне нужно, чтобы мой открытый ключ был надежно установлен на карте, чтобы я мог управлять им (с сервера, через приложение) для выполнения нескольких процедур: установить пару ключей EC; и создать и подписать короткое сообщение с его закрытым ключом. Также мне понадобятся некоторые другие биты данных, постоянно хранящиеся на карте. @owlstead: возникнут ли у меня трудности с отладкой этого с помощью Oracle SDK? - person user1233983; 18.08.2012
comment
@user1233983 user1233983 Возможно, вы захотите протестировать некриптографические функции отдельно, так как вы сможете их отлаживать. Кроме того, вы должны знать о небольших различиях в том, как карты обрабатывают функции setX() и getX() для ключей (формат не указан полностью). В качестве альтернативы вы можете создать ключи на карте. - person Maarten Bodewes; 18.08.2012