智能卡安全机制比较系列(一)CardOS
自从智能卡开始进入人们的日常生活之后,大家对于智能卡的安全性普遍看好,但是不同公司的智能卡在安全机制的实现方面也存在很多的差异。对于智能卡应用开发和智能卡COS设计人员来说,如果能够更多地了解不同公司的智能卡安全机制,无疑会对自己的开发过程有所帮助。在此将逐步介绍一些流行的智能卡操作系统中各具特色的安全机制,究竟这些安全机制孰优孰劣,其实无关紧要,只要这种安全机制能够满足系统的安全需求就足够了。
首先看看早期的CardOS,CardOS是西门子公司基于自己的44C40/80系列芯片而设计的,该系列芯片RAM大小256字节,程序空间8K/16K,数据空间4K/8K,采用西门子的8051内核。CardOS在1995年推出了1.2版本,主要的APDU命令是符合ISO7816-4的文件读写操作,采用的安全机制非常灵活,初看起来也有点复杂,但是实际原理却是比较简单的。虽然目前国内市场上几乎已经没有什么CardOS产品了,但是了解这个初期的鼻祖级的智能卡安全机制,对于了解目前市场上流行的COS安全机制应该会有些帮助。
CardOS采用半字节作为安全状态,除却0和F之外,还有1到E共计14种状态,每个状态分别对应要达到该状态需要进行的某种安全认证操作以及这些认证的不同组合方式,这些安全认证包括校验PIN或者是C/R (Challenge / Response) 认证(也就是我们现在通常所说的外部认证),而认证的组合方式包括“逻辑与”及“逻辑或”。
对于文件的操作和密钥的使用可以定义不同的安全状态,只有满足定义的安全状态后才能进行相应的文件操作,或者密钥的使用。无论是DF还是EF都有一组3字节的安全状态控制字,每半字节作为一种访问控制的状态标识,分别对应着文件的建立、删除、添加、读取、更新等操作。
这些安全状态及其需要的认证或组合全部保存在一个特殊的内部文件STCF(Security Test Control File)安全认证控制文件中,该文件是一个TLV(Tag Length Value)结构的记录文件,其中第一个字节就是1-E这14个状态中的一个作为TAG,Length根据认证方式的不同而存在差别,Value当中的第一个字节表示认证类型,从中可以看出这个认证是需要PIN认证,还是需要C/R认证,或者是某几个认证状态的“逻辑与”及“逻辑或”组合。对于PIN认证还可以指出应该使用哪个PIN文件中的哪个PIN,同样对于C/R认证也可以指出应该使用哪个密钥文件中的哪个密钥。在CardOS的系统中有一个安全状态bit mask标志,用不同的数据位来记录哪个安全状态经过认证得到了满足。在有些情况下,进行DF选择之后,当前DF的认证状态的bit mask标志将会被清空。
关于“逻辑与”和“逻辑或”其实也很简单。比如“03”的状态表示认证第3个PIN文件中的第2个PIN,“0B”的状态表示需要对第1个密钥文件的第5条密钥进行C/R认证。那么我们可以定义状态“06”表示“03”和“0B”的逻辑或组合,定义状态“07”表示“03”和“0B”的逻辑与组合。我们假设有两个文件EF01和EF02,其中EF01读写的安全状态分别为“03”和“06”,EF02读写的安全状态分别为“0B”和“07”。那么在验证了第3个PIN文件中的第2个PIN后,即可以读EF01也可以写EF01,而对于第一个密钥文件的第5条密钥经过C/R认证后,也可以写EF01。对于EF02的写操作必须同时满足以上两个认证状态,对于EF02的读则只需要C/R认证第1个密钥文件的第5条密钥即可。
除了以上的安全状态控制机制之外,CardOS还定义了所谓的线路保护LINE PROTECTION,在文件的创建过程中会定义LPROTF字段,作为线路保护属性,有两种线路保护模式分别为MAC方式和加密方式,同时还定义了线路保护的方向,即从卡到终端以及从终端到卡。而用来进行线路保护的密钥只能存储在SKF(System Key File)系统密钥文件中。
在CardOS中定义了几个默认的EF文件标识,分别为:0000 = ATR二进制文件,0001 = STCF记录文件,0002 = PIN记录文件,0003 = SKF系统密钥记录文件,0004 = RSF 随机数种子二进制文件。CardOS支持最多6层DF文件结构,可以通过文件名、文件标识、文件路径等方式进行文件的选择。
智能卡安全机制比较系列(一)CardOS的更多相关文章
- 智能卡安全机制比较系列(二)DS SmartCard
DS Smart Card是飞利浦公司自己开发的一款CPU卡产品,在早期芯片厂商开发自己的COS并进行推广很普遍,现在像英飞凌(前西门子半导体)以及恩智普(前飞利浦半导体)几乎很少推广自己的COS,大 ...
- 智能卡安全机制比较系列(六) TimeCOS
TimeCOS是握奇公司推出的智能卡操作系统,也可以说是国内早期自己开发的为数不多的几款COS之一.当然随着后来国内公司对于CPU卡开发的投入,其他公司的COS产品也纷纷推出. 其实从握奇的TimeC ...
- 智能卡安全机制比较系列(五) StarCOS
StarCOS是捷德公司的推出的智能卡COS,和前面说过的几种COS不同的是,国内的用户对于StartCOS可以说非常熟悉,而且因为握奇.明华.天喻等公司的安全机制都基本上是脱胎于StarCOS,所以 ...
- 智能卡安全机制比较系列(三) MPCOS
MPCOS是金普斯早期推出的一款多应用支付芯片卡操作系统,支持ISO7816以及PCOS的数据格式和命令.MPCOS具有两级目录文件结构,即MF下可以有一级DF,每个DF下最多可创建63个EF. MP ...
- 智能卡安全机制比较系列(四) PayFlex
PayFlex是斯伦贝谢公司(经过若干整合现在是金雅拓的一部分)在上世纪90年代推出的一款电子钱包支付COS,从功能上看可以说PayFlex是EMV96以及PBOC电子钱包规范的雏形. PayFlex ...
- JVM系列文章(四):类载入机制
作为一个程序猿,只知道怎么用是远远不够的. 起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP ...
- Javascript事件模型系列(一)事件及事件的三种模型
一.开篇 在学习javascript之初,就在网上看过不少介绍javascript事件的文章,毕竟是js基础中的基础,文章零零散散有不少,但遗憾的是没有看到比较全面的系列文章.犹记得去年这个时候,参加 ...
- Winsock系列函数 及 Socket通信流程
Socket是一种网络通信机制 Winsock系列函数 1. Socket 创建socket 2. Connect 尝试连接远端Socket 3. Send 在某个Socket 向远端 ...
- jvm系列(七):jvm调优-工具篇
16年的时候花了一些时间整理了一些关于jvm的介绍文章,到现在回顾起来还是一些还没有补充全面,其中就包括如何利用工具来监控调优前后的性能变化.工具做为图形化界面来展示更能直观的发现问题,另一方面一些耗 ...
随机推荐
- 【转】Thunderbird on Ubuntu 12.04 – 调整邮件列表行间距
原文网址:http://www.xuebuyuan.com/414703.html markz@markz-hp6200:~$ cd .thunderbird/ markz@markz-hp6200: ...
- Android全屏显示
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_ ...
- 树形dp入门练习(hdu1011+hdu1061)
hdu1011 和 hdu1561类似,给定每个节点的花费以及价值,并且子节点必须在父亲节点取到以后才可以被取到 相当于是在树上进行的01背包 dp时考虑每一个子树 root和它的每一个儿子,状态转移 ...
- SWFLoader交互
主应用程序: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx=& ...
- [原创作品]观察者模式在Web App的应用
(转载请注明:http://zhutty.cnblogs.com, 交流请加群:164858883) 在软件工程中,有一条重要的原则就是:高内聚低耦合.这是评定软件的设计好坏的一个标准.所谓高内聚,指 ...
- HDU4662+无
把目标中的 U 转化为 I. 又因为 I的个数是有规律的:1 2 4 8 16 ...再结合可以取消 6 12 18 ...个I...得解 #include<string.h> #incl ...
- Android TextView属性
android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接.可选值(none/web/email/phone/map/all)android:a ...
- python字符串连接方式(转)
在python中有很多字符串连接方式,今天就在这里具体总结一下: ①.最原始的字符串连接方式:str1 + str2②.python 新字符串连接语法:str1, str2③.奇怪的字符串方式:str ...
- 理解prototype、proto和constructor的三角关系
javascript里的关系又多又乱.作用域链是一种单向的链式关系,还算简单清晰:this机制的调用关系,稍微有些复杂:而关于原型,则是prototype.proto和constructor的三角关系 ...
- document.documentElement和document.body区别
body是DOM对象里的body子节点,即body标签, documentElement 是整个节点树的根节点root, 详细介绍请看本文,感兴趣的朋友可以参考下 区别: body是DOM对象里的 ...