U盾原理研究

(这篇文章写于2010年,部分概念现在不适用)


最近工行搞活动,领了个U盾回来。这样先进的东西如果只是用于网上银行未免有些浪费,于是有了下面的研究:

U盾的底层驱动比较混乱。早期产品是模拟成智能卡,后来各厂家的实现就五花八门千奇百怪。但无论如何奇怪,调用界面都是相同的:都是利用了windows的CryptoAPI。具体来说,厂家把usbkey的功能以CSP的形式提供,再由上层调用。这样通过网页上的脚本就可以操作usbkey,也就是像网上银行那样。

说到CryptoAPI,就又引入了一些新名词。比如上面说的CSP,中文名是加密服务提供者。windows通过标准的接口调用CSP(比如加密、解密、签名),至于具体的操作由CSP自行完成。说到加密,自然涉及到密钥。对于usbkey来说,密钥(密钥容器)储存在usbkey里。加密时把需要加密的数据传入usbkey,再把加密的结果取出,密钥本身是不可能被读出的。这也是U盾安全性的基础。

不过工行宣传时不会提到密钥,而是用了另一个概念:证书。所谓证书,其实是密钥的公钥部分加上其它的附加信息(公钥私钥的概念请自行google)。证书本身是公开的,真正需要保密的是私钥。

回头再说CryptoAPI。这个东西虽然是标准接口,但对于日常应用还是显得复杂。因此实际使用时在上面再加一层包装。这层包装,在xp上叫xenroll,在vista/win7上叫certenroll。这样就可以通过网页脚本访问usbkey了。理论上无论何种usbkey都可以通过同样的界面操作,不过国内的厂商不喜欢这样,于是又各显神通。比如工行用的是一家名叫infosec的公司,反正能叫这样名字的公司来历都不简单......

基本就是这样,剩下的就是技术细节了。本来想做个管理usbkey的软件,结果不出预料的烂尾了。下面把半成品和源代码放上来,有兴趣的自己研究吧。

最后提醒一句:操作u盾有风险,责任自负,反正我为了这个程序已经跑了好几次银行了。


下载地址:点击打开链接



你可能感兴趣的:(旧档搬运)