读写可编程 SIM/USIM 卡
目录
SIM 卡
SIM 卡,用户身份模块(Subscriber Identity Module,SIM),是主要用于存储用户身份识别数据、短信数据和电话号码的智能卡。
SIM 卡主要用于 GSM(2G)网络和 TD-SCDMA(3G)网络,但是兼容的模块也可以用于 IDEN 电话。有人把 CDMA2000 和 CDMAOne 的 RUIM 卡和 UIM 卡,也称作 SIM 卡,虽然两者作用类似,并遵守了一样的所有机械、电气标准和部分软件标准,但是上层应用并不一定兼容。

SIM 由 CPU、ROM、RAM、EEPROM 和 I/O 电路组成。用户使用 SIM 卡时,实际上是手机向 SIM 卡发出命令,SIM 卡应该根据标准规范来执行或者拒绝。
值得注意的是,SIM 卡并不是单纯的信息存储器,也具有运算功能,拥有 ADM key 的 SIM 卡甚至可以运行 Java 程序。当前的 SIM 卡允许在用户使用时加载程序运行。这些程序通过 SIM 工具箱与手机或者服务器进行交互通讯,SIM 工具箱程序使用私有 API 编写,为了保证程序的交互使用性,ETSI 提出了 Java Card 的解决方案。SIM 卡规格现由 3GPP 和 ETSI 维护。
由于 SIM 卡只支持单向鉴权,不支持双向鉴权。即网络对手机(SIM)进行合法性的认证,缺乏用户对网络的认证,这就给诸如 “伪基站” 这样的不法行为留了空子,其后果为犯罪分子任意冒用他人手机号码或任意号码强行向用户手机发送诈骗、推销等垃圾短信。将手机卡升级为 USIM卡 就可以解决这一漏洞。
USIM 卡
USIM 卡,UMTS 用户身份模块(UMTS Subscriber Identity Module),是用于 UMTS 网络中的用户身份识别模块。USIM 卡还可以储存使用者资料、电话号码、认证资料、密钥、加密算法以及为短信提供储存空间。USIM 卡通常被认为是 SIM 卡的升级版,在 LTE(4G)网络中必须使用 USIM 卡,同时 USIM 卡兼容 2G、3G 网络。

