《大数据安全与隐私》课程报告
《大数据安全与隐私》课程
实验报告
实验一:现代密码学基础技能(阶梯三)
一、实验原理:
1、Socket通信原理
Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口,供应用层调用实现进程在网络中的通信。Socket起源于UNIX,在Unix一切皆文件的思想下,进程间通信就被冠名为文件描述符(file desciptor),Socket是一种“打开—读/写—关闭”模式的实现,服务器和客户端各自维护一个“文件”,在建立连接打开后,可以向文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
在Socket网络通信过程需要分别构建服务端和客户端,服务器与客户端之间通信时,两端都建立了一个Socket对象,然后通过Socket对象对数据进行传输。通常服务器处于一个无限循环,等待客户端的连接。
2、DH密钥协商过程
迪菲-赫尔曼(Diffie–Hellman)密钥协商是在美国密码学家惠特菲尔德·迪菲和马丁·赫尔曼的合作下发明的,发表于 1976 年。它是第一个实用的在非保护信道中创建共享密钥方法。DH 算法可以在一个不安全的信道上建立安全连接,从而解决的不安全信道上信息安全交换的问题。
假设 Client_A 与 Client_B 在不安全的信道上交换信息,他们通过 DH 算法协商出一个密钥,具体流程如下:
1.Client_A 与 Client_B 确定算法协商使用质数 p 的整数模 n 乘法以及其原根 g
2.Client_A 生成随机数 ,计算 ,将 A 发送给 Client_B
3.如何给文件加密Client_B 生成随机数 ,计算 B =,将 B 发送给 Client_A
4.Client_A 计算 
5.Client_B 计算
通过上述过程,Client_A 与 Client_B 得到了一个安全的共享密钥 s。
3、AES加密过程
    高级加密标准(AES,Advanced Encryption Standard),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。
    严格地说,AES和Rijndael加密法并不完全一样(虽然在实际应用中两者可以互换),因为Rijndael加密法可以支持更大范围的区块和密钥长度:AES的区块长度固定为128比特,密钥长度则可以是128,192或256比特;而Rijndael使用的密钥和区块长度均可以是1
28,192或256比特。加密过程中使用的密钥是由Rijndael密钥生成方案产生。
   
    AES加密过程在一个4×4的字节矩阵上运作,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个Byte)。其矩阵的“列数(Row number)”可视情况增加)加密时,各轮AES加密循环(除最后一轮外)均包含4个步骤:
1AddRoundKey—矩阵中的每一个字节都与该次回合密钥(round key)做XOR运算;每个子密钥由密钥生成方案产生。
2SubBytes—透过一个非线性的替换函数,用查表的方式把每个字节替换成对应的字节。
3ShiftRows—将矩阵中的每个横列进行循环式移位。
4)、MixColumns—为了充分混合矩阵中各个直行的操作。这个步骤使用线性转换来混合每内联的四个字节。最后一个加密循环中省略MixColumns步骤,而以另一个AddRoundKey取代。
4、实验步骤
(1)确定服务端和客户端运行环境,服务端为腾讯云服务器,系统为Linux CentOS7,客户端为本地主机,现有文件1.jpg及2.doc欲发送至客户端。
客户端使用files文件夹接收待传输文件,初始为空。
(2)服务器开启socket监听,开放10870端口等待客户端连接;之后客户端确立连接端口并发起连接。
(3)建立连接后两者进行DH回话密钥协商,根据DH密钥生成AES密钥,客户端使用AES密钥加密文件名信息并发送给服务端,服务端使用生成的 AES密钥进行解密。
(4)客户端以二进制流形式读取文件信息,加密后发送给服务端。服务端收到解密后,依据(3)中文件名信息写入文件并保存在files文件夹下。
(5)确认文件发送完成后客户端主动向服务端发送close信息中断连接,服务端收到信息自动中断监听并关闭连接。
二、实验结果:
1、实验开始前进行检查,登录腾讯云服务器,发现服务端未保存文件。
2、服务端执行python命令开始监听,随后开启客户端,执行结果如下:
3、运行完毕后检查服务端文件接收情况,结果如下:
传输后图片和doc内容能够正常写入并显示,文件传输成功。
三、实验总结与心得:
编写文件加密传输程序时,不同于之前使用txt文件作为加密内容,我在客户端直接对jpg文件和doc文件对应的二进制流进行加密,服务端收到加密二进制流后解密形成明文二进制流,创建并写入对应文件。由于没有多文件格式在真实网络环境下的传输代码编写经历,实验过程较为曲折。
在实际编写程序时,遇到了许多困难,比如我准备通过将文件名信息加密后一并传输的方式,以便服务端确定写入文件的文件类型,在加密过程中难免遇到字符串与二进制流的编码解码问题。
在使用socket进行文件传输时,加密传输一个文件后服务端便停止接收文件,经过调试后采用传输文件时重建连接的方式解决。
实验使用腾讯云服务器作为服务端,但在真实网络环境传输中,总会出现丢包问题,文件传输后的字节总数和传输前不一致,导致AES解密时位数不能满足要求。后来我对服务端收到的加密文件进行二进制补0,补0至满足AES解密的位数要求,测试发现能正确写入文件,并未改变解密后的文件内容。
在本次实验中,我加深了对文件加密传输的理解,对分组加密、回话密钥加密算法和消息摘要算法的使用更加熟练,并对真实网络环境中实现文件加密传输的难度有了进一步认识,收获颇丰。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。