数字签名dsa算法
‘壹’ 什么是数字签名
简单地说,所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。它是对电子形式的消息进行签名的一种方法,一个签名消息能在一个通信网络中传输。基于公钥密码体制和私钥密码体制都可以获得数字签名,目前主要是基于公钥密码体制的数字签名。包括普通数字签名和特殊数字签名。普通数字签名算法有RSA、ElGamal、Fiat-Shamir、Guillou-
Quisquarter、Schnorr、Ong-Schnorr-Shamir数字签名算法、Des/DSA,椭圆曲线数字签名算法和有限自动机数字签名算法等。特殊数字签名有盲签名、代理签名、群签名、不可否认签名、公平盲签名、门限签名、具有消息恢复功能的签名等,它与具体应用环境密切相关。显然,数字签名的应用涉及到法律问题,美国联邦政府基于有限域上的离散对数问题制定了自己的数字签名标准(DSS)。一些国家如法国和德国已经制定了数字签名法。
您可到GlobalSign
的官方网站进行详细了解!
‘贰’ 在数字签名算法DSA中,如果Alice签名时秘密随即选取的k被泄露,那么将会发生什么问题
签名可以理解为用alice的私钥对需要签名的数据进行加密的过程。由于私钥只有本人持有且加密过的内容只能由对应的公钥解开,所以对方用alice的公开密钥解密就可以知道是不是由alice本人签发。
所以你的问题不正确,alice不能用随机选取的key签名,而只能用自己的私钥签名。
如果私钥泄露了,那持有这把私钥的人就可以冒用alice的身份。另外,持有了私钥,就可以解开别人给alice发送的私信(用alice的公钥加密的信息)。
‘叁’ 带密钥的消息摘要算法——数据签名算法
数字签名算法可以看做是一种带有密钥(公钥+私钥)的消息摘要算法,也就是说,数据签名算法是非对称加密算法和消息摘要算法的结合体。该算法包含签名和验证两项操作,遵循 “私钥签名,公钥验证” 的签名/验证方式。
1、甲方构建密钥对,并能公布公钥给乙方。
2、甲方想乙方发送数据需要附加签名。
3、乙方使用公钥和签名验证数据。
RSA数字签名算法主要可以分为:MD、SHA两类。该算法公钥通常要比私钥短。
RSA数字签名示例:
在实现层面上,可以认为DSA算法实现就是RSA算法实现的精简版。DSA算法仅支持SHA系列消息摘要算法。
DSA数字签名示例:
ECDSA算法相对于传统签名算法具有速度快、强度高、签名短等优点。微软操作系统及办公软件的序列号验证就使用了该算法。
ECDSA算法示例:
‘肆’ dsa的签名过程比rsa短
DSA(用于数字签名算法)的签名生成速度很快,验证速度很慢,加密时更慢,但解密时速度很快,安全性与RSA密钥相等,而密钥长度相等。此为一些重要的话,现在是一些观点。
RSA算法(可用于加密和数字签名)的安全性基于这样的事实:大整数的因式分解被认为是‘难以破解’(困难的),而DSA安全性基于离散对数问题。今天已知用于分解大整数块的最快算法是通用数字场筛(可以理解为对简单合理筛或二次筛的改进算法),也是解决有限域中的离散对数问题的最快算法,该算法以DSA指定的大素数为模。
如果你的计算机安装了OpenSSL,请运行。您将看到DSA在生成签名时执行的很快,但在验证具有相同密钥长度的签名时速度要慢得多。通常来说你想要验证得(速度)更快,如果你处理的是一个已签名的文件,(而如果你的)签名只生成一次,这很好,但文件签名最终可能会被用户频繁地验证(这就不好了,因为验证速度很慢)。
‘伍’ 什么是古典加密算法
古典加密算法分为替代算法和置换移位法。
1.替代算法
替代算法指的是明文的字母由其他字母或数字或符号所代替。最着名的替代算法是恺撒密码。凯撒密码的原理很简单,其实就是单字母替换。我们看一个简单的例子:
明文:abcdefghijklmnopq
密文:defghijklmnopqrst
若明文为student,对应的密文则为vwxghqw 。在这个一一对应的算法中,恺撒密码将字母表用了一种顺序替代的方法来进行加密,此时密钥为3,即每个字母顺序推后3个。由于英文字母为26个,因此恺撒密码仅有26个可能的密钥,非常不安全。
为了加强安全性,人们想出了更进一步的方法:替代时不是有规律的,而是随机生成一个对照表。
明文:abcdefghijklmnopqrstuvwxyz
密文:xnyahpogzqwbtsflrcvmuekjdI
此时,若明文为student,对应的密文则为 vmuahsm 。这种情况下,解密函数是上面这个替代对照表的一个逆置换。
不过,有更好的加密手段,就会有更好的解密手段。而且无论怎样的改变字母表中的字母顺序,密码都有可能被人破解。由于英文单词中各字母出现的频度是不一样的,通过对字母频度的统计就可以很容易的对替换密码进行破译。为了抗击字母频度分析,随后产生了以置换移位法为主要加密手段的加密方法。
2.置换移位法
使用置换移位法的最着名的一种密码称为维吉尼亚密码。它以置换移位为基础的周期替换密码。
前面介绍的替代算法中,针对所有的明文字母,密钥要么是一个唯一的数,要么则是完全无规律可寻的。在维吉尼亚密码中,加密密钥是一个可被任意指定的字符串。加密密钥字符依次逐个作用于明文信息字符。明文信息长度往往会大于密钥字符串长度,而明文的每一个字符都需要有一个对应的密钥字符,因此密钥就需要不断循环,直至明文每一个字符都对应一个密钥字符。对密钥字符,我们规定密钥字母a,b,c,d……y,z对应的数字n为:0,1,2,3……24,25。每个明文字符首先找到对应的密钥字符,然后根据英文字母表按照密钥字符对应的数字n向后顺序推后n个字母,即可得到明文字符对应的密文字符。
如果密钥字为deceptive , 明文为 wearediscoveredsaveyourself,则加密的过程为:
明文: wearediscoveredsaveyourself
密钥: deceptivedeceptivedeceptive
密文: zicvtwqngrzgvtwavzhcqyglmgj
对明文中的第一个字符w,对应的密钥字符为d,它对应需要向后推3个字母,w,x,y,z,因此其对应的密文字符为z。上面的加密过程中,可以清晰的看到,密钥deceptive被重复使用。
古典密码体制将数学的方法引入到密码分析和研究中。这为现代加密技术的形成和发展奠定了坚实的基础。
‘陆’ 12 签名算法
签名算法是公钥密码学的“消息认证码”,它主要包括3个部分:
签名算法可以在加密算法的基础上构建。使用一个私钥,可以对一个消息产生一个值,通常是使用hash算法来生成。任何人都可以用公钥来检查这个值,计算该值是否由消息计算得到,然后将两者进行验证。和公钥加密算法一个明显的不同是,使用私钥来产生消息(这个情形下就是签名),使用公钥去解析它,这个和加密的过程是反过来的。
上面的说明是对后面很多重要细节的概述。本文将继续讨论一些细节。
数字签名算法(Digital Signature Algorithm DSA)是英国联邦政府的一个数字签名标准。它由NIST(National Institute of Standards and Technology)在1991年第一次提出,用来作为数字签名的标准(Digital Signature Standard DDS)。该算法由NSA的技术顾问David W.Kravitz发布。
DSA的密钥生成分为两步:第一步,选择在用户中共享的参数。第二步,为每一个用户生成一份公私钥对。
首先需要挑选一个被推荐的密码hash函数H,密钥长度L和一个素数长度N。原始的DSS中推荐L的长度为512和1024之间,现在NIST推荐密钥的长度为3072位这样密钥的安全生命周期就可以到2030年。随着L的增长,N也需要增长。
接下来选择素数q,其长度为N位。N需要小于或者等于hash输出的长度。再选择一个L位长度的素数p,使得p-1是q的倍数。
最后一部分是最容易让人困惑的。需要找到一个数字g,它的乘法序模p是q。最简单的方法是设
也可以尝试其他比2大,比p-1小的数。
一旦确定了(p,q,g),可以将其在用户中共享。
有了参数,就该来位用户计算公钥和私钥了。首先,选择随机数x (0<x<q), 接下来计算y y=g^x(mod p).这样私钥就是x,公钥为(p,q,g,y)。
为了对消息进行签名,签名者在0-q之间挑选一个随机数k。如何挑选k是一个很敏感和相关的过程,这个在之后进行讨论。当k选定后,可以计算消息m的签名的两部分r和s:
如果两者中任意一个是0(罕见时间),再重新选择一个k。
验证签名需要一个复杂的计算。给定消息m和签名(r,s):
如果签名是有效的,那么v就会等于r,也就是签名的第二部分。
虽然目前DSA算法自身没有什么问题,但是它却很容易出错。进一步说,DSA是非常敏感的,仅仅是一个很小的实现上的错误就可以毁掉整个机制。
特殊来看,签名参数k的选择是非常严格的。可以说是密码系统中对于随机数选择中最严格的。例如,很多算法需要一个nonce值。nonce值仅仅需要唯一,它不需要私密。它也不需要不可预测。nonce值通常可以使用简单的计数器或者时钟。很多其他算法例如CBC模式,需要一个初始化向量。它不需要是唯一的,只需要是不可预测的。它也不需要是私密的:初始化向量通常和密文一起。但是DSA算法的随机数k是以上的组合:
如果没有满足这些特性,攻击者可以尝试从一定数量的签名中得到你的私钥。例如,攻击者只要知道k的一些位,和比较多的有效签名,就可以恢复出私钥。[NS00]
实际中DSA的很多实现都不能保证唯一性,愉快地重用随机数k。这就使得只需要使用简单的数学就可以恢复密钥。因为这个攻击很容易理解,应用非常广泛并且可以造成非常严重的影响,本节将讨论它的细节。
假设攻击者看到了很多对于不同消息mi的签名(ri,si),它们使用了相同的k。攻击者可以挑选出两个签名(r1,s1)和(r2,s2),假设它们的原消息位m1和m2.s1和s2的是通过如下计算得到的
攻击者可以推断出r1和r2是相同的,因为
重用了相同的k,而r仅仅依赖于k,所以r是相同的。另外由于签名者使用的是同一个密钥,两个公式中的x也是相同的。
将两个s相减,得到一下的计算:
可以得到k
两个hash值H(m1)和H(m2)很容易计算。它们并没有加密,被签名的消息是公开的。签名的两个s1和s2是签名的组成部分,攻击者都可以看到。所以攻击者可以计算得到k。目前它还没有得到私钥x,然后用私钥去伪造签名。
再次看下s的计算过程,这次把k当作是已知项,x作为需要解决的变量。
所有有效的签名都满足这个等式,所以可以尝试任意一个签名。来解出x
同样的H(m)是公开的,攻击者可以计算出k。假设他们已经计算出了k,s本身就是签名的一部分。现在只需要计算r^(-1)(mod q)(也就是r相对于模q的逆元),这个同样也可以计算出来。(更多信息可以查看附录中有关于现代数学,记住q是个素数,所以这个模的逆元是可以直接计算的)。这也就意味着攻击者,只要发现了任何签名的k,就可以得到私钥的值。
目前为止,本节中假设的是签名者一直使用的同一个随机数k。更糟的是,签名者只要在攻击者可以看到的签名中,有两个签名复用k一次。如上,k重复了,r就会重复。而r是签名的一部分,签名者的这个错误非常容易被观察到。这样即便签名者只是很罕见地重用了k(比方说随机数生成器的问题),只一次,攻击者就可以打破这个DSA系统。
简而言之,在DSA签名算法中重用参数k就意味着攻击者可以破解出私钥。
TODO:
和一般的DSA相同,k的选择是极为严格的。攻击者可以使用几千个签名,这些签名的nonce仅仅有一些位泄漏,攻击者便可以破解出签名的私钥。
本章描述的签名算法有一个特点被称为:不可抵赖性。简单说,它意味着不可以否认自己就是签名消息的发送者。任何人都可以验证你用私钥签署的签名。但是签名只有你可以做。
这通常并不是一个有用的特性,只有少数接受者可以验证签名可能更加谨慎。这种算法通常需要只有接受者才可以计算出这个特殊的值。
这些消息是可以拒绝的,例如一种通常被称为“可以否认的消息认证”。一个发送者认证一条消息给接收者,发送者之后可以否认它发送了这条消息。接收者也无法向任何人证明发送者给他发送了特定的消息。
‘柒’ DSA数字签名算法的证明中的步骤不解,请大家帮帮忙指导一下,谢谢!
因为p、q互素,因此v中的mod p不影响同余关系,g、y也是不影响同余关系的,
因此可以把u1和u2直接代入v中。
‘捌’ 数字签名算法的三个条件是什么
数字签名算法至少应该满足三个条件:
接收者能够核实发送者对报文的签名;
发送者事后不能抵赖对其报文的签名;
接收者无法伪造对报文的签名。
数字签名算法是数字签名标准的一个子集,表示了只用作数字签名的一个特定的公钥算法。密钥运行在由SHA-1产生的消息哈希:为了验证一个签名,要重新计算消息的哈希,使用公钥解密签名然后比较结果。缩写为DSA。
数字签名是电子签名的特殊形式。到目前为止,至少已经有 20 多个国家通过法律 认可电子签名,其中包括欧盟和美国,我国的电子签名法于 2004 年 8 月 28 日第十届全 国人民代表大会常务委员会第十一次会议通过。数字签名在 ISO 7498-2 标准中定义为: “附加在数据单元上的一些数据,或是对数据单元所作的密码变换,这种数据和变换允许数据单元的接收者用以确认数据单元来源和数据单元的完整性,并保护数据,防止被人(例如接收者)进行伪造”。数字签名机制提供了一种鉴别方法,以解决伪造、抵赖、冒充和篡改等问题,利用数据加密技术、数据变换技术,使收发数据双方能够满足两个条件:接收方能够鉴别发送方所宣称的身份;发送方以后不能否认其发送过该数据这一 事实。
数字签名是密码学理论中的一个重要分支。它的提出是为了对电子文档进行签名,以 替代传统纸质文档上的手写签名,因此它必须具备 5 个特性。
(1)签名是可信的。
(2)签名是不可伪造的。
(3)签名是不可重用的。
(4)签名的文件是不可改变的。
(5)签名是不可抵赖的。
参考链接:数字签名算法_网络
http://ke..com/view/11763940.htm
‘玖’ 数据在网络上传输为什么要加密现在常用的数据加密算法主要有哪些
数据传输加密技术的目的是对传输中的数据流加密,通常有线路加密与端—端加密两种。线路加密侧重在线路上而不考虑信源与信宿,是对保密信息通过各线路采用不同的加密密钥提供安全保护。
端—端加密指信息由发送端自动加密,并且由TCP/IP进行数据包封装,然后作为不可阅读和不可识别的数据穿过互联网,当这些信息到达目的地,将被自动重组、解密,而成为可读的数据。
数据存储加密技术的目的是防止在存储环节上的数据失密,数据存储加密技术可分为密文存储和存取控制两种。前者一般是通过加密算法转换、附加密码、加密模块等方法实现;后者则是对用户资格、权限加以审查和限制,防止非法用户存取数据或合法用户越权存取数据。
常见加密算法
1、DES(Data Encryption Standard):对称算法,数据加密标准,速度较快,适用于加密大量数据的场合;
2、3DES(Triple DES):是基于DES的对称算法,对一块数据用三个不同的密钥进行三次加密,强度更高;
3、RC2和RC4:对称算法,用变长密钥对大量数据进行加密,比 DES 快;
4、IDEA(International Data Encryption Algorithm)国际数据加密算法,使用 128 位密钥提供非常强的安全性;
5、RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,非对称算法; 算法如下:
首先, 找出三个数,p,q,r,其中 p,q 是两个不相同的质数,r 是与 (p-1)(q-1) 互为质数的数。
p,q,r这三个数便是 private key。接着,找出 m,使得 rm == 1 mod (p-1)(q-1).....这个 m 一定存在,因为 r 与 (p-1)(q-1) 互质,用辗转相除法就可以得到了。再来,计算 n = pq.......m,n 这两个数便是 public key。
6、DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准),严格来说不算加密算法;
7、AES(Advanced Encryption Standard):高级加密标准,对称算法,是下一代的加密算法标准,速度快,安全级别高,在21世纪AES 标准的一个实现是 Rijndael 算法。
8、BLOWFISH,它使用变长的密钥,长度可达448位,运行速度很快;
9、MD5:严格来说不算加密算法,只能说是摘要算法;
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
(9)数字签名dsa算法扩展阅读
数据加密标准
传统加密方法有两种,替换和置换。上面的例子采用的就是替换的方法:使用密钥将明文中的每一个字符转换为密文中的一个字符。而置换仅将明文的字符按不同的顺序重新排列。单独使用这两种方法的任意一种都是不够安全的,但是将这两种方法结合起来就能提供相当高的安全程度。
数据加密标准(Data Encryption Standard,简称DES)就采用了这种结合算法,它由IBM制定,并在1977年成为美国官方加密标准。
DES的工作原理为:将明文分割成许多64位大小的块,每个块用64位密钥进行加密,实际上,密钥由56位数据位和8位奇偶校验位组成,因此只有56个可能的密码而不是64个。
每块先用初始置换方法进行加密,再连续进行16次复杂的替换,最后再对其施用初始置换的逆。第i步的替换并不是直接利用原始的密钥K,而是由K与i计算出的密钥Ki。
DES具有这样的特性,其解密算法与加密算法相同,除了密钥Ki的施加顺序相反以外。
参考资料来源:网络-加密算法
参考资料来源:网络-数据加密
‘拾’ 密码加密的算法有哪些
主要分为 对称加密算法 和 非对称加密算法两类
对称加密算法:使用单个密钥对数据进行加密或解密,其特点是计算量小,加密效率高.
代表 DES 算法
非对称加密算法:此算法均有两个密钥(公用密钥和私有密钥),只有二者搭配使用才能完成加密和解密的全过程.
代表 DSA算法, 数字签名算法(DSA) , MD5算法 , 安全散列算法(SHA)