Yang's blog Yang's blog
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xiaoyang

编程爱好者
首页
Java
密码学
机器学习
命令手册
关于
友链
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 现代密码学

    • Chapter 0:Introduction to Modern Cryptography
    • Chapter 1:Introduction and Classical Cryptography
    • Chapter 2:Perfectly Secret Encryption
    • PChapter 3:rivate-Key Encryption
    • Chapter 4:Message Authentication Codes
    • Chapter 5:CCA-Security and Authenticated Encryption
    • Chapter 6:Hash Functions and Applications
    • Chapter 9:Number Theory and Cryptographic Hardness Assumptions
      • 9.1 预备知识和基本群论
        • 9.1.1 素数与整除性
        • 9.1.2 模算术
        • 9.1.3 群
        • 9.1.4 乘法群:欧拉函数
        • 9.1.5 *同构与中国剩余定理
    • Chapter 11:Key Management and the Public-Key Revolution
  • 对称加密

    • DES加密算法详解
  • 同态加密方案

    • RSA乘法同态
    • Paillier 加法同态
    • 可验证Paillier同态加密
    • CKKS EXPLAINED PART 1, VANILLA ENCODING AND DECODING
    • CKKS EXPLAINED, PART 2 FULL ENCODING AND DECODING
    • CKKS EXPLAINED, PART 3 ENCRYPTION AND DECRYPTION
    • CKKS EXPLAINED, PART 4 MULTIPLICATION AND RELINEARIZATION
    • CKKS EXPLAINED, PART 5 RESCALING
  • 隐私计算框架

    • pysyft

      • README
      • PySyfy介绍
      • 数据集与资产
      • 客户端和 Datasite 访问
      • 提出研究问题
      • 审查代码请求
      • 检索结果
  • 安全知识

    • 信息安全四大顶会与分级
    • 数字签名与数字证书关系
    • 伪随机函数在密码学中的作用及其应用实例
    • 伪随机函数在与哈希函数的关系
  • 密码学
  • 现代密码学
xiaoyang
2024-05-07
目录

Chapter 9:Number Theory and Cryptographic Hardness Assumptions

# 9.Number Theory and Cryptographic Hardness Assumptions

现代密码系统无一例外地基于某个难题的假设。例如,在第3至5章中,我们看到私钥密码学,包括加密方案和消息认证码,可以基于伪随机置换(又称分组密码)存在的假设。表面上看,伪随机置换存在的假设似乎非常强大和不自然,有理由质疑这个假设是否成立,或者是否有任何证据支持它。在第7章中,我们探讨了分组密码在实践中的构造方式。这些构造能够抵御攻击的事实表明伪随机置换的存在是合理的。然而,人们可能难以相信对现有分组密码不存在有效的区分攻击。此外,我们目前的理论状态是,我们不知道如何基于任何“更简单”或“更合理”的假设来证明任何现有实际构造的伪随机性。总的来说,这不是一个完全令人满意的情况。

相比之下,正如第3章中提到的(并在第8章中详细研究),可以基于较为温和的单向函数存在的假设来证明伪随机置换的存在。(非正式地说,如果一个函数易于计算但难以反转,则称其为单向函数;请参见第9.4.1节。)然而,除了在第8.1.2节中简要讨论外,我们还没有看到任何被认为是单向函数的具体示例。

本章的一个目标是介绍一些被认为“困难”的问题,并基于这些问题提出猜想的单向函数。从这个角度看,本章可以被视为私钥密码学的“自上而下”方法的高潮。 (见图9.1。)也就是说,在第3至5章中,我们已经展示了私钥密码学可以基于伪随机函数和置换。然后,我们已经看到后者可以通过在第7章中探讨的分组密码实际实现,或者可以根据任何单向函数构造出,正如在第8章中所示。在这里,我们进一步展示了如何基于某些困难的数学问题来构建单向函数。

我们将探讨的示例是与数论相关的,因此我们首先进行一个简短的数论介绍。由于我们还对能够高效解决的问题感兴趣(即使单向函数在一方向上必须易于计算,而且密码方案必须允许诚实参与者使用高效算法),我们还会启动对算法性数论的研究。即使对数论已经熟悉的读者,也鼓励阅读本章,因为算法方面的内容在纯粹的数学处理中通常被忽略。

本章的第二个目标是为公钥密码学的发展提供所需的材料,我们将在第11章开始研究公钥密码学。引人注目的是,在私钥环境中,存在着不需要涉及任何数论即可构建所需基元(分组密码和哈希函数)的高效方法,然而在公钥环境中,所有已知的构造都依赖于困难的数论问题。因此,本章的内容不仅作为我们对私钥密码学研究的顶点,还作为我们处理公钥密码学的基础。

# 9.1 预备知识和基本群论

我们开始复习素数和基本的模算术知识。即使是之前已经了解过这些内容的读者,也应该浏览一下接下来的两节,因为其中一些材料可能是新的,我们会为大部分陈述的结果提供证明。

# 9.1.1 素数与整除性

整数集合用Z表示。对于a,b∈Z,如果存在整数c使得ac=b,我们称a整除b,记作a|b。如果a不能整除b,则记作a∤b。(尽管定义允许其中一个或多个数为负数或零,我们主要关注所有数都为正数的情况。)一个简单的观察是,如果a|b且a|c,则对于任意X,Y∈Z,都有a|(Xb+Yc)。

如果a|b且a为正数,则称a是b的因子。如果进一步有a∉{1,b},则称a为b的非平凡因子。大于1的正整数如果没有其他因子,则称其为素数,即它只有两个因子:1和它本身。大于1的正整数如果不是素数,则称其为合数。按照约定,数字1既不是素数也不是合数。

