基于RSA的数字签名实现
基于RSA的多源网络编码签名方案

wo k cdn c e a e nt edfiut fRS p o lm r p s di h a e.I o pe e tp l t natc sa dr pa r o igsh meb sdo h i c l o A rbe i p o o e t ep p r ti t rv n ol i ta k n e ly f y s n s uo
( .De a t n fS fwa e En i e r g,La z o l t c n cCo lg ,La z o 3 0 0 1 p r me to o t r g n e i n n h u Po y e h i l e e n h u 7 0 5 ,Ch n ; ia
全 、 密码 学 。E mal h u y lpceu c - i :zo x @ z t.d . n
第 3卷 第5 3 期
周 秀媛 ,王彩 芬 , 罗海 :基 于 R A 的 多源 网络编 码签 名方 案 S
上 发 送 的消 息 , 1 ≤ m)的 线 性 组 合 ,表 示 为 : = (≤ 叫
t a s c r h n e n s s t e l e rc lu a in ,S r a l e u e h e u r me t fc m p t g p we ft en d n h r e u e c a n l d u e h n a ac l t s O i g e t r d c st er q i a i o t y e n so o u i o r o ea d t e n o h v r i t n t e f h n d . I a dto e i c i i o t e o e fao m n d iin, t e c e c n r v n r p a a t c s y sn t e e il u b r f h h s h me a p e e t e ly t a k b u i g h s ra n m e o t e
RSA加密算法原理及RES签名算法简介

RSA加密算法原理及RES签名算法简介第⼀部分:RSA原理与加密解密⼀、RSA加密过程简述A和B进⾏加密通信时,B⾸先要⽣成⼀对密钥。
⼀个是公钥,给A,B⾃⼰持有私钥。
A使⽤B的公钥加密要加密发送的内容,然后B在通过⾃⼰的私钥解密内容。
⼆、RSA加密算法基础整个RSA加密算法的安全性基于⼤数不能分解质因数。
三、数学原理(⼀) 互质关系:两个数a和b没有除1外的其他公约数,则a与b互质1. 任意两个质数构成互质关系2. 两个数中,如果⼤数为质数,则两数必定互质3. 1和任意整数互质4. 当p>1时,p与p-1互质(相邻两数互质)5. 当p=2n+1(n>0且n为整数)时,p与p+2互质(相连的两个奇数互质)(⼆) 求欧拉函数:定义:与正整数n互质且⼩于正整数n的正整数的个数。
通常使⽤ψ(n)表⽰。
求取与正整数n互质的正整数的个数ψ(n),且ψ(n)满⾜ψ(n)∈(2,n)1. 如果n=1,则ψ(n)=12. 如果n是质数,则ψ(n)=n-13. 如果n是质数p的次⽅,则:ψ(p^k)=p^k-p^(k-1) = p^k*(1-1/p)4. 若p1和p2互质,n=p1*p2,则ψ(n)= ψ(p1*p2)= ψ(p1) ψ(p2)5. 任意⼀个⼤于1的正整数都可以写成⼀系列质数的积6. 根据定理5,推导欧拉定理:因为n = (p1^k1)* (p2^k2)*……(pr^kr) (p1~pr都是质数)所以ψ(n)= ψ((p1^k1)) ψ(p2^k2) ……ψ(pr^kr) 定理4ψ(n)= (p1^k1)*(1-1/p1) * (p2^k2)(1-1/p2)……(pr^kr)*(1-1/pr) 定理3ψ(n)= (p1^k1)* (p2^k2)*……(pr^kr) * (1-1/p1) (1-1/p2)…… (1-1/pr)ψ(n)=n (1-1/p1) (1-1/p2)…… (1-1/pr)(三) 欧拉定理:正整数a与n互质,则下式恒成⽴a^ψ(n) ≡1(mod n)即:a的ψ(n)次幂除以n,余数恒为1(四) 模反元素如果两个正整数a和n互质,则必定存在整数b使得a*b-1被n除余数为1ab ≡1(mod n)其中b被称为a的模反元素四、RSA算法详解:假设A和B要通信(⼀) ⽣成密钥1. 公钥1) 随机⽣成两个不相等的质数p和q(质数越⼤越安全)2) 计算n,n=p*q 则n的⼆进制位数就是密钥的长度。
5基于RSA算法的数字签名的实现

