2012年3月8日

摘要: 上一节,我们展示了一张证书,在Windows中验证正常,但用OpenSSL工具却出现证书验证错误。究竟是哪一方“犯了错”,暂时也看不出来。怎么办?聪明的读者首先会想到,能否用第三方程序进行验证?对,这是个好主意。那请谁呢,我们又请出Perl这个老朋友,在“从数学到密码学”系列中,我们已经初见其锋芒。在后面几节中,我们还将继续领教其威力,暂且不表。直奔主题,我们将用验证证书的基本原理,再经历一次从理论到实践的过程。从出错证书的信息来看,该证书使用sha1WithRSAEncryption签名算法签发,用此算法签发的证书,验证公式如下(证书的签名部分signatureValue)e=SHA1(证书 阅读全文
posted @ 2012-03-08 02:50 efzju 阅读(2275) 评论(2) 推荐(0) 编辑
 

2012年3月4日

摘要: 笔者手头有一张证书,内容如下(PEM格式)-----BEGIN CERTIFICATE-----MIICkzCCAfygAwIBAgIJAACiQkqialHfMA0GCSqGSIb3DQEBBQUAMEsxCzAJBgNVBAYTAkNOMQswCQYDVQQIEwJCSjEUMBIGA1UEChMLTmV0U2VjdXJpdHkxDDAKBgNVBAsTA1NTTDELMAkGA1UEAxMCQ0EwHhcNMTExMTAzMTY1MDUxWhcNMTIxMTAyMTY1MDUxWjBPMQswCQYDVQQGEwJDTjELMAkGA1UECBMCQkoxFDASBgNVBAoTC05l 阅读全文
posted @ 2012-03-04 01:28 efzju 阅读(5454) 评论(1) 推荐(2) 编辑
 

2012年1月1日

摘要: 数字证书、CA及PKI(二)本节我们正式验证数字证书sslclientcert中签名的合法性,根据RFC2459,证书内容分为三部分:tbsCertificate、signatureAlgorithm和signatureValue。证书中signatureAlgorithm内容是sha1WithRSAEncryption,结合RSA算法,得到验证公式如下signatureValuee=SHA1(tbsCertificate)(mod n)计算右边,待签名消息tbsCertificate内容如下00000000h: 30 82 01 FC A0 03 02 01 02 02 09 00 9D A 阅读全文
posted @ 2012-01-01 00:32 efzju 阅读(856) 评论(1) 推荐(1) 编辑
 

2011年12月31日

摘要: 数字证书、CA及PKI(一)经过前面几节的铺垫,我们终于可以对数字证书好好剖析一番了。再次回顾,什么是数字证书?答曰:证明某某人拥有某公钥的一份数字文件。既然是证明文件,证明人(又称证书颁发者)的身份是必不可少的,即数字证书中也要包含颁发者的信息。当然,文件中还必须包括:被证明人的身份(是谁,叫什么名字)和持有的公钥,即要证明的主要内容。此外,还可能包括其他的一些辅助信息。下面就以笔者PC上的一个证书文件sslclientcert.pem为例,进行说明。其实际内容如下(用Windows自带的记事本NotePad打开)-----BEGIN CERTIFICATE-----MIICkzCCAfyg 阅读全文
posted @ 2011-12-31 00:58 efzju 阅读(1730) 评论(0) 推荐(0) 编辑
 

2011年12月9日

摘要: 数字签名(三)上一节,我们找到Bob信任的Trent,让Trent对"Carol的公钥是Y"这一消息进行签名,Bob收到消息及签名后,用Trent的公钥验证签名的正确性(或合法性),从而相信Carol的公钥真的是Y,Bob就可以放心地用公钥Y给Carol发送加密信息了。但是Trent的公钥从何而来?只有两种途径,一、直接方式,即Bob通过某种可信渠道(比如两人亲自见面)直接得到Trent的公钥。二、间接方式,即Bob并不认识Trent,而是通过信任传递来相信Trent的公钥。举个例子,Bob信任Alice,同时Alice又信任Trent,则Bob由于信任Alice而信任Tr 阅读全文
posted @ 2011-12-09 01:36 efzju 阅读(501) 评论(0) 推荐(0) 编辑
 

2011年12月7日

摘要: 数字签名(二)上一节留下两个问题:一、验证Trent签名真伪性的算法V是否存在二、Trent的公开信息PT从何而来再一次把目光停留在公式V(M,Sig(M,ST),PT)=True上,在等式中出现了两个关于Trent的参数:ST和PT。根据上节的描述,ST和PT分别是与Trent身份有关的秘密和公开的参数,而且它们是成对出现,这给我们什么启示呢?仔细回想前面讲过的内容,你会突然发现,这恰好和公钥密码学中公私钥对的概念类似:一个是公开的,另一个是秘密保存的。只不过在前面的叙述中,公钥公开是用于加密,秘密持有的私钥则用于解密。一个自然而然的猜测就是:Trent的公私钥对,是否真的能应用于上述公式, 阅读全文
posted @ 2011-12-07 01:40 efzju 阅读(585) 评论(0) 推荐(1) 编辑
 

2011年11月27日

摘要: 数字签名(一)正式开始之前,我们先讨论下,实际生活中,当遇到上一节最后提到的信任问题----让人相信可信的第3方出具的证明----这一问题时,通常是怎么解决的。稍加考虑,我们就会得到简单结论:因为这些证明都附加了令人相信的证据,比如有第3方的亲手签名或盖章。有的朋友可能有过这样的经历,当需要去外面的单位(假设为X单位)参加会议时,通常会由本单位(假设为Z单位)开具一份介绍信,上面大概内容如下:X单位:现有我单位同志张三,前往贵单位参加某某会议,请招待,某年某月某日。落款为Z单位,并加盖Z单位的公章。请注意,这里Z单位的公章必不可少,X单位收到介绍信后,就是靠信上的公章来相信,介绍信的持有人就是 阅读全文
posted @ 2011-11-27 22:20 efzju 阅读(556) 评论(0) 推荐(0) 编辑
 

2011年11月16日

摘要: 公钥的应用--加解密(二)加解密的问题搞定以后,我们还剩下一个重要的问题未解决:公钥的分发。有的同学可能有印象,会说,你这个公钥不是到处公布吗,有什么问题?请注意,公布公钥的时候同时要说明公钥拥有者的身份。如果有人别有用心(记为Eve),自己偷偷地生成一个公钥Y(记住,生成公钥的同时也会得到对应的私钥X),然后冒充Alice的身份,在网上发布消息说,Alice的公钥是Y。那么会产生什么后果?假设Bob不知情,相信了这条消息,他想给Alice发送一条加密消息(Bob不想让别人看到消息内容),即使Alice收到这条加密消息,也不能解密得到明文(Alice用自己的私钥解密只能得到一堆乱码),相反如果 阅读全文
posted @ 2011-11-16 01:42 efzju 阅读(479) 评论(0) 推荐(0) 编辑
 
摘要: 公钥的应用--加解密(一)仍然以RSA算法为例,分别讨论让我们再次祭起屠龙宝剑--OpenSSL工具,让它来给我们展示RSA加解密是怎样操作的。前已知,进行加密操作需要知道接收方的RSA公钥,和需要加密的明文,然后再进行加密运算,最后得到密文。公钥从哪里来,就让OpenSSL自动给我们生成吧(当然需要你去执行必要的命令),为了做到这一点,手头必须拥有OpenSSL工具。至于怎么获取,请google之,网上有N多的文章。其中一种办法,就是到www.openssl.org下载源码包并进行编译(Windows下可以利用VC进行编译),可以得到OpenSSL可执行程序。当然,如果你用的是Linux,则 阅读全文
posted @ 2011-11-16 00:56 efzju 阅读(705) 评论(0) 推荐(0) 编辑
 

2011年10月18日

摘要: RSA算法再讨论--从理论到实践在第9节的最后,我们提到过如下定理1、设|a|=m,则对于任意正整数n,an=1←→m|n2、G为有限交换群,G中元素的最大阶=n,则G中任一元素的阶整除n注意到乘法群Zn*也是有限交换群,所以以上定理也成立。可以证明:Zn*中所有元素的最大阶是p-1与q-1的最小公倍数,简记为LCM(p-1,q-1)。不熟悉最小公倍数概念的同学赶紧去找一本小数数学书复习。根据上述定理,对于任意与n互素的数a, a|a|≡aLCM(p-1,q-1)≡1(mod n)成立可以仿照上一节公私钥对选择的思路,找到使d*e≡1(mod LCM(p-1,q-1))成立的一对数(e,d), 阅读全文
posted @ 2011-10-18 02:16 efzju 阅读(736) 评论(0) 推荐(0) 编辑