算术基本定理指出,大于1的每个整数都可以唯一地(忽略顺序)表示为素数的乘积。也就是说,任何大于1的正整数N>1都可以写成N=∏ipiei,其中pi是不同的素数,ei≥1对于所有i成立;此外,pi(和ei)在去掉顺序后是唯一确定的。

命题 9.1: 设a是一个整数,b是一个正整数。那么存在唯一的整数q、r,满足a=qb+r且0≤r<b。

此外,对于命题中的整数a和b,可以在多项式时间内计算出q和r;见附录B.1。(算法的运行时间是其输入长度的函数。在算法数论的上下文中,整数输入总是假定用二进制表示。因此,算法的运行时间是以||N||,即N的二进制表示的位数,来衡量的。注意||N||=|log⁡N|+1。)

两个整数a、b的最大公约数,记作gcd(a,b),是满足c|a且c|b的最大整数c。(我们将gcd(0,0)视为未定义。)最大公约数的概念在a和b中有一个或两个为负数时也是成立的,但我们通常有a,b≥1;无论如何,gcd(a,b)=gcd(|a|,|b|)。注意gcd(b,0)=gcd(0,b)=b;此外,如果p是素数,则gcd(a,p)要么等于1,要么等于p。如果gcd(a,b)=1,我们称a和b互素。

提示

陈述1: "如果 p 是素数,则 gcd(a, p) 要么等于 1,要么等于 p。"

  • 这个陈述的意思是,如果 p 是一个素数,那么任意整数 a 和 p 的最大公约数(gcd)要么是 1,要么是 p。
  • 如果 a 不是 p 的倍数(即 a % p ≠ 0),那么 gcd(a, p) = 1,因为素数 p 确保它与任何不是 p 的倍数的整数没有除了 1 以外的共因子。
  • 如果 a 是 p 的倍数(即 a % p = 0),那么 gcd(a, p) = p,因为在这种情况下,p 是 a 和 p 之间唯一的共因子。

陈述2: "如果 gcd(a, b) = 1,我们称 a 和 b 互质。"

  • 这个陈述同样是正确的。两个整数 a 和 b 被称为互质(或互素),如果它们的最大公约数是 1。
    这两个陈述都是数论中的基本概念。

以下是一个有用的结果:

命题 9.2: 设a、b是正整数。那么存在整数X、Y,使得Xa+Yb=gcd(a,b)。此外,gcd(a,b)是能以这种方式表达的最小正整数。

这个结论被称为贝祖等式(Bézout's identity)或贝祖定理(Bézout's theorem)。它说明对于任意两个正整数a和b,存在整数X和Y,使得Xa+Yb=gcd(a,b)。这个等式的特殊情况是当gcd(a,b)=1时,即a和b互质,此时存在整数X和Y使得Xa+Yb=1。

此外,贝祖等式也指出gcd(a,b)是可以用这种方式表示的最小正整数,也就是说,不存在比gcd(a,b)更小的正整数可以用a和b的线性组合表示。这可以通过贝祖定理的证明来理解。

举例:

考虑a=48和b=18。它们的最大公约数是gcd(48,18)=6。

根据贝祖定理,我们可以找到整数X和Y使得Xa+Yb=gcd(48,18)=6。一个可能的选择是X=1和Y=−2,因为1⋅48+(−2)⋅18=6。

根据贝祖等式,我们可以写出Xa+Yb=d2,即1⋅48+(−2)⋅18=62,也就是48−36=12。这再次确认了d2=gcd(48,18)=6。

所以,这个例子验证了贝祖定理中关于gcd(a,b)和Xa+Yb的关系。

证明:

令d=gcd(a,b)为a和b的最大公约数。根据贝祖定理,存在整数X和Y使得Xa+Yb=d。

现在,考虑任意整数x和y,使得x=X⋅dgcd(a,b) 和 y=Y⋅dgcd(a,b)。注意到dgcd(a,b)是一个整数,因为d是gcd(a,b)的倍数。

将x和y代入上述等式中得到:

xa+yb=X⋅dgcd(a,b)⋅a+Y⋅dgcd(a,b)⋅b=d⋅(Xa+Yb)=d2

因此,对于任意整数x和y,都有xa+yb是d2的倍数。这意味着d是xa+yb 的一个公约数。

另一方面,由于d=gcd(a,b),d是a和b的一个公约数,因此d也是xa+yb的一个公约数。

综上所述,d是a和b以及任意xa+yb的公约数,这意味着d是a和b以及xa+yb的最大公约数,即d是gcd(a,b)和xa+yb的最大公约数。由于d2是gcd(a,b)和xa+yb的一个公约数,而d是其最大公约数,因此d2≤gcd(a,b)。

但是我们也知道d=gcd(a,b),因此d2≥gcd(a,b)。结合两个不等式,我们得到d2=gcd(a,b),因此gcd(a,b)是d2的一个因数。

由于d是正整数,所以d2的因数只能是d本身或者1。但因为gcd(a,b)≥1,所以只有d=gcd(a,b)是可能的。因此,我们得出结论gcd(a,b)=d2。

命题 9.3: 如果 c|ab 且 gcd(a,c)=1,则 c|b。因此,如果 p 是素数且 p|ab,则要么 p|a 或 p|b。

例子:

假设 a=15,b=7,c=3。我们来验证命题 9.3 是否适用于这些值。

首先,c|ab,因为 3 是 105 的约数,即 c|ab 成立。

然后,我们检查 gcd(a,c) 是否为 1。计算 gcd(15,3),得到 3。由于 gcd(a,c)≠1,这部分条件不满足,所以这个例子不符合命题中的要求。

