实验五 密码综合
CQUT信息安全实验指导书【实验五 密码综合】
- 实验五 密码综合
-
-
- 实验目的
- 预备知识
- 实验环境及说明
- 实验原理
- 实验步骤
-
- 对称密码实验
-
- 1.对称密码模型
- Openssl下对称密码的使用
- 消息摘要(HASH)算法实验
-
- 消息摘要算法概述
- Openssl下消息摘要算法的使用
- 非对称密码实验
-
- 2.非对称密码概述
-
- 非对称密码体制加密模型
- 非对称密码体制认证模型
- Openssl下的公/私钥对的产生
- Openssl下RSA的加密与解密
- Openssl下RSA的签名与验证
- Openssl下使用RSA签名/验证消息摘要
- 4.综合实验部分
- 实验指导doc文档
-
- 1.信息安全实验指导doc文档【实验五 密码综合】
- 实验工具
-
- 1.实验工具【实验五 密码综合】
-
实验目的
掌握对称密码、公钥密码的原理和使用
掌握散列函数的原理和使用
尝试了解和使用密码技术构建安全协议
预备知识
OPENSSL、密码史
实验环境及说明
WindowXP计算机一台、Openssl for windows软件包
实验原理
参见实验步骤部分
实验步骤
对称密码实验
1.对称密码模型
所谓对称算法就是指加密和解密过程均采用同一把密钥,如图所示: 
[对称密码模型图]
设P=明文,C=密文,K是密钥,E()、D()分别是加密和解密算法(函数)。那么
加密的过程为:
C = E(P,K)即输入明文P和密钥K就能输出密文C
解密的过程为:
P = D(C,K)即输入密文C和密钥K就能输出明文P。
对于不知道密钥K的人就不能正确解密密文或者正确加密明文。
在对称密码中比较常见的是分组(对称)密码,其特点是将明文分割为几个大小一定的明文分组,然后对每个分组作用加密算法得到各自的密文分组,将这些密文分组组合起来就得到密文;解密过程与之相反。常见的分组密码算法有美国数据加密标准(data encryption standard, DES)和高级数据加密标准(advanced encryption standard,AES)。
Openssl下对称密码的使用
1、在openssl命令行下输入以下命令加密你的明文:
openssl enc ciphertype -e -in input-file-name -out output-file-name -K xxxx……. –iv xxxx……
例:
openssl enc –des-cbc –e –in plain.txt –out cipher.enc -K 0011223344556677 –iv 0102030405060708
注:”\\”表示续行符,实际输入时不要分行。
其中
ciphertype 指定使用那种算法和模式进行加/解密。例中-des-cbc表示使用DES密码算法的CBC模式进行加/解密,同样你可以使用诸如-aes-128-cbc, -aes-128-cfb等算法和模式进行加/解密。
-e 表示加密操作 -d 表示解密操作
-in 指定输入的文件,对于加密来说是明文文件,对解密来说是密文文件。在实验中请用真实的文件名对input-file-name进行替换。
-out指定输出文件,对加密操作来说输出的是密文文件,对解密操作来说输出的是明文文件。在实验中请用你指定的文件名对output-file-name进行替换。
-K 用于指定加/解密时使用的密钥,以16进制数表示(0~F)。密钥的长度与使用的加密算法有关如DES为64bit,AES-192为192bit。
-iv 用于指定加/解密时使用的初始向量,以16进制数表示(0~F),初始向量长度与分组大小相同。
加密完成后,打开密文文件检查是否已经加密。
2、在openssl命令行下输入以下命令解密你的密文:
openssl enc ciphertype -d -in input-file-name -out output-file-name -K xxxx……. –iv xxxx……
例:
openssl enc –des-cbc -d –in cipher.enc –out decrypt.txt -K 0011223344556677 –iv 0102030405060708
此处使用 –d 表示进行解密操作,-in指定的输入文件为前面加密产生的密文文件,-out指定一个输出文件用以保存解密的结果。
解密完成后,打开解密后的文件(如decrypt.txt)和原始明文(如plain.txt)进行比对,检查是否正确解密。
3、完成加密模式的相关实验(选做)
为了能够理解加密模式的特性,我们进行以下实验:
对实验提供的明文使用DES(分组大小为64bit,密钥、初始向量为64bit)或AES-128(分组大小为128bit,密钥、初始向量为128bit)进行加密
假设密文在网络传输中出现了1个bit的错误
――通过文本编辑器 UltraEdit 对密文进行修改(只更改1个bit)
使用相同的密钥和初始向量对修改后的密文进行解密
试回答下面问题:
1、解密的明文是否正确
2、如果解密出现了错误,有多少个分组受到了影响
消息摘要(HASH)算法实验
消息摘要算法概述
消息摘要算法/函数,也称为Hash算法/函数、单向散列算法/函数、散列算法/函数等。它通过把一个单向数学函数应用于数据,将任意长度的一块数据转换为一个定长的、不可逆转的数据。这段数据通常叫做消息摘要(如对一个几兆字节的文件应用散列算法,得到一个128位的消息摘要),如下图所示: 
[消息摘要算法示意图]
消息摘要代表了原始数据的特征,当原始数据发生改变时,重新生成的消息摘要也会随之变化,即使原始数据的变化非常小,也可以引起消息摘要的很大变化。因此,消息摘要可以敏感地检测到数据是否被篡改。
消息摘要算法再结合其他的算法就可以用来保护数据的完整性。
Openssl下消息摘要算法的使用
1、在openssl命令行下输入以下命令对某个文件计算其hash值
Openssl dgst dgsttype filename
例:
Openssl dgst –sha512 1.txt

