【问题标题】:Trusted source of time for JavaCard applet on SIMSIM 上 JavaCard 小程序的可信时间来源
【发布时间】:2015-03-30 12:05:19
【问题描述】:

我有一个 JavaCard 小程序在智能手机中的金雅拓 SIM 卡上运行。我想创建一个在指定日期和时间有效的电子钱包。

我知道使用经典智能卡是不可能的,因为没有电池,智能卡内部没有时钟。但是,使用 SIM 卡可能会:当 SIM 卡连接到网络时,它必须能够访问网络时间(不是本地系统时间,用户可以更改),并且最后一个已知的网络时间值可能是可能存储在 SIM 卡上的某个位置。

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

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

编辑

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

编辑 2

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

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

【问题讨论】:

  • 看起来很有趣。您不应该自己编写移动应用程序吗?您不能以每次从服务器接收加密代码并将其发送到 SIM 卡的方式编写您的移动应用程序。 SIM可以验证它是否是一个有效的代码?如果代码错误,它会拒绝执行您的小程序。
  • @Abraham 问题是您的解决方案需要互联网连接。通过互联网连接很容易 - 服务器可以轻松发送签名时间戳。请参阅编辑...
  • 好的。您可以使用手机应用程序发送和接收短信,对吗?因此,您可以简单地向同一部手机发送一条空短信(您可以要求用户在安装过程中输入他的号码)。默认情况下,运营商会将网络时间和传入的 SMS-s 发送到您的手机。这样就可以同步 SIM 小程序时间了。假设每个人通常每天使用您的小程序 2 次,因此如果您每 10 个会话执行 1 次同步过程,您大约每 5 天同步一次时间。请注意,新手机会隐藏此网络时间(它们会替换为手机时间)......
  • ......但是你可以在旧手机中看到它,在收到短信的末尾。只需更改手机的时间并向自己发送一条短信,然后看看它的结尾。 (我用诺基亚 1100 试过)
  • @TheGoodUser 您无法通过使用任何 API 以及仅由 TAR 指定的用于您的小程序的信封获得该值。因此,任何专有信封必须由网络准备并发送是强制性的到指定的小程序有时间信息。Java小程序可以使用ussd触发网络发送信封。

标签: android time gsm javacard sim-card


【解决方案1】:

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

如果您可以访问互联网:

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

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

如果您无法访问互联网:

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

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

或:

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

【讨论】:

  • 谢谢!我可以使用主动命令来请求签名时间戳,而不是定期发送时间信封吗?我可以使用主动命令“发送 SMS”来响应我的钱包 APDU 并等待网络运营商的 SMS 回复吗?我可以混合使用经典 APDU 和主动命令吗?
  • @vojta 对不起,很遗憾没有想法。对于第二个和第三个问题,我认为答案是“是”(我确定大约 90%)。但我不知道怎么做!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-28
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多