【密码学——基础理论与应用】李子臣编著 第三章 分组密码 课后习题

ops/2025/3/12 8:54:00/

免责声明

这里都是自己搓或者手写的。
里面不少题目感觉有问题或者我的理解有偏颇,请大佬批评指正!
不带思考抄作业的请自动退出,我的并非全对,仅仅提供思维!

题目

逐题解析

3.9

做这题需要有置换和错排的知识储备(见参考文献)。

解: 2^n 个元素的置换有 2^n! 种方式(不妨记为a)
其中,错排的数量为 2^n! \sum_{k=0}^{2^n} \frac{(-1)^k}{k!}个。(不妨记为b)
因此,S上具有不动点的置换个数是a-b个。

3.10

如果我没理解错题意,那么就是书上的证明。动手举个例子去试一下,理解不难。

3.11

解:DES的密钥为56bit,每个bit对应0或者1,双重DES则有112个密钥。因此

P= \frac{1}{2^{112}}

3.12

解:101010对应的横坐标是10(即2),纵坐标对应的是0101(即5)。
100010对应的横坐标是10(即2),纵坐标是0001(即1)。

我们并不知道是哪个盒子,因此要讨论。

S1S2S3S4S5S6S7S8
(2,5)数值641511138312
二进制01100100111110111101100000111100
(2,1)数值11466214411
二进制00011110011001100010111001001011

3.13

解:同上理,这是一个逆向过程。对于每个盒子,输入的数字都不一定一样。
(每一个点对应的输入值请自己翻译,表格太长写不下。。。)

S1S2S3S4S5S6S7S8

1010

(十进制为10)

(0,9)(0,15)(0,0)(0,7)(0,5)(0,2)(0,13)(0,8)
(1,8)(1,11)(1,7)(1,13)(1,11)(1,10)(1,7)(1,4)
(2,13)(2,4)(2,13)(2,0)(2,4)(2,11)(2,8)(2,10)
(3,12)(3,2)(3,1)(3,4)(3,12)(3,7)(3,6)(3,5)

0010

(十进制为2)

(0,4)(0,10)(0,14)(0,9)(0,0)(0,5)(0,2)(0,2)
(1,5)(1,5)(1,8)(1,10)(1,2)(1,3)(1,12)(1,15)
(2,6)(2,14)(2,10)(2,13)(2,1)(2,4)(2,15)(2,7)
(3,3)(3,7)(3,14)(3,14)(3,6)(3,2)(3,13)(3,0)

3.14(待填坑)

这题需要用到多项式乘法逆元的知识。
学了AES我才知道大二上学的离散真的是一坨,密码学核心的循环群、环、域全部不用讲。
但是期末又把群论考的群难得一批。
然后有限域多项式的乘法完全把我搞蒙b了......现在也还在消化过程中。

解:
第一步求解逆元。
由题,(a_7a_6a_5a_4a_3a_2a_1a_0)(b_7b_6b_5b_4b_3b_2b_1b_0) \equiv 1 \ mod \ m(x)
用扩展欧几里得算法算出(b_7b_6b_5b_4b_3b_2b_1b_0)。但是我还不会算,等待填坑
第二步仿射变换。
仿射变换简单亿点点。

3.15

这个就是异或运算。

解:

A(x) \oplus B(x) \\ =(1b \oplus ac) x^3+(03 \oplus 00) x^2+(dd \oplus f0) x^1+(a1 \oplus 2d) x^0 \\ =b7x^3+03 x^2+22 x^1+8c x^0

3.16(待填坑)

AES的列变换矩阵(记为P)如下:

\begin{pmatrix} 02 & 03 & 01 & 01 \\ 01 & 02 & 03 & 01 \\ 01 & 01 & 02 & 03 \\ 03 & 01 & 01 & 02 \end{pmatrix}

课本也给出了逆矩阵P'如下:

\begin{pmatrix} 0E & 0B & 0D & 09 \\ 09 & 0E & 0B & 0D \\ 0D & 09 & 0E & 0B \\ 0B & 0D & 09 & 0E \end{pmatrix}

那么

(t_{ij})_{4*4}= P' (s_{ij})_{4*4}

代码有空更新,这是16进制的,目前我还不会搞。

3.17

解:xtime(b)公式如下:
若b7=0,则字节内左移一位。
若b7=1,则字节左移一位之后与4D(01001101)的按位模2实现。
推导:

