﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-brent's hut-随笔分类-Encrypt</title><link>http://www.cppblog.com/aqazero/category/2882.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 22:52:46 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 22:52:46 GMT</pubDate><ttl>60</ttl><item><title>数据校验</title><link>http://www.cppblog.com/aqazero/archive/2008/02/28/43387.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 28 Feb 2008 06:19:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2008/02/28/43387.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/43387.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2008/02/28/43387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/43387.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/43387.html</trackback:ping><description><![CDATA[CRC<br>Cyclic Redundancy Checksum<br>http://www.roboticfan.com/blog/user_2005/104/archives/2006/2006331212531.shtml<br><br>MD5<br>Message-Digest Algorithm 5<br>http://tech.163.com/06/0106/22/26QM1J230009159F.html<br><br><br><img src ="http://www.cppblog.com/aqazero/aggbug/43387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2008-02-28 14:19 <a href="http://www.cppblog.com/aqazero/archive/2008/02/28/43387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>菜鸟学习数字什么证书</title><link>http://www.cppblog.com/aqazero/archive/2005/12/19/14219.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 01:15:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/12/19/14219.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14219.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/12/19/14219.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14219.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14219.html</trackback:ping><description><![CDATA[
		<p>菜鸟我觉得数字证书就是有人管理的<a href="http://spaces.msn.com/members/jhwcn/Blog/cns!1pvr5thyAIwicGdvbHKCUzZw!180.entry" rel="nofollow"><font color="#003399">数字签名</font></a>。<br />数字证书就类似于手写的签章，虽然你认识这个签章，但你无法模仿这个签章。</p>
		<p>比如我可以根据RSA的方法找到一对公钥和私钥，然后告诉每个我的朋友或者商业伙伴这个公钥。这样我就可以发送用私钥签名的信息给他们，他们也可以用我的公钥加密信息后发送给我。(这就是数字签名了)</p>
		<p>但是我怎么告诉我的朋友或者商业伙伴我的公钥？用internet告诉他们？别忘了上网就像裸奔，别人也可以找到另一对公钥私钥，以你的身份通过Internae把公钥发送给你的朋友(你认为没有这个可能？因为电子邮箱是需要身份认证的？你的密码不可能泄露，电脑上一定没有木马，黑客伪装不了你的电子邮件，更窃听不了你发送的数据包,竞争对手不会窃取你的商业秘密,没有人试图知道你的银行帐号，FBI更不知道你发表了什么言论。恩，那数字证书确实没什么用)。那么一个个打电话告诉他们，或者发送一堆挂号信？这样看起来不大现实。</p>
		<p>所以有了数字证书。数字证书就是数字认证机构(CA)颁发给我的签名，由数字认证机构来证明这个证书的有效性。假如有了某个机构的数字证书，我就可以向所有人发送用这个数字证书签名过的信息。信息的接收者只要验证这个认证机构的签名就可以了。</p>
		<p>但这样还是不现实，谁会拿着我的电子邮件跑去找厦门数字认证中心或者北京数字认证中心呢？所以这些机构的数字证书上也有更上层的签名，那就是根证书。打开IE-工具-Internet选项-内容-证书.你就可以看到一堆的受信任的根证书和中级证书机构颁发的证书.根证书给中级机构的证书签名,中级机构的证书给我的证书签名.所以只要根证书是可信的.我的证书就是可信的.</p>
		<p>通俗一点就是说比如安南公布了自己的签名，声称他是可信的。然后布什去找安南，让安南在他的签名上签名，这样布什的签名就是可信的，然后布什在我的签名上签名。这样我的签名上就有布什的签名，而布什的签名上有安南的签名，这样如果你认识安南的签名，你就知道我的签名大概不是假的。大概就是这样了。</p>
		<p>但是也许某一天布什会认为我有搞恐怖的嫌疑，决定把我的签名扔进黑名单。这时如果你收到了一份我签名的文件，说布什有裸奔的习惯，你怎么知道我是否还是可信的呢？布什想了个办法，把他黑名单公布在白宫的墙上，并在他的签名上写下白宫地址。这样你收到我的签名后，因为我的签名里面有布什的签名，布什的签名里面有白宫地址，你就可以去白宫看看我是否上了黑名单榜。</p>
		<p>听起来这个方式很好。。可惜找布什在我的签名上签名是要钱的，直接找安南签名要的钱更多。人吃人的社会啊。所以据说有另外一种签名的方式。但目前偶还不清楚。<br /></p>
		<table class="fixedTable blogpost" cellspacing="0" width="100%" border="0">
				<tbody>
						<tr>
								<td class="ellipse">
										<span class="bvTitle" id="subjcns!1pvr5thyAIwicGdvbHKCUzZw!183">
												<strong>
												</strong>
										</span>
								</td>
						</tr>
						<tr>
								<td class="bvh8">
										<strong>
										</strong>
								</td>
						</tr>
						<tr>
								<td id="msgcns!1pvr5thyAIwicGdvbHKCUzZw!183">
										<p>试验CryptoAPI的失败：<br />微软提供的Microsoft Cryptographic Service Providers里的The Microsoft Base Cryptographic Provider和The Microsoft Enhanced Cryptographic Provider不支持导入导出密钥对。唯一的收获。寂寥，郁郁，挫败。</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.cppblog.com/aqazero/aggbug/14219.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-12-19 09:15 <a href="http://www.cppblog.com/aqazero/archive/2005/12/19/14219.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>菜鸟学习数字签名笔记</title><link>http://www.cppblog.com/aqazero/archive/2005/12/19/14220.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 01:13:00 GMT</pubDate><guid>http://www.cppblog.com/aqazero/archive/2005/12/19/14220.html</guid><wfw:comment>http://www.cppblog.com/aqazero/comments/14220.html</wfw:comment><comments>http://www.cppblog.com/aqazero/archive/2005/12/19/14220.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/aqazero/comments/commentRss/14220.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/aqazero/services/trackbacks/14220.html</trackback:ping><description><![CDATA[
		<p>数字签名(Digital Signature)是电子签名(Electronic Signature)的一种(实现)。</p>
		<p>目前电子签名签名的实现方式有：<br />基于PKI(Public Key Infrastructino)的公钥密码技术的数字签名；<br />以生物特征统计学为基础的识别标识；<br />手印、声音印记或视网膜扫描的识别；<br />一个让收件人能识别发件人身份的密码代号、密码或个人识别码PIN；<br />基于量子力学的计算机...<br />数字签名的目的和功能:<br />认证、数据保密性、数据完整性和不可否认性.</p>
		<p>数字签名的实现方式:</p>
		<p>(一)公钥加密算法如何加密:<br />比如我要发送一个绝密的信息M给你,我当然不会直接把M写在信里面寄给你,我会提前告诉你解密的方法,然后使用算法P处理M得到P(M),我发送P(M)给你.因为你知道解密的方法P',你使用P'来处理P(M)得到了M.只要P和P'不让别人知道,我们的通讯就是保密的.<br />如果从P'能够得到P,那你就能知道P,然后伪装我发送消息给其他人.<br />但是据说有一个公钥加密算法,加密和解密的算法是一样的,而且是公开的,我告诉你我的公钥k1,我自己保密的是私钥k0,我发送给你的信息是M' = P(k0,M),你收到M'后可以通过运算P(k1,M')得到M,但是通过k1是无法计算出k0的,通过K0也无法计算出k1.(我也不知道是否真的这么神奇,现在网络上到处都是RSA被破解之类的,看得菜鸟我心惊胆颤,俺刚要好好学习呢,别人早已经把它颠覆了).</p>
		<p>这样你只有解密的份,没有伪装我身份的可能.<br />同样你也可以用k1来加密发消息给我,我用k0可以将它解密.<br />但是这种公钥加密算法是把消息本身当成一个大数来进行幂运算,所以比如我想把1000个字节的字符串当成一个大数来加密,应该是非常困难而且非常慢的.(偶想高手应该会算,但那不是俺关心的)<br />所以有了散列.</p>
		<p>(二)关于散列:<br />最常用的散列机制有 SHA1,MD5,RIPEMD-160等.SHA1即“安全散列算法”。SHA1 可以处理 2**64字节以内的任何消息，并生成一个 20 字节的结果。<br />按照菜鸟我看来这不是"散列",这是"聚列"啊.把一个2^(64*8)的数映射到一个2(20*8)的数,同志们,这不是聚列是什么?但其实我们一般用的字符串,不会把0~2^(64*8)的数全用光,只用了其中一小部分.所以这个散列似乎是相对安全的.这种问题就留给长了几个脑袋的人来解决吧.</p>
		<p>关键是散列算法比公钥加密算法要快很多.</p>
		<p>这样,我找到了一对公钥和私钥(k0和k1),我公布了我的散列算法H,发表了一篇长5万个字奇菜无比的论文,内容为M,对M进行散列,很快得到H(M),然后用私钥加密得到S = P(k0,H(M)),把S附在M后面并发表.<br />你看到后为了证实这篇其烂无比的文章是我写的,可以判断 P(k1,S) 是否等于H(M).如果相等,你就可以确定这其烂无比的文章确实是我写的.<br />或者确定那个狗屁不通的审批确实是某大人批准的.</p>
		<p>
				<br />(三)除了使用公钥加密算法来实现数字签名,还可以用HMAC来实现:</p>
		<p>HMAC即散列后的消息验证代码”(Hashed Messsage Authentication Code)<br />微软MSDN上这么说:<br /><font color="#666699">将共享密钥混合在摘要中，即创建 H(S+M)。您收到消息后，可以使用自己的 S 副本来创建 H'(S+M)。<br />在使用 HMAC 时，完整性保护的有效性取决于攻击者计算出 S 的能力。因此，S 应该不容易被猜出，并应该经常更改 S。符合以上要求的最好方法之一是使用 Kerberos。在 Kerberos 中，中央机构将在两个实体希望通信时分配包含临时会话密钥的“票”。此会话密钥将用作共享密钥。在要将签名发送给您时，我将得到一张票，以和你通信。我打开票中的属于我的那一部分来获得 S，然后将消息、消息的 HMAC 和票中您的那一部分发送给您。您打开票（使用原来通过 Kerberos 注册的密钥），获取 S 以及有关我身份的信息。您现在可以获得消息 M，生成自己的 H'(S+M)，并查看它们是否匹配。如果匹配，表明您原封不动地收到了我的消息，并且 Kerberos 将通知您我是谁。</font></p>
		<p>Kerberos是古希腊神话里的地域门口的一条三头狗.也是MIT麻省理工大学发明的一种协议.要使用这个协议需要配置一个分发服务器,似乎比较麻烦...</p>
<img src ="http://www.cppblog.com/aqazero/aggbug/14220.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/aqazero/" target="_blank">brent</a> 2005-12-19 09:13 <a href="http://www.cppblog.com/aqazero/archive/2005/12/19/14220.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>