5 基于RSA算法的数字签名的实现5.1开发环境介绍以其强大的性能,世界级的工具支持,操作简易性,扩展性,安全性等等优点,迅速的风靡全球,随着使用者的越来越多,数字签名的问题就越来越受关注。
C# 是.NET的关键性语言,它整个.NET平台是的基础。
5.1.1 C#语言概述在过去的20年里,C和C++已经成为在商业软件的开发领域中使用最广泛的语言。
他们为程序员提供了十分灵活的操作,不过同时也牺牲了一定的效率。
与诸如Microsoft V isual Basic等语言相比,同等级别的C/C++应用程序往往需要更长时间来开发。
由于C/C++语言的复杂性,许多程序员都试图寻找一种新的语言,希望能在功能与效率之间找到一个更为理想的平衡点。
对于C/C++用户来说,最理想的解决方案无疑是在快速开发的同时又可以调用底层平台的所有功能。
他们想要一种和最新的网络标准保持同步并且能和已有的应用程序良好整合的环境。
另外,一些C/C++开发人员还需要在必要的时候进行一些底层的编程。
C#是微软对这一问题的解决方案。
C#是一种最新的,面向对象的编程语言,他使得程序员可以快速地编写各种基于平台的应用程序。
提供了一系列的工具和服务来最大程度地开发利用计算与通信领域。
正是由于C#面向对象的卓越设计,使他成为构建各类组件的理想之选,无论是高级的商业对象还是系统级的应用程序,使用简单的C#语言结构,这些组件可以方便地转化为XML 网络服务,从而使它们可以由任何语言在任何操作系统上通过Internet进行调用。
最重要的是,C#使得C++程序员可以高效地开发程序,而绝不损失C/C++原有的强大功能。
因为这种继承关系,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快地转向C#。
5.1.2C#语言的特点C#语言自C/C++演变而来,它是给那些愿意牺牲C++一点底层功能,以获得更方便和更产品化的企业开发人员而创造的。
C#主要特点:简洁、与Web紧密结合、完全面向对象、强壮安全、灵活性和兼容性。
数字签名算法-RSA、DSA、ECDSA、ECDH

数字签名算法-RSA、DSA、ECDSA、ECDH数字签名算法介绍和区别原⽂阅读:数字签名是⼀个带有密钥的消息摘要算法,这个密钥包括了公钥和私钥,⽤于验证数据完整性、认证数据来源和抗否认,遵循OSI参考模型、私钥签名和公钥验证。
也是⾮对称加密算法和消息摘要算法的结合体,常见的数字签名算法主要有RSA、DSA、ECDSA三种,本⽂对数字签名算法进⾏详细介绍。
Hash⼜译散列、摘要等名,本⽂统⼀称Hash。
1. RSA数字签名算法RSA是⽬前计算机密码学中最经典算法,也是⽬前为⽌使⽤最⼴泛的数字签名算法,RSA数字签名算法的密钥实现与RSA的加密算法是⼀样的,算法的名称都叫RSA。
密钥的产⽣和转换都是⼀样的,包括在售的所有SSL数字证书、代码签名证书、⽂档签名以及邮件签名⼤多都采⽤RSA算法进⾏加密。
RSA数字签名算法主要包括MD和SHA两种算法,例如我们熟知的MD5和SHA-256即是这两种算法中的⼀类,具体如下表格分布1.1. MD2、MD4、MD5算法最常见的是我们熟知的MD5加密算法,MD5全称Message-Digest Algorithm 5(信息-摘要算法 5),⽬前⽐较普遍的Hash算法,是散列算法的基础原理,MD5的前⾝有MD2、MD3和MD4。
MD5算法法是输⼊任意长度字符,输出固定长度128位的算法。
经过程序流程,⽣成四个32位数据,最后联合起来成为⼀个128位Hash值,主要⽅式是通过求余、取余、调整长度、与链接变量进⾏循环运算进⽽得出结果。
1.2. SHA-1算法SHA-1是由NIST NSA设计为同DSA⼀起使⽤的,SHA-1设计时基于和MD4相同原理,并且模仿了该算法,SHA-1抗穷举(brute-force)性更好,它产出160位的Hash值,对于⾮线性运算、移位和加法运算也与MD5类似。
SHA-1也应⽤于包括TLS和SSL、PGP、SSH、S/MIME和IPsec等多种协议中,曾被视为是MD5的后继者。
基于RSA算法的数字签名技术研究