当用户需在外国使用漫游服务时,可以把原用的 USIM 卡插入对应该地的无线制式设备,即兼容此 USIM 卡的手机来使用漫游服务。为提供认证服务,USIM 卡储存一组长期的加密钥匙(Ki),与网络的认证中心(AUC)共用。USIM 卡亦认证一串连续数字,这些数字不可超过一个范围,以避免被重放攻击。
由于 USIM 卡支持双向鉴权,允许手机(USIM)对网络进行合法性认证,这种做法有效地解决了 SIM 卡只支持单向鉴权,不支持双向鉴权的安全漏洞,有效的解决了伪基站、信息泄露和垃圾短信的骚扰。
USIM 卡的关键参数
ICCID(Integrated Circuit Card Identification,智能卡识别序列号码):用以标识 USIM 卡。格式为:898600 M F SS YY G XXXXXXX,含义如下:
- 898600:固定不变。
- M:代表移动业务接入号的末位,分别为 9、8、7、6、5。
- SS:代表各省编号。
- YY:代表编制 ICCID 时的年号(取年份的后两位)。
- G:代表 SIM 卡供应商的编号。
IMSI(International Mobile Subscriber Identity,国际用户识别码):全球唯一的用户识别码,在于移动通信网络系统交互时作为用户身份识别的依据。
Ki:鉴权密钥,用于用户身份的鉴权。
OP:鉴权密钥,用于用户身份的鉴权,每个省公司使用唯一的 OP。
OPc:鉴权密钥,使用 OP 和 Ki 分散计算得出。
NOTE:IMSI、Ki、OP/OPc 都是唯一的,在 LTE/EPC 中会被记录在 HSS 中央数据库。IMSI 和 Ki 值都存在初始的 USIM 卡中,而只会在 USIM 卡中存储 OP 或 OPC 两者之一。对 USIM 卡进行读写,主要是对这三个数值进行读写。
C1-C5:为 TDS-CDMA 的鉴权常量。
R1-R5:为 TDS-CDMA 鉴权旋转常量。
NOTE:以上两种参数每个省使用唯一的值,存储于初始的 USIM 卡中。
SQN(Sequence Number):是 TDS-CDMA 网络下发的鉴权参数,鉴权完毕后,SQN 值将被存放于 USIM 卡中,初始卡中 SQN 值为 0。
L 和 Delta:是用于校验 SQN 合法性的参数,L 和 Delta 存储于 USIM 卡中,并且每个省份使用唯一的值。
pySim 读写软件与 ADM key
pySim 可用于对 USIM 卡进行读写,支持串口与 PC/SC 两种读卡器。e.g.
- -d:Serial Device fo SIM Access [default: /dev/ttyUSB0]
- -p:Which PS/SC number for SIM access
注意,上述 PS/SC number 是执行 pcsc_scan 指令后得到的,如下述输出中的 0:
Scanning present readers...
0: Identiv SCR35xx USB Smart Card Reader [CCID Interface] (xxxxxxxxxxxxxx) 00 00
pySim 支持 sysmoUSIM-GR1、sysmoUSIM-SJS1等 USIM 卡,写 USIM 卡最主要的是对 ADM key 进行鉴权以及关键参数(Ki、IMSI、OP/OPc)的写入,写卡命令大部分情况下都是符合智能卡标准的,通过 pySim 写 USIM 卡则需要解决两个问题:
- ADM key 获取及 ADM key 鉴权。
- 某些非标准参数(通常是 Ki)的读写(NOTE:此处的 “非标准” 指文件位置或者写卡命令非标准,然而在 APDU 层面都是标准的)。
pySim 的具体操作方法奇怪浏览官方 Wiki:https://osmocom.org/projects/pysim/wiki
读写可编程 SIM/USIM 卡的更多相关文章
- android2.2应用开发之IccCard(sim卡或USIM卡)
tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51 ...
- android2.2应用开发之IccCard(sim卡或USIM卡)(转至 http://www.2cto.com/kf/201306/223784.html)
如果要做android通讯录的联系人的机卡混排显示,由于手机卡类型的不同,导致手机卡存储容量以及可以存储信息不同,就要涉及到android去读Icc卡的信息. 一般的sim卡只能存储姓名跟一个电话号码 ...
- sim usim Uim 区别
SIM卡(Subscriber Identity Module) ,即用户识别卡,是全球通数字移动电话的一张个人资料卡.它采用A 级加密方法制作,存储着用户的数据.鉴权方法及密钥,可供GSM系统对用户 ...
- USB免驱RFID读写器编程解析之一:智能卡篇
随着RFID应用的普及,越来越多的软件工程师需要使用RFID读写器编程来实现自己的需求.为了使软件工程师更快的了解RFID读写器的使 用,本文选择一款市面上常用的USB免驱RFID读写器SDT-HA来 ...
- MICRO SIM卡(SIM小卡)尺寸图及剪卡图解
如今使用MICRO SIM卡的手机越来越多.近期刚刚买了一个手机到手才发现尼马使用的是MICRO SIM卡.再去买剪卡器吧,十几二十块用一次就废了,去营业厅吧.又比較远,懒的出门.怎么办呢,自己剪!这 ...
- 开机后将sim/uim卡上的联系人写入数据库
tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51 ...
- Android中向SD卡读写数据,读SD卡和手机内存
package com.example.sdoperation; import java.io.BufferedReader; import java.io.File; import java.io. ...
- Android开发——遍历读写U盘、SD卡等外部存储
1.首先需要得到挂载在手机上的有哪些盘符 String[] result = null; StorageManager storageManager = (StorageManager)getSyst ...
- usim卡介绍
- Android之Dialer之紧急号码
Android之Dialer之紧急号码 e over any other (e.g. supplementary service related) number analysis. a) 112 an ...
随机推荐
- java中DelayQueue的使用
目录 简介 DelayQueue DelayQueue的应用 总结 java中DelayQueue的使用 简介 今天给大家介绍一下DelayQueue,DelayQueue是BlockingQueue ...
- Java ArrayList 与 LinkedList 的灵活选择
Java ArrayList Java ArrayList 类是一个可变大小的数组,位于 java.util 包中. 创建 ArrayList import java.util.ArrayList; ...
- Spring Boot 嵌入式服务器、Hibernate 关系和 Spring Data 全解析
嵌入式服务器 Spring Boot 的嵌入式服务器功能是一项方便而强大的功能,它允许你在应用程序中直接运行 Web 服务器,无需将其部署到单独的独立 Web 服务器中.这使得开发.测试和部署 Web ...
- Matplotlib绘图设置---文字和标签
文字和文字位置 通过plt.text()或ax.text()命令可在图形上添加文字. Signature: ax.text(x, y, s, fontdict=None, withdash=<d ...
- ArkUI框架,更懂程序员的UI信息语法
原文:https://mp.weixin.qq.com/s/LQA6AYiG8O_AeGE1PZwxZg,点击链接查看更多技术内容. ArkUI框架简化代码的"秘密" 在传统 ...
- Vue3.0 框架搭建的后台管理模板
一个Vue3.0框架搭建的后台管理模板 开源vue3.0版本基于vue3.x+ant-design-vue构建的免费开源admin项目,star高达8.4K+ 支持电脑端.手机.平板等平台 底层使用e ...
- 同义词查找,关键词扩展,使用腾讯Tencent AILAB的800万词向量,gensim,annoy
最近在做一个关键词匹配系统,为了更好的效果, 添加一个关键词扩展的功能.使用Tencent AIlab的800万词向量文件. 腾讯AILAB的800万词向量下载地址:https://ai.tencen ...
- Oracle sql 月份的加减以及差值
Oracle sql 月份的加减以及差值 差值 使用months_between,输出的是两个日期的差值 select months_between(TO_DATE('2022-05-31','yyy ...
- 力扣686(java)-重复叠加字符串匹配(中等)
题目: 给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1. 注意:字符串 "abc" 重复叠加 ...
- 力扣29(java)-两数相除(中等)
题目: 给定两个整数,被除数 dividend 和除数 divisor.将两数相除,要求不使用乘法.除法和 mod 运算符. 返回被除数 dividend 除以除数 divisor 得到的商. 整数除 ...