本文通过多个例子详细解释了同态映射的概念,并探讨了其在加密技术和零知识证明中的应用。文章结构清晰,分为简单和复杂例子两部分,并附有详细的数学公式和Python代码示例。
如果在两个群之间存在一个结构保持映射,那么两个群之间就存在同态。
假设我们有两个代数数据结构 (A,◻) 和 (B,◼),其中 A 的二元运算是 ◻,B 的二元运算是 ◼。
从 A 到 B 的同态存在当且仅当存在一个函数 ϕ:A→B 使得
$$ \phi(a_i \square a_j)=\phi(a_i)\blacksquare\phi(a_j)\space\space\forall a_i,a_j\in A $$
换句话说,如果 $a_i \square a_j = a_k$,那么 $\phi(a_i) \blacksquare \phi(a_j) = \phi(a_k)$。
注意,同态是单向的。函数 ϕ 将 A 中的元素映射到 B 中的元素。我们对于“反向”映射没有要求。
我们将首先展示一些简单的示例,提供一些澄清,然后提供更复杂的示例。
设 A 为所有整数加法的集合,B 为所有偶整数加法的集合。显然,A 和 B 都是群。
设 ϕ(x)=2x
我们看到,ϕ 定义了一个从 A 到 B 的同态,因为对于任何一对整数 ai 和 aj,以下关系成立: $$ \begin{align} \phi(a_i+a_j)&=\phi(a_i)+\phi(a_j)\ 2(a_i+a_j)&=2(a_i)+2(a_j) \end{align} $$
例如,设 A 为所有字符串(包括空字符串)的单元,在连接下操作,设 B 为所有大于等于零的整数的单元,在加法操作下。
从 A 到 B 存在一个同态,因为存在一个函数 ϕ 将字符串映射到大于等于零的整数并保持以下性质
$$ \phi(a_i+a_j)=\phi(a_i)+\phi(a_j) $$
在这种情况下,ϕ 是字符串的长度。例如:
$$ \begin{align} \text{Rare}&\rightarrow 4\ \text{Skills}&\rightarrow 6\ \text{RareSkills}&\rightarrow 10\ \end{align} $$
在这里,我们有
$$ \begin{align} \phi(\text{Rare})&=4\ \phi(\text{Skills})&=6\ \phi(\text{RareSkills})&=10\ \phi(\mathsf{concat}(\text{Rare},\text{Skills}))&=\phi(\text{Rare})+\phi(\text{Skills})\ \end{align} $$
一些同态在你掌握这些概念后似乎相当微不足道。这是这样的一个同态的例子。在这种情况下,我们的函数 ϕ 只是将实数重复 n×m 次。例如,如果 n=3 和 m=2,则 ϕ(8.8) 为:
$$ \begin{bmatrix} 8.8&8.8\ 8.8&8.8\ 8.8&8.8 \end{bmatrix} $$
作为示例,如果 ϕ(8.8+0.2)=ϕ(8.8)+ϕ(0.2) 因为
$$ \begin{bmatrix} 9&9\ 9&9\ 9&9\ \end{bmatrix}= \begin{bmatrix} 8.8&8.8\ 8.8&8.8\ 8.8&8.8 \end{bmatrix}+ \begin{bmatrix} 0.2&0.2\ 0.2&0.2\ 0.2&0.2\ \end{bmatrix} $$
假设我们有群 A=(Z,+)(所有整数加法的集合)和群 B,即所有 b 的整数次幂在乘法下的集合,i.e., B=(bi:i∈Z,×)。我们可以随意设置 b=2,使这个例子更容易理解。
存在一个从 A 到 B 的同态,定义为 ϕ(x)=bx。根据代数的规则,
$$ \begin{align} \phi(a_i+a_j)&=\phi(a_i)\times\phi(a_j)\ b^{a_i + a_j}&=b^{a_i}b^{a_j} \end{align} $$
要理解为什么这个关系成立,可以考虑:
$$
b^{ai}=\underbrace{b\cdot b\cdot\dots\cdot b}{{a_i} \text{ times}}
$$
$$ b^{aj}=\underbrace{b\cdot b\cdot\dots\cdot b}{{a_j} \text{ times}}
$$
$$ b^{a_i + aj}=\underbrace{b\cdot b\cdot\dots\cdot b}{{ai} \text{ times}} \cdot \underbrace{b \cdot b \cdot \dots \cdot b}{a_j \text{ times}} $$
$$ b^{a_i +aj}=\underbrace{b\cdot b\cdot\dots\cdot b\cdot b\cdot b\dots\cdot b}{{a_i+a_j} \text{ times}} $$
在这种情况下,ϕ 只是将矩阵中的所有元素相加。为什么有效留给读者自己思考。
从第一个单元到第二个单元存在一个同态,因为 ϕ 是矩阵的行列式,并且以下规则成立:
$$XY=Z→det(X)det(Y)=det(Z)$$
其中 X,Y,Z 是 2×2 整数矩阵。为什么这些是代数数据结构而不是群留给读者思考。
这个概念已经在我们关于 有限域 的文章中讲解过,但我们没有使用“同态”来描述它。
设 A 为所有分母不是 p 的倍数的有理数的群,操作为加法。设 B 为模 p 的有限域。
存在一个从群 A 到群 B 的同态。 ϕ 定义为
$$ \phi(x) = \mathsf{numerator}(x)\times\mathsf{modular_inverse}(\mathsf{denominator}(x)) \pmod p $$
或者在 Python 中:
p = 11
def phi(num, den):
return num * pow(den, -1, p) % p
例如:
说 1/3 ≡ 6(mod17) 等价于陈述 ϕ(1/3)=6。
让我们以上述相同的例子,但进行乘法。函数 ϕ 保持不变。
为以下代数数据结构对找到一个同态。如果遇到困难(或只是想要解决问题),可以通过谷歌查找答案或咨询聊天机器人。
如果 ϕ 计算上难以反转,则 ϕ 同态加密 了 A 的元素。
设 A 为所有整数加法,B 为目标群,◼ 为 B 的二元运算。
假设我们希望向验证者证明我们计算了 2+3=5。我们将给验证者 (x,y,5),其中 x=ϕ(2),y=ϕ(3),验证者检查:
$$ x◼y=?ϕ(5) $$
注意,同态加密意味着验证者知道函数 ϕ。
一个证明者声称:“我有两个数字 a 和 b,b 是 a 的五倍。”证明者将 ϕ(a) 和 ϕ(b) 发送给验证者,验证者检查:
$$ ϕ(a)+ϕ(a)+ϕ(a)+ϕ(a)+ϕ(a)=ϕ(b) $$
请记住,“乘法”在这里不是二元运算,它只是重复加法的简写。
在这些示例中,请注意我们没有提到 B 中的元素是什么,◼ 是什么。B 可能是复杂的数学对象,◼ 可能是复杂的数学运算,但那并不重要。
这就是抽象代数的美:我们不需要知道。只要它具有我们所关心的属性,我们就可以推理它的行为,即使我们对实现一无所知。
好的,了解到群和同态的概念后,这对我们有什么帮助?我这样做的原因是希望你理解下面这个声明:
“有限域下的椭圆曲线点在加法操作下是一个有限循环群,而整数加法同态于该群。”
你可能不知道椭圆曲线点是什么,或其加法的意义,但你已经知道:
即使你不知道椭圆曲线点是什么,你已经知道关于它们的九个事实!
所以无论这些奇怪的对象“椭圆曲线点”是什么,你都知道它的行为以及与我们之前讨论的群拥有相同的属性。
信不信由你,你已经走了90%理解椭圆曲线的路。通过理解它们与其他熟悉结构的相似性,比从零开始理解它们奇怪的数学更容易得多。
这类似于我告诉你以太坊使用“Patricia Merkle 树”来存储状态。你可能不知道“Patricia 树”或“Merkle 树”是什么,但你知道:
所以当我告诉你在加法下椭圆曲线点形成一个群时,你应该已经知道这一学科有哪些需要留意的地方。
再次强调,群不必是神秘的月球数学。作为程序员,你已经直观地使用过群。现在,你有了一个具体的词来描述这种反复出现的现象。
说“群”要远比“这是一个组合元素的方式是结合的,元素具备 blah blah blah”来得高效得多。
我知道这似乎是一个很大的偏离,但相信我,理解“同态”使我们能够简洁地描述一个我们将经常看到的概念。当我们讨论二次算术程序 时,它也将再次派上用场。同态在零知识世界中频繁出现。
想象一下,试图讨论树数据结构而没有“根”或“叶子”的词汇。这将是极具挑战性的。
从 A 到 B 的同态存在当且仅当存在一个函数 ϕ,它从 A 中取出一个元素并返回 B 中的一个元素,并且满足 ϕ(ai◻aj)=ϕ(ai)◼ϕ(aj),对所有 ai 和 aj ∈ A,其中 ◻ 是 A 的二元运算,◼ 是 B 的二元运算。ϕ 的存在是同态存在的充分条件。
同态不一定是双向的。它们只需在一个方向上有效,从 A 到 B。
如果 ϕ:A→B 在计算上难以反转,则 ϕ 同态加密了 A 的元素。这意味着我们可以使用 B 中的元素来验证关于 A 中计算的声明。
好消息是,我们的抽象代数话题已经结束,我们现在有了坚实的基础,可以继续学习 椭圆曲线。
- 原文链接: rareskills.io/post/homom...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!