代数密码类型

发布: (2025年12月17日 GMT+8 10:29)
3 min read
原文: Dev.to

Source: Dev.to

代数密码类型

在我们能够定义密码函子之前,需要先定义我们将要使用的代数结构。密码函子提供了一种将幺半群提升为密码幺半群的方法。

群与幺半群

群是一个集合 $G$,以及一个运算 $* : G \times G \to G$,它将任意两个元素 $a$ 和 $b$ 组合成另一个元素 $a*b$。要成为群,集合与运算 $(G, *)$ 必须满足四条被称为群公理的要求:

  • 闭合性:对所有 $a,b \in G$,运算结果 $a*b$ 仍然属于 $G$。
  • 结合性:对所有 $a,b,c \in G$,有 $(ab)c = a(bc)$。
  • 单位元:存在一个元素 $e \in G$,使得对每个元素 $a \in G$,都有 $ea = ae = a$。该元素唯一,因而称为单位元。
  • 逆元:对每个 $a \in G$,存在一个元素 $a’ \in G$ 使得 $a*a’ = a’*a = e$,其中 $e$ 为单位元。

幺半群 $(S,*)$ 通过去除逆元的要求而放宽了群的条件。

密码函子

在密码函子中,我们将幺半群 $(S,)$ 提升为 $c_A(S,)$,其定义如下:

  • $A$ 是 $S$ 的一个子集。
  • $s : S \times \mathbb{N} \to c_A S$ 将 $S$ 映射到 $c_A S$ 中的表示,即 $s(a,k)$ 将元素 $a \in S$ 映射为 $c_A S$ 中的第 $k$ 个表示。
  • $s’ : c_A S \to S$ 满足 $s’(s(a,k)) = a$ 且 $s(s’(j),k) = c_A a$,对任意 $a \in S$ 和 $k \in \mathbb{N}$ 均成立。

通常,$s$ 由另一个以密钥和每个表示的固定比特长度为参数的函数生成。

$c_A(S,*,e)$ 具有一个运算 $(c_A *) : (c_A S, c_A S) \to c_A S$,其由以下公理给出:

  • 结合性:对所有 $x,y,z \in A$,
    $s’((c_A x * c_A y) * c_A z) = s’(c_A x * (c_A y * c_A z))$。
Back to Blog

相关文章

阅读更多 »