数字证书的产生、分发和存储
首先,让我们来回顾一下数字证书产生和分发的简要过程。一个网上用户怎样才能得到一张数字证书呢?
CA将证书分发给用户的途径有多种。
第一种途径是带外分发(Out-of-band Distribution),即离线方式。密钥对是由软件运营商代替客户生成,证书也是由运营商代替客户从CA下载,然后把私钥和下载的证书一起储存在U盘里,再交给用户的。这样做的好处是免去了用户上网下载证书的麻烦。
第二种途径是带内分发(In-band distribution),即用户从网上下载数字证书到自己的电脑中。下载时,用户要向CA出示“参考号”和“授权码”,以向CA证明自己的身份。这样做成本较低,但对使用计算机不太熟悉的用户来说,可能在下载时会碰到一些麻烦。除了以上两种方式外,CA还把证书集中放置在公共的数据库中公布,用户可以随用随查询随调用。
数字证书和私钥储存的介质有多种,可以存储在计算机硬盘、软盘、智能卡或USB key里。现在最火的移动金融盾就把证书存储在手机中的SE芯片中。
需要注意的几个概念
一、关于私钥的唯一性
严格地讲,私钥既然是世上唯一且只由主体本身持有,它就必须由主体的计算机程序来生成。因为如果在别处生成将会有被拷贝的机会。然而在实际应用上并非如此,出于某些特殊需要(例如,如果只有一份私钥,单位的加密文件就会因为离职员工带走私钥而无法解密。)加密用的公/私钥对会要求在可信的第三方储存其备份。这样,加密用的私钥可能并不唯一。然而签名用的私钥则必须保持唯一,否则就无法保证被签名信息的不可否认性。
在生成用户的密钥对时,用于加密的公/私钥对可以由CA、RA产生,也可以在用户终端的机器上用专用的程序(如浏览器程序或认证软件)来产生。用于数字签名的密钥对原则上只能由用户终端的程序自行产生,才能保证私钥信息的私密性以及通信信息的不可否认性。
有人可能会产生疑问:如果加密和签名的密钥对都是由软件运营商代替客户生成的,这是否破坏了上述的私钥唯一性原则呢?答案是否定的。这时候,私钥的唯一性要依靠法律合同的保证以及操作过程中相应制度的约束,使得不可否认性得到支持。出于这种机制,我们仍然可以认为,用户的签名私钥是唯一的。
二、证书,私钥,到底保护哪一个?
我们常常听到有人说:“保管好你的软盘,保管好你的KEY,不要让别人盗用你的证书。”有些教科书上也这样讲。应该说,这句话是有毛病的。数字证书可以在网上公开,并不怕别人盗用和篡改。因为证书的盗用者在没有掌握相应的私钥的情况下,盗用别人的证书既不能完成加密通信,又不能实现数字签名,没有任何实际用处。而且,由于有CA对证书内容进行了数字签名,在网上公开的证书也不怕黑客篡改。我们说,更该得到保护的是储存在介质中的私钥。如果黑客同时盗走了证书和私钥,危险就会降临。
为什么说USB key安全性好
不同的存储介质,安全性是不同的。如果证书和私钥储存在计算机的硬盘里,计算机一旦受到黑客攻击,(例如被埋置了木马程序)证书和私钥就可能被盗用。
使用软盘或存储型IC卡来保存证书和私钥,安全性要比硬盘好一些,因为这两种介质仅仅在使用时才与电脑相连,用完后即被拔下,证书和私钥被窃取的可能性有所降低。但是黑客还是有机会,由于软盘和存储型IC卡不具备计算能力,在进行加密运算时,用户的私钥必须被调出软盘或IC卡进入外部的电脑,在这个过程中就会造成一定的安全隐患。
使用智能卡(含CPU的IC卡)储存数字证书和私钥是更为安全的方式。为什么这样说呢?原来智能卡具有一定的计算机的功能,芯片中的CPU就是一台小小的计算机。
产生公私密钥对的程序(指令集)是智能卡生产者烧制在芯片中的ROM中的,密码算法程序也是烧制在ROM中。公私密钥对在智能卡中生成后,公钥可以导出到卡外,而私钥则存储于芯片中的密钥区,不允许外部访问。
智能卡中密钥文件存储在E2PROM之中。对密钥文件的读写和修改都必须由卡内的程序调用。从卡接口的外面,没有任何一条命令能够对密钥区的内容进行读出、修改、更新和删除。除非设计和编写卡操作系统(COS)的人自己在COS上留了后门,只有他才知道如何从外部调出密钥区的内容。但我们可以排除黑客与COS设计者相勾结的这种几率极小的可能性。
目前华为与徽商银行的手机盾以及华为与建行的手机盾产品,都是将证书存储在inSE中。TEE+SE技术使得手机盾产品得以实现。
在加密和签名的运算过程中,外部计算机中的应用软件使用智能卡API调用的方式,输入参数、数据和命令,启动智能卡内部的数字签名运算、密码运算等,并获得返回结果。由于智能卡内部的CPU可以完成这些操作,全过程中私钥可以不出智能卡介质,黑客的攻击程序没有机会去截获私钥,因此这就比证书和私钥放在软盘或硬盘上要安全得多。
从物理上讲,对智能卡芯片中的内容作整体拷贝也是几乎不可能的。从智能卡芯片在操作过程中发生的微弱的电磁场变化,或者I/O口上反映出的微弱的电平变化中分析出芯片中的代码。但现在国际上对智能卡生产商的技术要求很高,要求上述的指标要低到不能够被测出来。国际上能够生产智能卡的公司只有少数几家,他们都采用了种种安全措施,确保智能卡内部的数据不能用物理方法从外部拷贝。
USB Key和智能卡除了I/O物理接口不一样以外,内部结构和技术是完全一样的,其安全性也一样。只不过智能卡需要通过读卡器接到电脑的串行接口上,而USB Key通过电脑的通用串行总线(USB)接口直接与电脑相接。另外,USB接口的通信速度要远远高于串行接口的通信速度。现在出品的电脑已经把USB接口作为标准配置,而使用智能卡则需要加配读卡器。出于以上原因,各家CA都把USB Key作为首选的证书和私钥存储介质而加以推广。
仍需注意的问题
这里需要指出的是,有些号称智能卡的产品实际上只是不含CPU的存储型IC卡,它仅仅具有存储功能。上文已经介绍过,存储型IC卡的安全性与软盘相仿,对于这两种不同类型的IC卡,用户需要甄别清楚。
第二个问题是,尽管智能卡在设计和生产过程中,对安全机制给以了充分的考虑和保证,然而,由于人为因素,也可能带来安全隐患。例如智能卡上提供一个闪存(flash)随机存储区域,是供写入一般用户数据或增加卡片功能的程序之用的。敏感的数据和程序不允许写在闪存区,必须写在安全存储区。制作智能卡时,安全区要通过硬件方法做掩模处理。硬件的掩模处理费工费时成本高,一般需要3个月。有些卡商为了降低成本缩短工期迎合客户要求,将应该放在安全区中的敏感数据和程序放在闪存区中,闪存区里的内容是可以从卡片外部进行读写的,这就造成了可能被黑客侵入的安全隐患。这就要求我们对合作的IC卡厂商的工艺流程也要仔细审查。
另外,为了防止USB key 不慎丢失而可能被他人盗用,不少证书应用系统在使用过程中还设置了口令认证机制。如口令输入得不对,即使掌握了USB key,也不能登录进入应用系统。这种双因素认证机制可以使USB key更加安全可靠,值得提倡。
我们认为,手机盾这种产品形式将进一步丰富各种盾,同时给各种盾带来丰富的应用,从金融行业到各种各样的安全认证需求的行业中。