离散数学P5 Number Theory II
【P5】 -Mathematics for Computer Science_哔哩哔哩_bilibili
Lec 5 | MIT 6.042J Mathematics for Computer Science, Fall 2010 - YouTube
Encryption:
Beforehand: keys are exchanged
Encryption: m'=E(keys,m) 通过keys加密m得到m'
Decryption:m=D(kyes,m') 通过keys解密m'得到m
Turing code V1
v i c t o r y → 22 09 03 20 15 18 25
末尾后面加个13变成质数2209032015182513,在密码学和数论的一些应用中,例如艾伦·图灵的一些工作,这个数字被用作一个质数。
Beforehand: exchange a secret prime
Encryption:m'=m*k
Decryption:we receive m' and we know k, m=m'/k
在数学中,trivial 通常指:
显然的、无内容的、极简单的(解或情况)
Hard to factor the product of 2 large primes.
难以分解两个大素数的乘积
“难以分解两个大素数的乘积”这句话指的是,当你有两个非常大的素数(比如,每个素数都有几百位甚至上千位),它们的乘积会得到一个同样非常大的合数。从这个合数反过来找出最初的两个素数因子,在计算上是极其困难的。
为什么不能简单地用计算机循环处理?
你可能会想,为什么不能用计算机简单地通过 for
循环来处理呢?原因如下:
-
天文数字般的计算量: 假设你有一个非常大的合数 , 是由两个大素数 和 相乘得到的(即 )。如果我们要用
for
循环从 开始,一直尝试到 sqrt(因为如果 有一个因子大于 sqrt,那么它必然有一个因子小于 sqrt),来检查每个数是否能整除 ,这个 sqrt 会是一个天文数字。举个例子,如果 是一个 2048 位(二进制)的数字,那么 sqrt大约是 。这意味着你需要检查大约 个可能的因子。地球上所有的计算机加起来,即使从宇宙大爆炸开始计算到现在,也远远无法完成这么庞大的计算量。这是一个计算上不可行的问题。
-
没有高效的算法: 尽管计算机的速度非常快,但对于这种特定类型的问题,目前还没有已知的高效算法(即多项式时间算法)能够快速地找到大数的素因子。这就是大数因子分解问题,它是现代密码学(例如 RSA 加密算法)的基石。RSA 的安全性正是基于这样一个事实:虽然用两个大素数生成它们的乘积很容易,但从乘积中反向找出这两个素数却异常困难。
-
量子计算的潜在威胁: 值得一提的是,虽然经典计算机无法高效地解决大数因子分解问题,但理论上,量子计算机(如果能建造出来)可以使用 Shor 算法在多项式时间内高效地解决这个问题。这就是为什么量子计算的发展对现有的一些加密体系构成了潜在的威胁。
m1'=m1*k
m2'=m2*k
gcd(m1',m2')=k
Turing Code V2
Beforehand: exchange a public prime p, a secret prime k
Encryption: message as a number m range {0,1,2,...,p-1}
compute m'=rem(mk,p)
Decrption: ?
✅ iff
是 “if and only if” 的缩写
这是一个严密的逻辑术语,意思是:
当且仅当(必要且充分条件)
a, b relatively prime, iff gcd(a,b)=1, iff sa+tb=1
在数论中:模意义下的同余
Two integers are congruent modulo n if they have the same remainder when divided by n.
-
用法:
a≡b(mod n)
表示 a−b 能被 整除。 -
例如:
17≡5(mod 12),因为 17−5=12,能被 12 整除 17/12余数是5, 5/12余数还是5
当你遇到 a≡b(modn)a \equiv b \pmod{n},可以用这两个思路快速验证:
-
余数法:分别算 a mod na \bmod n 和 b mod nb \bmod n
-
差法:看 a−ba - b 是否能整除 nn
Def: x is congruent to y modulo n: x
31
Def: The multiplicative inverse x mod n is a number x-1, range in {0,1,...,n-1} such that x*x-11(mod n) 乘法逆元
2*3=6≡1(mod 5) 这里6-1是5,5可以整除5
2≡3-1 (mod 5)
3≡2-1 (mod 5)
5*5≡1 (mod 6) 这里25-1=24,可以整除6
5≡5-1 (mod 6)
乘法逆元是否唯一?
是的,在模 n 下,若逆元存在,它是唯一的(模 n 意义下)。
在模 5 意义下:只有一个解(模 5 的余数为 3) 因为乘法逆元定义的时候,要求解的范围是0<=x-1<p
00:20:53开始
m'=rem(mk,p) 也就是m'≡mk (mod p) 后面是同余的写法
if k*k-1≡1 (mod p) then m'k-1≡mk*k-1≡m(mod p)
00:2:30得到下面的求解
Decryption m=rem(m'k-1,p)
:这是一个关键条件。它表明 和 互为模 的逆元。在密码学中, 通常是加密密钥, 则是解密密钥。
-
:m'≡mk (mod p) 等式两边同时乘以
-
我们将加密后的消息 乘以解密密钥 。
-
由于我们知道 ,所以 实际上就等同于 。
-
-
: 因为m'mk (mod p),所以可以把同余的等式左侧的m'直接替换为mk。
-
-
利用结合律, 可以写成 。
-
因为 ,所以 ,也就是 。
-
因此,这个等式链的含义是:如果我们用加密密钥 的模逆元 来乘以加密后的消息 ,再对 取模,我们就可以得到原始消息 。
所以通过m'解密m的时候,m'k-1就可以得到m, k和k-1是针对mod p而言的
公式
m′=m⋅k mod p⟹m=m′⋅k−1 mod p
成立且能“精确”恢复 的前提条件就是:
-
p 为整数且 >1。
-
-
若要恢复原始整数 m(而非仅仅同余类),需保证 。
精确恢复 的前提条件
为了能够“精确”地恢复原始整数 (而不仅仅是它的同余类),以下前提条件必须满足:
-
必须是大于 1 的整数。 模数 需要是一个大于 1 的正整数,这样模运算才有明确的定义。
-
(即 和 互素)。 这是至关重要的条件。如果 想要存在 (即 模 存在乘法逆元),那么 和 必须互素。如果它们不互素,那么 不存在,您就无法通过这种方式恢复 。
-
。 如果您想恢复的是精确的原始整数 ,而不是仅仅它的同余类,那么这个条件是必不可少的。模运算本质上处理的是余数。如果 落在这个 的范围内,那么它模 的表示是唯一的,并且应用模逆运算将能完美地恢复它。如果 超出这个范围 (例如,),那么 将是 ,您恢复到的将会是 而不是 。
k=49 p=97
k-1=2 因为49*2=98, 98 mod 97=1
sample m=13
加密过程 m'=mk mod p=13*49 mod 97=637 mod 97=55
通过m'解密出m:
m=m'k-1 mod p=55*2 mod 97=13
k=48 p=95
k*k-1-1=95 所以k-1=2
sample m=15
m'=mk mod p=15*48 mod 95=55
m=m'k-1 mod p=55*2 mod 95=15
k=47 p=95
首先,我们用欧几里得算法来找到 :
现在,我们可以反向替换来表示 1:
为了让它更符合 的形式,我们可以写成:
从这个等式中,我们可以看出 。
所以 。
由于我们通常希望结果是正数,我们可以将 加上模数 95:
sample m=15 k=47 p=95
m'=mk mod p=15*47 mod 95=705 mod 95=705-7*95=705-665=40
m=m'k-1 mod 95=40*93 mod 95=3720 mod 95=3720-39*95=3720-3705=15
和 在形式上都使用了“”这个符号,这使得它们看起来相似,也常常让初学者感到困惑。
“”的含义:同余的标志
这个符号“”本身就叫做同余符号。它的核心含义是:符号左边的表达式和符号右边的表达式在模 的意义下是“等价的”或“有相同余数的”。
所以,无论它连接的是两个简单的整数,还是一个复杂的算式和另一个整数,它表达的都是这种模意义下的等价关系。
为什么会混淆?
混淆的原因在于:
-
符号相同: 都是 。
-
都发生在模运算的环境中: 无论是同余关系还是模逆元,它们都离不开模数 。
理解关键:它们所连接和表达的内容不同
虽然使用的符号相同,但它们在不同语境下连接的对象和表达的深层数学概念是不同的:
1. : 表示两个数的同余关系
-
连接对象: 两个独立的整数( 和 )。
-
表达: 它们各自除以 后的余数是相同的(都是 )。这意味着 和 在模 的世界里,被认为是**“一样”的**。它们属于同一个同余类。
2. : 表示一个数和它的模乘法逆元相乘的结果
-
连接对象: 一个乘法表达式 () 和一个特殊的值 ()。
-
表达: 乘以 的结果,在模 的意义下,等价于 。这里的 并不是任意一个整数,而是模 意义下的乘法单位元。这个表达式的核心在于定义了 的性质:它是那个能把 “变回”单位元 的数。
类比理解
你可以这样想:
-
同余关系 就像是说:“张三和李四在今天轮班表上都被分配到了上午班。”——他们都属于“上午班”这个分类。
-
模逆元关系 就像是说:“解药A和毒药B结合后,能使病人恢复正常。”——解药A()的作用是抵消毒药B()的效果,使得结果(病人的状态)回到“正常”这个标准状态(单位元 )。
所以,尽管表面符号相似,理解其连接的是什么以及表达的深层含义是区分它们的关键。一个说的是“等价”,另一个说的是“逆运算产生单位元”。
Known-plaintext attack
know message m and encryption m'=rem(mk, p)
m'=mk mod p
gcd(m,p)=1 p is a public prime
compute m-1 such that m*m-1
m'*m-1
利用乘法逆元的性质进行简化
现在我们看右边 。根据乘法的结合律,我们可以重新组合项:
而我们知道 (这是乘法逆元的定义)。 所以,将其代入上式: 所以
这行的意义在于:
它表明了,只要我们知道加密用的明文 和得到的密文 ,并且知道模数 (它是一个公开的素数),我们就可以通过以下步骤来计算出密钥 :
-
计算明文 在模 意义下的乘法逆元 。
-
将密文 乘以这个逆元 。
-
所得的结果再模 ,就是我们想要找的密钥 。
这正是已知明文攻击的基本原理:通过已知的输入和输出,反推出加密过程中的秘密参数(密钥)。
Def: Euler's Totient Function, φ(n) denotes the number of integers in {1,2,3,...,n-1} that are relatively prime to n.
📘 词典定义(专业)
totient (noun): the number of positive integers less than or equal to a given integer that are relatively prime to it.
例如:
-
,因为 1,2,4,5,7,8都与 9 互素。
Eluer's theorem: If gcd(n,k)=1 =>kφ(n)
Lemma: if gcd(n,k)=1, ak
证明
已知条件:
-
(即 和 互素)
-
要证明:
证明步骤:
-
利用同余的定义转换: 根据同余的定义, 意味着 能够整除 。 所以,我们可以写成: (对于某个整数 )
-
提取公因数 : 从等式左边提取公因数 :
-
利用互素的性质: 我们有 ,这意味着 整除 。 由于已知条件 (即 和 互素),根据数论中的欧几里得引理 (Euclid's Lemma),如果一个素数(或任何整数)整除两个数的乘积,并且它与其中一个数互素,那么它必然整除另一个数。 尽管 不一定是素数,但欧几里得引理的更一般形式是:如果 且 ,那么 。
在这里,我们有 且 。 因此,根据欧几里得引理, 必须整除 。
-
转换回同余形式: 根据同余的定义,如果 整除 ,那么 。
证毕。
直接说两边可以乘以 来证明是完全正确且严谨的。
为什么这样做是正确的?
当你提到“乘以 ”时,你隐含了两个关键信息:
-
的存在性: 只有当 时, 才存在。这正是引理的前提条件。如果 不存在,你当然无法执行这个乘法操作。
-
模逆元的定义: 是一个特殊的数,它满足 。
用“乘以 ”的证明步骤
引理 (Lemma): 如果 ,并且 ,那么 。
证明:
-
已知条件: 。
-
利用前提: 由于 ,因此 在模 意义下的乘法逆元 存在。
-
两边同乘以 : 我们可以将同余式的两边同时乘以 :
-
利用结合律和逆元定义: 根据乘法结合律: 根据乘法逆元的定义,我们知道 。将其代入上式: 所以
证毕。
这种证明方法比利用欧几里得引理的证明更直接地展示了“取消 ”的过程,并且它依赖于模逆元的定义,而模逆元的存在正是由 这一前提所保证的。
因此,你完全可以使用这种方式进行证明。
Proof:gcd(n,k)=1<=>ns+kt=1<=>n|(kt-1)<=>kt
Lemma: Suppose that gcd(n,k)=1, let k1,k2,...,kr in range {1,2,3,...,n-1} denote the integers relatively prime to n ( r=φ(n) )
Proof
①suppose rem(kik,n)=rem(kj,n)=>kik
②gcd(n, rem(kik,n))=gcd(n, kik) 我记得上节课是gcd(a,b)=gcd(rem(b,a), a) 右侧换一下位置gcd(a,b)=gcd(a, rem(b,a)), 让a=n, b=kik,就是前面的公式了
因为gcd(n,k)=1且gcd(n,ki)=1 所以rem(kik,n)必然是1到n-1范围内与n互素的一个数字,所以后面的集合是前面的集合的一格子集
而前后两个集合的元素又相同,所以它们是同一个集合
我们来证明这个引理。这个性质在数论中是一个基础概念,尤其是在处理欧拉函数和模 乘法群的结构时。
引理陈述
引理: 假设 。设 是在范围 内且与 互素的整数。(注意:,其中 是欧拉函数)。 那么,余数集合 等于集合 。
简单来说,如果你将所有小于 且与 互素的整数乘以一个整数 (这个 也与 互素),然后取结果模 ,你将得到完全相同的整数集合,只是顺序可能不同。
证明
要证明两个集合相等,我们需要证明两件事:
-
余数集合是原集合的子集: 余数集合 中的每个元素都必须是 中的一个。
-
余数集合包含与原集合相同数量的不同元素: 这意味着没有两个不同的元素 和 映射到相同的余数,从而确保没有元素“丢失”或重复。
已知条件:
-
是小于 且与 互素的正整数。
-
。
第一部分:证明每个 都是 中的一个元素。
设 。这意味着 。 我们需要证明 。
我们知道 (根据 的定义)且 (已知条件)。
如果 且 ,那么 。 由于 和 互素,以及 和 互素,它们的乘积 也必然与 互素。 所以,。
现在,因为 ,我们知道 对于某个整数 。 设 。那么 必须整除 且 必须整除 。 既然 且 ,那么 也必须整除 和 的任何线性组合。 特别是, 整除 。 我们知道 。 所以, 整除 。
由于 且 ,因此 是 和 的公约数。 但是我们已经证明了 。 所以, 和 的唯一公约数是 。 因此,,这意味着 。
此外,根据 的定义, 必须在范围 内。由于 , 不可能为 (除非 ,这通常在模算术中被排除,或者如果 是 的倍数,这意味着 )。所以 。
因此,每个 都是一个在范围 内且与 互素的整数。这意味着每个 必定是 中的一个。 这就证明了 。
第二部分:证明 中的所有元素都是不同的。
假设矛盾成立,即集合中的两个不同元素映射到相同的余数: 对于某个 。 这意味着:
由于 ,我们知道 。 现在,我们使用前面已证明的性质:如果 且 ,那么 。 在本例中, 且 。我们已知 。 因此,我们可以从同余式两边“抵消” :
然而, 和 都处于范围 内。如果 且两者都在此范围内,那必然意味着 。 这与我们 (因此 )的假设相矛盾。 因此,我们最初的假设是错误的。这意味着所有元素 都是不同的。
由于集合 包含 个不同的元素,并且这些元素中的每一个都属于集合 (该集合也包含 个元素),所以这两个集合必然是相同的。
结论:
两个条件都已满足:
-
变换后的集合中的每个元素也在原集合中。
-
变换后的集合中的所有元素都是不同的。
因此,集合 等于集合 。
00:56:12开始证明欧拉定理
Eluer's theorem: If gcd(n,k)=1 =>kφ(n)
k1k2...kn=rem(k1k,n) rem(k2k,n),...,rem(krk,n)
因为k1到kr都和n互素,所以gcd(k1k2...kr,n)=1, 所以k1k2...kr必然有一个乘法逆元
上面两边同时乘以这个乘法逆元就得到
1
欧拉定理(Euler's theorem) 是数论中的一个核心定理,是费马小定理(Fermat's little theorem)的推广形式。它描述了在模 nn 意义下的乘法逆性周期,为构造公钥密码(如 RSA)等奠定基础。
这一步是基于同余的乘法性质。
我们知道,如果 且 ,那么 。 更一般地,如果 对于所有的 都成立,那么它们的乘积也同余:
在这里,对于每一个 ,我们有:
因为 的定义就是 除以 的余数,所以 本身就同余于 模 。 比如,,而 。
所以,我们可以将乘积中的每一个 替换为 ,因为它们在模 的意义下是同余的。
具体来说:
-
-
-
...
-
因此,将所有这些同余式相乘:
这就是你问题中第二行的替换原理。它利用了同余的乘法性质。
Fermat's little theorem
Suppose p is prime, and k in range {1,2,...,p-1}, then kp-1
Proof: 因为p是prime,所以1,2,...,p-1 are relatively prime to p
欧拉定理kφ(n)
欧拉定理(Euler's Totient Theorem)和费马小定理(Fermat's Little Theorem)是数论中两个非常重要的同余性质。它们都涉及到模运算,并且费马小定理实际上是欧拉定理的一个特殊情况。
🧠 对比:费马小定理 vs 欧拉定理
项目 | 费马小定理 | 欧拉定理 |
---|---|---|
的要求 | 必须是素数 p | 任意正整数 n≥1(可合数) |
使用的指数 | p−1 | φ(n) |
要求 | 是 | 是 |
是否更一般 | 否 | ✅ 是费马小定理的推广 |
欧拉定理与费马小定理的区别与联系
-
费马小定理是欧拉定理的一个特例。 当 是一个素数 时,欧拉函数 。 将 代入欧拉定理 ,就得到了费马小定理 。
-
适用范围不同:
-
费马小定理只适用于模数为素数的情况。
-
欧拉定理适用于任意正整数作为模数的情况,只要底数与模数互素。
-
01:04:07开始讲解RSA
RSA
Beforehand: receiver create a public key and also a secret key
1.Generate two distinct primes p and q
2.let n=p*q
3.select an integer e such that gcd(e,(p-1)(q-1))=1 =>public key is pair(e, n=p*q)
4.compute d such that d*e
gcd(e,(p-1)(q-1))=1
Encryption:m'=rem(me,n)
Decryption:m=rem(m'd,n)
证明m'me (mod n)两边都d次方=> m'dmed (mod n)
因为d*e
m'd
m'd
所以
p| (m'd-m)
q| (m'd-m)
所以pq的乘积n, n|(m'd-m)
所以m'd
m=rem(m'd,n)
Craig Gentry, using lattice-based cryptography, described the first plausible construction for a fully homomorphic encryption scheme in 2009.