因此,根据命题 9.3,我们不能得出 c|b,这在这个例子中是正确的,因为 3 并不整除 7。

这个例子说明了命题 9.3 中的条件和结论的作用:即使 c|ab,但如果 gcd(a,c)≠1,则不能保证 c|b。而如果 gcd(a,c)=1,根据命题,我们可以确信 c|b。

证明: 由于 c|ab,我们有整数 γ 使得 γc=ab。如果 gcd(a,c)=1,则根据前一个命题,存在整数 X 和 Y,使得 1=Xa+Yc。将两边都乘以 b,我们得到

b=Xab+Ycb=Xγc+Ycb=c⋅(Xγ+Yb)

由于 Xγ+Yb 是整数,所以 c|b,即 c 整除 b。

命题的第二部分基于这样的事实:如果 p 不能整除 a(即 p∤a),且 p 是素数,则 gcd(a,p)=1。这是因为如果 p 和 a 有大于 1 的公因数,那么 p 将会整除 a,这与我们的假设相矛盾。

综上所述,这个命题说明了如果 c 整除乘积 ab,且 a 和 c 互质,那么 c 也将整除 b。此外,如果素数 p 整除乘积 ab,则要么它整除 a,要么整除 b(或者同时整除两者)。

命题 9.4 如果 a|N,b|N,且 gcd(a,b)=1,那么 ab|N。

例子:
假设我们有两个正整数 a=6 和 b=35,并且我们希望证明当 gcd(a,b)=1 时,ab 能够整除某个正整数 N。

首先,计算 gcd(a,b),我们有 gcd(6,35)=1,满足条件。然后我们可以找到整数 X 和 Y,使得 Xa+Yb=1,一个可能的组合是 X=9 和 Y=−1,因为 9⋅6+(−1)⋅35=1。

现在,我们将这个等式两边都乘以一个正整数 N,假设 N=210:

N=XaN+YbN210=9⋅6⋅210+(−1)⋅35⋅210210=9⋅1260−1⋅735210=11340−735210=10605.

我们可以看到,ab=6⋅35=210 能够整除 N=210。因此,根据命题 9.4,当 gcd(a,b)=1 时,ab 能够整除某个正整数 N。

证明: 我们令 ac=N 和 bd=N,并使用命题 9.2 得到 1=Xa+Yb,其中 c,d,X,Y 都是整数。将上述方程的两边同时乘以 N,我们得到:

N=XaN+YbN=Xabd+Ybac=ab(Xd+Yc),

由此可见 ab|N。

# 9.1.2 模算术

设 a、b 和 N∈Z(整数集合),其中 N>1。我们使用符号 [amodN] 表示 a 除以 N 的余数。更详细地说:根据命题 9.1,存在唯一的 q 和 r,满足 a=qN+r,且 0≤r<N,我们定义 [amodN] 等于这个 r。因此请注意,0≤[amodN]<N。我们将将 a 映射到 [amodN] 的过程称为模 N 的约化。

如果[amodN]=[bmodN],即 a 除以 N 的余数与 b 除以 N 的余数相同,我们称 a 与 b 模 N 同余,记作 a=b(modN)。请注意,当且仅当 N|(a−b) 时,a=b(modN)。在表达式中,如

a=b=c=…=z(modN)

理解是这个序列中的每个等号(不仅仅是最后一个)都指的是模 N 同余。

注意,a=[bmodN] 意味着 a=b(modN),但反之不成立。例如,36=21(mod15),但 36≠[21mod15]=6。另一方面,当且仅当 a=b(modN) 时,[amodN]=[bmodN]。

模 N 同余是一个等价关系,即它是自反的(对于所有 a,a=a(modN))、对称的(a=b(modN) 意味着 b=a(modN))、以及传递的(如果 a=b(modN) 且 b=c(modN),则 a=c(modN))。模 N 同余还遵循关于加法、减法和乘法的标准算术规则。因此,例如,如果 a=a′(modN),b=b′(modN),则 a+b=a′+b′(modN),ab=a′b′(modN)。一个结果是我们可以“先缩减再相加/相乘”,而不必“先相加/相乘再缩减”,这常常可以简化计算。

示例 9.5

让我们计算 [1093028⋅190301mod100]。由于 1093028=28mod100 且 190301=1mod100,我们有

1093028⋅190301=[1093028mod100]⋅[190301mod100]mod100=28⋅1=28mod100.

另一种计算答案的方法(即计算乘积 1093028⋅190301,然后对结果进行模 100 的约化)不够高效。模 N 同余一般情况下不保持除法。也就是说,如果 a=a′modN 且 b=b′modN,则通常不成立 a/b=a′/b′modN;事实上,“a/bmodN” 这个表达式通常并没有明确定义。作为一个经常引起混淆的具体例子,ab=cbmodN 并不一定意味着 a=cmodN。

示例 9.6

取 N=24。则 3⋅2=6=15⋅2mod24,但 36=15mod24。

然而,在某些情况下,我们可以定义一个有意义的除法概念。如果对于给定的整数 b,存在一个整数 c 使得 bc=1modN,我们称 b 在模 N 下是可逆的,将 c 称为 b 在模 N 下的(乘法)逆元。显然,0 永远不可逆。也不难证明,如果 c 是 b 在模 N 下的乘法逆元,则 [cmodN] 也是 b 在模 N 下的乘法逆元。此外,如果 c0 是 b 的另一个乘法逆元,则 [cmodN]=[c0modN]。当 b 在模 N 下可逆时,我们可以简单地让 b−1 表示唯一的乘法逆元,该逆元位于集合 {1,...,N−1}。

