我目前正在使用Windows上的软电话,目标是能够通过LTE(Voice over LTE)使用SIM卡从标准电话号码拨打电话。

目前,我能够联系HSS / HLR并收到401未经授权的随机数(根据标准RFC3310)。
该随机数应作为AKAv1-MD5算法的输入,它将返回一个新值,该值可以发送到HSS / HLR并完成授权,只能在sim卡上完成。由于算法的另一个输入是高度机密的,并且仅由SIM卡知道,因此无法在计算机上完成。

因此,我想知道如何通过sim卡读卡器与sim卡接口,将现时数据发送到卡,然后让它计算响应并返回。

因为我的项目是用C#编写的,所以如果存在一些C#标头,则更可取。

由于我正在使用VoLTE,因此SIM卡必须是USIM,因此接口必须是USIM。

如果需要,我可以从sim卡中获取Ki键,因为我与电话接线员一起工作。

最佳答案

您(最有可能)正在寻找3GPP TS 31.102中定义的AUTHENTICATE命令(同一命令的先前变体在过去被称为RUN GSM ALGORITHMINTERNAL AUTHENTICATE)。

要使用它,您必须满足某些条件,并引用TS 31.102:


  该功能与特定的USIM有关,不得与
  可执行文件,除非已选择USIM应用程序,并且
  激活,并且当前目录是USIM ADF或任何
  该ADF下的子目录并成功进行PIN验证
  程序已执行(请参阅第5节)。


USIM应用程序选择部分中描述了USIM应用程序的选择,其中一些注意事项:


EF.DIR文件格式在ETSI TS 102 221中指定(源自ISO 7816-4)
USIM AID应该以ETSI TS 101 220中定义的A00000000900001(RID = A0000000090,PIX = 0001...)开头
对于PIN验证,应按照ETSI TS 102 221中的定义使用VERIFY PIN命令(完全禁用PIN可能会更容易)。请注意,您需要使用'FF'字节填充PIN值,例如:



  PIN和PIN2编码为8个字节。只能(十进制)数字(0-9)
  在ITU‑T T.50建议书[5]中使用,将第8位设置为零。最低
  数字位数为4。如果用户显示的数字位数
  小于8,则ME将用'FF'填充显示的PIN
  在将其发送到3GPP应用程序之前。


底层密码学在3GPP TS 33.102中(可能在“身份验证和密钥协议”部分中)进行了“某种程度上”的描述。

要从.NET与智能卡进行实际通信,请使用pcsc-sharp。一些示例代码是herehere



如果您可以获取Ki并知道正确的算法,那么我强烈建议您尽可能使用``仿真方法''(此处无济于事-但请参见例如this post中的一些有趣链接)。

免责声明:我的业余GSM经验几年前结束(2.5G之前),因此请核实我的想法

祝您好运-您一定会需要它!

编辑>

Osmocom提供了一个简单的工具-Osmo-sim-auth来执行身份验证-可能对您有所帮助。

10-06 02:45