[Openssl计算文件SHA512哈希值结果界面]
分别使用SHA512和MD5两种摘要算法计算HASH值,回答SHA512和MD5两种hash算法产生的hash值的长度为多少bit? (选作)
2、计算两个文件的Hash值并比对:
将下面这句话保存为1.txt:
The 70th Anniversary of Chongqing University of Technology
将下面这句话保存为2.txt:
the 70th Anniversary of Chongqing University of Technology
分别计算这两个文件的Hash值。
下面这个命令可以帮助我们将hash值保存到文件中方便比对
Openssl dgst dgsttype -out digst_file filename
-out用于指定存放hash值的文件――存放于digst_file中。
请你观察这两个Hash值是否相同?从这个实验中你可以体会到hash函数什么样的特性?
如有可能你可以编写一个程序计算这两个hash值有多少个bit不同(选作)
非对称密码实验
2.非对称密码概述
所谓非对称算法就是指加密和解密用的不是同一个密钥。非对称算法的密钥分为两部分,通常称为“公钥”和“私钥”(或者称为“公开密钥”和“私密密钥”)。公钥和私钥存在数学上的关系,使得用公钥加密的数据只能用对应的私钥解密;用私钥加密的数据只能用对应的公钥解密。
正如密钥的名字一样,“公钥”和“私钥”的拥有者将公钥公开、发布出去(公之于众,谁都可以使用),而将私钥进行保密保管(只有他自己知道)。由于公钥和私钥数学上的关系,非对称密码体系有两种基本模型:加密模型和认证模型,分别如下图所示:
首先发送方Alice和接收方Bob各自产生一对公钥和私钥,并将其公钥公开、发布出去。 
[非对称密码体制加密模型图]
非对称密码体制加密模型
假设发送方Alice想要给接收方Bob发送一条秘密信息,Alice首先获得Bob的公钥PUBob,随后使用这个Bob的公钥(PUBob)对明文进行加密并发送给Bob。由于Bob拥有对应的私钥PRBob(且仅有他一人知道!),故他能够正确解密密文;而其他人由于没有对应的私钥PRBob ,故无法正确解密密文,从而确保了信息的机密性。 
[非对称密码体制认证模型图]
非对称密码体制认证模型
假设发送方Alice使用自己的私钥PRAlice(只有他一人知道!)加密一条消息(明文)并发送给接收方Bob。由于Alice对应的公钥PUAlice是公布、公开的,故每一个人(包括Bob)都能获知Alice的公钥PUAlice,因此每个人都能使用对应的公钥PUAlice正确解密密文获得对应的明文,所以在这种模式下的加密不具备保密的功能。
但由于只有Alice知道自己的私钥PRAlice,也就只有她能够发送这种能够被对应公钥PUAlice正确解密的密文。因此当接收方Bob能够使用Alice的公钥PUAlice正确解密密文的时候,接收方Bob就能断定这条消息是发送方Alice发来的,且消息内容没有被修改。除此之外Alice不能否认发送过消息(譬如说是Bob发送的来进行否认,因为只有她知道自己的私钥也就只有她能够发送这种消息)。
在实际中,我们把这种模型下的加密过程称为”签名”(类似于书面签名的特性――不能否认且接收方能验证这条消息的发送方和内容的有效性),而把解密过程称为“验证”。
要求:两个同学一组(自行分组),一个扮演Alice,一个扮演Bob进行后面的实验
Openssl下的公/私钥对的产生
私钥的产生:
Openssl genrsa –out rsaprivatekey.pem 1024
该命令用于产生RSA私钥
其中
-out 指定了产生的私钥存放的文件位置,在本例中产生的私钥存放到rsaprivatekey.pem文件中。
1024参数指定了模数的大小为1024bit,缺省为512。此数值越大越安全,但也越慢,512bit已不能满足安全需求,至少需1024bit以上。
注意:由于私钥文件的私密性和重要性,通常需要加密保护,可查看Openssl手册实现这一功能。
对应公钥的产生:
Openssl rsa –in rsaprivatekey.pem -pubout –out rsapublickey.pem
该命令用于实现对RSA密钥的相关处理
其中
-in 指定读取密钥所在的文件(输入文件)。在这里我们是要根据私钥产生相应的公钥,所以in参数后接私钥文件即 rasprivatekey.pem。
-pubin 默认情况下私钥将作为命令的输出,该参数的使用将指定公钥作为命令的输出。
-out指定输出的文件位置。在这里我们的公钥将输出到文件rsapublickey.pem保存
产生公/私钥的查看:
私钥的查看:
Openssl rsa –in rsaprivatekey.pem –text
-in 指定读取密钥所在的文件。在这里我们是要读取产生的私钥的内容,故指定该文件为rsaprivatekey.pem。
-text 表示打印出公/私钥的内容而且还包括编码的形式(在这里是PEM格式的编码)。
公钥的查看:
Openssl rsa –pubin –in rsapublickey.pem –text
-pubin 默认情况下从输入文件中读取的将是私钥,该参数用于指定输入文件中存放的是公钥即读取公钥。
由于是参考公钥的内容,故-in参数后的输入文件为rsapublickey.pem。
要求每位同学为自己产生一对公钥和私钥,并考虑如何将公钥发布出去
Openssl下RSA的加密与解密
实验原理参见非对称密码概述中“非对称密码体制加密模型”部分。
RSA的加密:
Openssl rsautl –encrypt –pubin –inkey rsapublickey.pem –in msg1.txt –out msg1.cipher
rsautl命令用于使用RSA算法加密、解密或者签名、验证数据。
其中
-encrypt 表示使用RSA的公钥对输入数据进行加密
-pubin 默认情况下从输入密钥文件中读取的将是私钥,该参数用于指定输入密钥文件中存放的是公钥即读取公钥。
-inkey 用于指定输入的密钥文件。默认情况下为私钥文件,但这里我们使用了-pubin参数表明其中存放的是公钥。
-in 指定输入文件。在这里即待加密的明文。
-out 指定输出文件。在这里即加密后的密文。
RSA的解密:
Openssl rsautl –decrypt –inkey rsaprivatekey.pem –in msg1.cipher –out msg1.dec
其中:
-decrypt 表示使用RSA的私钥对输入数据进行解密。
-inkey 用于指定输入的密钥文件,默认情况下为私钥文件。在这里我们指定了私钥存放的文件rsaprivatekey.pem。
-in 指定输入文件。在这里即待解密的密文。
-out 指定输出文件。在这里即解密后的明文。
实验要求:
1、Alice和Bob两位同学互发一条加密消息即
Alice --> Bob
Alice <—— Bob
2、Alice、Bob各自解密收到的消息
3、班上其他同学能够给Bob发送加密消息么?如果可以怎么实现?
4.思考公钥加密有什么优点?
Openssl下RSA的签名与验证
实验原理参见非对称密码概述中“非对称密码体制认证模型”部分。
RSA的签名:
Openssl rsautl –sign –inkey rsaprivatekey.pem –in msg2.txt –out msg2.cipher
其中
-sign 表示使用RSA私钥对输入数据进行加密(签名)并将加密的结果保存到输出文件中。
-inkey 用于指定输入的密钥文件,默认情况下为私钥文件。
-in 指定输入文件,这里msg2.txt为待签名的文件。
-out 指定输出文件,这里msg2.cipher为签名后的文件(实际上就是用私钥加密后的密文)。
RSA的验证:
Openssl rsautl –verify –pubin –inkey rsapublickey.pem –in msg2.cipher –out msg2.dec
其中
-verify 表示使用RSA公钥对输入数据进行解密(验证),并将解密的结果保存到输出文件中。
-pubin 默认情况下从输入密钥文件中读取的将是私钥,该参数用于指定输入密钥文件中存放的是公钥即读取公钥。
-inkey 用于指定输入的密钥文件。默认情况下为私钥文件,但这里我们使用了-pubin参数表明其中存放的是公钥。
-in 指定输入文件,这里msg2.cipher为签名后的文件。
-out 指定输出文件,这里msg2.dec为验证恢复后的文件(实际上就是用公钥解密后的明文)。
实验要求:
1、Alice和Bob两位同学互发一条签名消息即
Alice ——> Bob
Alice <—— Bob
2、Alice、Bob各自验证收到的消息。能否验证成功?
3、考虑 Alice --> Bob的情况:
若事后Alice矢口否认曾发送给Bob该消息或声称消息被篡改,Bob在法庭上如何向其他人证明这条消息确实是Alice发送的且未被篡改?
Openssl下使用RSA签名/验证消息摘要
在前面一节中,我们使用私钥对整个消息(文件)进行加密(签名),尽管这种方法可以验证发送方和内容的有效性,但却需要大量的存储空间且速度慢。
在实际使用中还要求每个文件能够以明文形式保存(能够直接阅读),但在发生争执时候可以验证发送方及其内容。
解决这些问题的有效途径是,只对这个消息(文件)的HASH值(消息摘要)进行签名,由于消息摘要代表了原始数据的特征,故对消息摘要的签名能够代替对原始消息的签名。具体模型如下图所示: 
[RSA签名/验证消息摘要模型图]
发送方对消息M应用HASH函数得到该消息的HASH值(消息摘要)H(M),然后使用自己的私钥对这个HASH值进行签名,并将其附加在原始消息后面一同传送给接收方
接收方接收到消息后首先对发送方签名的HASH值进行验证(解密)设得到的HASH值为H1,然后对接收到的消息应用同样一个HASH函数得到HASH值设为H2。最后,接收方比较H1和H2,如果相同则可以断定消息消息来自既定发送方且没有被篡改,而且发送方也不能否认。请思考为什么?
RSA签名消息摘要:
Openssl dgst -sha1 -sign rsaprivatekey.pem -out mdsign_file1.cipher file1.txt
其中
-sha1 表示使用Sha1散列函数,你也可以使用其他散列函数如-md5、-dss1等
-sign rsaprivatekey.pem 表示使用私钥rsaprivatekey.pem对消息摘要进行加密(签名),实验中使用实际的私钥文件代替rsaprivatekey.pem。
-out mdsign_file1.cipher 用于指定签名后的Hash值存放的文件位置,在这里是mdsign_file1.cipher,在实验中请自行指定文件名进行存放。
file1.txt 表示原始文件(消息),实验中请用相应的文件名进行替换。
RSA验证消息摘要
Openssl dgst -sha1 -verify rsapublickey.pem -signature mdsign_file1.cipher file1.txt
其中
-verify rsapublickey.pem 表示使用公钥raspublickey.pem对签名(加密)的HASH值进行验证(解密),实验中用相应的公钥文件进行替换。
-signature mdsign_file1.cipher 指示签名(加密)的HASH值存放在mdsign_file1.cipher中,实验中用相应的签名文件进行替换。
file1.txt 表示待验证的原始文件(消息),实验中请用相应的文件名进行替换。
实验要求:
1、Alice和Bob两位同学互发 原始消息M 和 签名消息摘要PR(H(M)) 即
Alice ——> Bob
Alice <—— Bob
2、Alice、Bob各自验证收到的消息。能否验证成功?
3、
若Alice、Bob各自修改1bit收到的原始消息M后再进行验证。能否验证成功?为什么?
若Alice、Bob各自修改1bit收到的签名消息摘要PR(H(M))后再进行验证。能否验证成功?为什么?
请具体操作后回答
(使用UltraEdit之类的文本编辑器修改对原始消息或签名消息摘要进行修改)
4、考虑 Alice --> Bob的情况:
若事后Alice矢口否认曾发送给Bob该消息或声称消息被篡改,Bob在法庭上如何向其他人证明这条消息确实是Alice发送的且未被篡改?
5、签名/验证消息摘要的操作实际上是由 hash操作 和 签名/验证操作 两个操作组成,请仅使用 hash命令 和 签名/验证命令 重复实验要求1的内容。(选做)
4.综合实验部分
1、在实际应用中,由于公钥加密速度很慢,对于大的文件或数据通常使用较快的对称密码进行加密,而仅用接收方的公钥加密对称密钥K(这个对称密钥称做会话密钥)并传送给接收方。接收方使用自己的私钥解密后获得这个会话密钥,这样发送方就与接收方共享了同一个对称密钥K,因此他们就可以进行在后面的会话中使用这个对称密钥进行通信了。
请用本实验学习的对称密码命令、公钥密码命令完成上述通信过程。(Alice、Bob)
2、在实际应用中(特别是电子商务环境),Alice、Bob可能无法安全可靠的交换公钥(请思考如何在Internet上安全可靠的交换公钥),但Alice和Bob都信任另一个同学Charlie,并且Alice<――>Charlie,Bob<――>Charlie之间存在安全的通信线路(即Alice<――>Charlie 共享密钥K1, Bob<――>Charlie共享密钥K2)。
请问如何实现Alice、Bob之间公钥的安全交换,并用本实验学习的命令完成这一过程(选做)。
实验指导doc文档
1.信息安全实验指导doc文档【实验五 密码综合】
信息安全实验指导doc文档【实验五 密码综合】
实验工具
1.实验工具【实验五 密码综合】
实验工具【实验五 密码综合】



