西电应用密码学与网络安全实验通关指南

server/2025/3/4 11:47:12/
aidu_pl">

西电应用密码学与网络安全实验通关指南

这是计科网络方向应用密码学与网络安全的随课实验, 占课程分数的20%. 第一次主要是介绍内容, 两周后的第二次实验主要是验收, 实验内容自己线下完成即可.

实验内容如下:

  1. 密码学及应用:熟悉云安全实验平台及环境,完成:
    实验1(古典密码算法)――>练习一Caesar密码,
    实验1(古典密码算法)――>练习二单表置换密码,
    实验1(古典密码算法)――>练习三仿射密码
  2. 密码学及应用:
    实验2(对称密码算法)――>练习一DES,
    实验2(对称密码算法)――>练习二AES
  3. 密码学及应用:
    实验3(非对称密码算法)――>练习一RSA
    实验4( Hash算法) ――>练习一MD5
  4. 密码学及应用:
    实验5(密码应用)――>练习一文件安全传输

这个实验的目的是为了考察对于各个加密算法的流程的理解和掌握, 并不是要让你真的手搓这些算法(当然能手搓也是一种能力). 最后验收只要将结果展示出来并且能解释清楚(需要完整讲述算法流程, 主要验收DES, AES, RSA, MD5, 以及文件安全传输)

DES

DES 算法是在 Feistel network 的基础上执行的.以下是 DES 算法的流程图:

avatar

我们可以看到DES算法可以分为左右两个部分, 左半部分为迭代加密, 右半部分为子密钥生成.

子密钥生成

我们要从初始的64位的秘钥中生成16个48位的子密钥(Sub-key), 大致步骤如下:

  1. 初始秘钥经过PC-1置换, 得到56位的初始秘钥, 剩余的8位做校验位
  2. 将56位的初始秘钥分成左右两部分, 分别记为Ci, Di
  3. 将左右两部分分别循环左移1~2位, 即可得到Ci+1, Di+1, 当i=1,2,9,16时左移1位,其它左移2位。
  4. 将Ci+1, Di+1分别经过PC-2置换, 合并到一起就得到了48位的子密钥
  5. 如此总共进行16轮, 就得到了16个48位的子密钥

迭代加密

迭代加密部分, 主要分为两个步骤:

  1. 初始明文经过IP置换, 将其分为左右两半部分分别为L和R
  2. 每一轮迭代,都是接收一组 L, R,返回 L’, R’ ,作为下一轮迭代的 L, R . 迭代过程如下:其中F函数(称为轮函数)是整个算法的核心,功能是:以一个子密钥,加密 32-bit 的信息。
    avatar
  3. 利用之前得到的 16 个子密钥,执行步骤 2 一共 16 次
  4. 将最终的 R 与 L 拼接,再做一次FP置换(IP置换的逆变换),即得到密文

轮函数

  1. 对32位的输入进行E扩展, 变为为48位的扩展输出
  2. 扩展输出与子密钥进行异或运算
  3. 扩展输出经过S盒置换, 得到32位的输出
  4. P置换, 得到28位的输出

AES

AES算法的流程图:
avatar

每一轮迭代都是字节替换, 行移位, 列混淆, 轮秘钥加这四个步骤. 以128位秘钥为例, N=10, 需要N+1(11)个轮秘钥, 中间循环迭代N-1(9)轮, 也可以说迭代N轮, 最后一轮不进行列混淆

关于字节替换, 行移位, 列混淆的具体细节可以去看PPT, 在验收时不要求能详细说出来.

秘钥扩展

AES加密可以采用不同长度的秘钥, 一般为128位, 192位, 256位, 分别对应10轮, 12轮, 14轮. 秘钥扩展的步骤如下(以128位秘钥为例):

  1. 扩展密钥的前四个字直接由输入密钥中复制,即w[0]~w[3], w[i]的值等于w[i-1]异或w[i-4] (i>=4,i不是4的倍数)
  2. 对于下标为4的倍数的密钥字,其产生方法更为复杂,表示为函数g(w[i-1]). 包括的运算步骤有:字循环(RotWord):使一个字中的4个字节循环左移一个字节; 字节代换(SubWord):利用S盒对输入字中的每个字节进行代替; 字循环与字节代换的结果再与轮常量Rcon[j]相异或
  3. w[i]的值等于w[i-4]异或g(w[i-1]) (i>=4, i是4的倍数)

示意图:
avatar

MD5

MD5是一个基于哈希函数的加密算法, 其输入为任意长度的二进制数据, 输出为128位的二进制数据.
其流程如下:

  1. 对输入明文进行填充, 使其能被512整除(后面每一轮的输入都是512位),填充的具体步骤如下: 首先将数据长度表示为二进制形式,并附加到数据的末尾; 在数据末尾添加一个’1’比特,然后填充0直到数据长度满足对512取模的结果为448(即数据长度模512等于448); 将数据长度(64位)附加到填充后的数据末尾,以二进制表示
  2. 将512位的明文分组划分为16个子明文分组,每个子明文分组为32位
  3. 初始化4个32位的链接变量,记为A、B、C、D, 初始是固定值
  4. 对每个子明文分组和四个链接变量(a,b,c,d, 如果是第一次运算的话, 就是ABCD的值)都进行FF,GG,HH,II四轮运算(共64次运算)
  5. 将运算之后的链接变量a,b,c,d与初始链接变量A,B,C,D进行求和运算得到新的链接变量
  6. 新的链接变量作为下一个明文分组的输入重复进行以上操作
  7. 最后,4个链接变量里面的数据就是MD5摘要

