本文一些内容纯属YY,如有雷同,乃是人品爆发。
好了,各位同学,现在我们已经知道黑客无所不在,无所不用其极,目标就是我们网上银行的存款,或者信用卡里的额度。前文《谈谈网银和USB Key (三)》已经简要描述了目前的USB Key的潜在不安全因素,现在我们就来看看如何应对。
关于键盘木马,有一些“软”的方法可以在一定程度上进行遏止。例如“软键盘”,就是不再让用户通过键盘来输入USB Key的个人识别码(PIN码),而是在屏幕上显示一个虚拟键盘,用户需要通过鼠标点击虚拟按键来输入PIN码。事实上不仅仅是USB Key的PIN码输入采用这种方式,一些网银在不使用USB Key的,但是又需要更高级别安全性的一些地方,也采用“页面虚拟键盘”的方式,例如建行网银的登录页面就是这样的设计。还有一些USB Key的提供商也在键盘驱动上做文章:黑客不是想截取我的输入吗?好,我让你截个够!当进入PIN码输入状态的时候,底层键盘过滤驱动就自动产生无数的按键信息发送给上层软件,將真正的用户输入淹没在极大量的随机击键事件中,让键盘木马难以得知哪些是真的用户输入,哪些是假的。当然,上层软件知道其中的猫腻,可以从杂乱的数据中滤出真正的用户输入。
然而,这些方法都是治标不治本的,因为要完成持有者身份验证,就要將PIN码发送给USB Key,这PIN码总归会出现在电脑的内存中,这些方法只能够在一定程度上增加黑客破解的难度而已。
好了,我们不说这些小儿科的应对方法了,要真正提高USB Key的安全程度,就需要从USB Key的硬件使用方式上入手。
阅读这篇日志的剩余部分 »
因为种种原因,需要在公司的外网服务器上架构一个CA(证书认证中心)服务,于是乎,开始找免费开源的CA系统。找来找去,找到两个用得比较广泛的开源CA,一个是OpenCA,一个是EJBCA。前者是使用Perl开发的,后者,顾名思义,是Java开发的。
服务器是FreeBSD 7.0,先上的是OpenCA,是因为不想在服务器上装太多的东西,Perl是必装的,所以第一选择就是基于Perl的OpenCA了。使用FreeBSD的Ports方式安装,结果装的过程中发现有太多依赖的库,虽然这些依赖的库都会自动下载并安装,但是心里已经感觉不爽了。接下来的配置让人头疼不已,花了三天时间也没有搞定。
一怒之下,决定把OpenCA打入冷宫。上EJBCA吧,又是一大堆的东西要装,Java运行环境啦,tomcat啦,等等等等。让人郁闷的是要用到一些Java的加密函数库,还必须手工到sun的网站下一堆额外的东西,心里又是不爽起来。结果发现EJBCA的配置更是让人崩溃,近一个星期下来,一事无成。
我靠,装这两个东西,把我精心打造的服务器搞得乱七八糟。于是决定,自己开发一个CA。套一句话说:我是程序员我怕谁~~~
注:本文涉及USB Key高级安全特性,供有一定网银使用经验及基本网络知识的同学阅读。
前面[谈谈网银和USB Key (二)]已经谈到,有了USB Key,我们的网银就“基本安全”了,那么,使用了USB Key还会有什么安全性的隐患,我们又该如何应对呢?
在进一步阅读之前,请先明确一个事实:一切安全性都是相对的。越是安全的系统,对用户的要求就越高,使用起来就越繁琐。我们只能在安全性与易用性之间找一个平衡点,而这个平衡点也会随着技术的发展朝不同的方向偏移。
在“谈谈网银和USB Key (一)”中我们已经了解了公开密钥体系的作用:数据加密、防止抵赖、防止篡改。但是这一切的前提就是保证私钥的安全。
绝对不要泄露你的私钥。否则的话,黑客可以:
- 偷看你给美眉写的肉麻情书;
- 冒充你的身份给老板发邮件,然后你被叫到老板办公室谈心;
- 在网上购物,花的却是你的血汗钱;
等等等等,啊呀,实在是太糟糕了。
写下这个题目,一时间又不知道从何说起了。事实上,对于网银和USB Key,有些东西不吐不快,特别是有时在网上的一些论坛里看到有人“分析/评论”使用USB Key的网银的安全性时,对于一些“不懂装懂”的行为,有一种莫名的悲哀感。于是乎写下此文,希望能够起到一点科普的作用。
基础知识
我们常见的加密,使用的是“对称加密算法”,也就是说,用一个密码加密的东东,同样可以用这个密码来解密。我们称这样的加密算法为“对称加密算法”,用于对称加密算法中的密码,我们称之为“对称密钥”。一旦别人知道了你的密钥,那么他就可以任意的解密你的秘密数据了。这样的算法很多,常见的有DES,3DES,AES,Blowfish等等。
使用USB Key来保证网银的安全,实际上是利用了PKI(公开密钥体系)技术中的数字证书应用,而PKI技术中至关重要的一点就是“保证私钥的安全”。为了理解所谓的“保证私钥的安全”,我们先举一个简单的例子:假定有这样一种计算方法,可以将一篇文章用一个密钥A加密,要想解密的话,必须用另一个密钥B来解密,反过来也一样,用密钥B加密之后得到的密文只能用密钥A来解密。这里的密钥A和密钥B一定是成对出现的,一一对应,绝对不会出现用密钥A加密的东西可以用密钥C、密钥D…等等来解密。这样的算法我们称之为“非对称加密算法”,相对应的,这里的密钥A和密钥B我们称之为“密钥对”,因为它们是成对出现的。密钥对中的一部分可以随意公开,例如其中的密钥A,我们称之为“公开密钥”,简称公钥。而另外一半是自己持有的,需要保密,我们称之为“私有密钥”,简称私钥。所谓“公开密钥体系”,就是指这里的公钥了。我们常听到的RSA,就是这样一种算法。此外还有DSA、ECC(椭圆曲线算法)等等。
使用公开密钥体系,不仅仅可以用来对数据加密,还可以用来确定身份。试想一下:你有一对密钥对(A和B),其中A是公钥,被放在网上,任何人都可以取得。现在有人(比如张三)想给你发送一份邮件,于是张三在网上找到你的公钥,然后将邮件用你的公钥加密并传送给你。那么,只要你的私钥没有泄露出去,就只有你能够解密这封邮件(使用和A相对应的私钥B来解密)。即使邮件在网络上传输的过程中被黑客获取了,没有私钥B,他也无可奈何。这就意味着,使用公开密钥技术,可以保证只有指定的人(其实就是指定的私钥啦)才可以阅读私密信息。
![Apex[有所思,有所志]](http://apex.ncksoft.com/wp-content/themes/deepwater/images/dw_site_logo.png)