实习二 数字签名与认证的实现
实习二 数字签名与认证的实现
一、实习目的
1.理解数字签名的概念和作用; 2.理解身份认证的基本方式和方法; 3.掌握Hash 函数和数字签名的实现。
二、实习要求
1.实习前认真预习第3章的有关内容; 2.复习数字签名和身份认证相关内容; 3.熟悉Java 平台的JCE 包有关类。
三、 实习内容 1、数字签名原理
用RSA 算法做数字签名,总的来说,就是签名者用私钥参数d 加密,也就是签名;验
证者用签字者的公钥参数e 解密来完成认证。
下面简要描述数字签名和认证的过程。 (1)、生成密钥
为用户随机生成一对密钥:公钥(e,n)和私钥(d,n). (2)、签名过程
a) 计算消息的散列值H(M).
b) 用私钥(d,n)加密散列值:s=(H(M)) mod n,签名结果就是s. c) 发送消息和签名(M,s). (3)、认证过程
a) 取得发送方的公钥(e,n). b) 解密签名s:h=smod n. c) 计算消息的散列值H(M).
d) 比较,如果h=H(M),表示签名有效;否则,签名无效。 根据上面的过程,我们可以得到RSA 数字签名的框图如图2-1:
e
d
图 2-1 RSA 数字签名框图
2、假设Alice 想和Bob 通信,以本地两个文件夹Alice 和Bob 模拟两个用户,实现
消息M 和签名的模拟分发
(1)、Alice 通过RSA 算法生成一对密钥:公钥(e,n)和私钥(d,n),将公私钥分别存入pubKey.txt 和priKey.txt 中。
//Alice生成一对密钥
CreateKey ck = new CreateKey();
ck.getKey();
pubKey.txt 中公钥如下:
priKey.txt 中私钥如下:
(2)、将Alice 中的pubKey.txt 拷到Bob 中,模拟公玥的分发。
(3)、将Alice 中的消息info.txt 做散列,将散列后的值存入hashInfo.txt 中。
(4)、将Alice 中的消息hashInfo.txt 和签名sign.txt 拷到Bob 中,实现M 密文状态下的签名与模拟分发、消息传递。
(5)Bob 取得公钥pubKey.txt, 用公钥解密签名,计算消息的散列值H(M).比较,如果h=H(M),表示签名有效;否则,签名无效。 后台运行结果如下:
有问题
(6)、项目源码
RSA.zip
四、实验总结
通过本次试验,一方面熟悉了RSA 算法,散列,数字签名;另一方通过实际运用进一步了解了数字签名的实际用途。