Надежный источник времени для апплета JavaCard на SIM-карте

У меня есть апплет JavaCard, работающий на SIM-карте Gemalto в смартфоне. Я хочу создать электронный кошелек со сроком действия до указанной даты и времени.

Я знаю, что это невозможно, используя классическую смарт-карту, у которой нет часов внутри из-за отсутствия батареи. Однако с SIM-картой это возможно: SIM-карта должна иметь некоторый доступ к сетевому времени (не локальному системному времени, которое может быть изменено пользователем) при подключении к сети, и последнее известное значение сетевого времени может быть вероятно, хранится где-то на SIM-карте.

Есть ли способ получить доступ к последнему известному сетевому времени из моего апплета безопасным способом? (Я не доверяю ни одному приложению, установленному в телефоне, потому что его можно легко взломать)

Как вы думаете, есть ли другое решение моей проблемы?

ИЗМЕНИТЬ

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

ИЗМЕНИТЬ 2

На телефонах Android есть вариант:

Настройки сетевого времени Android

Это означает, что существует какой-то независимый от пользователя источник времени. Вопрос в том, можно ли каким-то безопасным образом получить к нему доступ из апплета JavaCard на SIM-карте. (или если последнее известное значение может быть доступно в случае отсутствия соединения)


person vojta    schedule 30.03.2015    source источник
comment
Кажется интересным. Не стоит ли и вам самому написать мобильное приложение? Нельзя ли написать свое мобильное приложение таким образом, чтобы оно каждый раз получало зашифрованный код с сервера и отправляло его на SIM-карту. SIM-карта может проверить, является ли это действительным кодом или нет? в случае неправильного кода он отказывает в выполнении вашего апплета.   -  person Ebrahim Ghasemi    schedule 30.03.2015
comment
@Abraham Проблема в том, что вашему решению требуется подключение к Интернету. При подключении к Интернету это легко - сервер может легко отправлять подписанные временные метки. Пожалуйста, смотрите Редактировать...   -  person vojta    schedule 30.03.2015
comment
ХОРОШО. Вы можете отправлять и получать SMS с помощью приложения для телефона, верно? Таким образом, вы можете просто отправить пустое SMS на тот же телефон (вы можете потребовать от пользователя ввести свой номер в процедуре установки). По умолчанию операторы отправляют сетевое время с входящими SMS-ками на ваш телефон. Таким образом, вы можете синхронизировать время SIM-апплета. Предположим, что каждый человек обычно использует ваш апплет 2 раза в день, поэтому, если вы выполняете процесс синхронизации 1 раз за 10 сеансов, вы синхронизируете время примерно каждые 5 дней. Обратите внимание, что новые телефоны скрывают это сетевое время (они заменяют его временем телефона)......   -  person Ebrahim Ghasemi    schedule 30.03.2015
comment
...... Но вы можете увидеть это в старом мобильном телефоне, в конце полученных SMS-ов. Просто измените время своего телефона и отправьте SMS самому себе и посмотрите в конце. (пробовал с Nokia 1100)   -  person Ebrahim Ghasemi    schedule 30.03.2015
comment
Другое решение — сосредоточиться на количестве дней, а не на сроке действия. вы можете написать приложение для телефона так, чтобы оно работало, например, 30 дней. вы также можете написать это так, что если пользователь изменил время телефона, разница добавилась к использованному времени. Кстати, мы можем ждать лучших ответов :)   -  person Ebrahim Ghasemi    schedule 30.03.2015
comment
Вы можете взять время с телефона, выполнив упреждающую команду, предоставив локальную информацию для получения дополнительной информации, прочитайте ссылка страница 44, надеюсь, это поможет, если нет, то я все еще здесь :)   -  person Anurag Sharma    schedule 31.03.2015
comment
@AnuragSharma Спасибо за ваши ответы! Ссылка интересная, но там написано: Терминал должен вернуть текущую дату и время, установленные пользователем. Это проблема. Мне нужен доступ к реальному времени, иначе пользователь может обмануть и изменить дату и время, чтобы снова сделать мой электронный кошелек действительным. Мне как-то нужно получить доступ к сетевому времени, которое не может быть изменено пользователем...   -  person vojta    schedule 31.03.2015
comment
Сим действует как подчиненный, а мобильный телефон является ведущим, в этом случае вы должны зависеть только от мобильного телефона. Существует еще один обходной путь, если поставщик сетевых услуг отправил конверт, в котором указано текущее время, тогда это будет полезно для вас ... но в этом случае вам следует обратиться к поставщику услуг, чтобы запросить этот конверт.   -  person Anurag Sharma    schedule 31.03.2015
comment
@AnuragSharma Я предполагаю, что все конвертированные SMS-пакеты связаны с текущим временем сервера. Он не может использовать эту функцию?   -  person TheGoodUser    schedule 31.03.2015
comment
@TheGoodUser Звучит интересно ... Как я могу получить доступ к SMS-пакетам из апплета JavaCard без участия (потенциально взломанного) приложения Android?   -  person vojta    schedule 31.03.2015
comment
@TheGoodUser, вы не можете получить это значение, используя какой-либо API, а также тот конверт, предназначенный только для вашего апплета, который указан в TAR. Поэтому обязательно, чтобы любой проприетарный конверт был подготовлен сетью и отправлен указанному апплету с информацией о времени. Java-апплет может использовать ussd для запуска сети для отправки конверта.   -  person Anurag Sharma    schedule 31.03.2015
comment
Анураг прав. Насколько я знаю, у вас есть два варианта: 1- попросить вашего оператора сети автоматически отправлять конверт времени на ваш апплет каждый день. (Используя этот метод, вам больше не нужно ничего делать в приложении вашего телефона) 2- Использование раздела сетевого времени SMS-ов. (При использовании этого метода вам необходимо потребовать права на отправку/получение SMS с телефона в установке приложения для телефона, и вам не нужно просить оператора сделать что-то особенное для вас!)   -  person TheGoodUser    schedule 31.03.2015
comment
Для большей ясности: обычно оператор отправляет свои пакеты в специальный апплет на карте. т. е. пакеты имеют заголовок, который указывает AID их апплета в карточке. Этот пакет данных расшифровывается на SIM-карте, а его тело отправляется на телефон. В этой процедуре данные (зашифрованные и расшифрованные) не передаются на SIM-карте. поэтому, если вы устанавливаете апплет на SIM-карту, нет возможности получить эти данные, и вы должны следовать одному из описанных выше механизмов.   -  person TheGoodUser    schedule 31.03.2015
comment
Кстати, оператор поделился с вами ключами от SIM-карты?! обычно они этого не делают. Итак, как вы установили свой апплет?   -  person TheGoodUser    schedule 31.03.2015
comment
@TheGoodUser Это может быть решением ... Да, у нас есть частный домен безопасности для нашего апплета ...   -  person vojta    schedule 31.03.2015
comment
Кстати, я добавил свое решение к ответу Авраама ниже.   -  person TheGoodUser    schedule 31.03.2015