x^8=x^6+x^3+x^2+1\\ xtime(b)\\ =b_7x^8+b_6x^7+b_5x^6+b_4x^5+b_3x^4+b_2x^3+b_1x^2+b_0x^1+0\\ =(b_6\oplus 0)x^7+(b_5\oplus 1)x^6+(b_4\oplus 0)x^5+(b_3\oplus 0)x^4+\\(b_2\oplus 1)x^3+(b_1\oplus 1)x^2+(b_0\oplus 0)x^1+(0\oplus 1)\\

0x6D·0xD5计算结果:0xBA
过程:

参考文献

置换:近世代数 笔记与题型连载 第八章(置换群)_轮换与对换的关系-CSDN博客

错排:彻底搞懂错排公式-CSDN博客

【组合数学】错排问题 ( 递推公式 | 通项公式 | 推导过程 ) ★-CSDN博客

有限域:密码编码学与网络安全--原理与实现--(第八版)第5章 ------有限域_密码编码学与网络安全第八版答案-CSDN博客

有限域、域内运算、不可约多项式、本原多项式【这篇一定能让你看懂!!】-CSDN博客


http://www.ppmy.cn/ops/165160.html

相关文章

c++ constraints与concepts使用笔记

1. 模板参数缺乏约束的问题 问题分析&#xff1a; 传统模板参数没有语法层面的约束&#xff0c;需要程序员自行通过代码逻辑理解参数要求编译器错误信息不友好&#xff0c;尤其在传递非法参数时&#xff08;如 vector<int&>&#xff09;类型检查发生在模板实例化时…

C++【类和对象】(超详细!!!)

C【类和对象】 1.运算符重载2.赋值运算符重载3.日期类的实现 1.运算符重载 (1).C规定类类型运算符使用时&#xff0c;必须转换成调用运算符重载。 (2).运算符重载是具有特殊名字的函数&#xff0c;名字等于operator加需要使用的运算符&#xff0c;具有返回类型和参数列表及函数…

Redis常用数据结构及命令详解:从基础到进阶

Redis作为一款高性能的键值存储系统&#xff0c;凭借其丰富的数据结构和灵活的用法&#xff0c;被广泛应用于缓存、队列、计数器等场景。Redis提供了多种数据结构&#xff0c;每种结构都有其独特的特性和适用场景。本文将详细介绍Redis的几种常用数据结构&#xff0c;并指出使用…

基于USB Key的Web系统双因素认证解决方案:构建安全与便捷的登录体系

摘要 在网络安全威胁日益严峻的背景下&#xff0c;传统的“用户名密码”认证方式已难以应对钓鱼攻击、密码窃取等风险。上海安当基于USB Key技术&#xff0c;推出了一套面向Web系统的双因素认证解决方案&#xff0c;通过硬件与密码学的深度融合&#xff0c;实现用户身份的高强度…

【每日八股】计算机网络篇(四):HTTP

目录 HTTP 与 HTTPS 的区别&#xff1f;HTTPS 加密与认证的过程&#xff1f;ClientHelloServerHello客户端回应服务端回应 HTTPS 一定安全可靠吗&#xff1f;HTTPS 状态码的含义&#xff1f;HTTP 缓存有哪些实现方式&#xff1f;HTTP 1.0、HTTP 1.1、HTTP 2.0 和 HTTP 3.0 的区…

MyBatis的级联查询(一对一、一对多、多对多)

MyBatis的级联查询 级联的优点是获取关联数据十分便捷。但是级联过多会增加系统的复杂度&#xff0c;同时降低系统的性能&#xff0c;此增彼减。所以记录超过 3 层时&#xff0c;就不要考虑使用级联了&#xff0c;因为这样会造成多个对象的关联&#xff0c;导致系统的耦合、负…

numpy常用函数详解

在深度神经网络代码中经常用到numpy库的一些函数&#xff0c;很多看过之后很容易忘记&#xff0c;本文对经常使用的函数进行归纳总结。 np.arange arange是numpy一个常用的函数&#xff0c;该函数主要用于创建等差数列。它的使用方法如下所示&#xff1a; numpy.arange([star…

llama.cpp编译

llam.cpp编译 1. 下载&编译 git clone https://github.com/ggml-org/llama.cpp cmake -S . -B build2. 下载模型验证 # 下载地址 https://huggingface.co/filipealmeida/open-llama-7b-v2-open-instruct-GGUF/blob/main/ggml-model-Q4_0.gguf# 验证 ./llama-cli.exe -m …