CPU卡知识入门教程——第七章 CPU卡安全篇
问题的引出:
假如说你现在手中有6份重要文件
1、房契
2、银行存折
3、毕业证书
4、户口本
5、某某人欠你的100万块钱的欠条(呵呵,假装你有这么多钱,你是百万富翁并且很慷慨,一个好人)
6、结婚证(这个好像已婚人士才有)
这些对我们来说都是比较重要的东东,一定要妥善的安全的保存啊!你可以这么保存:
方法1:
把这些文件锁在六个保险柜里,一个柜子放一个文件
方法2:
把六个文件全部锁在一个保险柜里
方法3:
把六个文件锁在n个保险柜里,这个n比6小又比1大
方法4:
把文件放在一个小保险柜里,把小保险柜放进大保险柜里,或者你觉得很好玩的话,再把大保险柜放进大大保险柜里,如此一个保险柜再套另一个保险柜,只要你有钱、只要你还想套、我不反对。
在CPU卡中的文件的存放也会存在这些问题,比如说你有6个文件,你想存放在CPU卡的某个应用中。
考虑到安全问题,CPU卡的文件安全及访问机制是由通过认证来实现的(如认证密钥、认证PIN,)
我们现在以认证是通过密钥的认证来说明:
方法1:
6个文件用6个密钥来保护,每个文件对应一个密钥
方法2:
6个文件只用一个密钥来保护
方法3:
6个文件进行归类,用n个密钥保护,这个n比6小又比1大
方法4:
文件用密钥套密钥保护。
比如说文件1用密钥1保护、密钥1的使用又必须通过密钥2的认证。或者下面还更复杂密钥2的使用必须通过密钥
3的认证。
你可以把密钥想象成保险柜的钥匙,小保险柜的钥匙必须在大保险柜的控制下使用。(意思就是:小保险柜的钥
匙必须在大保险柜的钥匙打开了大保险柜之后才能起作用,这话好像有些拗口,跟绕口令试的,呵呵)
其实一般的保险柜都要密码的,也就是说保险柜的钥匙要和密码配套使用,两者缺一不可,好像看起来这样做
会更保险一点,事实上也是。至于是先开钥匙后输入密码还是先输入密码再开钥匙,这主要看保险柜的设计。
在CPU卡中可以实现,CPU卡可以用用户密码加上卡上密钥的方法实现。可以设计成两种模式:
方式1、在密钥认证成功后,密码才可以使用。
方式2、在密码的验证成功后,密钥才可以被使用。
这必须按顺序来,如方式一,你要是想先验证密码,对不起,卡片会给你一个提示:安全状态不满足。
这时候,你必须做的工作是,现对密钥进行认证,密钥认证成功后,再验证密码就不会提示安全状态不满足了
。
以上机制好像听起来比较复杂,但其实也并不复杂。(谈何容易,或许你会这么说)
在卡片中,现在比较流行的并且实现起来也挺简单的的方法:状态机机制
一个CPU卡文件的安全认证设计,涉及到3方面的状态:
1、系统当前的安全状态
2、对文件操作必须满足的状态
3、密钥的状态
我们再以保险柜为例:
比如说我们想查看保险柜的那张100万欠条的内容。
1、对应的系统的当前状态:保险柜关闭状态
2、对文件操作必须满足状态:保险柜打开状态
怎么使系统的的当前状态:保险柜关闭状态 变成对文件操作必须满足状态:保险柜打开状态呢?
我们使用保险柜的钥匙来打开保险柜。
3、使用钥匙后的后续状态:保险柜打开状态
这样我们实现了对文件的操作。
在CPU卡中,状态可以用一个数字来表示:比如说0
我们定义:
1、系统缺省的当前安全状态:0
2、对文件操作必须满足的状态:6
3、密钥的后续状态:6
步骤:
1、直接对文件进行操作,文件比较“系统的缺省状态:0” 不等于 “对文件操作必须满足的状态:6”
提示,安全状态不满足。
2、我们对密钥进行认证,认证通过后,把“密钥的后续状态:6”赋值“系统缺省的当前安全状态”
这样“系统的缺省状态=6”
3、下面我们再对文件进行操作,文件比较“系统的当前状态:6” 等于 “对文件操作必须满足的状态:6,
可以对文件进行操作
安全状态的表示:
实际使用中一般用1个字节(16进制)来表示状态,
低4位表示安全级别下限(0-15),高4位表示安全级别上限(0-15)
假设一字节的值为:XY (0< =X <=F) (0<= Y <=F) 现在以文件的状态来说明: 假设文件的状态为: 1、0Y(如:01,02,03,04....),表示对文件的访问无安全限制(即这个文件随便都可以访问) 2、如果X>Y (如:10, 32, 85等),表示这个文件被禁止访问
3、如果X<=Y (如:13,11,33,38),表示对文件进行访问前,必须满足文件的访问权限。 比如说文件的访问权限是:13,现在的权限必须是1、2或者是3才可以访问文件 比如说文件的访问权限是:38,现在的权限必须是3到8的值才可以访问文件 比如说文件的访问权限是:33,现在的权限必须是3才可以访问文件 系统一般都会规定一个缺省的权限:比如说0