Ответы (1)


Это зависит от вашего проекта. У вас есть 3 решения. один для случаев, когда у вас есть доступ к Интернету по телефону, и два для случаев, когда у вас его нет.

Если у вас есть доступ в Интернет:

  1. На этапе установки приложения для телефона оно отправляет IMSI SIM-карты на сервер, который вы уже установили, через канал https (необязательно!).
  2. Ваш сервер записывает этот IMSI и дату установки в таблицу базы данных на сервере.
  3. Отныне каждый раз, когда приложение телефона хочет начать сеанс с апплетом SIM-карты, оно должно отправлять запрос на ваш сервер, и сервер отвечает на этот запрос зашифрованным (его текущая дата + счетчик IMSI).
  4. Если телефонное приложение получает ответ, оно успешно отправляет его и время телефона (в простом виде) на SIM-апплет.
  5. Апплет SIM-карты шифрует саму «простую дату телефона + IMSI + счетчик» тем же секретным ключом, который мы использовали на сервере, а затем сравнивает результат со значением, которое его сервер отправил на мобильный телефон.
  6. Если оба равны, это означает, что время телефона совпадает со временем вашего сервера.

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

Если у вас нет доступа к Интернету:

Все смс-пакеты конвертируются в конкатенацию с текущим временем сервера, но обычно оператор отправляет свои пакеты в специальный апплет на карте. Я имею в виду, что у пакетов есть заголовок, в котором указан AID его апплета в карточке. SIM-карта анализирует и расшифровывает данные этого пакета, а его тело возвращается на телефон (для звонков и SMS-сообщений, а не для конвертов OTA). В этой процедуре данные (как зашифрованные, так и расшифрованные) не передаются на SIM-карту. Поэтому, если вы устанавливаете апплет на SIM-карту, нет возможности получить эти данные (включая текущее время в сети), и вы должны использовать один из следующих вариантов:

  1. Попросите вашего оператора сети отправлять временной конверт на ваш апплет (т. е. в заголовке пакета указывается AID вашего апплета) каждый день и автоматически. (При использовании этого метода вам больше не нужно ничего делать в телефонном приложении)

or:

  1. Использование раздела сетевого времени других SMS-ов на телефоне с помощью вашего телефонного приложения. (Используя этот метод, вам нужно потребовать права на отправку/получение чтения/записи SMS с телефона в установке вашего телефонного приложения, и вам не нужно просить оператора сделать что-то особенное для вас!)
person Ebrahim Ghasemi    schedule 30.03.2015
comment
Благодарю вас! Могу ли я использовать упреждающие команды для запроса подписанной метки времени вместо периодической отправки конверта времени? Могу ли я ответить на APDU моего кошелька проактивной командой отправить SMS и дождаться ответа SMS от оператора сети? Могу ли я смешивать классические APDU и упреждающие команды? - person vojta; 07.04.2015
comment
@vojta Извините, к сожалению, нет идей. на второй и третий вопрос я думаю, что ответ да (я уверен примерно на 90%). но я не знаю как! - person Ebrahim Ghasemi; 07.04.2015