读写可编程 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 ...
随机推荐
- #点分治,Kruskal#AT3611 Tree MST
题目 给定一棵 \(n\) 个节点的树,现有有一张完全图, 两点 \(x,y\) 之间的边长为 \(w_x+w_y+dis_{x,y}\), 其中 \(dis\) 表示树上两点的距离. 求完全图的最小 ...
- OpenHarmony 官网文档有哪些上新?上篇:应用开发文档上新
随着 OpenAtom OpenHarmony(以下简称"OpenHarmony")系统能力持续升级,已具备支撑复杂带屏标准设备和应用开发的基础能力.相较于旧版本,OpenHarm ...
- HMS Core Discovery第16期直播预告|与虎墩一起,玩转AI新“声”态
[导读] 随着人工智能不断发展,机器学习技术也开始被广泛地应用到教育.金融.零售.交通.医疗等各个领域,给我们的生活带来巨大的便利.本期Discovery直播以<与虎墩一起,玩转AI新" ...
- cas登录成功后跳转地址和退出后跳转首页
cas登录成功后跳转地址和退出后跳转首页 CAS版本5.3 1.登录页面 的登录链接地址为 login.html ...<span v-if="username == ''" ...
- NVIDIA实习
额,大意了,之前只是有想准备nvidia的实习,但是具体时间没有关注,结果这下正正好错过 这下提前细细准备一下nvidia的实习了 公众号 Cascatrix 其他经验
- 详解K8s 镜像缓存管理kube-fledged
本文分享自华为云社区<K8s 镜像缓存管理 kube-fledged 认知>,作者: 山河已无恙. 我们知道 k8s 上的容器调度需要在调度的节点行拉取当前容器的镜像,在一些特殊场景中, ...
- tomcat 服务版本内存设置
1. 安装服务,如需指定java路径,需要在service.bat 中修改, 如下图 其中 pa代表当前目录 2. 安装服务, service.bat install 服务名,如下图示例 3. 内存设 ...
- vue中 如何实现一个单文件组件
前端开发人员只要了解过vue.js框架可能都知道单文件组件.vue.js中的单文件组件允许在一个文件中定义一个组件的所有内容.这是一个非常有用的解决方案,在浏览器网页中已经开始提倡这种机制.但是不幸的 ...
- Ubuntu下部署gitlab
1.安装gitlab服务 1.安装依赖 在ubuntu下使用快捷键ctrl+alt+T打开命令行窗口,然后运行下面命令 sudo apt update sudo apt-get upgrade sud ...
- Java集成系列:高效构建自定义插件
前言 随着软件开发的快速发展和需求的不断增长,开发人员面临着更多的压力和挑战.传统的开发方法需要花费大量的时间和精力,而低代码开发平台的出现为开发人员提供了一种更加高效.快速的开发方式.今天小编就以构 ...