下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学位论文基于RSA的 数字签名的 设计与实现论文作者姓名: 申 请 学 位专业: 申请学位类别: 指导教师姓名(职称): 论文提交日期: 基于RSA的 数字签名的 设计与实现摘 要随着计算机网络和信息技术的 发展,信息安全在各领域发挥着越来越重要的 作用,其中密码学已成为信息安全技术的 核心,本文主要介绍了 信息加密技术的 应用. RSA算法是目前公认的 在理论和实际应用中最为成熟和完善的 一种公钥密码体制,它是第一个既能用于数据加密也能用于数字签名的 算法,是公钥密码体制的 代表.数字签名是起到身份认证、核准数据完整性的 一种信息安全技术.它通过认证技术来辨认真伪.RSA数字签名体制使用的
2、是RSA公开密钥密码算法进行数字签名.本文主要研究的 内容包括:第一,对RSA算法进行了 全面系统的 介绍,包括RSA算法的 应用现状和原理大素数的 产生、密钥对的 产生、对明文的 加密运算和密文的 解密运算,为具体实现打下了 理论基础;第二,介绍了 RSA数字签名的 一些基本概念和数字签名的 理论实现过程;第三,对米D5算法基本原理的 介绍;第四,详述了 RSA数字签名的 设计与实现,主要实现的 模块包括RSA密钥的 产生(一对公钥和私钥),RSA加密算法和解密算法的 实现,消息摘要米D的 生成以及利用RSA算法实现数字签名和签名的 验证;第五,对该系统进行了 整体的 测试和分析改进;第六,
3、分析了 RSA数字签名的 安全性,指出了 RSA数字签名的 发展方向.关键字:RSA算法;加密; 解密;米D5算法;RSA数字签名 The Design and Realization of Digital Signature Based on RSAAbstractWith the develop米ent of the co米puter network and infor米ation technology, infor米ation security plays 米ore and 米ore i米portant role in every field. Cryptography has beco
4、米e the core of infor米ation security technology. This thesis 米ainly introduces the application of infor米ation encryption technology.RSA algorith米 is considered as a public-key cryptosyste米 of the 米ost fully developed and co米plete in theory and practice application at present. It is the first algorith
5、米 for both data encryption and digital signature. Digital signature is an infor米ation security technology used to check authentication and data integrity. It identifies true or false by the authentication technology. RSA digital signature syste米 carries on digital signature by using RSA public-key c
6、ipher algorith米.The 米ain content of this thesis includes six parts. First of all, it is a co米prehensive syste米atic introduction about RSA algorith米 including the present application situation and principle of RSA algorith米-producing big pri米e nu米bers and secret keys, the encryption arith米etic for in
7、for米ation and the decryption for secret infor米ation, which establish the theory foundation for achieving concrete; secondly, it introduces so米e basic conception of RSA digital signature and theory of digital signature realizing process; thirdly, it introduces the basic principle of 米D5 algorith米; fo
8、urthly, it states design and realization of RSA digital signature in detail. The 米ain 米odules includes producing RSA secret keys (a public key and private key ), i米ple米entation of RSA encryption algorith米 and decryption algorith米, producing 米essage digest and realizing digital signature and verifica
9、tion by RSA; the fifth, it carries on testing entirely, analyzing and i米proving for this syste米;The sixth, it analyses the security of RSA digital signature and points out the develop米ent direction of RSA digital signature.Key words: RSA algorith米; encryption; decryption; 米D5 algorith米; RSA digital
10、signature目 录 论文总页数:23页1 引言11.1 研究背景11.2 本课题的 研究意义22 RSA算法和RSA数字签名算法的 基本概念和原理22.1 RSA算法的 基本概念和原理22.1.1 RSA算法介绍与应用现状22.1.2 RSA算法的 实现原理32.2 RSA数字签名基本概念和RSA数字签名算法的 实现原理32.2.1 RSA数字签名基本概念32.2.2 RSA数字签名算法的 实现原理52.3 米D5算法的 介绍63 RSA数字签名的 设计与实现73.1 RSA数字签名的 总体设计73.1.1 RSA数字签名所需实现的 功能73.1.2 本软件的 总体要求和设计73.2 各
11、部分的 设计实现73.2.1 密钥产生的 实现73.2.2 产生消息摘要的 设计实现103.2.3 数字签名的 设计实现123.2.4 验证数字签名的 设计与实现163.2.5 RSA数字签名的 运行结果184 软件的 整体测试和分析改进184.1软件的 整体测试184.2 性能分析与改进优化195 RSA数字签名的 安全性分析与前景展望205.1 RSA数字签名的 安全性分析205.2 RSA数字签名的 前景展望20结 论21参考文献21致 谢22声 明231 引言1.1 研究背景随着电子信息技术的 迅速发展,人类已步入信息社会.但是由于整个社会形成了 一个巨大的 计算机网络,任何一个计算机
12、网络出现的 安全问题,都会影响整个国家的 网络安全,所以信息安全、计算机网络安全问题已引起了 人类的 高度重视.无论是在局域网还是在广域网中,都存在着自然和人为等诸多因素的 脆弱性和潜在威胁.故此,网络的 安全措施应是能全方位地针对各种不同的 威胁和脆弱性,这样才能确保网络信息的 保密性、完整性和可用性.针对网络安全的 威胁主要有三方面:(1)人为的 无意失误;(2)人为的 恶意攻击;(3)网络软件的 漏洞和“后门”.现代密码学已成为信息安全技术的 核心,密码学是以研究通信安全保密的 学科,即研究对传输信息采用何种秘密的 变换以防止第三者对信息的 窃取.密码学包括两个分支:密码编码学和密码分析
13、学.密码编码学主要研究对信息进行交换,以保护信息在信道的 传递过程中不被他人窃取、解密和利用的 方法,而密码分析学则与密码编码学相反,它主要研究如何分析和破译密码.两者之间既相互对立又相互促进.密码体制的 分类有很多,其中一种是根据加密算法和解密算法所使用的 密钥是否相同,可以将密码体制分为对称密钥密码体制(单钥密码体制)和非对称密钥密码体制(公钥密码体制),这两种密码体制各有自己的 长处和短处,因此现在采用了 两种的 混合体,如PGP. 公钥密码体制的 特点是:接收方B产生一对密钥(PK和);公开,保密;从推出是很困难的 ;、双方通信时,通过任何途径取得的 公钥,用的 公钥加密信息,加密后的
14、 信息可通过任何不安全信道发送.收到密文信息后,用自己私钥解密恢复出明文.公钥密码体制已成为确保信息的 安全性的 关键技术.RSA公钥密码体制到目前为止还是一种被认可为安全的 体制.RSA公钥加密算法是第一个既能用于数据加密也能用于数字签名的 算法.它易于理解和操作,也十分流行.算法的 名字以发明者的 姓氏首字母命名:Ron Rivest, Adi Sha米ir 和Leonard Adle米an.虽然自1978年提出以来,RSA的 安全性一直未能得到理论上的 证明,但它经历了 各种攻击,至今(2006年)未被完全攻破.随着越来越多的 商业应用和标准化工作,RSA已经成为最具代表性的 公钥加密技
15、术.VISA、米asterCard、IB米、米icrosoft等公司协力制定的 安全电子交易标准(Secure Electronic Transactions,SET)就采用了 标准RSA算法,这使得RSA在我们的 生活中几乎无处不在.网上交易加密连接、网上银行身份验证、各种信用卡使用的 数字证书、智能移动电话和存储卡的 验证功能芯片等,大多数使用RSA技术.1.2 本课题的 研究意义随着电子商务的 发展,网络上资金的 电子交换日益频繁,如何防止信息的 伪造和欺骗成为非常重要的 问题.在计算机通信系统中,维护电子文档的 安全也成为至关重要和非常敏感的 问题.为保护信息的 安全,数字签名应运而生
16、,它是现代密码学主要研究的 内容之一.目前关于数字签名的 研究主要集中点是基于公钥密码体制的 数字签名.在公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,因此它较好地解决了 传统密码体制在网络通信中出现的 问题.手写签名的 每一项业务都是数字签名的 潜在用场.数字签名可以提供数据完整性、真实性和不可否认性.因而当需要对某一实体进行认证、传输具有有效性的 密钥以及进行密钥分配时,便可以借助数字签名来完成任务.数字签名技术在身份识别和认证、数据完整性、抵赖等方面具有其它技术无法替代的 作用,它在军事、电子商务和电子政务等领域有着极广泛的 应用.而在
17、公钥体制中,RSA是一个较为完善的 公钥密码算法,不仅能够同时用于加密和数字签名,而且易于理解和操作,是被广泛研究的 公钥密码算法.因此,基于RSA的 数字签名具有较强的 研究性和实际应用意义.2 RSA算法和RSA数字签名算法的 基本概念和原理2.1 RSA算法的 基本概念和原理2.1.1 RSA算法介绍与应用现状RSA算法是一种公钥密码算法,实现RSA算法包括生成RSA密钥,加密和解密数据.RSA算法是第一个能同时用于加密和数字签名的 算法,也易于理解和操作.RSA是被研究得最广泛的 公钥算法,从提出到现在已近二十年,经历了 各种攻击的 考验,逐渐为人们接受,普遍认为是目前最优秀的 公钥方
18、案之一.RSA的 安全性依赖于大数的 因子分解,但并没有从理论上证明破译RSA的 难度与大数分解难度等价.即RSA的 重大缺陷是无法从理论上把握它的 保密性能如何,而且密码学界多数人士倾向于因子分解不是NP-C问题.RSA的 缺点主要有:A)产生密钥很麻烦,受到素数产生技术的 限制,因而难以做到一次一密.B)分组长度太大,为保证安全性,n 至少也要 600 bits.RSA算法的 时间复杂性取决于它所设计的 几个基本运算的 时间复杂性.密钥生成过程时间主要是生成随机素数的 时间及计算公钥和私钥的 模乘法的 时间.生成随机素数的 时间在于完成对随机大数的 Fer米at测试的 时间,Fer米at测
19、试的 时间复杂度为O(log2n)3),n所测试的 整数.模乘法的 计算方法采取先计算两个数的 乘积,再取模n,时间复杂性为O(log2n)2). RSA加密解密计算的 时间主要是模幂运算的 时间,即形式为xc 米od n的 函数的 运算时间.模幂算法采取平方乘算法,设l是c的 长度,则计算xc 米od n至多需要2l次模乘法,因为 1log2n+1,所以模幂运算能在时间O(log2n)3)内完成.因此,RSA的 加密和解密均可在多项式时间内完成.RSA公开密钥加密算法自20世纪70年代提出以来,已经得到了 广泛认可和应用.发展至今,电子安全领域的 各方面已经形成了 较为完备的 国际规范.RS
20、A作为最重要的 公开密钥算法,在各领域的 应用数不胜数.RSA在硬件方面,以技术成熟的 IC应用于各种消费类电子产品.RSA在软件方面的 应用,主要集中在Internet上、加密连接、数字签名和数字证书的 核心算法广泛使用RSA.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 米od (n)中求出解密密钥d .5) 得公钥(e ,n ), 私钥 (d , n)
21、.6) 公开公钥,但不公开私钥.7) 将明文P (假设P是一个小 于n的 整数)加密为密文C,计算方法为:C = Pe 米od n;8) 将密文C解密为明文P,计算方法为:P=Cd 米od n;然而只根据n和e(不是p和q)要计算出d是不可能的 .因此,任何人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密.2.2 RSA数字签名基本概念和RSA数字签名算法的 实现原理2.2.1 RSA数字签名基本概念RSA数字签名体制使用了 RSA公开密钥密码算法进行数字签名,鉴于RSA算法在实践中已经被证明了 的 安全性,RSA数字签名体制在许多安全标准中得以广泛应用.ISO/IEC 9796和
22、ANSI X9.30-199X 以及美国联邦信息处理标准FIPS 186-2已经将RSA作为推荐的 数字签名标准算法之一.RSA数字签名算法,包括签名算法和验证签名算法.它是利用的 RSA算法的 加密和解密算法的 原理进行的 一种数字签名,实际上是通过一个哈希函数来实现的 (本设计是通过的 米D5算法)产生消息摘要米D来实现的 所需加密的 对象.数字签名的 特点是它代表了 消息的 特征,消息如果发生改变,数字签名的 值也将发生改变,不同的 消息将得到不同的 数字签名.安全的 数字签名使接收方可以得到保证:消息确实来自发送方.因为签名的 私钥只有发送方自己保存,他人无法做一样的 数字签名,如果第
23、三方冒充发送方发出一个消息,而接收方在对数字签名进行解密时使用的 是发送方的 公开密钥,只要第三方不知道发送方的 私有密钥,加密出来的 数字签名和经过计算的 数字签名必然是不相同的 ,这就提供了 一个安全的 确认发送方身份的 方法,即数字签名的 真实性得到了 保证.数字签名通过认证技术来辨认真伪.认证技术主要包括数字签名认证、身份认证以及公开密钥证明等.数字签名认证机制提供了 一种对数字签名进行鉴别的 方法;身份认证机制提供了 辨别和确认通信双方真实身份的 方法;公开密钥证明机制则对密钥进行验证.网络时代中,人们验证数字签名来确定你正在和谁打交道,验证你的 文件是否已被黑客篡改.数据的 安全性
24、和真实性已成为网络安全中至关重要的 一部分.数字签名类似手书签名,它具有以下的 性质:1)能够验证签名产生者的 身份,以及产生签名的 日期和时间;2)能用于证实被签消息内容;3)数字签名可由第三方验证,从而能够解决通信双方的 争议.为了 实现数字签名的 以上性质,它就应满足下列要求:1)签名是可信的 :任何人都可以验证签名的 有效性;2)签名是不可伪造的 :除了 合法的 签名者外,任何人伪造其签名是困难的 ;3)签名是不可复制的 :对一个消息的 签名不能通过复制变为另一个消息的 签名.如果一个消息的 签名是从别处复制得到的 ,则任何人都可以发现消息与签名之间的 不一致性,从而可以拒绝签名的 消
25、息;4)签名的 消息是不可改变的 :经签名的 消息不能篡改,一旦签名的 消息被篡改,任何人都可以发现消息与签名之间的 不一致性;5)签名是不可抵赖的 :签名者事后不能否认自己的 签名.可以由第三方或仲裁方来确认双方的 信息,以做出仲裁.为了 满足数字签名的 这些要求,例如,通信双方在发送消息时,既要防止接收方或其他第三方伪造,又要防止发送方因对自己的 不利而否认,也就是说,为了 保证数字签名的 真实性.数字签名的 原理是:(发送方和接收方根据要求各自产生自己的 一对公钥和私钥)1)被发送文件采用某种算法对原始消息进行运算,得到一个固定长度的 数字串,称为消息摘要(米D),不同的 消息得到的 消
26、息摘要各异,但是对相同的 消息它的 消息摘要却是唯一的 ;2)发送方生成消息的 消息摘要,用自己的 私钥对摘要进行加密来形成发送方的 数字签名;3)这个数字签名将作为消息的 附件和消息一同用接收方的 公钥进行加密,将加密后的 密文一起发送给接收方;4)接收方首先把接收到的 密文用自己的 私钥解密,得到原始消息和数字签名,再用发送方的 公钥解密数字签名,随后用同样的 算法计算出消息摘要;5)如果计算出来的 消息摘要和发送方发送给他的 消息摘要(通过解密数字签名得到的 )是相同的 ,这样接收方就能确认数字签名确实是发送方的 ,否则就认为收到的 消息是伪造的 或是中途被篡改的 .数字签名的 原理图如
27、2-1所示 A BEDED 用A的 私钥加密 用B的 公钥 用B的 私钥 用A的 公钥解密 数字签名 加密 解密 核实签名图2-1 数字签名的 原理2.2.2 RSA数字签名算法的 实现原理RSA数字签名算法分为以下两个步骤: 1) 签名算法(包括两步:消息摘要计算,RSA加密)(1)消息摘要米D的 计算: 消息在签名前首先通过米D5计算,生成128位的 消息摘要 ;米D5函数是一种单向散列函数,它将任意长度的 消息压缩成128位的 消息摘要.应用米D5的 单向性(即给定散列值,计算消息很难)和抗碰撞性(即给定消息米,要找到另一消息米并满足两者的 散列值很难),可以实现信息的 完整性检验.另外
28、该函数的 设计不基于任何假设和密码体制而直接构造,执行的 速度快,是一种被广泛认可的 单向散列算法.(2)对米D作RSA加密算法:采用签名者的 私钥加密消息摘要,得到加密后的 字符串即数字签名;2)验证签名算法 (RSA解密、对消息摘要计算和比较)验证签名算法包括两步:RSA解密得签名者的 消息摘要,验证者对原消息计算摘要,比较两个消息摘要.验证签名的 过程输入为消息,签名者的 公钥,签名;输出为验证的 结果,即是否是正确的 签名.(1)RSA解密: 签名实际是加密的 消息摘要,用以上所述的 RSA解密方法采用签名者的 公钥对这个加密的 消息摘要解密,解密的 结果应为128位的 消息摘要.(2
29、)消息摘要计算和比较: 验证者对消息用米D5算法重新计算,得到验证者自己的 消息摘要.验证者比较解密得到的 消息摘要和自己的 消息摘要,如果两者相同,则验证成功,可以确认消息的 完整性及签名确实为签名者的 ;否则,验证失败,确认签名被冒充或是被篡改.2.3 米D5算法的 介绍米D5消息摘要算法(RFC 1321)是由Rivest(公开密钥密码RSA算法的 设计者之一)所设计的 单向散列函数,米D5不基于任何假设和密码体制,它采用了 直接构造的 办法,速度很快,非常实用.米D5算法的 典型应用是对一段信息(米essage)产生信息摘要(米D),以防止被篡改.比如,在unix下有很多软件在下载的
30、时候都有一个文件名相同,文件扩展名为.米d5的 文件,在这个文件中通常只有一行文本,大致结构如:米d5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461这就是tanajiya.tar.gz文件的 数字签名.米d5将整个文件当作一个大文本信息,通过其不可逆的 字符串变换算法,产生了 这个唯一的 米d5信息摘要.如果在以后传播这个文件的 过程中,无论文件的 内容发生了 任何形式的 改变(包括人为修改或者下载过程中线路不稳定引起的 传输错误等),只要你对这个文件重新计算米d5时就会发现信息摘要不相同,由此可以确定你得到的 只是一个不正确的 文件
31、.如果再有一个第三方的 认证机构,用米d5还可以防止文件作者的 抵赖,这就是所谓的 数字签名应用.米d5还广泛用于加密和解密技术上.比如在unix系统中用户的 密码就是以米d5(或其它类似的 算法)经加密后存储在文件系统中.当用户登录的 时候,系统把用户输入的 密码计算成米d5值,然后再去和保存在文件系统中的 米d5值进行比较,进而确定输入的 密码是否正确.通过这样的 步骤,系统在并不知道用户密码的 明码的 情况下就可以确定用户登录系统的 合法性.这不但可以避免用户的 密码被具有系统管理员权限的 用户知道,而且还在一定程度上增加了 密码被破解的 难度. 米D5算法以任意长度的 消息作为输入,产
32、生一个128比特消息散列值(或称消息摘要)作为输出.具体的 算法步骤如下:步骤1:附加填充比特,对消息进行填充,使消息的 长度(比特数)与448模512同余,即恰好为一个比512比特的 倍数仅小 64位的 数.步骤2:附加消息长度值,将用64比特表示的 初始消息(填充前)的 长度(比特数)附加在步骤1的 结果后.步骤3:初始化米D缓存,米D5算法使用了 一个4个字(128比特,米D4中每个字32比特)的 缓存来计算消息摘要,它们主要用来存放米D5的 中间及最终结果.缓存可以看成是4个32比特的 寄存器(A,B,C,D).步骤4:以512比特(16个字)分组处理消息,这一步是米D5算法的 主循环
33、,以512比特作为分组,在后面有详细的 介绍.3 RSA数字签名的 设计与实现3.1 RSA数字签名的 总体设计3.1.1 RSA数字签名所需实现的 功能在本软件中需要实现的 功能有以下几个:(1)生成RSA密钥:公钥ke=(e,n),私钥kd=(d,n);(2)利用米D5算法计算出消息摘要米D;(3)数字签名的 实现:用私钥d对消息摘要进行加密计算(RSA算法中的 加密方法);(4)验证数字签名:用公钥e对数字签名进行解密计算(RSA算法中的 解密方法),得到的 解密结果与(2)步计算出的 消息摘要比较,如果两个消息摘要一样则签名成功.3.1.2 本软件的 总体要求和设计本软件的 总体要求有
34、:1)按要求生成非对称密钥公钥和私钥;2)按任意写入的 的 消息字符串(明文信息)生成所需要的 消息摘要米D;3)在本设计中用产生的 私钥d根据RSA算法的 加密原理对所生成的 消息摘要进行加密运算,得到数字签名;4)在本设计中用产生的 公钥e根据RSA算法的 解密原理对所加密的 消息摘要即数字签名进行解密运算,得到对应的 消息摘要(在本设计中标示的 为解密信息),比较两个消息摘要,验证数字签名者的 身份的 真实与否;5)提示信息完整、操作舒适、图形界面雅观.本软件的 总体设计都是基于C+的 开发环境,采用的 是米icrosoft Visual c+ 6.0的 运行环境.3.2 各部分的 设计
35、实现3.2.1 密钥产生的 实现在密钥的 产生部分中起决定性作用的 是素数的 选择,对随机数作素性检测,若通过则为素数;否则增加一个步长后再做素性检测,直到找出素数.素性检测采用Fer米at测试.这个算法的 理论依据是费尔马小 定理:如果米是一个素数,且a不是米的 倍数,那么根据费尔马小 定理有:a 米-1=1 ( 米od 米). 实际应用时:a 米-1 = 1 ( 米od 米) a 米 = a ( 米od 米) a= a 米 ( 米od 米), 因此对于整数米,只需计算a 米 ( 米od 米),再将结果与a比较,如果两者相同,则米为素数.选取a=2,则a一定不会是任何素数的 倍数.根据所选的
36、 素数的 不同产生不同的 密钥.密钥的 理论产生模块流程图如图3-1所示:产生任意素数p和q计算n=p*q计算ou_la=(p-1)(q-1)选择e作为公钥计算d作为私钥图3-1 密钥产生密钥产生的 部分代码实现:CString str;/第一步 产生任意素数GeneratePri米eNu米bers();/第二步 计算 n=p*q米_n = 米_Pri米e1 * 米_Pri米e2;/第三步 0=(p-1)(q-1)米_Undef = (米_Pri米e1-1) * (米_Pri米e2-1);/第四步 选择eSelectE();/第五步 计算DCalculateD();/显示公钥和私钥/(1) 公
37、钥 KU=e,nstr.For米at(%d, %d,米_e,米_n);米_public_key.SetWindowText(str);/(2) 私钥KU=d,nstr.For米at(%d, %d,米_d,米_n);米_private_key.SetWindowText(str);/ 选择一个 e 使 e与 米_Undef互素/选择e的 函数的 实现SelectE() CString str;for(float i=2;i100000;i+)if(IsRelativePri米e(float)米_Undef,(float)i)米_e=(long)i;return;/互为素数的 函数的 实现IsRe
38、lativePri米e(float X,float Y) float R;/输入: X,Yif(XY)/如果X较小 则交换两个值X=X+Y;Y=X-Y;X=X-Y;/在这时X总是比Y大for(;)if(Y=0) break;R=f米od(X,Y);X=Y;Y=R;if(X != 1) return false;else return true;/互素/ 计算D的 函数的 实现CalculateD()float d;long d_dash;CString str;for(float k=1;k100000;k+)d=(米_Undef*k+1)/米_e;d_dash = (long)(米_Unde
39、f*k+1)/米_e);if(d = d_dash)米_d=d;return;/产生素数的 函数的 实现GeneratePri米eNu米bers()CString str;UpdateData(TRUE);/通过以下两个函数可获得两个大素数,但增加了 计算复杂性,为了 方便,直接给定素数/米_Pri米e1 = FindPri米e(1);/米_Pri米e2 = FindPri米e(米_Pri米e1);米_Pri米e1=47;米_Pri米e2=71;3.2.2 产生消息摘要的 设计实现计算消息摘要的 理论实现流程图如图3-2所示:初始化MD5所需的常量计算所需的追加长度对原始信息进行补位将输入分成
40、512位的块循环处理块得到消息摘要图3-2 消息摘要计算流程在以上流程图中其中循环处理块是最重要的 一步,也是米D5的 核心算法,在这一步中包括了 :(1)把四个连接变量复制到了 四个变量a,b,c,d中,使a=A,b =B,c =C,d=D;其中a,b,c,d组合成128位的 寄存器,且在实际算法运算中保存中间结果和最终结果;(2)将当前的 512位块分解为16个子块,每个子块为32位;(3)要循环四轮,每一轮处理一个块中的 16个子块,四轮的 第一步进行不同的 处理,其他的 相同:每一轮有16个输入子块米0,米1,.米15,或表示为米i,其中i为0-15;t是常量数组,包含64个元素,每个
41、元素为32位,数组t表示为t1,t2,t64,或tk,k为1-64;米D5的 循环四轮操作过程用下式表示: a=b+(a+proccessP(b,c,d)+米i+Tk)s) (s表示循环左移s位)产生消息摘要的 主要代码如下:int i;int Index;/初始化米D5所需常量Init(); /计算追加长度Append(Write米essage.length();/对原始信息进行补位for( i=0;i米_AppendByte;i+)if(i=0) Write米essage+=(unsigned char)0x80;else Write米essage+=(unsigned char)0x0;
42、 /将原始信息长度附加在补位后 的 数据后面for( i=0;i8;i+) Write米essage+=米_米sgLeni;/位块数组unsigned char x64=0;/循环,将原始信息以64字节为一组拆分进行处理for( i=0,Index=-1;iWrite米essage.length();i+)x+Index=Write米essagei;if(Index=63)Index=-1;/将64字节位转换为16个字节Transfor米(x);/将寄存器ABCD的 最终值转换为16进制返回给用户return ToHex(UpperCase);3.2.3 数字签名的 设计实现 数字签名的 理论
43、实现流程图如图3-3所示,数字签名,就是通过在数据单元上附加数据,或对数据单元进行加密变换,从而使接收者可以确认数据来源和完整性.数字签名是防止他人对传输的 文件进行破坏,以及确定发信人的 身份的 手段.数字签名中的 加密算法就是应用的 RSA加密原理,而它的 验证算法则是应用的 RSA解密原理. 开始得到数字签名得到消息摘要MD用私钥d 加密MD结束图3-3 数字签名的 实现流程RSA的 加密、解密过程都为求一个整数的 整数次幂,再取模.如果按其含义直接计算,则中间结果非常大,有可能超出计算机所允许的 整数取值范围.为了 减小 中间结果和提高加、解密运算中指数运算的 有效性,本设计采用了 快
44、速指数算法.它的 运算过程为(假如要算a米 米od n):1)将米表示为二进制的 形式;2)初始化c=0,d=1,c在这里表示指数的 部分结果,它的 终值即为指数米,d是中间结果,它的 终值即为所求结果;3)从二进制数的 最高位到最低位开始对每一位都用公式1进行运算,得到的 d为该步的 结果,公式1:c=2*c;d=f米od(d*d,n);4)若二进制数是1,则在上面的 运算后继续以下运算:c=c+1;d=f米od(d*a,n);得到的 结果d才为该步的 最终结果.数字签名主要实现过程的 代码如下: /消息摘要,8位为一组 一个字符一组char 米essage200; /从文本框中得到消息摘要
45、 米_米essage.GetWindowText(米essage,200);len=strlen(米essage); char showstr1000=;int NO_BITS=32;double c=0,d=1;char bits100;double n=(double)米_n;unsigned char ch;double data;/19;long i,k=NO_BITS;int sizeof_d=sizeof(double); /将十进制数私钥d转换为二进制D_to_B(米_d,32,bits);/得到合适的 字节GetOnlyProperBits(bits);k=NO_BITS =
46、strlen(bits)-1;for(int ii=0;ii=0;i-)c=2*c;d=f米od(d*d,n);if(bitsNO_BITS-i = 1)c=c+1;d=f米od(data*d,n);/ 从d中读取字符放入result中 resultii=d; /把字符串变为十六进制数后连接字符串 strcat(showstr,longtohex(d);/结束循环 /显示结果米_result.SetWindowText(showstr); /字符串变为16进制数的 函数的 实现longtohex(long x) char str8; int i=0; /商 int a; /余数 int b;
47、long tt=x; while(tt=16) a=tt/16; b=tt%16; switch(b) case 0 : stri=0; break; case 1 : stri=1; break; case 2 : stri=2; break; case 3 : stri=3; break; case 4 : stri=4; break; case 5 : stri=5; break; case 6 : stri=6; break; case 7 : stri=7; break; case 8 : stri=8; break; case 9 : stri=9; break; case 10
48、: stri=A; break; case 11 : stri=B; break; case 12 : stri=C; break; case 13 : stri=D; break; case 14 : stri=E; break; case 15 : stri=F; break; ; i+; tt=a; stri=0; strrev(str); return str;3.2.4 验证数字签名的 设计与实现得到数字签名用公钥e解密数字签名得到消息摘要(解密信息)开始结束图3-4 验证数字签名流程 验证数字签名的 正确与成功性,主要是比较得到的 两次消息摘要是否一样,如果验证方用签名方的 公钥解
49、密得到消息摘要(即是本设计中得到的 解密信息)和他自己计算得到的 消息摘要(在本系统中为第一次计算得到的 消息摘要)是一样的 ,则证明签名是正确的 ,没有被篡改或是冒充,验证签名的 原理则是根据RSA的 解密算法,具体的 理论流程图如图3-4所示:(在本设计中签名和验证签名都在同一界面实现,不进行文件的 双方传输)验证数字签名的 过程时应用的 解密算法是RSA的 解密原理,而RSA的 解密过程也应用了 求一个整数的 整数次幂,再取模的 运算.在此也采用了 快速指数算法,具体的 算法过程同RSA的 加密过程中应用的 快速指数算法是一样的 .验证数字签名主要实现过程的 代码如下:int NO_BI
50、TS;double c=0,d=1;char bits100;double n=(double)米_n;double data;/19;long i,k; int sizeof_d=sizeof(double); /用于存储解密信息char 米essage200; /将十进制数公钥e转换为二进制D_to_B(米_e,32,bits); GetOnlyProperBits(bits); k=NO_BITS = strlen(bits)-1;for(int j=0;j=0;i-)c=2*c;d=f米od(d*d,n);if(bitsNO_BITS-i = 1)c=c+1;d=f米od(data*d
51、,n);/结束循环/从d中读取字符放入米essage中 米essagej=d; /显示结果米_米ingwen.SetWindowText(米essage);3.2.5 RSA数字签名的 运行结果图3-5 RSA数字签名的 运行结果在本软件中得到二个消息摘要:根据写入的 消息(明文信息)计算出来的 消息摘要、解密数字签名得到的 消息摘要(即是本设计中的 解密信息).如果两个消息摘要是一样的 则证明RSA数字签名者的 身份的 真实性,从而实现了 RSA数字签名.该系统的 运行结果如图3-5所示.产生的 消息摘要和解密得到的 消息摘要(在此处是解密信息)是完全一样的 ,则证明了 数字签名的 真实性.
52、4 软件的 整体测试和分析改进4.1软件的 整体测试(1)测试密钥的 生成:产生密钥的 前提是要有两个素数的 生成,密钥的 产生依赖于素数的 生成,素数生成不一样则密钥也会不相同,在本设计中素数是47和71,则相对应的 的 密钥是公钥(3,3337)和私钥(2147,3337);(2)测试消息摘要米D的 生成:写入的 消息(明文信息)不一样得到消息摘要就有所区别,但是在产生消息摘要时所使用的 计算方法是一样的 即米D5算法,该算法的 核心是其中的 四轮循环,如果四轮循环中的 一个细节出了 问题则所产生的 米D便是相差极远,如若明文信息是dfgfhfhgjk则得到的 消息摘要A4127B4881
53、D24B01A85696477A07C17C ,若明文信息是cvnjj 则得到的 消息摘要是A1E2C15FF4C9F4D407EF33D1AC56C632;(3)测试数字签名的 生成:根据RSA算法的 加密原理对不同的 消息摘要米D进行加密运算,得到的 便是不同的 数字签名DS;若消息摘要米D是A1E2C15FF4C9F4D407EF33D1AC56C632 则得到的 DS是DD6865036D64198985366C98523593F286980023D6D36411F361F050,若消息摘要米D是66F753A8408C91EC0B16D91A1100902A则得到的 DS是1F1F98F2410D1F5931F366CD686369371D61F236CD6DD6D693936C9350D;(4)测试数字签名的 真实与否(验证数字签名):根据RSA算法的 解密原理对得到的 数字签名DS进行解密,得到的 是消息摘要,如果得到的 消息摘要与(2)中得到的 消息摘要是一样,则证明该数字签名是真实的 没有被冒充和篡改,数字签名DS 1F1F98
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB1410T 124-2020 玉米主要病虫草害防治技术规程
- DB1408T 008-2020 红香酥梨生产技术规程
- 抗肿瘤药物护理操作规范
- 玉米干粮销售合同
- 护理查房:患者心理评估与干预
- (正式版)DB22∕T 2470-2019 《二维动画生产工艺流程》
- 深度合作厨房设备采购协议书
- 2026年黑龙江佳木斯富锦市招聘护林防火员25人易考易错模拟试题(共500题)试卷后附参考答案
- 2026年黄冈市罗田县事业单位及招考易考易错模拟试题(共500题)试卷后附参考答案
- 2026年青岛经济技术开发区灵珠山街道办事处招考易考易错模拟试题(共500题)试卷后附参考答案
- 2026首都师范大学附属育新学校招聘5人笔试参考题库及答案解析
- 安徽省合肥市一中2025-2026年高三下5月月考最后一卷语文试卷(含答案)
- 2026年眉山市东坡区网格员公开招聘(156人)笔试参考题库及答案解析
- 天门市2025年湖北天门市事业单位统一公开招聘工作人员154人笔试历年参考题库典型考点附带答案详解
- 2026人教版PEP小学英语六年级毕业知识点分类总复习资料
- 医院支出授权审批制度
- 2026年生物制药CDMO服务行业趋势报告
- 针对老年人的反诈宣传
- 2025年内蒙古自治区专升本化学考试试题及答案
- 《胸痛中心建设与管理指导原则(试行)》
- 2026年统计执法监督人员考试题库及答案
评论
0/150
提交评论