rsa算法是什么算法,rsa算法实现数字签名与信息加密

  

  认证技术主要用于防止对手对系统的主动攻击,如伪装、干扰等,对于开放环境下各种信息系统的安全尤为重要。认证的目的有两个方面:一是验证信息的发送方是合法的,而不是伪装的,即实体认证,包括来源和目的地的认证和识别;二是验证消息的完整性,以及数据在传输和存储过程中是否被篡改、重放和延迟。   

  

  1.散列函数   

  

  (1)哈希函数的概念   

  

  哈希函数是一种单向函数(计算h=H(m)很容易,但是求逆很难)。哈希函数h=H(m),也称为哈希函数,将任意长度的消息m映射到固定长度的输出H(抽象)。此外,该功能除了单向之外,还应满足以下两个条件之一:   

  

  抗碰撞能力弱。对于固定的m,需要找到它,这使得它在计算上不可行。   

  

  抗碰撞能力强。求m的和在计算上是不可行的。   

  

  显然,满足的哈希函数的安全性要求更高,是抵抗生日攻击的要求。散列函数的描述如图3-23所示。   

  

     

  

  (2)哈希函数的构造   

  

  构造哈希函数的方法有很多种,但使用最多的是迭代结构。著名的MD-5和SHA-1都是基于迭代结构。   

  

     

  

  2数字签名   

  

  (1)数字签名的概念   

  

  在RSA公钥密码体制中,如果爱丽丝用自己的私钥D计算出Smd(mod n),然后把S和消息M一起发送给鲍勃,鲍勃用爱丽丝的公钥(n,e)计算出m'ce(mod n),那么M'=M,你想想,这是不是意味着鲍勃相信他收到的S一定是爱丽丝的?上述过程中的s是否等同于Alice在message m上的签名?图3-25总结了上述过程。   

  

  数字签名是一种利用密码运算达到“手写签名”效果的技术。它通过某种数学变换实现数字内容的签名和盖章。在ISO7498-2标准中,数字签名被定义为“附加在数据单元上的一些数据,或者对数据单元进行的密码变换,它允许数据单元的接收者确认数据单元的来源和完整性,并保护数据不被伪造”。   

  

  一个数字签名方案一般由两部分组成:签名算法和验证算法。为了达到“手写签名”的效果,数字签名应该具有不可伪造性、不可否认性和可验证性。对数字签名方案的攻击主要是伪造签名。根据违约程度,该方案可分为三种类型,即:   

  

  完全伪造,即攻击者可以计算出私钥或者找到可以生成合法签名的算法,从而为任意消息生成合法签名;   

  

  (2)选择性伪造,即攻击者可以为某些特定的消息构造合法的签名;   

  

  存在伪造,即攻击者可以伪造至少一条消息的签名,但对消息几乎没有控制权。   

  

  (2)基本签名算法   

  

  数字签名方案通常由公钥密码实现,其中私钥用于签名,公钥用于验证签名。典型的数字签名方案包括RSA算法(R. L. Rivest,A. Shamir和L. M. Adleman,1978),ElGamal签名(T. ElGamal,1985),Schnorr签名(C. P. Schnorr,1989)和DSS签名(NIST,1991)   

  

  ElGamal签名方案   

  

  假设p是一个大素数,g是GF(p)的生成元。Alice的公钥是y=mod p,g,p的私钥是x。   

  

  签名算法:   

  

  爱丽丝首先选择一个与p-1为素数的随机数k。   

  

  爱丽丝,计算a=mod p   

  

  对爱丽丝b,求解方程M=x*a k*b (mod p-1)   

  

  艾丽斯将消息M签名为(a,b)   

  

  认证算法:   

  

  检查mod p=' m' mod p是否有效。   

  

  比如:p=11,g=2,Bob选择x=8作为私钥。   

  

  y=2^8 mod 11=3   

  

  公钥: y=3,g=2,p=11   

  

  鲍勃想在M=5上签名   

  

  选择k=9 (gcd(9,10)=1)   

  

  a=2^9模11=6,b=3   

  

  读者可以检查mod p=' m' mod p是否有效。   

  

  上述方案的安全性基于以下离散对数困难问题:给定大素数p,GF(p)的生成元G和非零元yGF(p),求解唯一整数k,0kp2,使y (mod p)和k称为y对。   

g的离散对数。

  


  

②Schnorr签名方案

  

Schnorr签名方案是一个短签名方案,其安全性是基于离散对数困难性和hash函数的单向性的。假设p和q是大素数,且q能被p-1整除,q是大于等于160bit的整数,p是大于等于512bit的整数,保证GF(p)中求解离散对数困难;g是GF(p)中元素,且^1 mod p;Alice公钥为y ^ (mod p),私钥为x,1<x<q。

  

