数字签名

来源:互联网 发布:西门子编程器pg m4价格 编辑:程序博客网 时间:2024/06/01 07:38

通俗易懂的数字签名解析链接:
http://www.cnblogs.com/1-2-3/archive/2007/09/17/colloquialism-digital-certificate-part1.html
http://www.cnblogs.com/1-2-3/archive/2007/09/19/colloquialism-digital-certificate-part2.html
http://www.cnblogs.com/1-2-3/archive/2007/10/08/colloquialism-digital-certificate-part3.html
(一) 规则:使用DSA签名时要保证签名的r值不等于1

说明:使用DSA进行数字签名时,签名的结果为(r, s),这里需要对r值进行校验,若r=1则需重新生成签名。因为如果r=1,这种情况下找到s使得(r, s)通过验证的复杂度可能比正常情况下伪造签名难度要低很多。

(二) 规则:在同时进行加密和签名时,使用先签名后加密的方式

说明:先签名后加密是指先对消息进行签名,然后将签名和消息一起进行加密。如果采用先加密后签名的方式,接收方只能知道该消息是由签名者发送过来的,但并不能确定签名者是该消息的创建者。比如在发送一个认证凭据时采用先加密后签名,消息在发送过程中就有可能被第三方截获并将签名修改为自己的签名,然后发送给接收方。第三方就有可能在不需知道认证凭据的情况下通过这种方式来通过认证获取权限。
采用先签名后加密方式可以避免这类问题的发生,因为只有在知道消息内容的情况下才能对其进行签名。

(三) 规则:不要使用二进制域的ECDSA认证方式

说明:ECDSA使用了椭圆曲线密码学原理(ECC , Elliptic curve cryptography),ECC有素数域和二进制域两种实现方式,后者在专门的硬件上实现计算更为有效,前者通常在通用的处理器上更为有效。

2011年3月19日,两位研究者在他们发表的IACR论文中证明:通过时间攻击从使用带二进制域ECDSA认证的OpenSSL的服务器中恢复出TLS私钥是可能的[1]。这种威胁在OpenSSL 1.0.0e版本中已经修复。出于安全考虑,不要再使用二进制域的ECDSA签名认证方式。

数字信封:数字信封不同于数字签名,是利用非对称加密技术对(AES、DES)密钥进行加密传输,同时发送了通过AES等加密过的数据,是非对称加密效率太慢和对称加密算法密钥不安全传输的解决手段。发送方用一个随机产生的AES密钥加密原始数据(消息),然后用接受方的公钥加密AES密钥,称为消息的“数字信封”。将数字信封同AES加密消息一起发送给接受方,接受方在接收到消息后,先用其私钥对“数字信封”进行解密(打开数字信封),得到发送方的DES密钥,再用此密钥去解密消息。只有用接受方的RSA私钥才能打开数字信封,这样确保了接受者的身份。

数字证书:由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的包含公开密钥拥有者信息以及公开密钥的文件,只在特定的时间段内有效。数字证书的出现是为了解决防止黑客冒充服务器,自己生成私钥和公玥,骗取用户信任的方式。数字证书可以保证数字证书里的公钥确实是这个证书的所有者(Subject)的,或者证书可以用来确认对方的身份。
1 RSA数字签名的流程(报文明文形式)

这里写图片描述
2 RSA数字签名的流程(报文密文形式)

这里写图片描述
这个过程和数字信封很像,单纯数字信封流程要简单一点,数字信封传输的仅仅是AES等对称加密算法的密钥和加密密文,没有计算摘要比对的过程,更多的情况是仅仅作为第一次数据交换时的密钥协商过程,是对称密钥分发的方法。
http://www.cnblogs.com/jeffreysun/archive/2010/06/24/1627247.html
http://www.cnblogs.com/xiaopin/archive/2011/07/19/2110210.html
上面的这个博客非常细致的描述了其中的通信过程
这里写图片描述

关于HTTPS的真实通信过程,需要注意的地方,摘抄了参考博客的部分内容

【问题1】

