实现数字签名的RSA算法的设计与实现
- 格式:docx
- 大小:149.00 KB
- 文档页数:21
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数字签名算法介绍和区别原⽂阅读:数字签名是⼀个带有密钥的消息摘要算法,这个密钥包括了公钥和私钥,⽤于验证数据完整性、认证数据来源和抗否认,遵循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加密算法及实现RSA加密算法是一种非对称加密算法,广泛应用于网络通信中的数据加密和数字签名等方面。
RSA算法的核心思想是基于大数分解的难解性问题,通过数论中的数学原理实现加密过程。
下面将详细介绍RSA加密算法的原理和实现。
RSA算法的原理如下:1.密钥的生成:-随机选择两个不同的大质数p和q。
-计算n=p*q。
-计算欧拉函数φ(n)=(p-1)*(q-1)。
-选择一个整数e,使得1<e<φ(n),且e与φ(n)互质。
- 计算e关于φ(n)的模反元素d,使得d * e ≡ 1 (modφ(n))。
-公钥为(n,e),私钥为(n,d)。
2.加密算法:-将明文m转化为整数。
- 计算密文c = m^e mod n。
3.解密算法:- 计算明文m = c^d mod n。
1.密钥的生成:首先,使用一个大数库来生成大质数p和q,确保p和q均为质数。
然后,计算n=p*q,并计算φ(n)=(p-1)*(q-1)。
选择一个合适的e,可以是小于φ(n)的质数或者与φ(n)互质的数。
使用扩展欧几里德算法,计算e关于φ(n)的模反元素d。
最终得到公钥为(n,e),私钥为(n,d)。
2.加密算法:将明文m转化为整数。
然后,使用快速模幂算法计算密文c = m^e mod n。
3.解密算法:使用快速模幂算法,计算明文m = c^d mod n。
需要注意的是,RSA算法对加密和解密的数据长度有限制,一般建议将要加密的数据分块进行加密。
同时,为了增强安全性,一般会使用大的素数来生成密钥。
总结:RSA加密算法是一种非对称加密算法,通过数论中的数学原理实现加密过程。
它的核心思想是基于大数分解的难解性问题。
RSA算法的实现需要生成密钥对、加密和解密三个步骤。
密钥的生成需要随机选择两个大质数,并进行相应的计算。
加密算法通过快速模幂算法进行加密,解密算法也通过快速模幂算法进行解密。
RSA算法在实际应用中广泛用于保护数据的机密性和完整性,同时也是数字签名等功能实现的基础。
《基于ECC与RSA的随机加密方案的研究与设计》篇一一、引言随着信息技术的飞速发展,数据安全与隐私保护问题日益突出。
加密技术作为保障信息安全的重要手段,其研究与应用显得尤为重要。
本文提出了一种基于椭圆曲线密码学(ECC)与RSA 算法的随机加密方案,旨在提高数据传输与存储的安全性。
二、背景知识1. ECC(椭圆曲线密码学):一种公钥密码体制,具有较高的安全性与较短的密钥长度。
在相同的密钥长度下,ECC的加密强度远高于其他公钥密码体制。
2. RSA算法:一种非对称加密算法,广泛应用于数据加密、数字签名等领域。
其安全性基于大数分解问题的困难性。
三、方案设计1. 随机加密方案的整体架构本方案采用ECC与RSA相结合的方式,实现随机加密。
整体架构包括密钥生成、加密过程、解密过程三个部分。
(1)密钥生成:首先,生成ECC公私钥对,作为加密过程中的签名与验证环节使用。
然后,生成RSA密钥对,用于加密与解密过程中的密钥交换。
(2)加密过程:在发送方,使用ECC算法对明文进行签名,生成数字签名。
然后,利用RSA算法对ECC公钥及数字签名进行加密,并将加密后的数据发送给接收方。
(3)解密过程:在接收方,使用RSA算法解密出ECC公钥及数字签名。
然后,使用ECC公钥验证数字签名的有效性。
若验证通过,则使用ECC私钥对密文进行解密,得到原始明文。
2. 具体实现步骤(1)密钥生成阶段:利用ECC算法生成一对公私钥;利用RSA算法生成另一对公私钥。
(2)初始化阶段:发送方将需要传输的数据进行初步处理,如分块、编码等。
(3)加密阶段:发送方使用ECC算法对数据块进行签名;然后利用RSA算法将ECC公钥及数字签名进行加密。
(4)传输阶段:发送方将加密后的数据发送给接收方。
(5)解密与验证阶段:接收方使用RSA算法解密出ECC公钥及数字签名;利用ECC公钥验证数字签名的有效性;若验证通过,则使用ECC私钥对密文进行解密,得到原始明文。
基于散列算法的RSA盲签名方案设计论文RSA盲签名方案是一种较为常见的数字签名算法,其中盲签名阶段的散列算法在整个方案中起着至关重要的作用。
本文旨在探讨如何在RSA盲签名方案中设计基于散列算法的方案,以提高方案的安全性和可信度。
1. RSA盲签名方案简介RSA盲签名方案是一种数字签名算法。
它既满足RSA签名的安全性要求,又能保护信息的隐私性和匿名性。
RSA盲签名方案由四个阶段组成:第一阶段:信息盲化。
发送者将要签名的消息进行盲化,使得签名者无法得知原始消息的任何信息。
第二阶段:签名阶段。
发送者将盲化后的信息发送给签名者,签名者对信息进行签名。
第三阶段:去盲化。
发送者将签名后的信息进行去盲化,还原成原始消息。
第四阶段:校验阶段。
发送者对签名进行校验,以确保签名的正确性和完整性。
2. 散列算法在RSA盲签名方案中的作用在RSA盲签名方案中,散列算法扮演了非常重要的角色。
其作用如下:1. 确保消息的完整性。
散列算法将消息转换成固定长度的摘要,该摘要具有唯一性,且消息的任何细微变化都会导致摘要的变化。
因此,根据摘要可以检测到任何意外的改动,从而确保消息的完整性。
2. 保护隐私。
在RSA盲签名方案中,通过对消息先行进行盲化和去盲化的处理,可以保护消息的隐私性和不可知性。
而散列算法正是在盲化阶段对消息进行处理,从而保护了消息的隐私性。
3. 签名阶段的验证。
在签名阶段,签名者使用散列算法对收到的盲化信息进行处理,并使用私钥对其进行签名。
在校验阶段,发送者收到签名者签名后的信息,将其使用公钥进行解密,并使用相同的散列算法对原始消息进行处理,将处理的结果与校验获得的值进行比较,从而校验签名的正确性。
3. 基于散列算法的RSA盲签名方案设计在设计基于散列算法的RSA盲签名方案时,需要考虑以下几点:1. 选择适当的散列算法:首先,需要选择一种安全可靠的散列算法。
一般来说,可以选择SHA-1、SHA-256或SHA-512等算法。
RSA算法和RSA数字签名算法的实现摘要RSA算法是一种公钥密码算法.实现RSA算法包括生成RSA密钥,用RSA 加密规则和解密规则处理数据。
RSA数字签名算法利用RSA算法实现数字签名。
本文详述了RSA算法的基本原理, RSA加密算法的实现以及如何利用RSA实现数字签名.关键字RSA算法, 数字签名, 公开密钥, 私人密钥, 加密, 解密中图分类号 TP301一、引言随着网络技术的飞速发展,信息安全性已成为亟待解决的问题。
公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起通信,较好地解决了传统密码体制在网络通信中出现的问题。
另外,随着电子商务的发展,网络上资金的电子交换日益频繁,如何防止信息的伪造和欺骗也成为非常重要的问题。
数字签名可以起到身份认证、核准数据完整性的作用。
目前关于数字签名的研究主要集中基于公钥密码体制的数字签名。
公钥密码体制的特点是:为每个用户产生一对密钥(PK和SK);PK公开,SK;从PK推出SK是很困难的;A、B双方通信时,A通过任何途径取得B的公钥,用B的公钥加密信息。
加密后的信息可通过任何不安全信道发送。
B收到密文信息后,用自己私钥解密恢复出明文。
公钥密码体制已成为确保信息的安全性的关键技术。
RSA公钥密码体制到目前为止还是一种认可为安全的体制。
本文详述了RSA算法和用RSA算法实现数字签名的理论,以及它们在实际应用中的实现。
二、RSA算法和RSA数字签名算法的理论描述1 RSA算法RSA算法的理论基础是一种特殊的可逆模幂运算。
设n是两个不同奇素数p和q的积,即:n=pq, ϕ(n)=(p-1)(q-1)。
定义密钥空间 k={(n,p,q,d,e)|n=pq,p和q是素数,de≡1 mod ϕ(n),e 为随机整数},对每一个k=(n,p,q,d,e),定义加密变换为E k(x)=x b mod n,x∈Z n;解密变换为D k(x)=y a mod n,y∈Z n,Z n为整数集合。
一、实验目的1. 理解数字签名的概念和原理;2. 掌握数字签名算法的设计与实现;3. 了解数字签名在信息安全中的应用。
二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C#三、实验内容1. 数字签名算法的选择与设计本实验选用RSA算法作为数字签名算法,RSA算法是一种非对称加密算法,具有较好的安全性。
2. 数字签名算法的实现(1)RSA密钥对的生成RSA算法首先需要生成一对密钥,包括公钥和私钥。
公钥用于加密和解密,私钥用于签名和验证签名。
(2)数字签名生成使用公钥对数据进行加密,得到数字签名。
数字签名是对原始数据的加密,只有使用对应的私钥才能解密。
(3)数字签名验证使用公钥对数字签名进行解密,得到解密后的数据。
将解密后的数据与原始数据进行比较,若一致,则验证成功。
3. 数字签名系统设计(1)系统架构数字签名系统采用分层架构,包括以下层次:- 应用层:负责用户交互、数据处理和存储;- 业务逻辑层:负责数字签名算法的实现;- 数据访问层:负责数据存储和读取。
(2)功能模块- 用户注册与登录:用户注册账号,登录系统;- 数据上传与下载:用户上传待签名的数据,系统生成数字签名,用户下载签名后的数据;- 数字签名验证:用户上传签名后的数据,系统验证签名是否有效。
四、实验步骤1. 创建RSA密钥对在Visual Studio 2019中,使用C#语言创建RSA密钥对。
2. 实现数字签名算法(1)生成数字签名使用公钥对原始数据进行加密,得到数字签名。
(2)验证数字签名使用公钥对数字签名进行解密,得到解密后的数据,并与原始数据进行比较。
3. 设计数字签名系统(1)创建系统架构根据系统需求,设计系统架构。
(2)实现功能模块编写代码实现用户注册、登录、数据上传、下载、签名生成、签名验证等功能。
五、实验结果与分析1. 实验结果本实验成功实现了数字签名系统,用户可以上传待签名的数据,系统生成数字签名,用户可以下载签名后的数据,并对签名进行验证。
RSA加密算法及实现RSA 是一种非对称加密算法,由Rivest、Shamir 和Adleman 三位数学家于1977年提出,现在广泛应用于电子邮件加密、数字签名和安全传输等领域。
RSA 算法基于两个大素数的乘积难以分解的特性,实现了安全的加密和解密过程。
RSA算法的核心原理是利用数论中的欧拉函数、模逆和模幂运算。
下面将详细介绍RSA算法的加密和解密流程。
1.生成密钥对首先选择两个不同的大素数p和q,计算它们的乘积n=p*q。
然后计算欧拉函数φ(n)=(p-1)*(q-1)。
选择一个与φ(n)互质的整数e,作为公钥的指数。
再利用模逆运算求解整数d,使得(d*e)%φ(n)=1,d即为私钥的指数。
2.加密过程假设要加密的消息(明文)为m,公钥为(n,e)。
将明文转换成整数M,并满足0≤M<n。
加密过程即为计算密文C=M^e%n,然后将密文发送给接收者。
3.解密过程接收者使用私钥(n,d)进行解密。
将密文C转换成整数,并计算明文M=C^d%n。
最后将整数M转换成消息,并得到解密后的明文。
RSA算法的安全性基于分解大整数n的困难性,如果有人能够有效地分解n,并得到p和q,那么整个算法的安全性将被破坏。
目前,分解大整数依然是一个非常耗费计算资源的问题,因此RSA算法在理论上是安全的。
实现 RSA 加密算法需要涉及大数运算和模幂运算等复杂的数学运算。
下面是一个简化版的 RSA 加密算法的 Python 代码实现:```pythonimport random#扩展欧几里得算法求解模逆def extended_gcd(a, b):if b == 0:return a, 1, 0gcd, x, y = extended_gcd(b, a % b)return gcd, y, x - (a // b) * y#计算模幂运算def mod_exp(a, b, n):result = 1while b > 0:if b % 2 == 1:result = (result * a) % na=(a*a)%nb//=2return result#生成密钥对def generate_keys(:p = random.randint(100, 1000)q = random.randint(100, 1000)while p == q or not is_prime(p) or not is_prime(q): p = random.randint(100, 1000)q = random.randint(100, 1000)n=p*qphi = (p - 1) * (q - 1)e = random.randint(2, phi - 1)gcd, d, _ = extended_gcd(e, phi)#确保d为正数if d < 0:d += phireturn (n, e), (n, d)#加密过程def encrypt(message, public_key):n, e = public_keym = int.from_bytes(message.encode(, 'big')c = mod_exp(m, e, n)return c#解密过程def decrypt(ciphertext, private_key):n, d = private_keym = mod_exp(ciphertext, d, n)message = m.to_bytes((m.bit_length( + 7) // 8, 'big').decode return message#判断一个数是否为素数def is_prime(n):if n <= 1:return Falsefor i in range(2, int(n ** 0.5) + 1):if n % i == 0:return Falsereturn True#示例运行代码if __name__ == '__main__':public_key, private_key = generate_keysmessage = "Hello, RSA!"ciphertext = encrypt(message, public_key)plaintext = decrypt(ciphertext, private_key)print("Public key:", public_key)print("Private key:", private_key)print("Ciphertext:", ciphertext)print("Decrypted plaintext:", plaintext)```以上代码是一个简单的实现,仅用于理解RSA加密算法的基本原理。
课程实践报告书课程名称:密码学与网络安全课程实践题目:实现数字签名的RSA算法的设计与实现学生姓名:专业:班别:学号:指导老师:日期:2016 年 6 月18 日实现数字签名的RSA算法的设计与实现摘要随着计算机网络和信息技术的发展,信息安全在各领域发挥着越来越重要的作用,其中密码学已成为信息安全技术的核心,本文主要介绍了信息加密技术的应用。
RSA算法是目前公认的在理论和实际应用中最为成熟和完善的一种公钥密码体制,它是第一个既能用于数据加密也能用于数字签名的算法,是公钥密码体制的代表。
数字签名是起到身份认证、核准数据完整性的一种信息安全技术。
它通过认证技术来辨认真伪。
RSA数字签名体制使用的是RSA公开密钥密码算法进行数字签名。
本文主要内容包括:第一,对RSA算法进行系统的介绍;第二,介绍RSA数字签名的一些基本概念和数字签名的理论实现过程;第三详述RSA数字签名的设计与实现,主要实现的模块包括RSA密钥的产生(一对公钥和私钥),RSA加密算法和解密算法的实现,;第四,对该系统进行了整体的测试和分析改进。
关键字:RSA算法;加密;解密;RSA数字签名目录1 引言 (3)1.1 课题的研究背景 (3)1.2 课题的研究意义 (3)2 RSA算法和RSA数字签名算法的概念设计 (3)2.1 RSA算法的概念和原理 (3)2.1.1 RSA算法介绍 (3)2.1.2 RSA算法的实现原理 (3)2.2 RSA数字签名基本概念和RSA数字签名算法的实现原理 (4)2.2.1 RSA数字签名基本概念 (4)2.2.2 RSA数字签名算法的实现原理 (5)3 RSA数字签名的逻辑设计与实现 (6)3.1 RSA数字签名的总体设计 (6)3.1.1 RSA数字签名所需实现的功能 (6)3.1.2 总体要求和设计 (6)3.2 各部分的设计实现 (7)3.2.1 密钥产生的实现 (7)3.2.2 产生消息摘要的设计实现 (10)3.2.3 数字签名的设计实现 (12)3.2.4 验证数字签名的设计与实现 (15)3.2.5 RSA数字签名的运行结果 (17)4 软件的整体测试和分析改进 (18)4.1软件的整体测试 (18)4.2 性能分析与改进设想 (19)开发体会 (19)参考文献 (20)1 引言1.1 课题的研究背景随着电子信息技术的迅速发展,人类已步入信息社会。
但是由于整个社会形成了一个巨大的计算机网络,任何一个计算机网络出现的安全问题,都会影响整个国家的网络安全,所以信息安全、计算机网络安全问题已引起了人类的高度重视。
网络的安全措施应是能全方位地针对各种不同的威胁和脆弱性,这样才能确保网络信息的保密性、完整性和可用性。
现代密码学已成为信息安全技术的核心,密码学是以研究通信安全保密的学科,即研究对传输信息采用何种秘密的变换以防止第三者对信息的窃取。
RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的算法。
它易于理解和操作,也十分流行。
随着越来越多的商业应用和标准化工作,RSA已经成为最具代表性的公钥加密技术。
现今,网上交易加密连接、网上银行身份验证、各种信用卡使用的数字证书、智能移动电话和存储卡的验证功能芯片等,大多数使用RSA技术。
1.2 课题的研究意义随着电子商务的发展,网络上资金的电子交换日益频繁,如何防止信息的伪造和欺骗成为非常重要的问题。
目前关于数字签名的研究主要集中点是基于公钥密码体制的数字签名。
手写签名的每一项业务都是数字签名的潜在用场。
数字签名可以提供数据完整性、真实性和不可否认性。
数字签名技术在身份识别和认证、数据完整性、抵赖等方面具有其它技术无法替代的作用,它在军事、电子商务和电子政务等领域有着极广泛的应用。
而在公钥体制中,RSA是一个较为完善的公钥密码算法,不仅能够同时用于加密和数字签名,而且易于理解和操作,是被广泛研究的公钥密码算法。
因此,基于RSA的数字签名具有较强的研究性和实际应用意义。
2 RSA算法和RSA数字签名算法的概念设计2.1 RSA算法的概念和原理2.1.1 RSA算法介绍RSA算法是一种公钥密码算法,实现RSA算法包括生成RSA密钥,加密和解密数据。
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。
RSA是被研究得最广泛的公钥算法。
RSA的缺点主要有:A)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。
B)分组长度太大,为保证安全性,n 至少也要 600 bits。
2.1.2 RSA算法的实现原理1) 随机选择两个不同的素数p和q,它们的宽度是密钥宽度的二分之一。
2) 计算出p和q的乘积n 。
3) 在2和Φ(n)之间随机选择一个数e , e 必须和Φ(n)互素,整数e用做加密密钥(其中Φ(n)=(p-1)*(q-1))。
4) 从公式ed ≡ 1 mod Φ(n)中求出解密密钥d 。
5) 得公钥(e ,n ), 私钥 (d , n) 。
6) 公开公钥,但不公开私钥。
7) 将明文P (假设P是一个小于n的整数)加密为密文C,计算方法为:C = P^e mod n;8) 将密文C解密为明文P,计算方法为:P=C^d mod n;然而只根据n和e(不是p和q)要计算出d是不可能的。
因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。
2.2 RSA数字签名基本概念和RSA数字签名算法的实现原理2.2.1 RSA数字签名基本概念RSA数字签名体制使用了RSA公开密钥密码算法进行数字签名,鉴于RSA算法在实践中已经被证明了的安全性,RSA数字签名体制在许多安全标准中得以广泛应用。
ISO/IEC 9796和ANSI X9.30-199X 以及美国联邦信息处理标准FIPS 186-2已经将RSA作为推荐的数字签名标准算法之一。
RSA数字签名算法,包括签名算法和验证签名算法。
它是利用的RSA算法的加密和解密算法的原理进行的一种数字签名,实际上是通过一个哈希函数来实现的(本设计是通过的MD5算法)产生消息摘要MD来实现的所需加密的对象。
数字签名的特点是它代表了消息的特征,消息如果发生改变,数字签名的值也将发生改变,不同的消息将得到不同的数字签名。
安全的数字签名使接收方可以得到保证:消息确实来自发送方。
因为签名的私钥只有发送方自己保存,他人无法做一样的数字签名,如果第三方冒充发送方发出一个消息,而接收方在对数字签名进行解密时使用的是发送方的公开密钥,只要第三方不知道发送方的私有密钥,加密出来的数字签名和经过计算的数字签名必然是不相同的,这就提供了一个安全的确认发送方身份的方法,即数字签名的真实性得到了保证。
数字签名类似手书签名,它具有以下的性质:1)能够验证签名产生者的身份,以及产生签名的日期和时间;2)能用于证实被签消息内容;3)数字签名可由第三方验证,从而能够解决通信双方的争议。
为了满足数字签名的这些要求,例如,通信双方在发送消息时,既要防止接收方或其他第三方伪造,又要防止发送方因对自己的不利而否认,也就是说,为了保证数字签名的真实性。
数字签名的原理是:(发送方和接收方根据要求各自产生自己的一对公钥和私钥)1)被发送文件采用某种算法对原始消息进行运算,得到一个固定长度的数字串,称为消息摘要(MD),不同的消息得到的消息摘要各异,但是对相同的消息它的消息摘要却是唯一的;2)发送方生成消息的消息摘要,用自己的私钥对摘要进行加密来形成发送方的数字签名;3)这个数字签名将作为消息的附件和消息一同用接收方的公钥进行加密,将加密后的密文一起发送给接收方;4)接收方首先把接收到的密文用自己的私钥解密,得到原始消息和数字签名,再用发送方的公钥解密数字签名,随后用同样的算法计算出消息摘要;5)如果计算出来的消息摘要和发送方发送给他的消息摘要(通过解密数字签名得到的)是相同的,这样接收方就能确认数字签名确实是发送方的,否则就认为收到的消息是伪造的或是中途被篡改的。
数字签名的原理图如2-1所示A B数字签名加密解密核实签名图2-1 数字签名的原理2.2.2 RSA数字签名算法的实现原理RSA数字签名算法分为以下两个步骤:1)签名算法(包括两步:消息摘要计算,RSA加密)(1)消息摘要MD的计算:消息在签名前首先通过MD5计算,生成128位的消息摘要;MD5函数是一种单向散列函数,它将任意长度的消息压缩成128位的消息摘要。
应用MD5的单向性(即给定散列值,计算消息很难)和抗碰撞性(即给定消息M,要找到另一消息M’并满足两者的散列值很难),可以实现信息的完整性检验。
另外该函数的设计不基于任何假设和密码体制而直接构造,执行的速度快,是一种被广泛认可的单向散列算法。
(2)对MD作RSA加密算法:采用签名者的私钥加密消息摘要,得到加密后的字符串即数字签名;2)验证签名算法(RSA解密、对消息摘要计算和比较)验证签名算法包括两步:RSA解密得签名者的消息摘要,验证者对原消息计算摘要,比较两个消息摘要。
验证签名的过程输入为消息,签名者的公钥,签名;输出为验证的结果,即是否是正确的签名。
(1)RSA解密:签名实际是加密的消息摘要,用以上所述的RSA解密方法采用签名者的公钥对这个加密的消息摘要解密,解密的结果应为128位的消息摘要。
(2)消息摘要计算和比较:验证者对消息用MD5算法重新计算,得到验证者自己的消息摘要。
验证者比较解密得到的消息摘要和自己的消息摘要,如果两者相同,则验证成功,可以确认消息的完整性及签名确实为签名者的;否则,验证失败,确认签名被冒充或是被篡改。
3 RSA数字签名的逻辑设计与实现3.1 RSA数字签名的总体设计3.1.1 RSA数字签名所需实现的功能在本软件中需要实现的功能有以下几个:(1)生成RSA密钥:公钥ke=(e,n),私钥kd=(d,n);(2)利用MD5算法计算出消息摘要MD;(3)数字签名的实现:用私钥d对消息摘要进行加密计算(RSA算法中的加密方法);(4)验证数字签名:用公钥e对数字签名进行解密计算(RSA算法中的解密方法),得到的解密结果与(2)步计算出的消息摘要比较,如果两个消息摘要一样则签名成功。
3.1.2 总体要求和设计本软件的总体要求有:1)按要求生成非对称密钥——公钥和私钥;2)按任意写入的的消息字符串(明文信息)生成所需要的消息摘要MD;3)在本设计中用产生的私钥d根据RSA算法的加密原理对所生成的消息摘要进行加密运算,得到数字签名;4)在本设计中用产生的公钥e根据RSA算法的解密原理对所加密的消息摘要即数字签名进行解密运算,得到对应的消息摘要(在本设计中标示的为解密信息),比较两个消息摘要,验证数字签名者的身份的真实与否;5)提示信息完整、操作舒适、图形界面雅观。