当 b 在模 N 下可逆时,我们定义模 N 下由 b 除法为乘法 b−1(即,我们定义 [a/bmodN]≡[ab−1modN])。我们强调,只有在 b 可逆时才定义了除法。如果 ab=cbmodN 并且 b 是可逆的,那么我们可以将方程的每一边都除以 b(或者实际上是将每一边都乘以 b−1),得到

(ab)⋅b−1=(cb)⋅b−1modN⇒a=cmodN.

我们看到,在这种情况下,除法的运算效果与预期一致。因此,模 N 下的可逆整数在某种意义上更易于处理。

自然的问题是:在给定模 N 的情况下,哪些整数在模 N 下是可逆的?我们可以使用命题 9.2 来完全回答这个问题:

命题 9.7

设 b 和 N 为整数,其中 b≥1 且 N>1。则 b 在模 N 下可逆的充要条件是 gcd(b,N)=1。

证明

假设 b 在模 N 下可逆,记 c 为其逆。由于 bc=1modN,这意味着存在某个 γ∈Z 使得 bc−1=γN。等价地,bc−γN=1。由于根据命题 9.2,gcd(b,N) 是能够以这种方式表示的最小正整数,并且不存在小于 1 的正整数,这意味着 gcd(b,N)=1。

反之,如果 gcd(b,N)=1,则根据命题 9.2,存在整数 X、Y,使得 Xb+YN=1。将此方程的每一边对 N 取模,得到 Xb=1modN,我们可以看出 X 是 b 的一个乘法逆元。(事实上,这提供了一个计算逆元的有效算法。)

示例 9.8

取 b=11 和 N=17。然后有 (−3)⋅11+2⋅17=1,因此 14=[−3mod17] 是 11 的逆元。可以验证 14⋅11=1mod17。

加法、减法、乘法和逆元的计算(如果存在)模 N 都可以在多项式时间内进行;请参见附录 B.2。指数运算(即计算 [abmodN],其中 b>0 为整数)也可以在多项式时间内计算;请参见附录 B.2.3。

# 9.1.3 群

设 G 是一个集合。在 G 上的一个二元运算 ◦ 本质上是一个函数 ◦(·, ·),它将 G 中的两个元素映射到 G 中的另一个元素。如果 g,h∈G,则我们可以用简便的符号 ◦g◦h 代替繁琐的符号 ◦(g, h)。

我们现在引入群这个重要的概念。

定义 9.9 一个群是一个集合 G,以及一个二元运算 ◦,满足以下条件:

  1. 封闭性: 对于所有 g,h∈G,有 ◦g◦h∈G。
  2. 存在单位元: 存在一个单位元 e∈G,使得对于所有 g∈G,都有 ◦◦e◦g=g=g◦e。
  3. 存在逆元: 对于所有 g∈G,存在一个元素 h∈G,使得 ◦◦g◦h=e=h◦g。这样的 h 被称为 g 的逆元。
  4. 结合律: 对于所有 g1,g2,g3∈G,成立 ◦◦◦◦(g1◦g2)◦g3=g1◦(g2◦g3)。

当集合 G 的元素有有限个时,我们称 G 是有限群,记 |G| 为群的阶(即 G 中元素的数量)。

当群 G 的操作满足交换性时,我们称其为阿贝尔群,满足条件为:

  • 交换性: 对于所有 g,h∈G,成立 ◦◦g◦h=h◦g。

当二元运算清楚时,我们可以简单地称集合 G 为群。我们将始终处理有限的阿贝尔群。然而,当某个结果需要这些假设时,我们将会仔细指明。

结合律意味着在写长表达式时,我们不需要添加括号;也就是说,表示 ◦◦◦g1◦g2◦…◦gn 是无歧义的,因为我们对操作 ◦ 的求值顺序不影响结果。

可以证明群 G 中的单位元是唯一的,因此我们可以称其为群的单位元。同样,可以证明群 G 中的每个元素都有唯一的逆元。参见练习 9.1。

如果 G 是一个群,H⊆G 是 G 的子集,且 H 在与 G 相同的运算下也构成一个群,我们称 H 是 G 的子群。要验证 H 是子群,我们需要根据定义 9.9 验证封闭性、存在单位元和逆元,以及结合律。(事实上,如果 G 是阿贝尔群,那么结合性和交换性都会自动继承自 G。)每个群 G 总是有平凡子群 G 和 {1}。如果 H≠G,我们称 H 是 G 的真子群。

一般情况下,我们不会使用 ◦ 符号来表示群的运算。相反,我们根据讨论的群的性质使用加法或乘法符号。这并不意味着群的运算对应于整数的加法或乘法;这只是一个方便的记号。使用加法记号时,群的运算应用于元素 g 和 h 时表示为 g+h;单位元记为 0;元素 g 的逆元记为 −g;我们用 h−g 代替 h+(−g)。使用乘法记号时,群的运算应用于 g 和 h 时表示为 g⋅h 或简写为 gh;单位元

记为 1;元素 g 的逆元记为 g−1;有时我们用 h/g 代替 hg−1。

在这一点上,看一些例子可能会有帮助。

示例 9.10

一个集合在一个运算下可能是一个群,但在另一个运算下可能不是。例如,整数集合 Z 在加法下是一个阿贝尔群:单位元是元素 0,并且每个整数 g 都有逆元 −g。然而,在乘法下它不是一个群,因为例如整数 2 在整数集合中没有乘法逆元。

示例 9.11

