python - 使用 osmo-sim-auth Python 脚本进行 SIM/USIM 身份验证
问题描述
我会尝试使用基于 PC 的 SIM 卡读卡器使用以下 Python 脚本重现 USIM 身份验证过程(不是我必须使用这个,但我没有找到另一个):https ://osmocom.org/projects/ osmo-sim-auth
我的 SIM 卡读卡器正常工作并被检测到:
$ pcsc_scan
PC/SC device scanner
V 1.5.2 (c) 2001-2017, Ludovic Rousseau <ludovic.rousseau@free.fr>
Using reader plug'n play mechanism
Scanning present readers...
0: Gemalto Prox Dual USB PC Link Reader [Prox-DU Contactless_13101538] 00 00
1: Gemalto Prox Dual USB PC Link Reader [Prox-DU Contact_13101538] 01 00
Thu Oct 18 08:51:09 2018
Reader 0: Gemalto Prox Dual USB PC Link Reader [Prox-DU Contactless_13101538] 00 00
Card state: Card removed,
Reader 1: Gemalto Prox Dual USB PC Link Reader [Prox-DU Contact_13101538] 01 00
Card state: Card inserted,
ATR: 3B 9F 96 80 3F C6 A0 80 31 E0 73 F6 21 16 57 4A 4D 02 0B 34 54 63 69
ATR: 3B 9F 96 80 3F C6 A0 80 31 E0 73 F6 21 16 57 4A 4D 02 0B 34 54 63 69
+ TS = 3B --> Direct Convention
...
pcscd 服务正在运行:
systemctl status pcscd
● pcscd.service - PC/SC Smart Card Daemon
Loaded: loaded (/lib/systemd/system/pcscd.service; indirect; v
Active: active (running) since Thu 2018-10-18 08:57:02 CEST; 1
Docs: man:pcscd(8)
Main PID: 23039 (pcscd)
Tasks: 6 (limit: 4915)
CGroup: /system.slice/pcscd.service
└─23039 /usr/sbin/pcscd --foreground --auto-exit
但是,然后我运行osmo-sim-auth.py
脚本,出现以下错误:
./osmo-sim-auth.py -r 00000000000000000000000000000000 -s
Testing SIM card with IMSI None
GSM Authentication
Traceback (most recent call last):
File "./osmo-sim-auth.py", line 125, in <module>
handle_sim(options, rand_bin)
File "./osmo-sim-auth.py", line 75, in handle_sim
print "SRES:\t%s" % b2a_hex(byteToString(ret[0]))
TypeError: 'NoneType' object has no attribute '__getitem__'
知道我做错了什么吗?
解决方案
如果没有在 GSM 的 AUC/HLR 中生成的 RAND 值,则无法读取您尝试的信息。GSM 网络使用质询-响应机制对 SIM 卡进行身份验证。
- 一旦需要认证,AUC/HLR 会向 MSC/VLR 提供 128 位 RAND(随机数)、Kc 和 SRES 值。
- RAND 被加密发送到 SIM 卡。
- SIM 使用 A3、A8 算法、GSM SIM 认证密钥 (Ki) 和 RAND 值计算 SRES 和 Kc
- SRES 源自 A3 (RAND, Ki)。Kc 源自 A8 (RAND, Ki)。
- Ki 是 SIM 供应商分配的 A3 和 A8 版本的 Authentication key。
- SIM 将 SRES 发送到 MSC/VLR
- 如果两个 SRES 值匹配,则完成身份验证。
GSM 需要 RAND 值,UMTS、Ki、A3 和 A8 算法类型需要 RAND/AUTN 值。
推荐阅读
- ios - 如果来自旧 Xcode,我的应用程序能否在较新的 iOS 上运行?
- prometheus - Prometheus 从离线节点读取指标
- c# - 为什么当我将其设置为 90 时,我的 FPS 角色在 Y 轴上变为 0
- html - 如何为客户编辑现有页面
- cassandra - 让 Cassandra 使用连接器在 Kafka 主题上动态发布
- python - FFT time series with no change in data?
- javascript - 我从控制台和 innerHTML 得到不同的结果
- python - 在没有 shell=True 的情况下使用 python 运行外部程序?
- java - org.postgresql.jdbc.PgResultSet 实例和 io.vertx.core.impl.VertxThread 的内存泄漏
- javascript - 单击动态复选框时的操作