欢迎光临
我们一直在努力

〔重庆理工大学〕信息安全实验指导书【实验五 密码综合】

实验五 密码综合

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.实验工具【实验五 密码综合】

实验工具【实验五 密码综合】

赞(0)
未经允许不得转载:171主机测评 » 〔重庆理工大学〕信息安全实验指导书【实验五 密码综合】
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址