基于类FFT置换矩阵构造三元弯曲函数
1. 引言
在构造三元弯曲函数时,类FFT置换矩阵发挥着重要作用。其基本思想与二元情况有相似之处,但也存在显著差异。在三元情况下,$x \cdot x = x^2$ 而非 $x \cdot x = x$,这使得我们需要处理变量的平方。并且,对于偶数和奇数个变量都存在三元弯曲函数。
2. 三元弯曲函数示例
这里给出两个不同的三元弯曲函数:
- 函数 $f_3 = x_1x_2 \oplus x_3x_4 \oplus x_2 \oplus x_3$,其函数向量为 $F_3 = [0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0]^T$。
- 函数 $f_4 = x_1x_3 \oplus x_2x_4 \oplus x_3x_4 \oplus x_4$,其函数向量为 $F_4 = [0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 0]^T$。
3. 类FFT置换矩阵的原理
与二元情况类似,我们定义在原定义域上作用的置换矩阵,即对函数值进行置换。由于要保持函数的弯曲性,这些置换必须对应于频谱域中的某些置换,而这些频谱域的置换由三元函数的频谱不变操作决定。FFT算法用于计算频谱系数,它决定了在计算每个频谱系数时所涉及的函数值,从而确定了在保持弯曲性的同时可以置换的函数值,也就确定了相关置换矩阵的结构,这些矩阵被称为三元函数的类FFT置换矩阵。
FFT的本质是,计算一个 $n$ 变量函数的频谱系数分 $n$ 步进行,每一步针对一个变量进行计算。这些步骤可以用Kronecker积可表示的矩阵来描述,其中第 $i$ 个位置的基本频谱变换矩阵对第 $i$ 个变量进行变换计算,而其他变量保持不变,由其他位置的单位矩阵表示。在置换矩阵的情况下,基本频谱变换矩阵被基本置换矩阵(即单变量函数的置换矩阵)所取代。
4. 基本置换矩阵
对于三元弯曲函数,我们考虑以下基本置换矩阵:
- $Q_1 =
\begin{bmatrix}
0 & 1 & 0 \
1 & 0 & 0 \
0 & 0 & 1
\end{bmatrix}$
- $Q_2 =
\begin{bmatrix}
1 & 0 & 0 \
0 & 0 & 1 \
0 & 1 & 0
\end{bmatrix}$
- $X_1 =
\begin{bmatrix}
0 & 0 & 1 \
1 & 0 & 0 \
0 & 1 & 0
\end{bmatrix}$
- $N_1 =
\begin{bmatrix}
0 & 0 & 1 \
0 & 1 & 0 \
1 & 0 & 0
\end{bmatrix}$
- $X_1^T =
\begin{bmatrix}
0 & 1 & 0 \
0 & 0 & 1 \
1 & 0 & 0
\end{bmatrix}$
除了 $X_1$ 外,其他三个矩阵是自转置的。加上 $(3 \times 3)$ 单位矩阵 $I(1)$,我们就得到了对应于三元素集合中所有六种可能置换的置换矩阵集合。
5. 单变量三元弯曲函数的分类
单变量的18个三元弯曲函数的函数向量按组成分为6类,如下表所示:
| 类 | 函数 | 组成 | 关系 |
| ---- | ---- | ---- | ---- |
| $c_1$ | $[0,1,1], [1,0,1], [1,1,0]$ | $(1,2,0)$ | $c_1 = x^2$,循环移位 |
| $c_2$ | $[0,2,2], [2,0,2], [2,2,0]$ | $(1,0,2)$ | $c_2 = 2c_1$ |
| $c_3$ | $[1,0,0], [0,1,0], [0,0,1]$ | $(2,1,0)$ | $c_3 = 2c_1 \oplus 1$ |
| $c_4$ | $[2,0,0], [0,2,0], [0,0,2]$ | $(2,0,1)$ | $c_4 = c_1 \oplus 2$ |
| $c_5$ | $[2,1,1], [1,2,1], [1,1,2]$ | $(0,2,1)$ | $c_5 = 2c_1 \oplus 2$ |
| $c_6$ | $[1,2,2], [2,1,2], [2,2,1]$ | $(0,1,2)$ | $c_6 = c_1 \oplus 1$ |
不同类之间的函数可以通过编码进行转换,类内的函数由于具有相同的组成,它们之间通过置换相互关联,所选的置换矩阵可以实现类内函数之间的转换,具体对应关系如下表:
| 矩阵 | 函数转换 |
| ---- | ---- |
| $Q_1$ | $f_1 \to f_2$ |
| $Q_2$ | $f_2 \to f_3$ |
| $X_1$ | $f_1 \to f_2$,$f_2 \to f_3$ |
| $X_1^T$ | $f_1 \to f_3$,$f_3 \to f_2$ |
| $N_1$ | $f_1 \to f_3$ |
6. 基本置换矩阵与频谱不变操作的对应关系
基本置换矩阵与频谱不变操作 $x_i \to k_1x_i \oplus k_2$(其中 $k_1 \in {1, 2}$,$k_2 \in {0, 1, 2}$)存在对应关系,如下表所示:
| 矩阵 $M$ | $k_1, k_2$ | 替换 |
| ---- | ---- | ---- |
| $X_1^T$ | $1, 1$ | $x_i \to x_i \oplus 1$ |
| $X_1$ | $1, 2$ | $x_i \to x_i \oplus 2$ |
| $Q_2$ | $2, 0$ | $x_i \to 2x_i$ |
| $Q_1$ | $2, 1$ | $x_i \to 2x_i \oplus 1$ |
| $N_1$ | $2, 2$ | $x_i \to 2x_i \oplus 2$ |
7. Kronecker积可表示的矩阵
我们考虑用基本置换矩阵 $Q_1$、$Q_2$、$X_1$、$X_1^T$、$N_1$ 以对应于计算三元函数的Vilenkin - Chrestenson变换的FFT步骤的Kronecker积表示方式来构造置换矩阵。这些置换矩阵可以表示为:
$P_i = \bigotimes_{r = 1}^{n} M_r$,其中
$M_r =
\begin{cases}
M, & \text{for } r = i \
I(1), & \text{for } r \neq i
\end{cases}$
这里 $M \in {X_1, X_1^T, Q_1, Q_2, N_1}$。
研究这些置换矩阵的原因是它们与变量的频谱不变操作极化相关,在三元情况下,极化定义为 $x_i \to k_1x_i \oplus k_2$,$k_1$ 和 $k_2$ 的值取决于所选的基本类FFT置换矩阵。
以下通过几个例子来说明这些Kronecker积可表示的类FFT置换矩阵的应用:
-
例8.8
:考虑二变量基本弯曲函数 $f_1 = x_1x_2$,将变量 $x_2$ 极化 $x_2 \to x_2 \oplus 1$(即 $k_1 = k_2 = 1$),得到函数 $f_2 = x_1x_2 \oplus x_1$。从置换矩阵的角度,这可以通过将 $f_1$ 的函数向量 $F_1$ 乘以置换矩阵 $P_1 = I(1) \otimes X_1^T$ 来实现。
$F_{x_1x_2} = [0, 0, 0, 0, 1, 2, 0, 2, 1]^T$,$x_1 = [0, 0, 0, 1, 1, 1, 2, 2, 2]^T$,则 $F_{x_1x_2 \oplus x_1} = F_{x_1x_2} \oplus x_1 = [0, 0, 0, 1, 2, 0, 2, 1, 0]^T$。
$P_1 = I(1) \otimes X_1^T =
\begin{bmatrix}
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0
\end{bmatrix}$
$F = P_1F_{x_1x_2} =
\begin{bmatrix}
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0
\end{bmatrix}
\begin{bmatrix}
0 \
0 \
0 \
0 \
1 \
2 \
0 \
2 \
1
\end{bmatrix}
=
\begin{bmatrix}
0 \
0 \
0 \
1 \
2 \
0 \
2 \
1 \
0
\end{bmatrix}$
-
例8.9 :函数 $f_2 = x_1x_2 \oplus x_2$ 是由 $f_1 = x_1x_2$ 通过替换 $x_1 \to x_1 \oplus 1$ 得到的,其函数向量 $F = [0, 1, 2, 0, 2, 1, 0, 0, 0]^T$。同样可以通过将 $f_1$ 的函数向量乘以置换矩阵 $P_2 = X_1^T \otimes I(1)$ 得到。
$P_2 = X_1^T \otimes I(1) =
\begin{bmatrix}
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0
\end{bmatrix}$
$F = P_2F_{x_1x_2} =
\begin{bmatrix}
0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \
0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \
1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \
0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0
\end{bmatrix}
\begin{bmatrix}
0 \
0 \
0 \
0 \
1 \
2 \
0 \
2 \
1
\end{bmatrix}
=
\begin{bmatrix}
0 \
1 \
2 \
0 \
2 \
1 \
0 \
0 \
0
\end{bmatrix}$ -
例8.10 :对于函数 $f_1 = x_1^2 \oplus x_2^2$,将 $x_1 \to x_1 \oplus 1$ 和 $x_2 \to x_2 \oplus 1$ 分别得到函数 $f_2 = x_1^2 \oplus x_2^2 \oplus 2x_1 \oplus 1$ 和 $f_2 = x_1^2 \oplus x_2^2 \oplus 2x_2 \oplus 1$,它们的函数向量可以通过将 $f_1$ 的函数向量 $F_1$ 分别乘以例8.8和例8.9中的置换矩阵 $P_1$ 和 $P_2$ 得到。
8. 置换矩阵的计算
图8.16 - 8.20展示了由矩阵 $Q_1 \otimes I(1)$、$I(1) \otimes Q_1$、$Q_2 \otimes I(1)$、$I(1) \otimes Q_2$、$X_1 \otimes I(1)$、$I(1) \otimes X_1$、$X_1^T \otimes I(1)$、$I(1) \otimes X_1^T$、$N \otimes I(1)$、$I(1) \otimes N_1$ 定义的置换算法的流程图。为了证明这些矩阵是类FFT置换矩阵,置换的流程图用较粗的绿色线叠加在变换的黑色流程图上。在三元函数的Vilenkin - Chrestenson变换的FFT流程图中,边的权重是Vilenkin - Chrestenson矩阵的元素1、$e_1$ 和 $e_2$,当基本变换矩阵被基本置换矩阵取代时,边的权重要么是0要么是1,权重为0的边在流程图中不显示。
例如,图8.16展示了置换矩阵 $Q_1 \otimes I(1)$ 和 $I(1) \otimes Q_1$ 的流程图:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([f(0)]):::startend --> B([f(1)]):::startend
C([f(1)]):::startend --> D([f(3)]):::startend
E([f(2)]):::startend --> F([f(5)]):::startend
G([f(3)]):::startend --> H([f(4)]):::startend
I([f(4)]):::startend --> J([f(0)]):::startend
K([f(5)]):::startend --> L([f(2)]):::startend
M([f(6)]):::startend --> N([f(7)]):::startend
O([f(7)]):::startend --> P([f(6)]):::startend
Q([f(8)]):::startend --> R([f(8)]):::startend
9. 扩展到任意变量数的函数
前面关于二变量三元弯曲函数的讨论和相关结论可以像类FFT算法那样扩展到任意变量数的函数,只需扩展Kronecker积表达式中的项数,如公式 (8.3) 所示。
例如,考虑三变量基本三元弯曲函数 $f(x_1, x_2, x_3) = x_1x_2 \oplus x_3^2$,其函数向量 $F = [0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 0, 0, 1, 2, 2]^T$。
-
例8.11
:置换矩阵 $P_1 = X_1^T \otimes I(1) \otimes I(1)$ 将该函数向量转换为 $F_1 = [0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 1, 1, 0, 1, 1, 0, 1, 1]^T$,对应的函数表达式为 $f_1(x_1, x_2, x_3) = x_1x_2 \oplus x_3^2 \oplus x_2$。
-
例8.12
:表8.6展示了将不同的Kronecker积可表示的类FFT置换矩阵应用于函数 $f(x_1, x_2, x_3) = x_1x_2 \oplus x_3^2$ 所产生的弯曲函数的函数向量、函数表达式以及对应的频谱不变操作:
| 序号 | 置换矩阵 | 频谱不变操作 | 函数向量 | 函数表达式 |
| ---- | ---- | ---- | ---- | ---- |
| 1 | $P_2 = I(1) \otimes X_1 \otimes I(1)$ | $x_2 \to x_2 \oplus 2$ | $F_2 = [0, 1, 1, 0, 1, 1, 0, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 1, 2, 2, 0, 1, 1, 2, 0, 0]^T$ | $f_2(x_1, x_2, x_3) = x_1x_2 \oplus 2x_1 \oplus x_3^2$ |
| 2 | $P_3 = I(1) \otimes I(1) \otimes Q_2$ | $x_3 \to 2x_3$ | $F_3 = [0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 0, 0, 1, 2, 2]^T$ | $f_3(x_1, x_2, x_3) = x_1x_2 \oplus x_3^2$ |
| 3 | $P_4 = Q_1 \otimes I(1) \otimes I(1)$ | $x_1 \to 2x_1 \oplus 1$ | $F_4 = [0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 2, 0, 0, 1, 2, 2]^T$ | $f_4(x_1, x_2, x_3) = 2x_1x_2 \oplus x_2 \oplus x_3^2$ |
| 4 | $P_5 = I(1) \otimes I(1) \otimes N_1$ | $x_3 \to 2x_3 \oplus 2$ | $F_5 = [1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 2, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 2, 2, 2, 1]^T$ | $f_5(x_1, x_2, x_3) = 1 \oplus 2x_3 \oplus x_3^2 \oplus x_1x_2$ |
10. 多个基本置换矩阵的同时应用
以下例子展示了同时应用两个或更多基本置换矩阵的情况:
-
例8.13
:考虑置换矩阵 $P_6 = P_1 \cdot P_5 = (X_1^T \otimes I(1) \otimes I(1)) \cdot (I(1) \otimes I(1) \otimes N_1) = X_1^T \otimes I(1) \otimes N_1$。将该矩阵应用于例8.11中的函数 $f$,得到函数 $f_6$,其函数向量 $F_6 = [1, 1, 0, 2, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 2, 2, 2, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]^T$,对应的函数表达式为 $f_6(x_1, x_2, x_3) = 1 \oplus 2x_3 \oplus x_3^2 \oplus x_2 \oplus x_1x_2$。
综上所述,类FFT置换矩阵为构造三元弯曲函数提供了一种有效的方法,通过对函数值的置换和频谱不变操作的应用,可以在保持函数弯曲性的同时生成新的弯曲函数,并且可以扩展到任意变量数的函数。这种方法在密码学等领域可能具有重要的应用价值。
基于类FFT置换矩阵构造三元弯曲函数
11. 多矩阵应用的意义与分析
在前面的例子中,我们看到了多个基本置换矩阵同时应用的情况,如例8.13中的 $P_6 = P_1 \cdot P_5$。这种多矩阵的应用其实是对频谱不变操作的组合。每一个基本置换矩阵对应着一个特定的频谱不变操作,当多个矩阵相乘时,就相当于依次执行了多个频谱不变操作。
从函数的角度来看,这意味着我们可以通过组合不同的基本置换矩阵,对原始函数进行更复杂的变换,从而生成更多样化的弯曲函数。例如,在例8.13中,$P_6$ 的应用使得原始函数 $f$ 经过了 $x_1$ 和 $x_3$ 两个变量的极化操作,最终得到了一个新的弯曲函数 $f_6$。
12. 置换矩阵应用的操作步骤总结
为了更清晰地展示如何使用类FFT置换矩阵构造三元弯曲函数,下面总结具体的操作步骤:
1.
确定原始函数
:首先明确要处理的三元弯曲函数,例如 $f(x_1, x_2, \cdots, x_n)$,并得到其函数向量 $F$。
2.
选择频谱不变操作
:根据需求确定要进行的频谱不变操作,即确定 $x_i \to k_1x_i \oplus k_2$ 中的 $k_1$ 和 $k_2$ 的值。
3.
选择基本置换矩阵
:根据频谱不变操作与基本置换矩阵的对应关系(如表8.5所示),选择合适的基本置换矩阵 $M$。
4.
构造Kronecker积可表示的置换矩阵
:根据公式 $P_i = \bigotimes_{r = 1}^{n} M_r$ 构造置换矩阵,其中 $M_r$ 根据 $r$ 是否等于 $i$ 选择 $M$ 或 $I(1)$。
5.
计算新的函数向量
:将原始函数向量 $F$ 乘以置换矩阵 $P$,得到新的函数向量 $F’ = P \cdot F$。
6.
确定新的函数表达式
:通过分析新的函数向量,结合原始函数的表达式,确定新的函数表达式。
13. 置换矩阵应用的流程图
下面的mermaid流程图展示了置换矩阵应用的整体流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A([确定原始函数]):::startend --> B(选择频谱不变操作):::process
B --> C(选择基本置换矩阵):::process
C --> D(构造Kronecker积可表示的置换矩阵):::process
D --> E(计算新的函数向量):::process
E --> F(确定新的函数表达式):::process
F --> G([得到新的弯曲函数]):::startend
14. 不同置换矩阵组合的效果分析
为了更直观地了解不同置换矩阵组合的效果,我们可以对比不同组合下生成的弯曲函数。以下是一个简单的对比表格:
| 置换矩阵组合 | 原始函数 | 新函数向量 | 新函数表达式 | 特点 |
| ---- | ---- | ---- | ---- | ---- |
| $P_1$ | $f(x_1, x_2, x_3) = x_1x_2 \oplus x_3^2$ | $[0, 1, 1, 1, 2, 2, 2, 0, 0, 0, 1, 1, 2, 0, 0, 1, 2, 2, 0, 1, 1, 0, 1, 1, 0, 1, 1]^T$ | $x_1x_2 \oplus x_3^2 \oplus x_2$ | 对 $x_1$ 进行极化操作,增加了 $x_2$ 项 |
| $P_2$ | $f(x_1, x_2, x_3) = x_1x_2 \oplus x_3^2$ | $[0, 1, 1, 0, 1, 1, 0, 1, 1, 2, 0, 0, 0, 1, 1, 1, 2, 2, 1, 2, 2, 0, 1, 1, 2, 0, 0]^T$ | $x_1x_2 \oplus 2x_1 \oplus x_3^2$ | 对 $x_2$ 进行极化操作,增加了 $2x_1$ 项 |
| $P_6 = P_1 \cdot P_5$ | $f(x_1, x_2, x_3) = x_1x_2 \oplus x_3^2$ | $[1, 1, 0, 2, 2, 1, 0, 0, 2, 1, 1, 0, 0, 0, 2, 2, 2, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0]^T$ | $1 \oplus 2x_3 \oplus x_3^2 \oplus x_2 \oplus x_1x_2$ | 对 $x_1$ 和 $x_3$ 进行极化操作,增加了多个项 |
从这个表格中可以看出,不同的置换矩阵组合会对原始函数产生不同的影响,通过合理选择组合方式,可以构造出满足特定需求的弯曲函数。
15. 总结与展望
通过前面的介绍,我们了解到类FFT置换矩阵为构造三元弯曲函数提供了一种系统且有效的方法。从基本置换矩阵的定义,到Kronecker积可表示的置换矩阵的构造,再到具体的应用实例,整个过程展示了如何通过频谱不变操作对原始函数进行变换,从而生成新的弯曲函数。
这种方法的优势在于其灵活性和可扩展性。我们可以根据不同的需求选择不同的频谱不变操作和基本置换矩阵,并且可以将其扩展到任意变量数的函数。在实际应用中,三元弯曲函数在密码学、通信等领域有着广泛的应用前景。例如,在密码学中,弯曲函数的良好性质可以用于设计更安全的加密算法。
未来,我们可以进一步研究如何更高效地选择置换矩阵组合,以生成具有特定性质的弯曲函数。同时,也可以探索将这种方法应用到其他类型的函数构造中,拓展其应用范围。
总之,类FFT置换矩阵在三元弯曲函数构造领域具有重要的价值,值得我们深入研究和探索。
超级会员免费看
45

被折叠的 条评论
为什么被折叠?