实数集合 R 在乘法下不是一个群,因为 0 没有乘法逆元。然而,非零实数集合是一个阿贝尔群,其乘法运算下的单位元为 1。

以下示例引入了我们经常使用的群 ZN。

示例 9.12

设 N>1 为一个整数。集合 {0,…,N−1} 关于模 N 的加法(即 \def must be followed by a control sequencea + b \def = [a + b \bmod N]a + b \def = [a + b \bmod N])构成一个阿贝尔群,群的阶为 N。封闭性显然成立;结合性和交换性来自于整数的这些性质;单位元为 0;由于 a+(N−a)=0modN,任何元素 a 的逆元为 [(N−a)modN]。我们用 ZN 表示这个群。(有时我们也会用 ZN 表示集合 {0,…,N−1},而不考虑任何特定的群运算。)

我们在本节中结束之前,给出一个简单的引理,正式化了群的“消去律”。

引理 9.13

设 G 是一个群,a,b,c∈G。特别地,如果 ac=c,则 a 是 G 中的单位元。如果 ac=bc,则 a=b。

证明 我们知道 ac=bc。将两边同时乘以元素 c 的唯一逆元 c−1,我们得到 a=b。详细地说:

即ac=bc⇒(ac)c−1=(bc)⋅c−1⇒a(c⋅c−1)=b(c⋅c−1)⇒a⋅1=b⋅1,即a=b.

将上述证明与(在引理 9.7 之前的讨论中)关于模 N 除法的消去律进行比较。正如相似性所示,模 N 中可逆元素在模 N 的乘法下构成一个群。我们稍后会详细讨论这个示例。

注: 引理 9.13 说明了群中元素的唯一性和乘法消去律的特性。这些性质在群论中起着关键作用,使得我们能够从一些简单的条件中推导出更多复杂的结果。

抱歉我之前的翻译有误。以下是经过修正的翻译:

群指数运算

在群中,我们常常需要描述将群操作应用于固定元素 g 的 m 次操作,其中 m 是一个正整数。使用加法符号,我们可以表示为 m⋅g 或 mg,即:

mg=m⋅g=defg+⋯+g⏟mtimes.

需要注意的是,m 是一个整数,而 g 是群中的元素。因此,mg 不表示对 m 和 g 进行群操作(实际上,我们是在一个群中,其群操作用加法表示)。然而,幸运的是,“符号的行为是正确的”;例如,如果 g∈G,m 和 m′ 是整数,那么 (mg)+(m′g)=(m+m′)g,m(m′g)=(mm′)g,以及 1⋅g=g。在阿贝尔群 G 中,对于 g,h∈G,有 (mg)+(mh)=m(g+h)。

使用乘法符号时,我们将群操作应用于元素 g 的 m 次操作表示为 gm,即:

gm=defg⋯g⏟mtimes.

指数运算的熟知规则成立:gm⋅gm′=gm+m′,(gm)m′=gmm′,以及 g1=g。此外,在阿贝尔群中,对于 g,h∈G,有 gm⋅hm=(gh)m。所有这些只是将前面段落中的结果从加法符号转化为乘法符号。

上述符号自然地扩展到当 m 是零或负整数的情况。在使用加法符号时,我们定义 0⋅gdef0(需要注意,左边的 0 是整数 0,而右边的 0 是群的单位元),并定义 (−m)⋅gdefm⋅(−g),其中 m 是正整数。注意,−g 是 g 的逆元,正如预期的那样,(−m)⋅g=−(mg)。在使用乘法符号时,g0def1,g−mdef(g−1)m。同样,g−1 是 g 的逆元,我们有 g−m=(gm)−1。

假设 g∈G 且 b≥0 是一个整数。那么指数运算 gb 可以使用多项式次数的群操作在 G 中进行计算。因此,如果群运算可以在多项式时间内计算,则指数运算也可以。有关详细讨论,请参见附录 B.2.3。

我们现在已经掌握足够的知识来证明以下令人瞩目的结果:

定理 9.14

设 G 是一个有限群,m=|G| 是群的阶,对于任何 G 中的元素 g,有 gm=1。

证明:我们只证明在 G 是交换群(阿贝尔群)的情况下(尽管该定理对任何有限群都成立)。固定任意 g∈G,并令 g1,…,gm 为 G 的元素。我们声称:

g1⋅g2⋅…⋅gm=(g⋅g1)⋅(g⋅g2)⋅…⋅(g⋅gm).

为了理解这一点,注意到 g⋅gi=g⋅gj 意味着由引理 9.13,gi=gj。因此,右侧括号内的每个元素都是不同的。因为 G 中恰好有 m 个元素,右侧要相乘的这 m 个元素实际上只是 G 中的所有元素以某种排列顺序。由于 G 是交换群,元素相乘的顺序不影响结果,因此右侧等于左侧。

再次利用 G 是交换群这一事实,我们可以将所有的 g 提取出来,得到:

g1⋅g2⋅…⋅gm=(g⋅g1)⋅(g⋅g2)⋅…⋅(g⋅gm)=gm⋅(g1⋅g2⋅…⋅gm).

再次应用引理 9.13,我们得到 gm=1。

上述结果的一个重要推论是,我们可以在指数中“对群的阶取模”:

推论 9.15

设 G 是一个有限群,m=|G|>1 是群的阶。对于任何 G 中的元素 g 和任意整数 x,我们有 gx=g[xmodm]。

证明:假设 x=qm+r,其中 q,r 是整数,且 r=[xmodm]。然后:

gx=gqm+r=gqm⋅gr=(gm)q⋅gr=1q⋅gr=gr

(使用定理 9.14),即所证明的结论。

推论 9.15