4 然后 , ) 用发送 者 A的公开 密钥 解密算 法对 A的 ( 即最 大公 因数为 1 ; ) 签名 消息 Y进行解 密 , 解密后得到原 始信息 x。 4 计算 d 使 d:e dt 。 ) , f :1 : mo
如果第三方 想 冒充 A向 B发送消息 , 因为他不 知 这样 最终 得 到三个 数 : 、 n e和 d 私有 密钥 为 { , , n 道 A的密钥 , 无 法 做 出 A对 消 息 的签 名 。 如果 A d , 就 }公开 密钥为 { , } ne 。
Jun l f n n M c a ia a dE e tc n ie r gC l g o ra o a e h nc l n l r a E g ei o e e He c il n n l
V0. 6 № . 】1 5
S p. 0 8 e 20
基 于 R A算法 的数 字签 名技术研 究 S
息能 在一 个 通信 网络 中传输 。基 于公 钥 密 码体 制 和 2 密码非对称 : ) 即接收方 和发送方 使用 不 同的密 私钥 密码 体制都可 以获得数 字签名 , 目前主要 是基 于 码 ; 公钥密码 体制 的数字 签 名。R A是 一 种典 型 的公 钥 S 3 加密密钥 D是 A私有 的 , 以用来对 消息进行 ) 可 密码加密算 法 , 本文主要讨论 基于 R A算法 的数 字签 签名 。其 他人不知道 D, 法伪 造 A的签名 。D的逆 S 无
R A算 法 是 17 S 9 7年 由美 国麻 省理 工学 院 的 R— i 1 发送 者 A将 要传送 的信息 x用 自己的私有 密 vs, hmi和 A l a 三 名数学家共 同开发 的, 的 ) et S a r dmn e 它 钥 加密算法进行 签名 , 签名后 的信 息为 Y。 理论基础是 数论 的欧拉 定理 , 全依赖 于大 数 的因子 完 12 数字 签名技术 的原理 .
rsa签名标准

RSA签名标准是一种非对称加密算法,广泛应用于信息安全领域。
RSA签名标准的核心思想是利用私钥对消息进行加密,以实现数字签名的功能,从而确保消息的完整性、真实性和不可否认性。
RSA签名标准具有很高的安全性和可靠性,被广泛应用于数字证书、电子邮件、电子商务等领域。
一、RSA签名原理RSA签名算法基于RSA公钥密码体制,其核心原理涉及大数分解、模幂运算和数论知识。
RSA签名过程包括密钥生成、签名生成、签名验证三个主要步骤。
首先,通过选择两个大素数p和q,并计算它们的乘积n=pq作为模数,然后选择与n互质的整数e作为公钥指数,再求出与e关于φ(n)互质的整数d作为私钥指数,其中φ(n)=(p-1)(q-1)。
在密钥生成完成后,可以利用私钥对消息进行加密得到数字签名,接收者使用公钥对数字签名进行解密验证,从而确认消息的真实性和完整性。
二、RSA签名安全性RSA签名算法的安全性建立在大整数分解困难性的基础上,即对大合数n的因式分解问题。
目前尚未发现有效的经典或量子计算机算法能够高效地对大合数进行分解,因此RSA签名算法在当前的计算能力下被认为是安全的。
然而,随着量子计算技术的发展,传统RSA算法可能会受到威胁,因此相关研究机构正在积极探索基于量子计算的后量子密码学算法,以应对潜在的威胁。
三、RSA签名标准化RSA签名标准化主要由国际标准化组织(ISO)和美国国家标准与技术研究院(NIST)等机构负责。
常见的RSA签名标准包括PKCS1、ISO/IEC 9796-2和PSS等,其中PKCS1是最为广泛应用的标准之一,定义了RSA签名和加密的格式和流程,包括基本的RSA签名方案和填充方案。
四、RSA签名应用RSA签名被广泛应用于数字证书、SSL/TLS通信、数字版权保护、软件发布认证等领域。
在数字证书领域,RSA签名用于验证数字证书的真实性和可信度,确保证书持有者身份的合法性;在SSL/TLS通信领域,RSA签名用于协商对称密钥、验证服务器身份等关键环节,保障通信的安全性;在数字版权保护领域,RSA签名用于数字内容的鉴权和防篡改,保护版权所有者的合法权益。
数字签名的实现方案

