读写可编程 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 ...
随机推荐
- #树上带修莫队,树链剖分#洛谷 4074 [WC2013]糖果公园
题目 分析 考虑将树转换成序列求解,那就用欧拉序,入栈一次出栈一次正好抵消掉 注意当起点不是LCA的时候要将起点加入,剩下就是带修莫队板子题了 代码 #include <cstdio> # ...
- 赋能千行百业数字化转型,OpenHarmony生态新成果即将亮相HDC2022
第四届华为开发者大会 2022(Together)将于11月4日-6日在东莞召开,OpenAtom OpenHarmony(以下简称"OpenHarmony")将携生态新成果亮相 ...
- [易语言软件开源] [分享源码] 易语言D2D实现彩虹跑马灯
注意使用了D2D1.1,部分win7用户可能用不了(win7以下也用不了) 不是单纯的一个彩虹条,是可以变幻的 其实也可以封装成GDI+的,但是GDI+占用比较大,就没有用 点击下载点击下载
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit
1.问题描述 在App中供用户在地图上选择地址,目前在使用Map Kit结合geolocationManager逆地理编码时获取的地址信息描述不准确,希望能提供相应的Demo参考. 解决方案 Demo ...
- 一种新的姿势:程序try/catch抛出异常之绕过canary pwn121
一种新的姿势:程序try/catch抛出异常之绕过canary 我前面发了不少关于绕过canary的姿势,先总结一下,现在绕过canary的姿势有泄露,爆破,格式化字符串绕过,多线程劫持TLS绕过, ...
- SSH的密码qsnctfwp
开启 kali,在终端输入ssh root@challenge.qsnctf.com -p [port]可以访问远程 SSH 系统 根据提供的 passlist.txt 文件内容进行密码爆破 编写 S ...
- 基于Canvas实现的简历编辑器
基于Canvas实现的简历编辑器 大概一个月前,我发现社区老是给我推荐Canvas相关的内容,比如很多 小游戏.流程图编辑器.图片编辑器 等等各种各样的项目,不知道是不是因为我某一天点击了相关内容触发 ...
- i-MES生产制造管理系统-老化时间管控
在生产过程中,产品的可靠性是影响其性能和寿命的关键因素,因此提高产品的可靠性是十分必要的,而老化测试是提高产品可靠性的重要手段之一,老化的时间随着产品不同而变化,因此老化时间管控变得尤为重要! 在ME ...
- javascript现代编程系列教程之六——数字型数据类型转换
一.整数转换 在 JavaScript 中,parseInt() 函数会将其参数转换为字符串,然后解析该字符串,并返回一个整数或 NaN.如果 parseInt() 函数的参数是一个非常大的浮点数(如 ...
- NIFI简介
NIFI简介 首先是官网地址:Apache NiFi,不过会百度的估计都能搜到 因为后面的工作一定会用到,所以大致的听了一下讲解操作之类的 大概感觉就是NIFI是个web端的一种控制数据走向的工具?可 ...