目录

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 卡的更多相关文章

  1. android2.2应用开发之IccCard(sim卡或USIM卡)

    tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51 ...

  2. android2.2应用开发之IccCard(sim卡或USIM卡)(转至 http://www.2cto.com/kf/201306/223784.html)

    如果要做android通讯录的联系人的机卡混排显示,由于手机卡类型的不同,导致手机卡存储容量以及可以存储信息不同,就要涉及到android去读Icc卡的信息. 一般的sim卡只能存储姓名跟一个电话号码 ...

  3. sim usim Uim 区别

    SIM卡(Subscriber Identity Module) ,即用户识别卡,是全球通数字移动电话的一张个人资料卡.它采用A 级加密方法制作,存储着用户的数据.鉴权方法及密钥,可供GSM系统对用户 ...

  4. USB免驱RFID读写器编程解析之一:智能卡篇

    随着RFID应用的普及,越来越多的软件工程师需要使用RFID读写器编程来实现自己的需求.为了使软件工程师更快的了解RFID读写器的使 用,本文选择一款市面上常用的USB免驱RFID读写器SDT-HA来 ...

  5. MICRO SIM卡(SIM小卡)尺寸图及剪卡图解

    如今使用MICRO SIM卡的手机越来越多.近期刚刚买了一个手机到手才发现尼马使用的是MICRO SIM卡.再去买剪卡器吧,十几二十块用一次就废了,去营业厅吧.又比較远,懒的出门.怎么办呢,自己剪!这 ...

  6. 开机后将sim/uim卡上的联系人写入数据库

    tyle="margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51 ...

  7. Android中向SD卡读写数据,读SD卡和手机内存

    package com.example.sdoperation; import java.io.BufferedReader; import java.io.File; import java.io. ...

  8. Android开发——遍历读写U盘、SD卡等外部存储

    1.首先需要得到挂载在手机上的有哪些盘符 String[] result = null; StorageManager storageManager = (StorageManager)getSyst ...

  9. usim卡介绍

  10. Android之Dialer之紧急号码

    Android之Dialer之紧急号码 e over any other (e.g. supplementary service related) number analysis. a) 112 an ...

随机推荐

  1. C 语言数组教程:定义、访问、修改、循环遍历及多维数组解析

    C 数组 数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量. 要创建数组,请定义数据类型(例如 int)并指定数组名称,后面跟着方括号 []. 要将值插入其中,请使用逗号分隔的列表,并在 ...

  2. 应用缺少POI数据,如何开发地点深度信息?

    用户在App里搜索某个地点时,并不满足单一的地点信息,希望得到更多可以帮助其做决策的深度信息.例如有打车出行需求的用户,在打车App里搜索地点时可以显示周边的地点,精确到某个路口,让用户可以自由选择合 ...

  3. 《c#高级编程》第4章C#4.0中的更改(九)——协变和逆变

    动态字典(Dynamic Dictionary)是指一个键值对集合,其中键和值的类型都可以在运行时确定并且可以动态变化.在C#中,可以使用 dynamic 关键字来实现这一功能. 例如,下面的代码演示 ...

  4. Oracle 一些触发器自治事务相关错误

    Oracle 一些触发器自治事务相关错误 table XXX is mutating,trigger/function may not see it 在触发器中调用的函数或者语句有查询当前表的操作,比 ...

  5. OceanBase初体验之从MySQL迁移数据到OceanBase集群

    前置条件 MySQL 环境 OceanBase 环境 测试用的表结构和一些数据 先在源端 MySQL 用如下脚本创建测试表,以及写入10000条数据用于迁移测试. use test; CREATE T ...

  6. 基于IoT全链路实时质量-魔洛哥

    简介: 通过基于IoT的全链路实时质量,业务使用狄仁杰进行全链路埋点后,可一键接入魔洛哥平台,实现终端问题的实时感知和链路分析,以及智能终端系统业务场景的全链路实时质量.整体方案接入成本低(分钟级别接 ...

  7. 3分钟创建Serverless Job 定时获取新闻热搜

    简介: 7月25号-8月2号工作日期间,完成场景搭建,即可获得夏日清凉小风扇(每日限量)和阿里云代金券! 云起实验室,由阿里云提供的零门槛云上实践平台.一键预置实验环境,提供详细的实验手册指导,快速体 ...

  8. 从KPI到OKR,高阶产品人如何推动业务高速增长

    简介: 不管是核心大目标,还是O(Objectives),或者北极星指标,奇妙等式等等,最后都需要核心组织协同方式来推动整个目标聚焦以及过程的落地. 作为产品经理人,相信很多人都遇到过以下的灵魂拷问: ...

  9. NBF事件中心架构设计与实现

    ​简介:NBF是阿里巴巴供应链中台的基础技术团队打造的一个技术PaaS平台,她提供了微服务FaaS框架,低代码平台和中台基础设施等一系列的PaaS产品,旨在帮助业务伙伴快速复用和扩展中台能力,提升研发 ...

  10. Serverless 架构模式及演进

    ​简介: Serverless 架构从使用技术上有计算,数据存储,消息通信,我们可从运维性,安全性,可靠性,可扩展性,成本几个角度来衡量架构的优劣.本文会介绍一些常见的业务场景,探讨如何使用 Serv ...