上面的通信过程中说到,在检查完证书后,“客户”发送一个随机的字符串给“服务器”去用私钥加密,以便判断对方是否真的持有私钥。但是有一个问题,“黑客”也可以发送一个字符串给“服务器”去加密并且得到加密后的内容,这样对于“服务器”来说是不安全的,因为黑客可以发送一些简单的有规律的字符串给“服务器”加密,从而寻找加密的规律,有可能威胁到私钥的安全。所以说,“服务器”随随便便用私钥去加密一个来路不明的字符串并把结果发送给对方是不安全的。

〖解决方法〗

每次收到“客户”发来的要加密的的字符串时,“服务器”并不是真正的加密这个字符串本身,而是把这个字符串进行一个hash计算,加密这个字符串的hash值(不加密原来的字符串)后发送给“客户”,“客户”收到后解密这个hash值并自己计算字符串的hash值然后进行对比是否一致。也就是说,“服务器”不直接加密收到的字符串,而是加密这个字符串的一个hash值,这样就避免了加密那些有规律的字符串,从而降低被破解的机率。“客户”自己发送的字符串,因此它自己可以计算字符串的hash值,然后再把“服务器”发送过来的加密的hash值和自己计算的进行对比,同样也能确定对方是否是“服务器”。

【问题2】

在双方的通信过程中,“黑客”可以截获发送的加密了的内容,虽然他无法解密这个内容,但是他可以捣乱,例如把信息原封不动的发送多次,扰乱通信过程。

〖解决方法〗

可以给通信的内容加上一个序号或者一个随机的值,如果“客户”或者“服务器”接收到的信息中有之前出现过的序号或者随机值,那么说明有人在通信过程中重发信息内容进行捣乱,双方会立刻停止通信。有人可能会问,如果有人一直这么捣乱怎么办?那不是无法通信了? 答案是的确是这样的,例如有人控制了你连接互联网的路由器,他的确可以针对你。但是一些重要的应用,例如军队或者政府的内部网络,它们都不使用我们平时使用的公网,因此一般人不会破坏到他们的通信。

【问题3】

在双方的通信过程中,“黑客”除了简单的重复发送截获的消息之外,还可以修改截获后的密文修改后再发送,因为修改的是密文,虽然不能完全控制消息解密后的内容,但是仍然会破坏解密后的密文。因此发送过程如果黑客对密文进行了修改,“客户”和“服务器”是无法判断密文是否被修改的。虽然不一定能达到目的,但是“黑客”可以一直这样碰碰运气。

〖解决方法〗

在每次发送信息时,先对信息的内容进行一个hash计算得出一个hash值,将信息的内容和这个hash值一起加密后发送。接收方在收到后进行解密得到明文的内容和hash值,然后接收方再自己对收到信息内容做一次hash计算,与收到的hash值进行对比看是否匹配,如果匹配就说明信息在传输过程中没有被修改过。如果不匹配说明中途有人故意对加密数据进行了修改,立刻中断通话过程后做其它处理。

【问题4】

问:数字认证和数字签名是两个不同的东西吗?(摘自51job)

http://netsecurity.51cto.com/art/201010/229109.htm

〖解决方法〗

答:是的,数字认证和数字签名很不同。数字认证是用来验证网站的可信度的,而数字签名是用来验证信息的可信度的。说到数字认证,组织可能只信任这种网站,即该网站数字认证是由组织自己发布,或者是由信任的认证组织发布(如Verisign公司)。但是,这也并不意味着网站的内容是可信的;一个可信任的网站也可能会被黑客侵入,并修改网站的内容。

数字签名为对象中的信息创建校验和,这样接收者就可以验证收到的信息有没有被修改。例如,如果你在邮件中发送了一个签名的Word附件,发送途中发生了中间人攻击(黑客通过一些方法获得了传输途中的附件,并且插入了一些恶意代码),当接收者在打开附件之前检查它时,内容校验和与修改的Word附件不符,它就会警告接收者接收的内容已经被修改。