以加法表示,上述推论表明如果 g 是一个阶为 m 的群中的元素,则 x⋅g=[xmodm]⋅g。作为示例,考虑阶为 m=15 的群 Z15,取 g=11。推论表明:

15⋅11=[15mod15]⋅11=0⋅11=0+11=11=7mod15.

上述结果与事实一致(参见示例 9.5),即我们可以“先进行取模再相乘”,而不必“先相乘再取模”。

另一个在密码学应用中非常有用的推论如下:

推论 9.17

设 G 是一个有限群,m=|G|>1 是群的阶。令 e>0 是一个整数,定义函数 fe:G→G,其中 fe(g)=ge。如果 gcd(e,m)=1,那么 fe 是一个置换(双射)。此外,如果 d=e−1modm,那么 fd 是 fe 的逆函数。(注意,由命题 9.7,gcd(e,m)=1 意味着 e 在模 m 下可逆。)

证明:因为 G 是有限群,论述的第二部分暗示了第一部分;因此,我们只需证明 fd 是 fe 的逆函数。这是因为对于任何 G 中的元素 g,有:

fd(fe(g))=fd(ge)=(ge)d=ged=g[edmodm]=g1=g,

其中第四个等式来自推论 9.15。

# 9.1.4 乘法群:欧拉函数

正如在示例 9.12 中所讨论的,集合 ZN={0,…,N−1} 是一个关于模 N 的加法群。我们能否定义一个关于模 N 的乘法群呢?在这样做的过程中,我们将不得不排除那些不可逆的 ZN 中的元素,例如,我们将不得不排除 0,因为它没有乘法逆元。非零元素也可能不可逆(参见命题 9.7)。在集合 {1,…,N−1} 中,哪些元素 b 在模 N 下可逆?命题 9.7 表明这些恰好是满足 gcd(b,N)=1 的元素 b。我们也在第 9.1.2 节中看到,每当 b 可逆时,它的逆元落在集合 {1,…,N−1} 中。这引导我们定义,对于任何 N>1,集合

ZN∗=def{b∈{1,…,N−1}∣gcd(b,N)=1};

即,ZN∗ 由集合 {1,…,N−1} 中与 N 互质的整数组成。群的运算是模 N 下的乘法,即ab=def[abmodN]。我们声称 ZN∗ 是关于此运算的一个阿贝尔群。

由于 1 总是在 ZN∗ 中,因此集合显然包含一个单位元素。上述讨论表明 ZN∗ 中的每个元素在相同的集合中都有一个乘法逆元。交换律和结合律来自于整数上这些性质的事实。为了证明封闭性成立,设 a,b∈ZN∗;则 [abmodN] 的逆元为 [b−1a−1modN],这意味着 gcd([abmodN],N)=1,因此 ab∈ZN∗。总结:

命题 9.18 设 N>1 是一个整数。那么 ZN∗ 是关于模 N 的乘法运算的一个阿贝尔群。

定义 ϕ(N)=def|ZN∗|,即群 ZN∗ 的阶数。ϕ(N) 被称为欧拉函数。ϕ(N) 的值是多少呢?首先考虑当 N=p 是素数的情况。那么集合 {1,…,p−1} 中的所有元素都与 p 互质,因此 ϕ(p)=|Zp∗|=p−1。接下来考虑 N=pq 的情况,其中 p,q 是不同的素数。如果整数 a∈{1,…,N−1} 与 N 不互质,那么 p|a 或者 q|a(a 不能同时被 p 和 q 整除,因为这将意味着 pq|a 但是 a<N=pq)。集合 {1,…,N−1} 中能够被 p 整除的元素正是 (q−1) 个元素 p,2p,3p,…,(q−1)p,能够被 q 整除的元素正是 (p−1) 个元素 q,2q,…,(p−1)q。剩余的元素的数量为

(N−1)−(q−1)−(p−1)=pq−p−q+1=(p−1)(q−1).

因此,我们证明了当 $

N$ 是两个不同的素数 p 和 q 的乘积时,ϕ(N)=(p−1)(q−1)。

你被要求在习题 9.4 中证明以下一般结果(本书的其余部分很少使用):

定理 9.19 设 N=∏ipiei,其中 {pi} 是不同的素数,ei≥1。那么 ϕ(N)=∏ipiei−1(pi−1)。

示例 9.20 取 N=15=5⋅3。那么 Z15∗={1,2,4,7,8,11,13,14} 且 |Z15∗|=8=4⋅2=ϕ(15)。在 Z15∗ 中,8 的逆元是 2,因为 8⋅2=16=1mod15。

我们已经证明了 ZN∗ 是阶数为 ϕ(N) 的群。下面是定理 9.14 和推论 9.17 的简单推论:

推论 9.21 取任意的整数 N>1 和 a∈ZN∗。那么 aϕ(N)=1modN。

对于特定情况 N=p 是素数,以及 a∈{1,…,p−1},我们有 ap−1=1modp。

推论 9.22 固定 N>1。对于整数 e>0,定义 fe:ZN∗→ZN∗ 为 fe(x)=[xemodN]。如果 e 与 ϕ(N) 互质,则 fe 是一个双射。此外,如果 d=e−1modϕ(N),则 fd 是 fe 的逆映射。

# 9.1.5 *同构与中国剩余定理

两个群同构表示它们具有相同的结构。从数学角度来看,群 G 到 H 的同构提供了关于 G 的一种替代但等价的思考方式。从计算的角度来看,同构提供了一种不同的表示方法,通常会对算法效率产生重要影响。

