密码学之数字签名

实验目的

掌握哈希算法与数字签名算法的实现

实验环境

一台Centos 7.2 已经安装openssl组件

实验原理

openssl是Linux内置的一款开源工具,实现了常见的密码算法与应用。通过openssl操作,完成各种密码算法的应用。

实验步骤

一、生成测试文件

echo 12345   >  test.txt

echo hello > md.txt
cat test.txt md.txt

image-20240827210440006

二、使用MD5算法生成哈希值

生成md.txt的哈希

openssl dgst -md5 md.txt

image-20240827210508476

复制md.txt文件

cp md.txt  md.txt.2
ls md.*

image-20240827210534150

对md.txt.2生成md5哈希值

openssl dgst -md5 md.txt.2

image-20240827210616009

比对发现md.txt和md.txt.2两个文件的哈希值一样

三、使用RSA签名

1、生成RSA密钥对

openssl genrsa -out rsa.key 1024
image-20240827210703866

2、导出公钥

openssl rsa -in rsa.key -pubout -out rsa_pub.key

image-20240827210727484

3、使用rsa私钥签名

openssl sha1 -sign rsa.key -out rsasign.bin test.txt

image-20240827210950988

4、使用rsa 公钥验证签名

openssl sha1 -verify rsa_pub.key -signature rsasign.bin test.txt

image-20240827211015070

四、使用DSA签名

1、生成dsa参数

openssl dsaparam -out dsap.pem 1024

image-20240827211041883

2、查看dsa参数明文

openssl dsaparam -in dsap.pem -text -noout

image-20240827211100885

3、使用上述参数生成dsa密钥

openssl gendsa -out dsa1.pem dsap.pem

image-20240827211209664

4、再次使用上述参数生成dsa密钥

openssl gendsa -out dsa2.pem dsap.pem

比较上述两个密钥,由相同参数生成的两个密钥是不同的。

diff dsa1.pem  dsa2.pem

image-20240827211301433

6、由参数生成私钥,并使用des加密

openssl gendsa -out dsaprivatekey.pem -des3 dsap.pem

image-20240827211357486

7、由私钥生成公钥

openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem

image-20240827211420022

8、使用私钥dsaprivatekey.pem签名text.txt,dsasign.bin为签名文件

openssl dgst -dss1 -sign dsaprivatekey.pem -out dsasign.bin test.txt

image-20240827211455400

9、使用公钥验证签名

openssl dgst -dss1 -verify dsapublickey.pem -signature dsasign.bin test.txt

image-20240827211523612

10、使用私钥验证签名

openssl dgst -dss1 -prverify dsaprivatekey.pem -signature dsasign.bin test.txt

image-20240827211555424

实验总结

通过使用rsa和dsa的签名,加强密码学中签名应用的理解。