还有其它的一些事情需要考虑:使用数字认证的企业不需要与远程站点建立关系;他们只要能识别该网站所使用的数字认证授权并验证它即可。但是,说到数字签名,接收者必须与发送者或托管网站建立一定的关系。这种关系需要确定校验和信息被发送的地点和方式,通过通信渠道而不是内容传输的方式,来减少被修改的风险。你也不希望黑客同时具有修改内容和数字签名校验和的能力吧。理想情况下,在一个不信任的环境中,如互联网上的企业对企业(B2B)交易,你可以连接使用可信任数字认证的网站,并且该网站的任何传输内容都具有数字签名(保证信息未被修改)。

【问题5】

问:电子签名和数字签名的区别?(摘自51job)

〖解决方法〗

电子签名:要理解什么是电子签名,需要从传统手工签名或盖印章谈起。在传统商务活动中,为了保证交易的安全与真实,一份书面合同或公文要由当事人或其负责人签字、盖章,以便让交易双方识别是谁签的合同,保证签字或盖章的人认可合同的内容,在法律上才能承认这份合同是有效的。而在电子商务的虚拟世界中,合同或文件是以电子文件的形式表现和传递的。在电子文件上,传统的手写签名和盖章是无法进行的,这就必须依靠技术手段来替代。能够在电子文件中识别双方交易人的真实身份,保证交易的安全性和真实性以及不可抵懒性,起到与手写签名或者盖章同等作用的签名的电子技术手段,称之为电子签名。如今电子签名软件众多,在选择的时候要确定是否有国家密码局认定,否则是没有生产资格的,这样的电子签名产品也是不可靠的。

从法律上讲,签名有两个功能:即标识签名人和表示签名人对文件内容的认可。联合国贸发会的《电子签名示范法》中对电子签名作如下定义:”指在数据电文中以电子形式所含、所附或在逻辑上与数据电文有联系的数据它可用于鉴别与数据电文相关的签名人和表明签名人认可数据电文所含信息”;在欧盟的《电子签名共同框架指令》中就规定“以电子形式所附或在逻辑上与其他电子数据相关的数据,作为一种判别的方法”称电子签名。

实现电子签名的技术手段有很多种,但目前比较成熟的,世界先进国家普遍使用的电子签名技术还是“数字签名”技术。由于保持技术中立性是制订法律的一个基本原则,目前还没有任何理由说明公钥密码理论是制作签名的唯一技术,因此有必要规定一个更一般化的概念以适应今后技术的发展。但是,目前电子签名法中提到的签名,一般指的就是”数字签名”。

数字签名:所谓”数字签名”就是通过某种密码运算生成一系列符号及代码组成电子密码进行签名,来代替书写签名或印章,对于这种电子式的签名还可进行技术验证,其验证的准确度是一般手工签名和图章的验证而无法比拟的。”数字签名”是目前电子商务、电子政务中应用最普遍、技术最成熟的、可操作性最强的一种电子签名方法。它采用了规范化的程序和科学化的方法,用于鉴定签名人的身份以及对一项电子数据内容的认可。它还能验证出文件的原文在传输过程中有无变动,确保传输电子文件的完整性、真实性和不可抵赖性。

数字签名在ISO7498-2标准中定义为:”附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。美国电子签名标准(DSS,FIPS186-2)对数字签名作了如下解释:”利用一套规则和一个参数对数据计算所得的结果,用此结果能够确认签名者的身份和数据的完整性”。按上述定义PKI(Public Key Infrastructino 公钥基础设施)提供可以提供数据单元的密码变换,并能使接收者判断数据来源及对数据进行验证。

PKI的核心执行机构是电子认证服务提供者,即通称为认证机构CA(Certificate Authority),PKI签名的核心元素是由CA签发的数字证书。它所提供的PKI服务就是认证、数据完整性、数据保密性和不可否认性。它的作法就是利用证书公钥和与之对应的私钥进行加/解密,并产生对数字电文的签名及验证签名。数字签名是利用公钥密码技术和其他密码算法生成一系列符号及代码组成电子密码进行签名,来代替书写签名和印章;这种电子式的签名还可进行技术验证,其验证的准确度是在物理世界中对手工签名和图章的验证是无法比拟的。这种签名方法可在很大的可信PKI域人群中进行认证,或在多个可信的PKI域中进行交叉认证,它特别适用于互联网和广域网上的安全认证和传输。

0 0