我目前正在开发一个在windows上工作的软电话,目标是能够通过VoLTE (VoLTE)从标准的电话号码(使用sim卡)打电话。
目前,我可以联系HSS/HLR,并收到一个401未经授权与现在(根据标准RFC3310)。这个现在应该作为一个输入,一个AKAv1-MD5算法,它将返回一个新的值,可以发送到HSS/HLR并完成授权,这只能在sim卡上完成。它不能在计算机上完成,因为算法的另一个输入是高度机密的,并且只能通过sim卡知道。
因此,我想知道如何通过sim读卡器与sim卡进行接口,将nonce发送到卡上,并让它计算响应并返回。
由于我的项目是用C#编写的,如果存在C#的某些头,则更好。
由于我使用的是VoLTE,所以sim卡必须是USIM,因此接口必须是USIM。
如果需要的话,我可以从sim卡中获得Ki密钥,因为我和一个电话接线员一起工作。
发布于 2016-10-11 09:44:27
您(很可能)正在寻找在AUTHENTICATE中定义的3 3GPP 31.102命令(相同命令的前一个变体在过去被称为RUN GSM ALGORITHM或INTERNAL AUTHENTICATE )。
要使用它,您必须满足一些条件,引用TS 31.102:
该函数与特定的USIM相关,除非已选择和激活USIM应用程序,而且当前目录是USIM ADF或该ADF下的任何子目录,并且已执行了成功的PIN验证过程(见第5条),否则该函数不得执行。
USIM应用程序的选择在USIM应用程序选择一节中作了说明,注意:
A00000000900001 (RID=A0000000090,PIX=0001...)开始,如ETSI TS 101 220中所定义VERIFY PIN中定义的那样使用ETSI TS 102 221命令(完全禁用PIN可能更容易)。请注意,您需要使用'FF'字节填充PIN值,引用如下:PIN和PIN2按8字节编码。只能使用(小数)数字(0-9),在ITU-TT.50 5中编码,位8设置为零。最小位数为4。如果用户显示的数字数小于8,则ME应在将其发送到3 3GPP应用程序之前用“FF”填充所显示的PIN。
底层密码学是>somewhat<在3 3GPP 33.102 (可能是节身份验证和密钥协议)中描述的。
要与来自.NET的智能卡进行实际通信,请使用pcsc-夏普。一些示例代码是这里和这里。
如果您能够获得Ki并知道正确的算法,那么如果可能的话,我强烈建议使用‘仿真方法’(在这里无法帮助--但请参见这个职位和一些有趣的链接)。
免责声明:我的爱好者GSM经验几年前结束了(2.5G之前),所以请确认我的想法
祝你好运--你一定会需要它的!
EDIT>
Osmocom提供了一个简单的工具--执行身份验证的奥斯摩-西姆-奥斯 --可能对您有帮助。
https://stackoverflow.com/questions/39953009
复制相似问题