文章介绍了密码学中的同态(Homomorphism)和同构(Isomorphism)概念,并通过椭圆曲线群的例子展示了同态加密的基本原理及其在ElGamal加密系统中的应用。
这是关于加密技术的更大系列文章的一部分。如果这是你看到的第一篇文章,我强烈建议你从 系列的开头 开始。
到目前为止,我们对 群 的基本理解已经足够有用,可以设计满足许多需求的加密方案,包括 加密,签名,(以及一些 特异变体), 证明,承诺,可验证的随机性 等等。
我相信,现在是进一步理解群结构的好时机,同时揭开一套新的 酷加密原语。
你可能已经听说过 同态 和 同构。但这些名字听起来奇怪的东西到底是什么?
听起来就像是变形金刚电影中出来的东西
一般来说,同态是一个 函数 或 映射,它保持 代数性质 的不变。
回想一下,当我们处理群时,我们只有一个 集合 和一个 运算。因此,一个 群同态 确实是将一个群的元素映射到 另一个群,其中运算的 性质 是 保持 的。
这一切可以简化为:如果 a 和 b 是一个群的元素,那么一个同态 f 应该像这样工作:
一个同态的好例子发生在我们获取一个具有生成元 G 和阶 n 的 椭圆曲线群,以及 模 n 整数的加法群 时。我们只需定义:
我们可以轻松看到加法是保持的:
注意在上述情况下,两个群的元素之间存在一一对应关系。这 并不总是这样:如果我们选择模 q 的整数,而 q > n,那么至少有两个整数将共享相同的函数值。
在实际上存在一一对应的情况下,我们可以理论上使用 f 将 ℤₙ 映射到 ⟨G⟩,并使用其 逆 f ⁻¹ 将 ⟨G⟩ 映射回 ℤₙ。
用数学术语来说,这意味着 f 是一个 双射。你知道的,以防你想更加确切地说明它!
当这种情况发生时,我们说 f 是一个 同构 而不是同态。两个群被称为是 同构的。
对于群论,我们认为同构的群本质上是同一个群 伪装 而成,因为我们可以找到一个函数,使我们能够将一个群转化为另一个群,反之亦然。
啊,百万美元的问题。
群表达为同态或同构的想法非常有趣,因为在选择的群之间来回移动意味着我们可以在 任一群 中执行操作。这允许我们做一些 魔法。我们稍后将看到这一点。
在深入一个示例之前,我想澄清一些你可能会遇到的符号。如果你查看例如 这一页 有关 ElGamal 加密系统(我们稍后将看到的算法),你会注意到他们在处理群时似乎不使用 加法。相反,他们使用 乘法 和 指数表示法:
嘻,这与我们之前的例子不太一样。怎么会这样?
理解这一点的关键是从 同构 的角度来看待事物。看看这两个群:
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!