数字签名的实现⽅案数字签名的实现⽅案基于RSA的签名⽅案⽅案的原理:签名者使⽤⾃⼰的私钥对待签名消息m进⾏签名(加密),然后将m和密⽂发送给接收者,接收者使⽤签名者的公钥进⾏验证(解密)。
签名验证过程与RSA加解密过程相似。
1. ⽅案(1)参数设置①任取两个⼤素数p和q;②计算n=p*q(注:此时n只有唯⼀⼀种分解⽅法),③随机选取整数e,满⾜:④⽤欧⼏⾥得扩展算法计算d,满⾜:⑤公开密钥(公钥): k1=(e,n)私有密钥(私钥):k2=(p,q,d)(2)签名(即加密过程)对于待签名消息m,签名:s=m^dmodn(3)验证过程(即解密过程)s^emodn=m ==> Ver=True(4)正确性证明2. 签名与加密的结合设A:签名者、发送者 B:接收者、验证者⽅法⼀:对于明⽂m,A利⽤⾃⼰的私钥计算签名s,将(m,s)利⽤B的公钥加密为(cm,cs),然后将(cm,cs)发送给B,B接收后利⽤⾃⼰的私钥解密得到(m,s),再利⽤A的公钥进⾏验证;⽅法⼆:明⽂m,A利⽤B的公钥加密得到c,对c进⾏签名为s,将(c,s)发送给B,B接收后利⽤A的公钥进⾏验证,验证通过后再利⽤⾃⼰的私钥进⾏解密得到m。
注:⽅法⼆有缺点,可被伪造签名,⼀般使⽤⽅法⼀。
窃听者H窃取到A发给B的(c,s),H将密⽂c⽤⾃⼰的私钥和签名算法进⾏签名得签名s',然后将(c,s')发给B,B接收后发现是H发送的,则B利⽤H的公钥进⾏验证C确实是H发送的,B再⽤⾃⼰的私钥解密c得明⽂m,则B误认为明⽂m是H发送给B的。
(例如招标标底的提交。
)3. Hash函数签名前述签名中s=m^dmodn计算量太⼤,实际情况是对m利⽤⼀个安全的公开的Hash函数来产⽣消息摘要h(m),然后计算签名:验证过程为:优点:①计算更快;②原有⽅案可被攻击,新⽅案⽆法攻击。
Hash函数也称为散列函数、杂凑函数,它是⼀种将任意长度的输⼊变换为固定长度输出的不可逆的单向函数,并且没有陷门。
两个基于RSA的特殊数字签名方案

