一、题目描述

AES, like all good block ciphers, performs a "keyed permutation". This means that it maps every possible input block to a unique output block, with a key determining which permutation to perform.

A "block" just refers to a fixed number of bits or bytes, which may represent any kind of data. AES processes a block and outputs another block. We'll be specifically talking the variant of AES which works on 128 bit (16 byte) blocks and a 128 bit key, known as AES-128.

Using the same key, the permutation can be performed in reverse, mapping the output block back to the original input block. It is important that there is a one-to-one correspondence between input and output blocks, otherwise we wouldn't be able to rely on the ciphertext to decrypt back to the same plaintext we started with.

What is the mathematical term for a one-to-one correspondence?

二、解题思路

2.1 题目分析

这道题是一个纯概念题,考查的是对密码学基础数学概念的掌握。题目介绍了 AES 的核心特性——它是一个由密钥决定的置换(keyed permutation),并强调了输入块与输出块之间"一一对应"(one-to-one correspondence)的重要性。最后直接问:一一对应的数学术语是什么?

2.2 数学概念解析

在数学中,"一一对应"(one-to-one correspondence)指的是一个函数同时具备以下两个性质:

① 单射(Injective / One-to-One):函数的每个输出最多只对应一个输入。即不同的输入必定产生不同的输出:f(x₁) ≠ f(x₂) 当 x₁ ≠ x₂。

② 满射(Surjective / Onto):函数的每个可能的输出都有至少一个输入与之对应。即值域等于陪域,没有"缺失"的输出。

③ 双射(Bijection):当一个函数同时满足单射和满射时,称该函数为双射函数(bijective function),也称为"一一映射"或"一一对应"。双射函数的重要特性是存在反函数(inverse function),这使得加密操作可以被完美地逆转。

3.3 为什么 AES 必须是双射?

AES 加密过程 Eₖ: {0,1}¹²⁸ → {0,1}¹²⁸ 在给定密钥 k 的情况下,必须是一个双射。原因如下:

如果加密函数不是单射的(即两个不同的明文映射到同一个密文),那么解密时就无法确定原始明文到底是哪一个,解密会变得歧义且不可靠。

如果加密函数不是满射的(即某些密文永远不会被产生),那么解密时如果收到了这样的密文,我们将无法找到对应的明文。

因此,AES 加密函数必须是一个双射,确保每个明文唯一对应一个密文,并且解密函数 Dₖ = Eₖ⁻¹ 能够将其完整地逆转回来。

三、Flag / 答案

crypto{bijection}

四、答案解释

本题的答案是 bijection(双射)。在数学(特别是集合论和函数论)中,"bijection" 是描述两个集合之间"一一对应"关系的标准术语。一个函数 f: A → B 是双射当且仅当它是单射(injective)又是满射(surjective)。

在密码学中,这个性质对于分组密码(block cipher)至关重要。AES 的每一轮操作(SubBytes, ShiftRows, MixColumns, AddRoundKey)都是精心设计的可逆操作,组合在一起形成整体的双射变换,从而确保解密可行。这也是为什么 AES 被称为"带密钥的置换"(keyed permutation)——给定密钥,AES 就是 {0,1}¹²⁸ 上的一个置换(双射);改变密钥,则改变为另一个不同的置换。

五、知识拓展:AES 中的置换

5.1 什么是 Keyed Permutation?

一个 Keyed Permutation(带密钥的置换)是一个函数族 {Fₖ}ₖ∈K,其中每个 Fₖ 是一个置换(双射),密钥 k 决定了选择哪一个具体的置换。

对于 AES-128:
• 密钥空间大小:2¹²⁸ ≈ 3.4 × 10³⁸
• 每个密钥对应一个不同的置换
• 总共定义了 2¹²⁸ 个不同的置换(远小于所有可能的 2¹²⁸! 个置换,但对安全已足够)

5.2 AES-128 的可逆性保证

AES 之所以能保证双射性质,是因为它的每一层变换都是可逆的:

操作

可逆性说明

SubBytes

S-Box 是一个 8 位上的置换(双射),有逆 S-Box

ShiftRows

简单的位置重排,反向操作是 ShiftRows 的逆移位

MixColumns

基于 GF(2⁸) 上的可逆矩阵乘法,有逆矩阵

AddRoundKey

XOR 运算,自身即为逆运算(XOR 两次密钥即恢复原值)

5.3 相关数学概念对比

术语

英文

含义

单射

Injective / One-to-One

不同输入 → 不同输出,值域中每个值最多对应一个输入

满射

Surjective / Onto

陪域中每个值都有输入映射过来,没有遗漏

双射

Bijective

既是单射又是满射,一一对应关系,存在反函数

置换

Permutation

有限集合到自身的双射,AES 的每一轮都是一种置换

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