• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

信息安全之数字签名算法介绍(三)

信息安全 彭东稳 8年前 (2015-12-17) 29541次浏览 已收录 0个评论

数字签名介绍

上面一篇文章已经介绍了数据安全性、完整性保护措施,以及密钥交换算法介绍。下面说一说数字签名也就是身份验证的一种实现方式。

数字签名的实现通常采用非对称密码与对称密码体系。数字签名的基本方式主要是:信息发送方首先通过运行散列函数生成一个欲发送报文的信息摘要,然后用其私钥对这个信息摘要进行加密以形成发送方的数列签名,这个数字签名将作为报文的附件和报文一起发送给报文的接收方。接收方在收到信息后首先运行和发送相同的散列函数生成接收报文的信息摘要,然后再用发送方的公钥进行解密,产生原始报文的信息摘要,通过比较两个信息摘要是否相同就可以确认发送方和报文的准确性。当然,上述过程只是对报文进行了签名,对其传送的报文本身并未保密。为了同时实现数字签名和秘密通信,发送者可以用接收方的公钥对发送的信息进行加密,这样,只有接收方才能通过自己的私钥对报文进行接么,其它人即使获得报文并知道发送者的身份,由于没有接收方的密钥也无法理解报文。

数字签名过程

为了实现网络环境下的身份鉴别、数据完整性认证和抗否认的功能,数字签名应满足以下要求:

1)签名者发出签名的消息后,就不能再否认自己所签发的消息。

2)接收者能够确认或证实签名者的签名,但不能否认。

3)任何人都不能伪造签名。

4)第三方可以确认收发双方之间的消息传送,但不能伪造这一过程,这样,当通信的双方关于签名的真伪发生争执时,可由第三方来解决双方的争执。

对于一个典型的数字签名体系而言,它必须包含2个重要的组成部分:即签名算法(Signature Algorithm)和验证算法(Verification Algorithm)。为了满足上述4点要求,数字签名体系必须满足2条基本假设:

1)  签名密钥是安全的,只有其拥有者才能使用。

2)  使用签名密钥是产生数字签名的唯一途径。

发送方签名过程

1)为保证签名的速度,A先将原文进行单向HASH运算生成定长的消息摘要A

2)利用自己的私钥加密消息摘要得到数字签名A,并将数字签名附在原消息后面。

3)通讯时用户A将自己的名文一起通过网络送给通讯对方即用户B

接收方验证过程

1)接收方B接收到发送方A的签名消息后,将消息中的原消息与数字签名分离出来。

2)使用A的公钥解密数字签名得到摘要(怎么得到A的公钥可以想想)。

3)利用与发送方A相同的散列函数重新计算原消息的摘要。

4)比较解密后获得的消息摘要A与重新计算产生的消息摘要B,若相等则说明消息在传输过程中没有被篡改,否则消息不可靠。

数字签名算法

数字签名的方法有很多,现在主要应用的数字签名主要有:RSADSA以及椭圆曲线数字签名ECDSA

DSADSASChnorrELGAmal签名算法的变种,被美NIST作为DSS是一种公开密钥算法,它不能用作加密,只能用作数字签名。DSA使用公开公钥,为接受者验证数据的完整性和数据发送者的身份。它也用作于由第三方去确定签名和所签收数据的真实性。信息交流中,接受方希望收到的信息未被篡改,还希望收到的信息确实是自己认定的发送方所发,那么接受方和发送方就可以约定,共同使用DSA来实现。DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。但它比RSA要快很多。

DSA数字签名实现的三个步骤:

1)参数与密钥生成。

2)签名的算法。

3)签名的验证算法。

1.初始过程 

1)系统参数大素数p, q;且qp-1的因子并满足2^511<p<2^1024, 2^159<q<2^160 ,以确保在 Zp中求解离散对数的困难性。

 Zp , 且满足 g =h ^(p-1)/q mod p,其中h是一整数, 1< h < p-1h^(p-1)/q modp>1 p,q,g 作为系统参数,供所有用户使用,在系统内公开

