作者:王永龙
前言:
我在USB Key行业待了有6年之久。从最初的高级程序员到软件架构师,再到UKey产品研发的软件项目经理,最后到UKey产品部门的研发经理,管理UKey研发的方方面面,包括软件、硬件、COS、中间件以及测试、甚至各项资质的获取等等工作。其间还部分参与了国家密码管理局的一些标准的制定工作、CFCA的预置证接口设计工作。为了将这些个人经验更好的与大家分享,我会陆续的撰写一些USB Key方面的技术文章。我将之命名为《略说USB Key》。其中,我将分享USB Key的里里外外,设计、分析,测试等等一些粗略的经验。如果您对之有兴趣,欢迎与我沟通讨论。
一、概述
USB Key(以下简称UKey)是一种以USB为接口标准的硬件设备。该设备内置可信计算模块(或芯片,简称TCM),具备密码运算功能,有一定容量的私密存储空间,可以保证存储在该区域的数据不被读出。
UKey内置对称和非对称算法,这些算法及其运算功能是UKey的核心功能。由于具备对称和非对称算法,所以UKey具备了数据加解密的功能。在CA的支持下,UKey还具有网络身份认证的功能。
CA是Certificate Authority的简称,它是一类组织机构。CA的功能用于颁发和管理证书。这里所指的证书,并非我们通常意义上的证明个人所获技能学历的哪些证书,这里的证书更像是用来证明某人的真实身份。真实身份的意思是某人与某证书存在绑定关系,在法律上,这个绑定关系具备法律效率。
为了赋予CA以及CA所颁发的证书能在现实生活中有效通行,中国乃至大部分世界上的国家和地区,都先后出台了一些法律,对CA及其颁发的证书赋予法律效率。在中国,类似的法律为《中华人民共和国电子签名法》(《中华人民共和国电子签名法》已由中华人民共和国第十届全国人民代表大会常务委员会第十一次会议于2004年8月28日通过,自2005年4月1日起施行)。所以当我们在网络上使用UKey进行网络身份认证的时候,你所执行的操作是具备法律效率的。
我们通常使用UKey的情形,一般是在进行网络支付,好像UKey就是为了支付而使用的,而实际情形是你使用UKey里面的个人证书在网络上完成了一个数字签名,并且您通过网络将该数字签名的数据发送到银行的服务器,一旦银行对你的数字签名验证通过了,银行就将你账户中的指定的金额转账到指定的某账户中去。这个操作是具备法律效率的。而且,每一次的数字签名的原文中应该包含有你该次转账所指定的金额和账户信息。
UKey还有一个很重要的功能,就是数据的加、解密。而实际上,身份认证、数字签名等等貌似高深的术语的背后,其实际的行为也是UKey针对某个数据的加密或者解密操作。这不是一般的加解密,它不是像我们过去在小说上所看到的填字游戏、或者字母的按照某种规律的置换。这里的加解密,具备了高等的数论基础。一方面,加解密的算法完全可以公开,另一方面,加解密在现有的条件下又不可破解。
UKey在使用的时候,我们需要在电脑上安装一些软件,有些企业将这些软件称之为“中间件”。我们也可以简单的称之为上层接口软件。有时候中间件的描述让人混乱,但实际上,确实安装了一些“中间件”。中间件,顾名思义,就像一个桥梁一样,连接了上层应用软件和下层核心部件,它的位置在中间,但在中间的也不是都叫做中间件,所以能叫做中间件的,必然也必须遵循某种标准。
就像我们现在造桥,现代设计桥的时候,为了修建的方便,设计师会把桥分成一段一段的,它们首尾相连,具备统一的接口标准。这样,我们可以在混凝土预制厂将这些分段先浇筑完成,然后统一运送到造桥的现场进行吊装施工。我们的中间件就类似于这些分段,不管在哪个混凝土预制厂进行浇筑,它都必须具备统一的接口,这样,不管是造哪里的桥梁它都能一次性装配成功。
目前中间件所遵循的标准,分为国内标准和国外标准。只要是实现了这些标准的中间件,上层软件通过简单的配置或者无需配置就能一次调用成功。目前国外的标准为RSA公司的PKCS#11(PKCS:The Public-Key Cryptography Standards )接口标准以及微软公司的CSP(CSP:Cryptography Service Provider)接口标准。相对于PKCS标准,CSP标准的网上资料更少,而实际上,在国内,CSP几乎是网上银行唯一的标准。因为我们都使用的是Windows操作系统嘛!所以,你懂的。国内的接口一般由国家密码管理局进行制定。这里略述了。关于中间件的设计我会在后面的“中间件设计”一节中详细讲述。
在UKey诞生之前,我们使用什么来做身份认证和加解密操作呢?答案是智能卡。USB的接口标准诞生于1994年,而智能卡的诞生早于它二、三十年。智能卡在使用的时候,需要借助一个读卡器的设备。因此在Windows早期的版本中,它制定了一些智能卡设备的驱动接口标准,称之为SmartCard标准,业界通常写作PC/SC,含义是PC上的智能卡标准。时至今日,智能卡设备还依然是Windows进行域登录的外部身份认证的唯一支持设备。除非你修改Windows的登录模块,否则你想在域登录中使用外部的身份认证,你就得插入一个智能卡设备。智能卡的设备驱动的接口标准在几年前已经进行了升级,目前比较流行的是CCID接口标准(CCID:Chip/Smart Card Interface Devices )。
智能卡的实现包含了物理的,电气的,接口的等等诸多标准,不包括非接触的智能卡部分,这些标准可以统称为ISO7816标准。在UKey设计的时候,我不清楚是什么原因,也许是历史造成的,也许是技术的一脉相承所造成的,在设计UKey的硬件读写接口的时候,我们(或者绝大部分制造厂家)都无一例外的使用了ISO7816的标准,具体说来,是使用了ISO7816-4的接口标准,当然,为了适应UKey的特点,在实际研发的时候,会对ISO7816-4的标准进行适当的扩充。这部分内容我会在后面的COS设计一节中详细讲述。