<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Apex[有所思,有所志] &#187; USB Key</title>
	<atom:link href="http://apex.ncksoft.com/archives/tag/usb-key/feed" rel="self" type="application/rss+xml" />
	<link>http://apex.ncksoft.com</link>
	<description>日有所思，夜有所志</description>
	<lastBuildDate>Sat, 06 Feb 2010 18:12:04 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>谈谈网银和USB Key (五)</title>
		<link>http://apex.ncksoft.com/archives/273</link>
		<comments>http://apex.ncksoft.com/archives/273#comments</comments>
		<pubDate>Sat, 27 Jun 2009 18:56:04 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[网银]]></category>
		<category><![CDATA[USB Key]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=273</guid>
		<description><![CDATA[好久没有写日志了，倒不是这段时间没有所思，而是思得太多，做的也更多，也就没有时间写了。好了，言归正传，下面我们接着说说《谈谈网银和USB Key (四)》中最后提到的“带确定按键的USB Key仍然不够安全”的原因。
是的，带确定按键的USB Key可以做到每次使用硬件内部的私有密钥时都是持有者明确授权的（即持有者做了按下确认键的操作），但是不要忘记，你能保证被签名的数据就一定是你想要签名的数据吗？这句话听起来有点绕口，那么我们来举一个例子：
特别注明：本文中所提到的商家、银行、地点、人物等均为举例方便而用，没有任何明确或隐含的意义。如有雷同，那一定是你踩到狗屎了~~~

假如你正在淘宝上买东西，购物车里塞满了满意的商品，终于，你决定购买了，于是开始下订单，但是发现你的淘宝账户上余额不足。这是个小问题，因为我们可以立即使用网上银行转账到淘宝账户上。OK，你来到支付宝，选择已经开通了网上银行功能的银行，然后点击“现在就转账”，终于进入了网上银行转账的页面。
&#8230;&#8230;其实，以上都是废话，因为我们不过是要提到网银转账的页面而已。不过，这可是我使用淘宝的真实流程哦&#8230;&#8230;
在网银的转账页面上，一般需要提供三个信息：你的账户、对方账户以及转账金额。其中，你的账户是你在登陆网银时就隐含提供了，对方账户则需要你填写（如果是向淘宝这样的商家转账，网上支付系统会自动填写），转账金额也要你填写（当然，如果是向一些商家转账，网上支付系统也会自动填写）。现在你小心翼翼的填好了所有的内容，并仔细的检查了三遍，一切无误，可以转账了。于是你点下“转账”按钮，网页上提示：请按USB Key的确认键以继续转账操作。当然，因为一切无误，所以你按下了确认键，然后系统提示你：转账已成功！
好了，现在回到淘宝网站，下单吧~~~ :)  等等，为什么淘宝还是提示你余额不足？！无奈之下你只好给银行客服人员打电话，在核对了你的身份之后，你终于等来了一个噩耗，客服MM用甜美的声音告诉你：对不起，我们的系统记录显示，您刚才确实有一次网上交易的操作，不过对方账号的开户行位于广州，是由一位名为“贺爱客”的先生持有的私人账号。[题外话：招商银行信用卡部的客服MM服务真的是一流，业务熟练，声音甜美，而民生银行方面就稍微逊色一些，一个小问题也要等她跟技术方面确认才能回答，希望这只是个例]
“贺爱客”？！鬼知道这是个什么人物，怎么你的钱就转给他了呢？现在你的脑袋里一片空白~~~~
&#8230;&#8230;好了，不用空白了，让我来告诉你发生了什么事吧！通过远程注入、恶意浏览器插件、函数挂钩等诸多手段，你所填写的数据在准备送给USB Key进行数字签名之前的刹那，被修改了！对方账户不再是淘宝，而是“贺爱客”。然而USB Key本身并无法得知你要给谁转账，它只能机械的等待你确认，然后对传入的数据进行签名。从电脑屏幕上来看，数据一切正常，但是到了USB Key内部，就已经大不一样了。这正是三十六计之中的“偷梁换柱”。咳~~咳咳~~~不要把老祖宗留下来的好东西拿来干坏事啊！
偷梁换柱并不是什么困难的事情，最简单的就是使用浏览器插件。尤其是对于IE这种“公共厕所”级别的浏览器，随便谁都可以过来插一脚。曾经有朋友向我抱怨电脑上网越来越慢了，我检查了一下他的系统，发现IE中加载了几十个插件：三个工具栏插件、十几个用于网上看电影的插件、两个网银用到的插件、四个下载加速插件、PDF阅读插件、金山词霸插件、还有七八个不知道是什么东西的插件。我问他为什么装这么多插件，他还一头雾水的问我，插件是虾米东东？？
难道说，在这样一个饿狼环伺，危险重重的恶劣网络环境下，我们就无法安全的使用网上银行，享受足不出户就能指点天下的便捷吗？
请听下回分解&#8230;
]]></description>
			<content:encoded><![CDATA[<p>好久没有写日志了，倒不是这段时间没有所思，而是思得太多，做的也更多，也就没有时间写了。好了，言归正传，下面我们接着说说<a href="http://apex.ncksoft.com/archives/162">《谈谈网银和USB Key (四)》</a>中最后提到的“带确定按键的USB Key仍然不够安全”的原因。</p>
<p>是的，带确定按键的USB Key可以做到每次使用硬件内部的私有密钥时都是持有者明确授权的（即持有者做了按下确认键的操作），但是不要忘记，你能保证被签名的数据就一定是你想要签名的数据吗？这句话听起来有点绕口，那么我们来举一个例子：</p>
<p><strong>特别注明：</strong>本文中所提到的商家、银行、地点、人物等均为举例方便而用，没有任何明确或隐含的意义。如有雷同，那一定是你踩到狗屎了~~~<br />
<span id="more-273"></span><br />
假如你正在淘宝上买东西，购物车里塞满了满意的商品，终于，你决定购买了，于是开始下订单，但是发现你的淘宝账户上余额不足。这是个小问题，因为我们可以立即使用网上银行转账到淘宝账户上。OK，你来到支付宝，选择已经开通了网上银行功能的银行，然后点击“现在就转账”，终于进入了网上银行转账的页面。</p>
<p>&#8230;&#8230;其实，以上都是废话，因为我们不过是要提到网银转账的页面而已。不过，这可是我使用淘宝的真实流程哦&#8230;&#8230;</p>
<p>在网银的转账页面上，一般需要提供三个信息：你的账户、对方账户以及转账金额。其中，你的账户是你在登陆网银时就隐含提供了，对方账户则需要你填写（如果是向淘宝这样的商家转账，网上支付系统会自动填写），转账金额也要你填写（当然，如果是向一些商家转账，网上支付系统也会自动填写）。现在你小心翼翼的填好了所有的内容，并仔细的检查了三遍，一切无误，可以转账了。于是你点下“转账”按钮，网页上提示：请按USB Key的确认键以继续转账操作。当然，因为一切无误，所以你按下了确认键，然后系统提示你：转账已成功！</p>
<p>好了，现在回到淘宝网站，下单吧~~~ :)  等等，为什么淘宝还是提示你余额不足？！无奈之下你只好给银行客服人员打电话，在核对了你的身份之后，你终于等来了一个噩耗，客服MM用甜美的声音告诉你：对不起，我们的系统记录显示，您刚才确实有一次网上交易的操作，不过对方账号的开户行位于广州，是由一位名为“贺爱客”的先生持有的私人账号。[题外话：招商银行信用卡部的客服MM服务真的是一流，业务熟练，声音甜美，而民生银行方面就稍微逊色一些，一个小问题也要等她跟技术方面确认才能回答，希望这只是个例]</p>
<p>“贺爱客”？！鬼知道这是个什么人物，怎么你的钱就转给他了呢？现在你的脑袋里一片空白~~~~</p>
<p>&#8230;&#8230;好了，不用空白了，让我来告诉你发生了什么事吧！通过远程注入、恶意浏览器插件、函数挂钩等诸多手段，你所填写的数据在准备送给USB Key进行数字签名之前的刹那，被修改了！对方账户不再是淘宝，而是“贺爱客”。然而USB Key本身并无法得知你要给谁转账，它只能机械的等待你确认，然后对传入的数据进行签名。从电脑屏幕上来看，数据一切正常，但是到了USB Key内部，就已经大不一样了。这正是三十六计之中的“<strong>偷梁换柱</strong>”。咳~~咳咳~~~不要把老祖宗留下来的好东西拿来干坏事啊！</p>
<p>偷梁换柱并不是什么困难的事情，最简单的就是使用浏览器插件。尤其是对于IE这种“公共厕所”级别的浏览器，随便谁都可以过来插一脚。曾经有朋友向我抱怨电脑上网越来越慢了，我检查了一下他的系统，发现IE中加载了几十个插件：三个工具栏插件、十几个用于网上看电影的插件、两个网银用到的插件、四个下载加速插件、PDF阅读插件、金山词霸插件、还有七八个不知道是什么东西的插件。我问他为什么装这么多插件，他还一头雾水的问我，插件是虾米东东？？</p>
<p>难道说，在这样一个饿狼环伺，危险重重的恶劣网络环境下，我们就无法安全的使用网上银行，享受足不出户就能指点天下的便捷吗？</p>
<p>请听下回分解&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/273/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>谈谈网银和USB Key (四)</title>
		<link>http://apex.ncksoft.com/archives/162</link>
		<comments>http://apex.ncksoft.com/archives/162#comments</comments>
		<pubDate>Fri, 18 Jul 2008 17:31:08 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[网银]]></category>
		<category><![CDATA[USB Key]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=162</guid>
		<description><![CDATA[本文一些内容纯属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的硬件使用方式上入手。

对付键盘木马这种攻击方式，根本的解决方法就是根本不用输入PIN码。嗯，不输入PIN码，那么USB Key怎么知道我就是合法持有者呢？别着急，我们有生物识别技术啊，说白了，最常见的就是指纹识别了。在USB Key上集成一块指纹扫描装置，当需要验证持有者身份的时候，就刷一下指纹，OK，验证通过，可以转帐了，这比记一个USB Key的PIN码还方便，不是吗。而且，指纹的扫描、特征比对都是在USB Key内部完成，根本不与电脑发生任何关系，这就让黑客无计可施了。这样的“指纹USB Key”已经出现在市场上了，北京农村商业银行的“金凤凰网银”就采用了这样的指纹USB Key。
不过并非只要是指纹USB Key就一定安全，如果USB Key上的指纹扫描与识别没有很好的有机结合的话，其中仍然是有漏洞的，例如，如果把指纹扫描的数据传回电脑，由电脑进行指纹特征信息的比对，或者再由电脑將扫描的数据或者特征信息送回USB Key进行处理，黑客就有可能截取到指纹扫描得到的数据，进行“数据重放式攻击”。所以，安全的USB Key一定是由USB Key自己完成整个指纹扫描、特征值提取与比对的全过程的。
然而，指纹USB Key也有其缺点，就是技术含量高，但是成本也高。就目前为止，国内唯一一家能够提供指纹USB Key的厂商是北京飞天诚信科技有限公司。要想指纹USB Key能够广泛的应用起来，还需要时间。
那么，將键盘和USB Key结合起来，使得PIN码不用通过电脑传到USB Key，不也一样安全吗？是的，带键盘输入的USB Key也比较安全，但是请低头看看你的键盘右侧的数字键区域，只是加入0~9这几个数字键，就需要增加不少的体积，这对于需要满足“随身携带”这一特点的USB Key来说，体积实在是大了些，不够实用。不过我想，随着技术的发展，超薄键盘、折叠式键盘、投影式虚拟键盘可能会改变这一状况。嘿嘿，想想投影式虚拟键盘，有点科幻的味道，不过这一天的到来应该不远了～～～
好了，成本高不合适，体积大也不合适，既然目前没有从根本上解决问题的合适的方法，我们就换个思路吧，不要忘了，一切安全性都是相对的～～～
既然黑客总是能够通过各种手段得到USB Key的PIN码，然后在用户没有发觉的情况下完成网上交易，那么，如果我们能够在每次需要USB Key来证明自己身份的时候，需要用户手工干预一下才能完成验证过程，是不是就能够解决这个“不知不觉中”账户里的钱就不翼而飞的问题呢？事实上这样的USB Key已经出现了，国内的几家主要的USB Key厂商都纷纷推出了这种“按钮USB Key”。这种类型的USB Key比普通USB Key多了一个按键，当需要转帐的时候，就需要用户按一下按键，否则USB Key拒绝使用内置的密钥来证明你的身份(进行数字签名)，也就无法完成网上交易。有了这个按钮式USB Key，你的每一次网上交易就明明白白了：只要有网上交易，一定是有人明确的按了这个按钮，而只要这个USB Key没有丢失，那就一定是你自己干的了。即使黑客得到你的PIN码，他也无法通过网络伸手到你的电脑前按一下这个按钮吧！！
好了，按钮式USB Key，这下安全了～～～
安全了？安全了？我带上黑客的帽子，在一边得意的笑，我得儿意的笑，我得儿意的笑～～～～
欲知“按钮USB Key”为何不安全，又如何应对其安全漏洞，请关注本文连载之五。
]]></description>
			<content:encoded><![CDATA[<p><strong>本文一些内容纯属YY，如有雷同，乃是人品爆发。</strong></p>
<p>好了，各位同学，现在我们已经知道黑客无所不在，无所不用其极，目标就是我们网上银行的存款，或者信用卡里的额度。前文《<a href="http://apex.ncksoft.com/archives/160">谈谈网银和USB Key (三)</a>》已经简要描述了目前的USB Key的潜在不安全因素，现在我们就来看看如何应对。</p>
<p>关于键盘木马，有一些“软”的方法可以在一定程度上进行遏止。例如“软键盘”，就是不再让用户通过键盘来输入USB Key的个人识别码(PIN码)，而是在屏幕上显示一个虚拟键盘，用户需要通过鼠标点击虚拟按键来输入PIN码。事实上不仅仅是USB Key的PIN码输入采用这种方式，一些网银在不使用USB Key的，但是又需要更高级别安全性的一些地方，也采用“页面虚拟键盘”的方式，例如建行网银的登录页面就是这样的设计。还有一些USB Key的提供商也在键盘驱动上做文章：黑客不是想截取我的输入吗？好，我让你截个够！当进入PIN码输入状态的时候，底层键盘过滤驱动就自动产生无数的按键信息发送给上层软件，將真正的用户输入淹没在极大量的随机击键事件中，让键盘木马难以得知哪些是真的用户输入，哪些是假的。当然，上层软件知道其中的猫腻，可以从杂乱的数据中滤出真正的用户输入。</p>
<p>然而，这些方法都是治标不治本的，因为要完成持有者身份验证，就要將PIN码发送给USB Key，这PIN码总归会出现在电脑的内存中，这些方法只能够在一定程度上增加黑客破解的难度而已。</p>
<p>好了，我们不说这些小儿科的应对方法了，要真正提高USB Key的安全程度，就需要从USB Key的硬件使用方式上入手。<br />
<span id="more-162"></span></p>
<p>对付键盘木马这种攻击方式，根本的解决方法就是根本不用输入PIN码。嗯，不输入PIN码，那么USB Key怎么知道我就是合法持有者呢？别着急，我们有生物识别技术啊，说白了，最常见的就是指纹识别了。在USB Key上集成一块指纹扫描装置，当需要验证持有者身份的时候，就刷一下指纹，OK，验证通过，可以转帐了，这比记一个USB Key的PIN码还方便，不是吗。而且，指纹的扫描、特征比对都是在USB Key内部完成，根本不与电脑发生任何关系，这就让黑客无计可施了。这样的“指纹USB Key”已经出现在市场上了，北京农村商业银行的“金凤凰网银”就采用了这样的指纹USB Key。</p>
<p>不过并非只要是指纹USB Key就一定安全，如果USB Key上的指纹扫描与识别没有很好的有机结合的话，其中仍然是有漏洞的，例如，如果把指纹扫描的数据传回电脑，由电脑进行指纹特征信息的比对，或者再由电脑將扫描的数据或者特征信息送回USB Key进行处理，黑客就有可能截取到指纹扫描得到的数据，进行“数据重放式攻击”。所以，安全的USB Key一定是由USB Key自己完成整个指纹扫描、特征值提取与比对的全过程的。</p>
<p>然而，指纹USB Key也有其缺点，就是技术含量高，但是成本也高。就目前为止，国内唯一一家能够提供指纹USB Key的厂商是北京飞天诚信科技有限公司。要想指纹USB Key能够广泛的应用起来，还需要时间。</p>
<p>那么，將键盘和USB Key结合起来，使得PIN码不用通过电脑传到USB Key，不也一样安全吗？是的，带键盘输入的USB Key也比较安全，但是请低头看看你的键盘右侧的数字键区域，只是加入0~9这几个数字键，就需要增加不少的体积，这对于需要满足“随身携带”这一特点的USB Key来说，体积实在是大了些，不够实用。不过我想，随着技术的发展，超薄键盘、折叠式键盘、投影式虚拟键盘可能会改变这一状况。嘿嘿，想想投影式虚拟键盘，有点科幻的味道，不过这一天的到来应该不远了～～～</p>
<p>好了，成本高不合适，体积大也不合适，既然目前没有从根本上解决问题的合适的方法，我们就换个思路吧，不要忘了，<strong>一切安全性都是相对的</strong>～～～</p>
<p>既然黑客总是能够通过各种手段得到USB Key的PIN码，然后在用户没有发觉的情况下完成网上交易，那么，如果我们能够在每次需要USB Key来证明自己身份的时候，需要用户手工干预一下才能完成验证过程，是不是就能够解决这个“<strong>不知不觉中</strong>”账户里的钱就不翼而飞的问题呢？事实上这样的USB Key已经出现了，国内的几家主要的USB Key厂商都纷纷推出了这种“按钮USB Key”。这种类型的USB Key比普通USB Key多了一个按键，当需要转帐的时候，就需要用户按一下按键，否则USB Key拒绝使用内置的密钥来证明你的身份(进行数字签名)，也就无法完成网上交易。有了这个按钮式USB Key，你的每一次网上交易就明明白白了：只要有网上交易，一定是有人明确的按了这个按钮，而只要这个USB Key没有丢失，那就一定是你自己干的了。即使黑客得到你的PIN码，他也无法通过网络伸手到你的电脑前按一下这个按钮吧！！</p>
<p>好了，按钮式USB Key，这下安全了～～～</p>
<p>安全了？安全了？我带上黑客的帽子，在一边得意的笑，我得儿意的笑，我得儿意的笑～～～～</p>
<p>欲知“按钮USB Key”为何不安全，又如何应对其安全漏洞，请关注本文连载之五。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/162/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>谈谈网银和USB Key (三)</title>
		<link>http://apex.ncksoft.com/archives/160</link>
		<comments>http://apex.ncksoft.com/archives/160#comments</comments>
		<pubDate>Wed, 02 Jul 2008 16:10:19 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[网银]]></category>
		<category><![CDATA[USB Key]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/?p=160</guid>
		<description><![CDATA[注：本文涉及USB Key高级安全特性，供有一定网银使用经验及基本网络知识的同学阅读。
前面[谈谈网银和USB Key (二)]已经谈到，有了USB Key，我们的网银就“基本安全”了，那么，使用了USB Key还会有什么安全性的隐患，我们又该如何应对呢？
在进一步阅读之前，请先明确一个事实：一切安全性都是相对的。越是安全的系统，对用户的要求就越高，使用起来就越繁琐。我们只能在安全性与易用性之间找一个平衡点，而这个平衡点也会随着技术的发展朝不同的方向偏移。

安全隐患！
首先我们来看看进行一次利用网银进行网上支付的全过程：

將USB Key连接到计算机上，并打开网银网站；
输入帐号、密码等信息登录网银；
输入转帐的目标账户和金额；
要进行网上支付时，需要输入USB Key的PIN码(即个人识别码)；
网上支付完成。

其中，有可能在打开网银网站的时候就需要输入USB Key的PIN码，这是由网银系统设计决定的。
好了，让我们转变一下思维方式，假定我们现在来扮演海盗，呃，不，扮演黑客吧，我们来看看有什么地方可以侵入这个网银交易系统呢？嗯，我们已知的是，用户的私钥是无法得到的，但是看看，这里有好几个安全隐患：

1. 输入帐号、密码信息；
2. 输入USB Key的PIN码；
3. 通常，在没有关闭浏览器之前，一般不用再次输入USB Key的PIN码。

那么，只要我能够植入一个键盘钩子类型的木马程序，监控用户的键盘输入，就可以得到他的帐号和密码了，同样的，也可以得到USB Key的PIN码了。植入木马的手段很多，例如诱惑用户访问一个嵌入木马的网站，或者发送一封具有诱惑力的邮件(其中嵌入木马)，或者做一些工具软件帮助用户清除病毒(但实际上悄悄的嵌入了自己的木马)，或者將一些软件破解版重新打包供下载，只不过在安装包中加入了木马，甚至可以出一款“Windows XP SP3无限激活版”，让用户下载，结果安装好的系统中就已经具有木马了，嘿嘿，黑客的手段太多了。
好了，假定我们的木马已经进驻用户的电脑了。拿到帐号、密码以及USB Key的PIN码有什么用呢？毕竟我们无法拿到他的USB Key啊，也就没有办法使用他的私钥了。不要着急，让我们守株待兔吧。一旦用户將USB Key插入到电脑中，我们的木马程序第二部分就可以开始工作了，第二部分是以隐藏方式开启一个浏览器，模拟网上交易的全过程，包括填写帐号、密码、转帐金额、提供USB Key的PIN码、确认转帐等等，对于网银服务端来说，根本没有办法区分这是用户的正常操作，还是木马的行为。
当然，编写这样的木马程序需要极高的反向工程能力、系统分析能力以及编程造诣，但既然有这种可能，那么在某个时刻这个可能就会变成现实。啊，我听见你说，我们可以防止键盘钩子，让木马无法获取键盘信息。但是我可以负责任的告诉你，键盘监控是无法彻底免除的，即使你使用驱动层次来首先截取输入，但是木马也可以，甚至木马可以使用网银不能使用的技术：rootkit。可以预见，在终极PK的时候，木马是占上风的。
再看看上述第三点漏洞，这就是一个典型的“安全性与易用性”取平衡点的结果。一旦打开浏览器，输入一次PIN码之后，后续的操作就无需再次输入了，这样可以给用户一个比较好的使用体验。然而，倘若黑客在用户浏览器中嵌入一个BHO，一旦发觉用户成功完成一次转帐操作，就以黑客的帐号为目标帐号再次转帐一笔，瞧，多简单，都不用费心去获取什么帐号密码了。
发觉了这样的潜在攻击方式，大部分网银不得不降低易用性，要求每次转帐操作前，强制进行一次USB Key的PIN码验证，这样虽然增加了用户操作量，但可以有效防止因为转帐完成后忘记关闭浏览器而导致的隐藏攻击。
但无论如何，因为键盘木马的存在，普通的USB Key最终会败下阵来，只不过是时间问题。对了，这里请不要考虑杀毒软件，毕竟目前的杀毒软件都是“后知后觉”的，等一个木马被列入杀软的黑名单时，可能损失已经造成了。我们要讨论的是如何在不安全的环境下安全的完成网上交易。
注，上述攻击方式是理想化的分析，说起来简单，但是实现起来却是非常困难的，所以目前看来，普通的USB Key在一定时间内是可以为网银系统提供必要的安全性的。所以，目前各大银行采用的USB Key完全可以满足普通用户对于电子支付的安全要求，使用USB Key比使用纯文件类型的数字证书在安全性上有本质的提升。
如何应对？
啊，已经写了这么多了，休息，休息一会儿～～～
]]></description>
			<content:encoded><![CDATA[<p><strong>注：本文涉及USB Key高级安全特性，供有一定网银使用经验及基本网络知识的同学阅读。</strong></p>
<p><a href="http://apex.ncksoft.com/archives/144">前面[谈谈网银和USB Key (二)]</a>已经谈到，有了USB Key，我们的网银就<strong>“基本安全”</strong>了，那么，使用了USB Key还会有什么安全性的隐患，我们又该如何应对呢？</p>
<p>在进一步阅读之前，请先明确一个事实：<strong>一切安全性都是相对的</strong>。越是安全的系统，对用户的要求就越高，使用起来就越繁琐。我们只能在安全性与易用性之间找一个平衡点，而这个平衡点也会随着技术的发展朝不同的方向偏移。</p>
<p><span id="more-160"></span><br />
<strong>安全隐患！</strong></p>
<p>首先我们来看看进行一次利用网银进行网上支付的全过程：</p>
<ul>
<li>將USB Key连接到计算机上，并打开网银网站；</li>
<li>输入帐号、密码等信息登录网银；</li>
<li>输入转帐的目标账户和金额；</li>
<li>要进行网上支付时，需要输入USB Key的PIN码(即个人识别码)；</li>
<li>网上支付完成。</li>
</ul>
<p>其中，有可能在打开网银网站的时候就需要输入USB Key的PIN码，这是由网银系统设计决定的。</p>
<p>好了，让我们转变一下思维方式，假定我们现在来扮演海盗，呃，不，扮演黑客吧，我们来看看有什么地方可以侵入这个网银交易系统呢？嗯，我们已知的是，用户的私钥是无法得到的，但是看看，这里有好几个安全隐患：</p>
<ul>
<li>1. 输入帐号、密码信息；</li>
<li>2. 输入USB Key的PIN码；</li>
<li>3. 通常，在没有关闭浏览器之前，一般不用再次输入USB Key的PIN码。</li>
</ul>
<p>那么，只要我能够植入一个键盘钩子类型的木马程序，监控用户的键盘输入，就可以得到他的帐号和密码了，同样的，也可以得到USB Key的PIN码了。植入木马的手段很多，例如诱惑用户访问一个嵌入木马的网站，或者发送一封具有诱惑力的邮件(其中嵌入木马)，或者做一些工具软件帮助用户清除病毒(但实际上悄悄的嵌入了自己的木马)，或者將一些软件破解版重新打包供下载，只不过在安装包中加入了木马，甚至可以出一款“Windows XP SP3无限激活版”，让用户下载，结果安装好的系统中就已经具有木马了，嘿嘿，黑客的手段太多了。</p>
<p>好了，假定我们的木马已经进驻用户的电脑了。拿到帐号、密码以及USB Key的PIN码有什么用呢？毕竟我们无法拿到他的USB Key啊，也就没有办法使用他的私钥了。不要着急，让我们守株待兔吧。一旦用户將USB Key插入到电脑中，我们的木马程序第二部分就可以开始工作了，第二部分是以隐藏方式开启一个浏览器，模拟网上交易的全过程，包括填写帐号、密码、转帐金额、提供USB Key的PIN码、确认转帐等等，对于网银服务端来说，根本没有办法区分这是用户的正常操作，还是木马的行为。</p>
<p>当然，编写这样的木马程序需要极高的反向工程能力、系统分析能力以及编程造诣，但既然有这种可能，那么在某个时刻这个可能就会变成现实。啊，我听见你说，我们可以防止键盘钩子，让木马无法获取键盘信息。但是我可以负责任的告诉你，键盘监控是无法彻底免除的，即使你使用驱动层次来首先截取输入，但是木马也可以，甚至木马可以使用网银不能使用的技术：rootkit。可以预见，在终极PK的时候，木马是占上风的。</p>
<p>再看看上述第三点漏洞，这就是一个典型的“安全性与易用性”取平衡点的结果。一旦打开浏览器，输入一次PIN码之后，后续的操作就无需再次输入了，这样可以给用户一个比较好的使用体验。然而，倘若黑客在用户浏览器中嵌入一个BHO，一旦发觉用户成功完成一次转帐操作，就以黑客的帐号为目标帐号再次转帐一笔，瞧，多简单，都不用费心去获取什么帐号密码了。</p>
<p>发觉了这样的潜在攻击方式，大部分网银不得不降低易用性，要求每次转帐操作前，强制进行一次USB Key的PIN码验证，这样虽然增加了用户操作量，但可以有效防止因为转帐完成后忘记关闭浏览器而导致的隐藏攻击。</p>
<p>但无论如何，因为键盘木马的存在，普通的USB Key最终会败下阵来，只不过是时间问题。对了，这里请不要考虑杀毒软件，毕竟目前的杀毒软件都是“后知后觉”的，等一个木马被列入杀软的黑名单时，可能损失已经造成了。我们要讨论的是如何在不安全的环境下安全的完成网上交易。</p>
<p><strong>注，上述攻击方式是理想化的分析，说起来简单，但是实现起来却是非常困难的，所以目前看来，普通的USB Key在一定时间内是可以为网银系统提供必要的安全性的。</strong>所以，目前各大银行采用的USB Key完全可以满足普通用户对于电子支付的安全要求，使用USB Key比使用纯文件类型的数字证书在安全性上有本质的提升。</p>
<p><strong>如何应对？</strong></p>
<p>啊，已经写了这么多了，休息，休息一会儿～～～</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/160/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>谈谈网银和USB Key (二)</title>
		<link>http://apex.ncksoft.com/archives/144</link>
		<comments>http://apex.ncksoft.com/archives/144#comments</comments>
		<pubDate>Sat, 05 Apr 2008 17:18:55 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[网银]]></category>
		<category><![CDATA[USB Key]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/archives/144</guid>
		<description><![CDATA[在“谈谈网银和USB Key (一)”中我们已经了解了公开密钥体系的作用：数据加密、防止抵赖、防止篡改。但是这一切的前提就是保证私钥的安全。
绝对不要泄露你的私钥。否则的话，黑客可以：

偷看你给美眉写的肉麻情书；
冒充你的身份给老板发邮件，然后你被叫到老板办公室谈心；
在网上购物，花的却是你的血汗钱；

等等等等，啊呀，实在是太糟糕了。

刚开始的时候，网银系统颁发给用户的数字证书(其中包含私钥)，是存放在硬盘上的，当然，对于普通用户来说，这些证书啊、公钥啊、私钥啊什么的，都不知道放在什么地方，只是当要用到的时候它就自己跑出来了。但是黑客可不这么简单，他们能够在你的计算机里面放置病毒、木马什么的，悄悄的就把你的证书、私钥全部偷走了。有些朋友会说，嗯，我记得证书存放到硬盘上的时候(就是备份证书)，需要设置密码的，这样黑客不就没办法了么？没有这么简单。你早晚会用到你的私钥的。一旦你使用私钥，操作系统就必须从硬盘中读取，还可能会询问你密码，然后在内存中就是私钥的明文了。计算机的内存，天哪，对于黑客来说，简直就是自己的后花园一样。且不说层出不穷的木马，玩游戏的朋友应该知道一些游戏修改软件如“游戏修改大师”、“金山游侠”，或者早期的FPE等等，这些大众化的工具就能在整个内存中搜索自己感兴趣的内容。所以说，如果某个东西可能会出现在内存中，就意味着可能被黑客偷走。
因此，出现了USB Key。
一定一定一定要澄清一个观点：USB Key不是U盘。
USB Key是这样的一个东东：首先它的外观和U盘很像，所以常常被误认为U盘。其实USB Key内部确实有一点点存储空间，能够存放你的证书、私钥等数据。但最关键的是它有一块智能卡芯片，可以完成私钥的相关运算，例如加密、解密等。而且，这块智能卡芯片保证了像私钥这样的秘密数据不能被外部访问，如果你要使用私钥干点什么，你只能把原始数据交给USB Key，然后USB Key内部完成各种运算，再将结果吐出来给你。任何人，包括USB Key的制造商在内，是不能将私钥读取出来的。而且，在你使用私钥之前，还需要通过USB Key的一个身份验证手续，也就是输入一个密码，这样可以防止USB Key丢失后被别人利用。啊，你说制造商可能留下后门，可以通过特别的方式读取私钥？天，哪个制造商敢冒这样的大不韪，给自己找麻烦～～～除非这个制造商不想混下去了，呵呵～～～
更进一步的是，USB Key本身可以产生非对称加密算法要用到的密钥对，这样，私钥从出生开始就一直呆在USB Key内部，不见天日，终其一生不得离开USB Key。为你默哀一秒钟，可怜的孩子&#8230;
所以，只要你保管好自己的USB Key，并且不要把USB Key的密码泄露，你的网银基本上就是安全的了。此时黑客再想花你的钱在网上购物，就必须知道你的银行帐号、网银登录密码、取款密码、拿到你的USB Key、从你脑子里找到USB Key的密码。
上面说到“基本安全”，是有原因的。具体如何，且听第三回分解。
]]></description>
			<content:encoded><![CDATA[<p>在“<a href="http://apex.ncksoft.com/archives/143">谈谈网银和USB Key (一)</a>”中我们已经了解了公开密钥体系的作用：数据加密、防止抵赖、防止篡改。但是这一切的前提就是<strong>保证私钥的安全</strong>。</p>
<p>绝对不要泄露你的私钥。否则的话，黑客可以：</p>
<ul>
<li>偷看你给美眉写的肉麻情书；</li>
<li>冒充你的身份给老板发邮件，然后你被叫到老板办公室谈心；</li>
<li>在网上购物，花的却是你的血汗钱；</li>
</ul>
<p>等等等等，啊呀，实在是太糟糕了。</p>
<p><span id="more-144"></span></p>
<p>刚开始的时候，网银系统颁发给用户的数字证书(其中包含私钥)，是存放在硬盘上的，当然，对于普通用户来说，这些证书啊、公钥啊、私钥啊什么的，都不知道放在什么地方，只是当要用到的时候它就自己跑出来了。但是黑客可不这么简单，他们能够在你的计算机里面放置病毒、木马什么的，悄悄的就把你的证书、私钥全部偷走了。有些朋友会说，嗯，我记得证书存放到硬盘上的时候(就是备份证书)，需要设置密码的，这样黑客不就没办法了么？没有这么简单。你早晚会用到你的私钥的。一旦你使用私钥，操作系统就必须从硬盘中读取，还可能会询问你密码，然后在内存中就是私钥的明文了。计算机的内存，天哪，对于黑客来说，简直就是自己的后花园一样。且不说层出不穷的木马，玩游戏的朋友应该知道一些游戏修改软件如“游戏修改大师”、“金山游侠”，或者早期的FPE等等，这些大众化的工具就能在整个内存中搜索自己感兴趣的内容。所以说，如果某个东西可能会出现在内存中，就意味着可能被黑客偷走。</p>
<p><strong>因此，出现了USB Key。</strong></p>
<p>一定一定一定要澄清一个观点：<strong>USB Key不是U盘。</strong></p>
<p>USB Key是这样的一个东东：首先它的外观和U盘很像，所以常常被误认为U盘。其实USB Key内部确实有一点点存储空间，能够存放你的证书、私钥等数据。但最关键的是它有一块智能卡芯片，可以完成私钥的相关运算，例如加密、解密等。而且，这块智能卡芯片保证了像私钥这样的秘密数据不能被外部访问，如果你要使用私钥干点什么，你只能把原始数据交给USB Key，然后USB Key内部完成各种运算，再将结果吐出来给你。任何人，包括USB Key的制造商在内，是不能将私钥读取出来的。而且，在你使用私钥之前，还需要通过USB Key的一个身份验证手续，也就是输入一个密码，这样可以防止USB Key丢失后被别人利用。啊，你说制造商可能留下后门，可以通过特别的方式读取私钥？天，哪个制造商敢冒这样的大不韪，给自己找麻烦～～～除非这个制造商不想混下去了，呵呵～～～</p>
<p>更进一步的是，USB Key本身可以产生非对称加密算法要用到的密钥对，这样，私钥从出生开始就一直呆在USB Key内部，不见天日，终其一生不得离开USB Key。为你默哀一秒钟，可怜的孩子&#8230;</p>
<p>所以，只要你保管好自己的USB Key，并且不要把USB Key的密码泄露，你的网银基本上就是安全的了。此时黑客再想花你的钱在网上购物，就必须知道你的银行帐号、网银登录密码、取款密码、拿到你的USB Key、从你脑子里找到USB Key的密码。</p>
<p>上面说到“基本安全”，是有原因的。具体如何，且听第三回分解。</p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/144/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>谈谈网银和USB Key (一)</title>
		<link>http://apex.ncksoft.com/archives/143</link>
		<comments>http://apex.ncksoft.com/archives/143#comments</comments>
		<pubDate>Fri, 04 Apr 2008 16:56:53 +0000</pubDate>
		<dc:creator>Apex</dc:creator>
				<category><![CDATA[PKI]]></category>
		<category><![CDATA[网银]]></category>
		<category><![CDATA[USB Key]]></category>

		<guid isPermaLink="false">http://apex.ncksoft.com/archives/143</guid>
		<description><![CDATA[写下这个题目，一时间又不知道从何说起了。事实上，对于网银和USB Key，有些东西不吐不快，特别是有时在网上的一些论坛里看到有人“分析/评论”使用USB Key的网银的安全性时，对于一些“不懂装懂”的行为，有一种莫名的悲哀感。于是乎写下此文，希望能够起到一点科普的作用。
基础知识
我们常见的加密，使用的是“对称加密算法”，也就是说，用一个密码加密的东东，同样可以用这个密码来解密。我们称这样的加密算法为“对称加密算法”，用于对称加密算法中的密码，我们称之为“对称密钥”。一旦别人知道了你的密钥，那么他就可以任意的解密你的秘密数据了。这样的算法很多，常见的有DES，3DES，AES，Blowfish等等。
使用USB Key来保证网银的安全，实际上是利用了PKI(公开密钥体系)技术中的数字证书应用，而PKI技术中至关重要的一点就是“保证私钥的安全”。为了理解所谓的“保证私钥的安全”，我们先举一个简单的例子：假定有这样一种计算方法，可以将一篇文章用一个密钥A加密，要想解密的话，必须用另一个密钥B来解密，反过来也一样，用密钥B加密之后得到的密文只能用密钥A来解密。这里的密钥A和密钥B一定是成对出现的，一一对应，绝对不会出现用密钥A加密的东西可以用密钥C、密钥D&#8230;等等来解密。这样的算法我们称之为“非对称加密算法”，相对应的，这里的密钥A和密钥B我们称之为“密钥对”，因为它们是成对出现的。密钥对中的一部分可以随意公开，例如其中的密钥A，我们称之为“公开密钥”，简称公钥。而另外一半是自己持有的，需要保密，我们称之为“私有密钥”，简称私钥。所谓“公开密钥体系”，就是指这里的公钥了。我们常听到的RSA，就是这样一种算法。此外还有DSA、ECC(椭圆曲线算法)等等。
使用公开密钥体系，不仅仅可以用来对数据加密，还可以用来确定身份。试想一下：你有一对密钥对(A和B)，其中A是公钥，被放在网上，任何人都可以取得。现在有人(比如张三)想给你发送一份邮件，于是张三在网上找到你的公钥，然后将邮件用你的公钥加密并传送给你。那么，只要你的私钥没有泄露出去，就只有你能够解密这封邮件(使用和A相对应的私钥B来解密)。即使邮件在网络上传输的过程中被黑客获取了，没有私钥B，他也无可奈何。这就意味着，使用公开密钥技术，可以保证只有指定的人(其实就是指定的私钥啦)才可以阅读私密信息。

反过来，如果张三先用他自己的私钥对邮件加密，然后再用你的公钥对密文再次加密，那么不但只有你能够阅读这封邮件，而且还可以确认这封邮件一定是张三发出来的。这是因为你在收取到邮件之后，首先用自己的私钥解密，得到的还是一堆密文，然后你必须用张三的公钥再次解密，才能得到邮件的原文。既然是使用张三的公钥才能解密，那么这封邮件一定是用张三的私钥加密过的。
此外，还有一种用法：例如你的老板(或者干脆你就是老板)要发布一份公告，内容为“给所有员工补助500元”，要求每个员工都能够看到，不用加密。但是这封邮件在网络上传输的时候，被有心人篡改了，变成了“给所有员工补助5000元”，喔，老板亏大了～～～为了防止这种事情的发生，老板将公告用自己的私钥加密并附加在公告的后面，然后一起发送。这样每个员工都能够用老板的公钥解密附加的密文，并与公告原文对比，于是就能够知道邮件在传输的过程中是否被篡改了。
高级阅读
除了对称算法和非对称算法之外，还需要了解一种加密算法，称之为“散列”(也有人称之为“杂凑”、“哈希”等，英文名为Hash)，与对称/非对称算法不同的是，散列算法是不可逆的，也就是说，加密后的数据是无法再解密了，常见的散列算法有MD5、SHA1等。散列算法还有一个特性就是无论原文有多长，散列之后的结果总是固定长度。例如MD5散列的结果总是16字节，SHA1散列的结果总是20字节。
非对称加密算法的加解密速度要远远低于对称加密算法，所以在实际应用中，往往会将对称、非对称及散列算法混合使用，以提升性能。例如，张三给你发邮件的时候，先产生一个随机数，用这个随机数来做对称算法的密钥并对邮件加密，随后用你的公钥对这个随机数加密，然后将邮件的密文和随机数的密文一起发给你。你收到邮件之后，先用自己的私钥解密随机数，然后用随机数作为对称算法的密钥解密邮件。
又如，老板发布公告的时候，将公告进行散列，然后用老板的私钥对散列后的结果加密(这个加密结果，就是通常所说的“数字签名”)，而员工收到公告的时候，只需要再次对公告进行散列，并用老板的公钥对数字签名进行解密，然后将解密结果和公告的散列结果做对比，就能了解公告是否被篡改了。这个对比的过程，就是通常所说的“验证签名”。

由此可见，公开密钥体系能够做到：1. 数据加密； 2. 不可抵赖(就是发送者无法否认)； 3. 防止数据被篡改。
有了这样的基础知识，就容易理解“保证私钥的安全”是多么重要了。
更多内容，请看“谈谈网银和USB Key (二)”
]]></description>
			<content:encoded><![CDATA[<p>写下这个题目，一时间又不知道从何说起了。事实上，对于网银和USB Key，有些东西不吐不快，特别是有时在网上的一些论坛里看到有人“分析/评论”使用USB Key的网银的安全性时，对于一些“不懂装懂”的行为，有一种莫名的悲哀感。于是乎写下此文，希望能够起到一点科普的作用。</p>
<p><strong>基础知识</strong></p>
<p>我们常见的加密，使用的是“对称加密算法”，也就是说，用一个密码加密的东东，同样可以用这个密码来解密。我们称这样的加密算法为“对称加密算法”，用于对称加密算法中的密码，我们称之为“对称密钥”。一旦别人知道了你的密钥，那么他就可以任意的解密你的秘密数据了。这样的算法很多，常见的有DES，3DES，AES，Blowfish等等。</p>
<p>使用USB Key来保证网银的安全，实际上是利用了PKI(公开密钥体系)技术中的数字证书应用，而PKI技术中至关重要的一点就是“保证私钥的安全”。为了理解所谓的“保证私钥的安全”，我们先举一个简单的例子：假定有这样一种计算方法，可以将一篇文章用一个密钥A加密，要想解密的话，必须用另一个密钥B来解密，反过来也一样，用密钥B加密之后得到的密文只能用密钥A来解密。这里的密钥A和密钥B一定是成对出现的，一一对应，绝对不会出现用密钥A加密的东西可以用密钥C、密钥D&#8230;等等来解密。这样的算法我们称之为“非对称加密算法”，相对应的，这里的密钥A和密钥B我们称之为“密钥对”，因为它们是成对出现的。密钥对中的一部分可以随意公开，例如其中的密钥A，我们称之为“公开密钥”，简称公钥。而另外一半是自己持有的，需要保密，我们称之为“私有密钥”，简称私钥。所谓“公开密钥体系”，就是指这里的公钥了。我们常听到的RSA，就是这样一种算法。此外还有DSA、ECC(椭圆曲线算法)等等。</p>
<p>使用公开密钥体系，不仅仅可以用来对数据加密，还可以用来确定身份。试想一下：你有一对密钥对(A和B)，其中A是公钥，被放在网上，任何人都可以取得。现在有人(比如张三)想给你发送一份邮件，于是张三在网上找到你的公钥，然后将邮件用你的公钥加密并传送给你。那么，只要你的私钥没有泄露出去，就只有你能够解密这封邮件(使用和A相对应的私钥B来解密)。即使邮件在网络上传输的过程中被黑客获取了，没有私钥B，他也无可奈何。这就意味着，使用公开密钥技术，可以保证只有指定的人(其实就是指定的私钥啦)才可以阅读私密信息。</p>
<p><span id="more-143"></span></p>
<p>反过来，如果张三先用他自己的私钥对邮件加密，然后再用你的公钥对密文再次加密，那么不但只有你能够阅读这封邮件，而且还可以确认这封邮件一定是张三发出来的。这是因为你在收取到邮件之后，首先用自己的私钥解密，得到的还是一堆密文，然后你必须用张三的公钥再次解密，才能得到邮件的原文。既然是使用张三的公钥才能解密，那么这封邮件一定是用张三的私钥加密过的。</p>
<p>此外，还有一种用法：例如你的老板(或者干脆你就是老板)要发布一份公告，内容为“给所有员工补助500元”，要求每个员工都能够看到，不用加密。但是这封邮件在网络上传输的时候，被有心人篡改了，变成了“给所有员工补助5000元”，喔，老板亏大了～～～为了防止这种事情的发生，老板将公告用自己的私钥加密并附加在公告的后面，然后一起发送。这样每个员工都能够用老板的公钥解密附加的密文，并与公告原文对比，于是就能够知道邮件在传输的过程中是否被篡改了。</p>
<blockquote><p><strong>高级阅读</strong></p>
<p>除了对称算法和非对称算法之外，还需要了解一种加密算法，称之为“散列”(也有人称之为“杂凑”、“哈希”等，英文名为Hash)，与对称/非对称算法不同的是，散列算法是不可逆的，也就是说，加密后的数据是无法再解密了，常见的散列算法有MD5、SHA1等。散列算法还有一个特性就是无论原文有多长，散列之后的结果总是固定长度。例如MD5散列的结果总是16字节，SHA1散列的结果总是20字节。</p>
<p>非对称加密算法的加解密速度要远远低于对称加密算法，所以在实际应用中，往往会将对称、非对称及散列算法混合使用，以提升性能。例如，张三给你发邮件的时候，先产生一个随机数，用这个随机数来做对称算法的密钥并对邮件加密，随后用你的公钥对这个随机数加密，然后将邮件的密文和随机数的密文一起发给你。你收到邮件之后，先用自己的私钥解密随机数，然后用随机数作为对称算法的密钥解密邮件。</p>
<p>又如，老板发布公告的时候，将公告进行散列，然后用老板的私钥对散列后的结果加密(这个加密结果，就是通常所说的“数字签名”)，而员工收到公告的时候，只需要再次对公告进行散列，并用老板的公钥对数字签名进行解密，然后将解密结果和公告的散列结果做对比，就能了解公告是否被篡改了。这个对比的过程，就是通常所说的“验证签名”。
</p></blockquote>
<p>由此可见，公开密钥体系能够做到：1. 数据加密； 2. 不可抵赖(就是发送者无法否认)； 3. 防止数据被篡改。</p>
<p>有了这样的基础知识，就容易理解“保证私钥的安全”是多么重要了。</p>
<p>更多内容，请看<a href="http://apex.ncksoft.com/archives/144">“谈谈网银和USB Key (二)”</a></p>
]]></content:encoded>
			<wfw:commentRss>http://apex.ncksoft.com/archives/143/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