定义 9.23 设 G 和 H 是分别关于操作 ∗G 和 ∗H 的群。如果满足以下条件,则函数 f:G→H 是从 G 到 H 的同构:

  1. f 是双射(一一对应);
  2. 对于所有的 g1,g2∈G,有 f(g1∗Gg2)=f(g1)∗Hf(g2)。

如果存在从 G 到 H 的同构,则称这两个群是同构的,记作 G≅H。

本质上,从 G 到 H 的同构就是将 G 的元素重新命名为 H 的元素。注意,如果 G 是有限的且 G≅H,那么 H 必须也是有限的,并且大小与 G 相同。此外,如果存在从 G 到 H 的同构 f,那么 f−1 是从 H 到 G 的同构。然而,可能存在这样的情况,即 f 可以高效计算,但 f−1 不行(或反之)。

本节的目标是利用同构的语言来更好地理解当 N=pq 为两个不同素数的乘积时,群 ZN 和 ZN∗ 的群结构。首先,我们需要引入群的直积的概念。给定群 G 和 H,其分别关于群操作 ∗G 和 ∗H,我们定义新的群 G×H(G 和 H 的直积)如下。G×H 的元素是有序对 (g,h),其中 g∈G 且 h∈H;因此,如果 G 有 n 个元素,H 有 n0 个元素,则 G×H 有 n⋅n0 个元素。G×H 上的群操作 ∗G×H 是逐分量应用的,即:

(g,h)∗G×H(g′,h′)=(g∗Gg′,h∗Hh′).

留给练习 9.8 验证 G×H 确实是一个群。上述表示法可以自然地推广到多于两个群的直积,尽管我们不会在接下来的内容中用到这一点。

现在,我们可以陈述并证明中国剩余定理。

定理 9.24(中国剩余定理) 设 N=pq,其中 p,q>1 互质。那么:

  1. ZN≅Zp×Zq,以及
  2. ZN∗≅Zp∗×Zq∗。

此外,定义函数 f,将集合 {0,…,N−1} 中的元素 x 映射为对 (xp,xq),其中 xp∈{0,…,p−1} 且 xq∈{0,…,q−1},定义如下:

f(x)=def([xmodp],[xmodq]).

那么:

  1. f 是从 ZN 到 Zp×Zq 的同构;
  2. f 在 ZN∗ 上的限制是从 ZN∗ 到 Zp∗×Zq∗ 的同构。

证明 对于任意 x∈ZN,函数 f(x) 给出了一个由元素 (xp,xq) 构成的对,其中 xp∈Zp 且 xq∈Zq。我们要证明的是,如果 x∈ZN∗,那么 (xp,xq)∈Zp∗×Zq∗。实际上,如果 xp∉Zp∗,这意味着 [xmodp],p 不互质。但是,这将导致 x,p 不互质。这又暗示 x,N 不互质,与 x∈ZN∗ 的假设相矛盾(类似的论证适用于 xq∉Zq∗ 的情况)。

接下来,我们将证明 f 是从 ZN 到 Zp×Zq 的同构。要证明它是从 ZN∗ 到 Zp∗×Zq∗ 的同构的证明类似。我们首先证明 f 是单射。假设 f(x)=(xp,xq)=f(x0),则 x=xp=x0modp 且 x=xq=x0modq。这进一步意味着 (x−x0) 可以同时被 p 和 q 整除。由于 p 和 q 互质,命题 9.4 表明 pq=N 可以整除 (x−x0)。但是,这意味着 x=x0modN。对于 x,x0∈ZN,这意味着 x=x0,因此 f 是单射。由于 |ZN|=N=p⋅q=|Zp|⋅|Zq|,两个集合的大小相同,结合 f 是单射可知 f 是双射。

在以下段落中,用 +N 表示模 N 的加法,用 +∗ 表示 Zp×Zq 中的群操作(即在第一个分量中进行模 p 的加法,在第二个分量中进行模 q 的加法)。为了完成从 ZN 到 Zp×Zq 的同构的证明,我们需要证明对于所有 a,b∈ZN,有 f(a+Nb)=f(a)+∗f(b)。

注意到

f(a+Nb)=[(a+Nb)modp],[(a+Nb)modq]=[(a+b)modp],[(a+b)modq]=[amodp],[amodq]+∗[bmodp],[bmodq]=f(a)+∗f(b).

至此,我们已经完成了从 ZN 到 Zp×Zq 的同构的证明。关于 ZN∗ 到 Zp∗×Zq∗ 的同构的证明类似。

通过一种记号,假设 N 已知且 x∈{0,1,…,N−1},我们将 x↔(xp,xq) 表示为 xp=[xmodp] 且 xq=[xmodq]。也就是说,当且仅当 f(x)=(xp,xq) 时,x↔(xp,xq),其中 f 如定理中所示。当涉及 x∈ZN∗ 时,也使用相同的记号。

例子 9.25 考虑 15=5⋅3,以及 Z15∗={1,2,4,7,8,11,13,14}。中国剩余定理说明该群同构于 Z5∗×Z5∗。我们可以计算:

1↔(1,1)2↔(2,2)4↔(4,1)7↔(2,1)8↔(3,2)11↔(1,2)13↔(3,1)14↔(4,2),

其中每个对 (a,b),其中 a∈Z5∗ 且 b∈Z3∗,都恰好出现一次。

利用中国剩余定理

如果两个群同构,则它们都表示相同的底层“代数结构”。然而,选择使用哪种表示法可能会影响群操作的计算效率。我们先从抽象的角度讨论,然后再具体讨论 ZN 和 ZN∗ 的情况。

