SIM 上 JavaCard 小程序的可信时间来源

voj*_*jta 5 time android gsm javacard sim-card

我有一个 JavaCard 小程序,可以在智能手机中处理 Gemalto SIM 卡。我想创建一个在指定日期和时间有效的电子钱包。

我知道使用经典智能卡是不可能的,因为没有电池,它里面没有时钟。然而,使用 SIM 卡可能是这样:当连接到网络时,SIM 卡必须对网络时间(不是本地系统时间,用户可以更改)有一定的访问权,并且最后已知的网络时间值可能是可能存储在 SIM 卡上的某个地方。

有没有办法以安全的方式从我的小程序访问最后一个已知的网络时间?(我不相信手机中安装的任何应用程序,因为它很容易被黑客入侵)

你认为我的问题还有其他解决方案吗?

编辑

我没有提到我想到这个的原因:我需要在没有互联网连接的情况下解决这个问题,因为我的客户应该在他们的手机中没有互联网连接的情况下使用我的电子钱包。他们需要在没有信号的地铁中使用它,其中一些人根本不支付互联网连接费用。所以我的应用程序必须能够找出离线时间。

编辑 2

在 Android 手机上,有一个选项:

安卓网络时间设置

这意味着有一些独立于用户的时间来源。问题是,是否可以通过 SIM 卡上的 JavaCard 小程序以安全的方式访问它。(或者如果在没有连接的情况下可以访问最后一个已知值)

Abr*_*ham 2

这取决于你的项目。你有3个解决方案。一种适用于您可以通过电话访问互联网的情况,两种适用于您无法通过电话访问互联网的情况。

如果您可以访问互联网:

  1. 在手机应用程序安装步骤中,它会将SIM 卡的IMSI通过 https 通道发送到您已经建立的服务器(可选!)。
  2. 您的服务器将该 IMSI 和安装日期记录在服务器的数据库表中。
  3. 此后,每次电话应用程序想要启动与 SIM 小程序的会话时,它都必须向您的服务器发送请求,并且服务器使用加密的(当前日期 + IMSI_counter)响应该请求。
  4. 如果电话应用程序成功收到答案,则将其和电话时间(以明文形式)发送到 SIM 小程序。
  5. SIM 小程序使用我们在服务器中使用的相同密钥对“普通手机日期+IMSI+计数器”本身进行加密,然后将结果与其服务器发送到手机的值进行比较。
  6. 如果两者相等,则说明手机的时间与服务器的时间相同。

使用上述过程,如果您不想让 SIM 小程序继续工作,您可以在电话应用程序请求的响应中发送无效的加密值。

如果您无法访问互联网:

所有 SMS 数据包均与服务器的当前时间连接在一起,但通常情况下,运营商将其数据包发送到卡上的特殊小程序。我的意思是数据包有一个标头,指示卡中小程序的 AID。SIM 卡分析并解密此数据包数据,并将其正文返回手机(适用于呼叫和短信,不适用于 OTA 信封)。在此过程中,数据(加密和解密)不会在 SIM 上共享。因此,如果您在 SIM 卡上安装小程序,则无法获取这些数据(包括网络当前时间),您必须使用以下选项之一:

  1. 要求您的网络运营商每天自动向您的小程序发送一个时间信封(即数据包的标头指示您的小程序 AID)。(使用此方法,您无需再在手机应用程序中执行任何操作)

或者:

  1. 使用手机应用程序使用手机上其他 SMS 的网络时间部分。(使用此方法,您需要在手机应用程序安装中要求手机具有短信发送/接收读/写权限,并且不需要要求运营商为您做任何特别的事情!)