RSA比较简单我就不写了

文件安全传输

要设计一套A和B之间可以安全通信的方案, 不需要考虑传输部分, 因为这是基于前面的代码的, 集成起来比较麻烦. 验收时讲解流程和展示结果即可, 不需要现场运行

方案设计:

avatar

参数选取

RSA A:选择 p=61,q=53,e=17 得到公钥(e,n)=(17,3233) 私钥(d,
n)=(2573,3233)
RSA B:选择 p=47,q=59,e=63 得到公钥(e,n)=(63,2773) 私钥(d,
n)=(847,2773)
明文: levit
AES 秘钥: 12345678KJNMLSDG

加密过程(A):
AES 密文: 640246746 37579803911 321220508 1223758774 116
用 B 的公钥对 AES 秘钥进行 RSA 加密 RSA_AES_miyao : ۯ Ϳ ʭ ؆ ij β ճ ਝ ѽ
॥ ¤ ઁ উ ३ ષ
对明文计算 MD5 摘要,MD5_miwen: ea152a3ff6469c391ee8c79a01191d80
A 的私钥对 MD5_miwen 加密, RSA_MD5_miwen: ઁ ઁ ઁ ۰ χ χ స ص
స ਘ ō ۰ ਘ ұ ō ਘ ઁ ਐ ਘ Ɵ ұ ਐ ষ
最后把加密生成的文件 AES_miwen.txt、RSA_AES_miyao.txt、
RSA_MD5_miwen.txt 打包发给终端 B

解密过程(B):
终端 B 的私钥对 RSA_AES_miyao.txt 进行 RSA 解密, 得到:AES_Key
对 AES_miwen 解密,得到明文 AES_mingwen.txt
用 MD5 算法对所得明文 AES_mingwen.txt 进行加密生成解密后的明文摘要。得
到: AES_mingwen_MD5.txt
RSA 算法用终端 A 的公钥对 RSA_MD5_miwen.txt 进行解密,得到:
RSA_MD5_mingwen.txt
比较 RSA_MD5_mingwen.txt 和 AES_mingwen_MD5.txt 有什么不同

加密结果与编码有关, 同样参数也可能显示不一样的结果

结果展示:

avatar
avatar
avatar
avatar

代码和实验报告开源在了我的github上, 如果对你有帮助的话, 欢迎star和follow😘


http://www.ppmy.cn/server/172322.html

相关文章

Mysql进阶(一)

1. 在ubuntu下安装MySQL数据库 1.1 查看操作系统版本 操作系统版本为Ubuntu22.04. LTS lsb_release -a; 安装成功之后,查看mysql的状态 1.2 查看mysql的状态 1.3 登录mysql mysql -uroot -p; 1.4 退出mysql quit; exit; 2. mysql 程序的…

【向量数据库Weaviate】 和Elasticsearch的区别

Weaviate 和 Elasticsearch 是两种不同类型的数据库,设计目标和应用场景有显著差异。以下是它们的核心区别和适用场景的详细对比: 1. 设计目标与核心能力 维度WeaviateElasticsearch核心能力向量数据库 图数据库(语义搜索优先)全…

牛客NC288803 和+和

​import java.util.Comparator;import java.util.PriorityQueue;import java.util.Scanner;​public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner sc new Scanner(System.in);// 读取两个整数n和m,分别表示数组的…

HTML 日常开发常用标签

文章目录 HTML 日常开发常用标签1、基本结构标签2、内容标签3、多媒体标签4、表单标签5、列表和定义标签6、表格标签7、链接和图像8、元数据9、语义化标签(HTML5新增)10、框架和内联11、交互12、过时或不推荐使用的标签 HTML 日常开发常用标签 1、基本结…

通过Python编程语言实现机器学习小项目教程案例

通过Python编程语言实现机器学习小项目教程案例 文章目录 通过Python编程语言实现机器学习小项目教程案例1. 项目背景与目标2. 开发环境准备2.1 所需工具2.2 环境搭建2.3 库版本验证3. 数据集介绍与加载3.1 数据集特性3.2 数据加载4. 数据探索与可视化4.1 数据概览4.2 可视化分…

【单片机通信技术】串口通信的几种方式与比较,详细解释SPI通信

一、介绍 串口通信是一种通过串行接口逐位传输数据的通信方式,广泛应用于嵌入式系统、工业控制、传感器网络等领域。 二、以下是几种常见的串口通信方式及其对比: 1.UART(Universal Asynchronous Receiver/Transmitter) 特点&am…

Solar2月应急响应公益月赛

暗链排查-1 burp 抓包,找到 js,cyberchef 一把梭,纯黑盒 暗链排查-2 roottianshou-0e3d41087e0b47e587d7b244849b893b-7769f979cf-szxvl:~# gcore -o nginx_core 11 [Thread debugging using libthread_db enabled] Using host libthread_db…

机器学习入门指南(2021版)

机器学习入门指南(2021版) 大家好,我是老胡。 这是为朋友社群准备的一篇机器学习入门指南,分享了我机器学习之路看过的一些书、教程、视频,还有学习经验和建议,希望能对大家的学习有所帮助。 pdf版思维导图…