android – SIM上JavaCard applet的可靠时间源
作者:互联网
我有一个JavaCard小程序在智能手机上使用Gemalto SIM卡.我想创建一个有效的指定日期和时间的电子钱包.
我知道使用经典的智能卡是不可能的,因为没有电池,所以智能卡内部没有时钟.但是,使用SIM卡可能是:当连接到网络时,SIM卡必须能够访问网络时间(不是本地系统时间,用户可以更改),并且最后一个已知的网络时间值可能是可能存储在SIM卡的某个地方.
有没有办法以安全的方式从我的applet访问上次已知的网络时间? (我不相信手机中安装的任何应用程序,因为它很容易被黑客攻击)
你认为我的问题还有其他解决办法吗?
编辑
我没有提到我为什么这么想的原因:我需要在没有互联网连接的情况下解决这个问题,因为我的客户应该使用我的电子钱包而不用手机连接互联网.他们需要在没有信号的地铁中使用它,其中一些根本不支付互联网连接费用.所以我的应用程序必须能够找到离线时间.
编辑2
在Android手机上,有一个选项:
这意味着存在一些与用户无关的时间源.问题是,是否可以通过SIM卡上的JavaCard小程序以安全的方式访问它. (或者如果在没有连接的情况下可以访问最后的已知值)
解决方法:
这取决于你的项目.你有3个解决方案.一个用于您可以通过电话访问Internet的情况,另一个用于您不能访问Internet的情况.
如果您有Internet访问权限:
>在电话应用程序安装步骤中,它会将SIM卡的IMSI发送到您已通过https频道建立的服务器(可选!).
>您的服务器将IMSI和安装日期记录在服务器的数据库表中.
>此后,每次电话应用程序想要开始与SIM小程序的会话时,它必须向您的服务器发送请求,并且服务器使用加密(其当前日期IMSI_counter)响应该请求.
>如果电话应用程序收到答案成功发送它和电话的时间(平原)到SIM小程序.
> SIM小程序使用我们在服务器中使用的相同密钥加密“普通电话日期IMSI计数器”本身,然后将结果与其服务器发送到移动电话的值进行比较.
>如果两者相等,则表示手机的时间与服务器的时间相同.
使用上述过程,如果您不希望SIM小程序再次运行,您可以在响应电话应用程序请求时发送无效的加密值.
如果您无法访问Internet:
所有SMS数据包都与服务器的当前时间连接在一起,但通常情况下,操作符会将其数据包发送到卡上的特殊小程序.我的意思是数据包有一个标题,指示卡中applet的AID. SIM卡分析和解密该分组数据,并且其主体返回电话(对于呼叫和SMS-s,而不是OTA信封).在此过程中,SIM上不共享数据(加密和解密).因此,如果您在SIM上安装applet,则无法获取这些数据(包括网络当前时间),您必须使用以下选项之一:
>请求您的网络操作符每天自动向您的小程序发送时间信封(即数据包的标题指示您的小程序AID). (使用此方法,您不再需要在手机应用程序中执行任何操作)
要么:
>使用手机应用程序在手机上使用其他SMS-s的网络时间部分. (使用此方法,您需要在手机应用程序安装中要求手机短信发送/接收读/写权限,您无需要求运算符为您做任何特殊操作!)
标签:android,time,gsm,javacard,sim-card 来源: https://codeday.me/bug/20190702/1360858.html