我目前正在使用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 ALGORITHM
或INTERNAL 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。一些示例代码是here和here。
如果您可以获取Ki
并知道正确的算法,那么我强烈建议您尽可能使用``仿真方法''(此处无济于事-但请参见例如this post中的一些有趣链接)。
免责声明:我的业余GSM经验几年前结束(2.5G之前),因此请核实我的想法
祝您好运-您一定会需要它!
编辑>
Osmocom提供了一个简单的工具-Osmo-sim-auth来执行身份验证-可能对您有所帮助。