软件安全实验报告
一、实验目的
本实验的学习目标是让学生熟悉密钥加密与单向散列函数相关的概念。完成实验后,学生应该能够获得有关加密算法、加密模式、单向散列函数的第一手经验。此外,学生将能够使用工具和编写程序来加密/解密消息,为给定的消息生成单向散列值。
二、实验步骤与结果
###1、Task1:使用不同的密码算法和加密模式进行加密
在此任务中使用如下的模板指令对测试文件进行不同的加密模式加密
我采用的是报告中给出的:-aes-128-cbc,-aes-128-cfb,-bf-cbc,指令如下:
2、Task2:加密模式:ECB vs. CBC
首先对图片文件采用两种不同的模式进行加密:
之后分别对二者进行如下操作:
将原图片文件的前54字节取出,将加密后的文件的55字节以后的内容取出,因为前54字节决定着该文件是否可被识别为.bmp文件。
得到两个最终的文件:
CBC模式下为:
ECB模式下:
由此可以看出ECB模式并不是多可靠,因为它的加密结果还会保留很多原图片中的特点。
3、Task3:寻找密钥
已知明密文如下:
并且用于加密此明文的密钥是一个短于16个字符的英文单词。存放在给出的words.txt中。
编写程序找出密钥。使用c语言的Openssl库的evp接口。
代码为:
1 |
|
编译指令为:
结果为:
4、Task4:生成消息摘要
使用openssl的dgst命令生成文件的哈希值,文件已给出:
5、Task5:单向散列函数的输出特性
####1 、使用MD5生成哈希值H1.
2、修改输入文件最后一位
用bless打开文件,最后一位为0A,修改为0B,即把最后一比特修改
3、生成新文件的哈希值
4、比较观察现象
发现仅仅修改了一比特,但是文件的哈希值变发生了巨大变化,和之前没有关联。
6、Task6:单向性和抗碰撞性
根据任务四得哈希值为:前24位为f8886c.
使用暴力穷举生成随机字符串。(因为字符串写入文件中会自动添加’\x0a’,可以通过Bless查看,所以字符串的最后一个字节应该是\x0a,然后把去点该字节的其他字符写入文件中。)
我选择的是求5次然后取平均,运行5次程序相当于求了25次:
第一轮平均次数为8307886.
第二轮平均次数为19648759.
第三轮平均次数为19313818.
第四轮平均次数为13206836.
第五轮平均次数为46981825.
由此可见次数大约在几百万次到几千万次之间,这是个看脸的实验,如果统计个成千上万次应该也是比较平均的。
上面25个字符串随便输一个放入某文件中,得到的哈希值前24位都可以是f8886c.
比如把第一个字符串输入后,得到:
满足所求。
代码为:
1 |
|
- 本文作者: 李小混
- 本文链接: https://lixiaohun.github.io/post/1.html
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!