模拟认证

Sim Authentication

我目前正在开发 phone 软件 windows,目标是能够使用 SIM 卡从标准 phone 号码拨打电话,通过 VoLTE(LTE 语音)。

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

因此,我想知道如何通过 sim 卡连接 sim 卡 reader,将 nonce 发送到卡,让它计算响应并 return 它.

因为我的项目是用 C# 编写的,所以最好有一些 C# 的头文件。

由于我使用的是 VoLTE,所以 sim 卡必须是 USIM,因此接口必须是 USIM。

如果需要的话,我可以从 sim 卡中获取 Ki 密钥,因为我和 telephone 接线员一起工作。

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

要使用它,你必须满足一些条件,引用 TS 31.102:

The function is related to a particular USIM and shall not be executable unless the USIM application has been selected and activated, and the current directory is the USIM ADF or any subdirectory under this ADF and a successful PIN verification procedure has been performed (see clause 5).

USIM 应用程序的选择在USIM 应用程序选择部分有说明,一些注意事项:

  • EF.DIR 文件格式在 ETSI TS 102 221 中指定(源自 ISO 7816-4)

  • USIM AID 应以 A00000000900001 (RID=A0000000090, PIX=0001...) 开头,如 ETSI TS 101 220

    中所定义
  • 对于 PIN 验证,应按照 ETSI TS 102 221 中的定义使用 VERIFY PIN 命令(完全禁用 PIN 可能更容易)。请注意,您需要用 'FF' 字节填充 PIN 值,引用:

PIN and PIN2 are coded on 8 bytes. Only (decimal) digits (0‑9) shall be used, coded in ITU‑T T.50 [5] with bit 8 set to zero. The minimum number of digits is 4. If the number of digits presented by the user is less than 8 then the ME shall pad the presented PIN with 'FF' before sending it to the 3GPP application.

3GPP TS 33.102(可能是 身份验证和密钥协议 部分)中 > 有点 < 描述了底层密码学。

要通过 .NET 与智能卡进行实际通信,请使用 pcsc-sharp. Some example code is here and here


如果您可以获得 Ki 并知道正确的算法,那么我强烈建议您尽可能使用 'emulation approach'(这里帮不上忙——但请参阅 this post有一些有趣的链接)。

免责声明:我的业余爱好者 GSM 经验在几年前结束(2.5G 之前)所以请验证我的想法

祝你好运——你一定会需要它!

编辑>

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