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

Trusted source of time for JavaCard applet on SIM

我有一个 JavaCard 小程序在智能phone 中的 Gemalto SIM 卡上工作。我想创建一个在指定日期和时间有效的电子钱包。

我知道使用经典智能卡是不可能的,因为没有电池,里面没有时钟。但是,对于 SIM 卡,可能有以下情况:当 SIM 卡连接到网络时,必须能够访问网络时间(不是本地系统时间,用户可以更改),最后已知的网络时间值可能是可能存储在 SIM 卡的某处。

有什么方法可以安全地从我的小程序访问最近已知的网络时间吗? (我不信任 phone 中安装的任何应用程序,因为它很容易被黑客入侵)

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

编辑

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

编辑 2

在 Android phone 秒,有一个选项:

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

这取决于你的项目。您有 3 个解决方案。一种是您可以在 phone 上访问 Internet 的情况,另一种是您不能访问 Internet 的情况。

如果您可以上网:

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

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

如果您无法访问互联网:

所有的SMS数据包都与服务器的当前时间连接在一起,但通常情况下,运营商会将其数据包发送到卡上的一个特殊小程序。我的意思是数据包有一个 header 表示它在卡中的小程序的 AID。 SIM 卡分析并解密此数据包数据及其 return 的 body 到 phone(对于通话和 SMS-s,而不是 OTA 信封)。在此过程中数据(加密和解密)不会在 SIM 上共享。因此,如果您在 SIM 上安装小程序,则无法获取这些数据(包括网络当前时间),您必须使用以下选项之一:

  1. 要求您的网络运营商每天自动给您的小程序发送一个时间包(即包的header表示您的小程序AID)。 (使用此方法,您无需再在 phone 应用程序中执行任何操作)

或:

  1. 使用您的 phone 应用程序在 phone 上使用其他 SMS-s 的 network-time 部分。 (使用此方法,您需要在 phone 应用程序安装中要求 phone 的 SMS sending/receiving reading/writing 权限,并且您不需要要求接线员执行任何操作特别适合你!)