设 G,H 分别是具有操作 ∘G,∘H 的群,假设 f 是从 G 到 H 的同构,其中 f 和 f−1 都可以高效地计算。那么对于 g1,g2∈G,我们可以通过以下两种方式计算 g=g1∘Gg2:直接计算 G 中的群操作,或通过以下步骤计算:

  1. 计算 h1=f(g1) 和 h2=f(g2);
  2. 使用 H 中的群操作计算 h=h1∘Hh2;
  3. 计算 g=f−1(h)。

当我们想在 G 中计算多个群操作时(例如计算 gx),哪种方法更好取决于在每个群中计算群操作的相对效率,以及计算 f 和 f−1 的效率。

现在我们转向具体的情况,即在模 N 下的计算,其中 N=pq 是不同的素数的乘积。中国剩余定理表明模 N 的加法、乘法或指数运算(即重复乘法)可以“转化”为模 p 和 q 下的类似运算。借鉴例子 9.25,我们以 N=15 的一些简单例子来展示。

好的,我会为您添加公式和符号,以及使用美元符号 $$ \ldots $$ 将它们包裹起来。请查看下面的修订版本:

Example 9.26
假设我们想要计算14⋅13(mod15)即在 Z15∗ 中)。例子 9.25 表明 14↔(4,2) 和 13↔(3,1)。在 Z5∗×Z3∗ 中,我们有

(4,2)⋅(3,1)=([4⋅3(mod5)],[2⋅1(mod3)])=(2,2)

注意到 (2,2)↔2,这是正确的答案,因为 14⋅13=2(mod15)。

Example 9.27
假设我们想要计算 1153(mod15)。例子 9.25 表明 11↔(1,2)。注意到 2=−1(mod3),因此

(1,2)53=([153(mod5)],[(−1)53(mod3)])=(1,[−1(mod3)])=(1,2)

因此,1153(mod15)=11。

Example 9.28
假设我们想要计算 [29100(mod35)]。我们首先计算对应关系 29↔([29(mod5)],[29(mod7)])=([−1(mod5)],1)。使用中国剩余定理,我们有

([−1(mod5)],1)100=([−1100(mod5)],[1100(mod7)])=(1,1)

并且我们可以立即看出 (1,1)↔1。因此,[29100(mod35)]=1。

Example 9.29
假设我们想要计算 [1825(mod35)]。我们有 18↔(3,4),所以

1825(mod35)↔(3,4)25=([325(mod5)],[425(mod7)]).

由于 Z5∗ 是阶为 4 的群,我们可以在指数上“工作模 4”(参见推论 9.15)并且得到

325=3[25(mod4)]=31=3(mod5).

类似地,425=4[25(mod6)]=41=4(mod7)。
因此,([325(mod5)],[425(mod7)])=(3,4)↔18,所以 [1825(mod35)]=18。

我们还没有讨论如何在模 N 和模 p、q 之间进行转换。在已知 N 的因数分解的情况下,可以高效地进行转换。假设已知 p 和 q,那么可以很容易地将模 N 下的元素转换为其在模 p 和 q 下的表示:

元素 x 对应于 ([x(modp)],[x(modq)]),两个模数规约都可以高效地进行(参见附录 B.2)。
对于另一个方向,我们使用以下观察:具有表示 (xp,xq) 的元素可以写成

(xp,xq)=xp⋅(1,0)+xq⋅(0,1).

因此,如果我们可以找到 1p,1q∈{0,…,N−1} 使得 1p↔(1,0) 和 1q↔(0,1),那么(利用中国剩余定理)我们知道
(xp,xq)↔[((xp⋅1p+xq⋅1q)(modN))]。
由于 p 和 q 是不同的素数,gcd(p,q)=1。我们可以使用扩展欧几里得算法(参见附录 B.1.2)找到整数 X,Y,使得

Xp+Yq=1.

注意到 Yq=0(modq) 并且 Yq=1−Xp=1(modp)。这意味着
[Yq(modN)]↔(1,0);即,[Yq(modN)]=1p。类似地,[Xp(modN)]=1q。
总之,我们可以按照以下方式将表示为 (xp,xq) 的元素转换为其在模 N 下的表示(假设已知 p 和 q):

  1. 计算 X,Y,使得 Xp+Yq=1。
  2. 设定 1p:=[Yq(modN)] 和 1q:=[Xp(modN)]。
  3. 计算 x:=[((xp⋅1p+xq⋅1q)(modN))]。
    如果需要执行多次这样的转换,则可以

在预处理阶段一次性计算 1p,1q。

Example 9.30
取 p=5,q=7,N=5⋅7=35。假设我们已知表示 (4,3) 并且想要将其转换为 Z35 中的对应元素。使用扩展欧几里得算法,我们计算

3⋅5−2⋅7=1.

因此,1p=[−2⋅7(mod35)]=21 并且 1q=[3⋅5(mod35)]=15。 (我们可以验证这些值是否正确:例如,对于 1p=21,我们可以验证 [21(mod5)]=1 和 [21(mod7)]=0)。使用这些值,我们可以然后计算
(4,3)=4⋅(1,0)+3⋅(0,1)↔[4⋅1p+3⋅1q(mod35)]=[4⋅21+3⋅15(mod35)]=24。
由于 24=4(mod5) 且 24=3(mod7),这确实是正确的结果。

编辑 (opens new window)
上次更新: 2025/04/01, 01:48:12

← Chapter 6:Hash Functions and Applications Chapter 11:Key Management and the Public-Key Revolution→

最近更新
01
操作系统
03-18
02
Nginx
03-17
03
后端服务端主动推送消息的常见方式
03-11
更多文章>
Theme by Vdoing | Copyright © 2023-2025 xiaoyang | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式