实验7 数字签名算法DSS 班级:物联191 姓名:焦海洋 学号:1908070108 一、实验目的 掌握利用Hash算法对要传送信息提取消息摘要的方法,理解数字签名的作用及数字签名算法的工作原理,了解多种非对称加密算法都可以用来设计数字签名算法。综合运用前面实验掌握的知识和技术,利用C语言或Java语言设计并实现数字签名程序。 二、实验原理 以往的文件或书信可以通过亲笔签名来证明其真实性,而通过计算机网络传输的信息则通过数字签名技术实现其真实性的验证。 数字签名目前采用较多的是非对称加密技术,其实现原理简单的说,就是由发送方利用Hash算法对要传送的信息进行计算得到一个固定位数的消息摘要值,用发送者的私有密钥加密此消息的Hash值所产生的密文即数字签名。然后将数字签名和消息一同发给接收方。接收方收到消息和数字签名后,用同样的Hash算法对消息进行计算得出新的Hash值,然后用发送者的公开密钥对数字签名解密,将解密后的结果与新的Hash值相比较,如相等则说明报文确实来自发送方。 下面我们以DSA(Digital Si ### 实验7 数字签名算法DSS #### 实验目的 本实验旨在让参与者深入了解数字签名的基本概念及其在信息安全中的应用。具体目标包括: - 掌握如何利用哈希算法提取待传输信息的消息摘要。 - 理解数字签名的重要性和工作原理。 - 了解非对称加密算法在设计数字签名方案中的应用。 - 综合运用先前实验中学到的知识和技术,使用C语言或Java语言设计并实现数字签名程序。 #### 实验原理 数字签名技术用于确保通过计算机网络传输的信息的真实性。传统的纸质文件或信件可通过亲笔签名来证明其真实性,而在数字世界中,则通过数字签名技术来实现这一目标。数字签名主要采用了非对称加密技术,其基本流程如下: 1. **发送方**: - 使用哈希算法对原始信息进行处理,得到一个固定长度的消息摘要。 - 使用发送方的私钥对消息摘要进行加密,生成数字签名。 - 将原始信息和数字签名一起发送给接收方。 2. **接收方**: - 收到消息和数字签名后,使用相同的哈希算法对消息进行处理,获得新的消息摘要。 - 使用发送方的公钥对数字签名进行解密,得到最初的消息摘要。 - 比较解密后的消息摘要与新计算出的消息摘要,如果两者匹配,则表明消息确实来自发送方,未被篡改。 #### 实验示例:DSA(Digital Signature Algorithm) DSA是一种广泛使用的数字签名算法,源自ElGamal和Schnorr签名算法,被美国国家标准技术研究所(NIST)采纳为数字签名标准(DSS)。DSA的具体实现过程包括以下几个关键步骤: - **全局公开密钥分量**: - 素数P,要求\(2^{511} < P < 2^{512}\)。 - \(q\)是\((P-1)\)的一个素因子,要求\(2^{159} < q < 2^{160}\)。 - \(g = h^{(P-1)/q} \mod P\),其中\(h\)是整数,满足\(1 < h < (P-1)\)。 - **私钥**:私钥\(x\)是随机或伪随机整数,满足\(0 < x < q\)。 - **公钥**:\(y = g^x \mod P\),\((P, q, g, y)\)作为公钥。 - **随机选择数**:\(k\)为随机或伪随机整数,满足\(0 < k < q\)。 - **签名过程**: - \(r = -(g^k \mod P) \mod q\)。 - \(s = [k^{-1} (H(M) + xr)] \mod q\),其中\(H(M)\)是消息\(M\)的哈希值。 - 数字签名\((r, s)\)随消息\(M\)一同发送。 - **验证过程**: - 计算\(w = s^{-1} \mod q\)。 - \(u_1 = [H(M')w] \mod q\),\(u_2 = (r')w \mod q\)。 - \(V = [(g^{u_1}y^{u_2}) \mod P] \mod q\)。 - 如果\(V = r'\),则信息确实来自发送方。 #### 实验环境 - 运行Windows或Linux操作系统的个人电脑。 - 具备gcc(Linux)、VC或TC(Windows)等C语言编译环境。 #### 实验内容和步骤 1. **基于标准输入输出的程序**:编写一段程序,能够对指定的字符串进行签名和验证。 2. **现有签名算法的比较**:研究并列出当前可用的各种签名算法,并对比它们的特点和适用场景。 #### 代码示例(部分) ```python import random from Crypto.Hash import SHA import math class DSA(): """签名和验证""" def __init__(self): pass def Globalpublickey(self): """生成全局公开密钥分量 p: 满足 \(2^{L-1}<p<2^L\) 的大素数,其中 \(512<=L<=1024\) 且 \(L\) 为 64 的倍数 q: \(p-1\) 的素因子,满足 \(2^{159}<2^{160}\),即 \(q\) 长 160 比特 g: \(g=h^{((p-1)/q)}\mod p\),\(h\) 是满足 \(1<h<p-1\) 且 \(h^{((p-1)/q)}\mod p>1\) 的任意整数 """ n = 160 # q 的长度 while True: Q = random.randrange(2**(n-1)+1, 2**n-1, 2) if self.MillerRabin(Q): # 素性测试 self.q = Q ``` 此实验不仅涉及了数字签名的核心理论知识,还要求学生能够实际动手编程实现这些理论,从而加深对数字签名技术和非对称加密算法的理解。




















剩余20页未读,继续阅读


- 粉丝: 71
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 通信工程设计概述.ppt
- 公务员信息化与电子政务考试培训PPT课件.ppt
- 大众点评网网络推广方案.ppt
- 如何做好医疗企业网络营销策划.doc
- 华中科技大学计算机网络课件习题讲解.doc
- 基于51单片机的数字电压表设计.doc
- (源码)基于C语言的嵌入式文件管理与查看系统.zip
- 2023年浙江省计算机二级考试办公自动化高级应用中Excel考试题常用函数.doc
- 网络科技公司创业计划书通用6篇.docx
- 精华版国家开放大学电大《网络系统管理与维护》机考2套真题题库及答案2.pdf
- 外贸企业营销型网站建设技巧-.doc
- (源码)基于Swift框架的iOS自定义模板项目.zip
- (源码)基于Android和ZXing库的二维码条形码扫描系统.zip
- (源码)基于JavaSpring Boot框架的快速开发系统.zip
- 大三上Python大作业,关于AC小说网的网络爬虫,爬取了首页小说的内容等相关信息 网址:https://m.acxsw.com/
- (源码)基于MicroPython的ESP32外设控制项目.zip