签名算法:

  

Alice首先选一个与p-1互素的随机数k

  

Alice计算r = h(M,^ mod P)

  

Alice计算s = k + x*r( mod q)

  


  

验证算法:

  

计算^ mod P =^ ^ mod P

  

验证r = h(M, ^ mod P)

  

Schnorr签名较短,由|q|及|H(M)|决定。在Schnorr签名中,r=^ mod p可以预先计算,k与M无关,因而签名只需一次mod q乘法及减法。所需计算量少,速度快,适用于智能卡。

  


  

(3) 特殊签名算法

  

目前国内外研究重点已经从普通签名转向具有特定功能、能满足特定要求的数字签名。如适用于电子现金和电子钱包的盲签名、适用于多人共同签署文件的多重签名、限制验证人身份的条件签名、保证公平性的同时签名以及门限签名、代理签名、防失败签名等。

  


  

盲签名是指签名人不知道签名内容的一种签名,用于电子现金系统,实现不可追踪性。如下是D. Chaum 于1983年提出的一个盲签名方案:

  

假设在RSA密码系统中,Bob的公钥为e,私钥为d,公共模为N。Alice想让Bob对消息M盲签名

  

①Alice 在1和N之间选择随机数k对M盲化:t=M^ mod N。

  

②Bob对t签名,^=〖"(M" ^ ")" 〗^"d" mod N。

  

③Alice对^脱盲:s=^/k mod N=^ mod N,s即为消息M的签名。

  


  

3. 消息认证

  

(1) 消息认证与消息认证码

  

消息认证是指验证者验证所接收到的消息是否确实来自真正的发送方,并且消息在传送中没被修改的过程。消息认证是抗击伪装、内容篡改、序号篡改、计时篡改和信源抵赖的有效方法。

  

加密技术可用来实现消息认证。假如使用对称加密方法,那么接收方可以肯定发送方创建了相关加密的消息,因为只有收发双方才有对应的密钥,并且如果消息本身具有一定结构、冗余或校验和的话,那么接受者很容易发现消息在传送中是否被修改。假如使用公钥加密技术,则接收者不能确定消息来源,因为任何人都知道接收者的公钥,但这种技术可以确保只有预定的接收者才能接收信息。

  

数字签名也可用来实现消息认证。验证者对签名后的数据不仅能确定消息来源,而且可以向第三方证明其真实性,因而还能防止信源抵赖。

  

消息认证更为简单的实现方法是利用消息认证码。

  

消息认证码(MAC)也称密码校验和,是指消息被一密钥控制的公开单向函数作用后,产生的固定长度的数值,即MAC=CK(M)。如图3-26所示,假设通信双方A和B共享一密钥K,A欲发送给B的消息是M,A首先计算MAC=CK(M),其中CK(·)是密钥控制的公开单向函数,然后向B发送M‖MAC,B收到后做与A相同的计算,求得一新MAC,并与收到的MAC做比较,如果B计算得到的MAC与接收到的MAC一致,则:

  

①接收方相信发送方发来的消息未被篡改,这是因为攻击者不知道密钥,所以不能够在篡改消息后相应地篡改MAC,而如果仅篡改消息,则接收方计算的新MAC将与收到的MAC不同。

  

②接收方相信发送方不是冒充的,这是因为除收发双方外再无其他人知道密钥,因此其他人不可能对自己发送的消息计算出正确的MAC。

  


  

(2) 消息认证码的构造

  

安全的MAC函数MAC=CK(M)不但要求要具有单向性和固定长度的输出,而且应满足:

  

①如果敌手得到M和CK(M),则构造一满足CK(M') = CK(M)新消息M'在计算上是不可行的。

  

②CK(M)均匀分布的条件是:随机选取两个消息M、M′,Pr=2-n,其中n为MAC的长。

  

③若M'是M的某个变换,即M'=f(M),例如f为插入一个或多个比特,那么Pr=2-n。

  

MAC的构造方法有很多种,但MAC函数的上述要求很容易让我们想到Hash函数。事实上,基于密码杂凑函数构造MAC正是一个重要的研究方向,RFC2104推荐的HMAC已被用于IPSec和其他网络协议。HMAC的结构大致如图3-27所示。

  


  

  


  

  

@木子雨辰,将一直带给大家信息安全知识,由浅至深、采用体系化结构逐步分享,大家有什么建议和问题,可以及留言,多谢大家点击关注、转发,谢谢大家。

相关文章