2)用户私钥:用户选取一个私钥x,1<x< q,保密   3)用户公钥:用户的公钥y,y = g^x mod p,公开

2.签名过程 

对待签消息m, 0<m<p签名过程如下:

1)生成一随机整数 k, k  Zp*

2)计算 r = (g^k mod p) mod q;

3)计算 s = k^-1*(h(m)+x*r) mod q(r,s)为签名人对m的签名

3. 验证过程

1)首先检查rs是否属于[0,q],若不是, (r,s)不是签名;

2)计算t= s^-1mod q , r=(g^h(m) t mod q (y^r*t mod q )mod p) mod q  3)比较r= r 是否成立?若成立,(r,s)为合法签名,(r,s)为签名人对m的签名 

ECDSA:椭圆曲线签名算法ECDSA是基于椭圆曲线密码体制(ECC)的数字签名算法。DSA是美国国家标准局制定的数字签名算法,他是建立在有限域乘法群上的。对于有限域上的椭圆曲线密码系统,数字签名标准建议采用椭圆曲线数字签名算法ECDSA,下面给出该算法的过程。

假设一组椭圆曲线的参数组为(qFRabGnh),其中q是域的阶,FR指示域中元素的表示方法,ab是两个系数,G是基点,G的阶为n,余因子h=#E(Fq)n,他是一个小的素数。

1.ECDSA密钥对生成过程 

1)选择一个随机数d,d(1,n-1)

2)计算Q,Q=d*G

3)那么公钥为Q,私钥为整数d

2.ECDSA签名过程 假设待签名的消息为,m 

1)选择一个随机数kk(1n-1)

2)计算k*G=(x1,y1)

3)计算r=x1 mod n;如果r=O,则返回到步骤(1)

4)计算s=k^-1(e+d*r) mod n,如果s=O,则返回到步骤(1)

5)对消息的签名为(rs),最后签名者把消息m和签名(rs)发送给接收者。

3.ECDSA密钥对验证过程 获得发送者的公钥Q开始验证:  

1)检查rs,要求rs(1n-1)

2)计算e=SHA1(m)

3)计算w=s-1mod n

4)计算u1=e*w mod nu2=r*w mod n

5)计算X=u1G+u2Q

6)如果X=O,表示签名无效;否则,X=(x1y1),计算v=x1 mod n

7)如果v=r,表示签名无效;否则表示签名有效。

RSARSARon RivestAdi ShamirLen Adleman三位天才的名字)算法实现简单,诞生于 1977 年,历史悠久,经过了长时间的破解测试,安全性高。缺点就是需要比较大的素数(目前常用的是 2048 位)来保证安全强度,很消耗 CPU 运算资源。但RSA是目前唯一一个既能用于数据加密又能用于数字签名的算法。

RSA数字签名的过程

首先产生密钥,过程如下:

1)随机产生两个等长度为K/2位的素数 Q

2)然后计算公钥 publicKey=P*Q(publicKey k位的长度)

3)随机产生一个加密密钥 keyE, 2<=keyE<=Φ(n)-1GCD(keyE, Φ(n))=1;注意这是保证解密密钥keyE *keyD mod Φ(n)=1 有解的充要条件,Φ(n)称为n的欧拉函数,值为:Φ(n)=(P-1)*(Q-1)

4)求解解密密钥keyD=keyE-1 mod (n) keyE-1为解密密钥keyD的逆元 ,此公式原方程为 (keyE*keyD mod (n)=1)

由此公钥,加密密钥,解密密钥全部产生。其次 对明文加密或对密文进行解密,过程如下:

1)加密:C = Mkey^E mod publicKey;其中M表示明文,C表示密文。

2)解密:M = Ckey^D mod publicKey.;其中M表示明文,C表示密文。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!