两个基于RSA的特殊数字签名方案作者:蒋俊锋来源:《电脑知识与技术》2008年第35期摘要:介绍了数字签名背景、签名体制的形式化描述以及两个特殊的数字签名方案。
对如何用RSA实现盲签名和多重数字签名方案进行了研究,分析了两种具体方案实现的安全性。
最后总结了这两种特殊数字签名实现过程中算法设计的优劣。
关键词:数字签名;RSA;盲签名;多重签名中图分类号:TP316文献标识码:A文章编号:1009-3044(2008)35-2095-02Two RSA-based Special Digital Signature SchemesJIANG Jun-feng(Engineering of Information Hohai University,Changzhou 213022,China)Abstract: The background, the formal definition and some special form of digital signature are firstly introduced.The research of how to realize the blind signature and the multisignature with RSA signature scheme are carried out secondly. The virtue and shortcoming of the two realized special digital signature schemes and the research to be continued are lastly put forward.Key words: digital signature;RSA;blind signature;multisignature1 引言1.1 背景签名一直被作为一种证明签名者身份的标识,它表明签名人看过乃至同意文件的内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验2 基于RSA的数字签名实现
一、实验目的
掌握RSA算法的基本原理,通过用RSA算法对实际数据进行加密和解密来深刻了解RSA的运行原理。
对数字签名有所了解,理解和掌握SHA–512算法,以及如何利用RSA和SHA–512算法来实现数字签名。
二、实验原理
1. RSA算法简介
公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中出现的问题.另外,随着电子商务的发展,网络上资金的电子交换日益频繁,如何防止信息的伪造和欺骗也成为非常重要的问题.数字签名可以起到身份认证,核准数据完整性的作用.目前关于数字签名的研究主要集中基于公钥密码体制的数字签名.
公钥密码体制的特点是:为每个用户产生一对密钥(PK和SK);PK公开,SK保密;从PK推出SK是很困难的;A,B双方通信时,A通过任何途径取得B的公钥,用B的公钥加密信息.加密后的信息可通过任何不安全信道发送.B收到密文信息后,用自己私钥解密恢复出明文.
RSA公钥密码体制到目前为止还是一种认可为安全的体制. RSA算法和用RSA算法实现数字签名的理论,以及它们在实际应用中的实现.
1、RSA算法
RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
RSA的算法涉及三个参数,n、e1、e2。
其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。
e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密钥对。
RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互换使用,即:
A=B^e2 mod n;B=A^e1 mod n;
2.RSA数字签名算法的理论描述
RSA数字签名算法的过程为:A对明文m用解密变换作: s Dk (m)=md mod n,其中d,n为A的私人密钥,只有A才知道它;B收到A的签名后,用A的公钥和加
密变换得到明文,因: Ek(s)= Ek(Dk (m))= (md)e mod n,又de1 mod (n)即de=l(n)+1,根据欧拉定理m(n)=1 mod n,所以Ek(s)=ml(n)+1=[m(n)]em=m mod n.若明文m和签名s一起送给用户B,B可以确信信息确实是A发送的.同时A也不能否认送给这个信息,因为除了A本人外,其他任何人都无法由明文m产生s.因此RSA数字签名方案是可行的.
但是RSA数字签名算法存在着因计算方法本身同构造成签名易被伪造和计算时间长的弱点,因此实际对文件签名前,需要对消息做SHA–512变换. SHA–512函数是一种单向散列函数,它将任意长度的消息压缩成512位的消息摘要.应用SHA–512的单向性(即给定散列值,计算消息很难)和抗碰撞性(即给定消息M,要找到另一消息M' 并满足两者的散列值很难),可以实现信息的完整性检验.另外该函数的设计不基于任何假设和密码体制而直接构造,执行的速度快,是一种被广泛认可的单向散列算法.
3. RSA数字签名算法的实现
RSA数字签名算法,包括签名算法和验证签名算法.首先用SHA–512算法对信息作散列计算.签名的过程需用户的私钥,验证过程需用户的公钥.A用签名算法将字符串形式的消息处理成签名;B用验证签名算法验证签名是否是A对消息的签名,确认是A发送的消息;消息没有被攥改过;A一定发送过消息.
1 签名算法
签名算法包括三步:消息摘要、计算、RSA加密.
消息摘要计算. 消息在签名前首先通过SHA–512计算,生成512位的消息摘要,对摘要作RSA计算. 用加密算法,采用签名者的私钥加密消息摘要,得到加密后的字符串.加密算法中使用的加密块为01类型.
2 验证签名算法
验证签名算法包括两步:RSA解密得签名者的消息摘要,验证者对原消息计
算摘要,比较两个消息摘要.验证签名的过程输入为消息,签名者的公钥,签名;输出为验证的结果,即是否是正确的签名.
RSA解密. 签名实际是加密的字符串.采用签名者的公钥对这个加密的字符串解密.解密的结果应为5128位的消息摘要.在解密过程中,若出现得到的加密块的类型不是01,则解密失败.签名不正确.
消息摘要计算和比较. 验证者对消息用SHA–512算法重新计算,得到验证者自己的消息摘要.验证者比较解密得到的消息摘要和自己的消息摘要,如果两者相同,则验证成功,可以确认消息的完整性及签名确实为签名者的;否则,验证失败.
三、实验环境
运行Windows操作系统的PC机,具有C#(Windows)或Java语言编译环境。
四、实验内容和步骤
a)理解RSA、SHA–512加密算法的原理,RSA算法的实现分为:生成密钥,
加密,解密.
b)编程实现RSA算法,在此基础上对各项功能按步骤进行综合,实现RSA
数字签名功能。
五、实验报告要求
1.给出RSA、SHA–512算法过程。
2.对一个消息首先生成摘要,提交程序流程图和执行结果。
3. 生成RSA的公钥和私钥,给出所生成的公钥和私钥及有关数据的值和计算方法。
六、时间安排
估计四个学时。
其中检查时间为一个学时。