LOADING

加载过慢请开启缓存 浏览器默认开启

1.数论

鉴于笨人没怎么学过数论,第一次学有些模糊,记个笔记加深一下印象,没有太多理解,更多是整理。主要内容来自于 $mit$的离散数学以及$Gemini$ 助教,因而也许也作为学习用。

裴蜀定理(Bézout’s Identity)

一个 $3$加仑的桶和一个$5$加仑的桶能否精准称出$1$ 加仑的水?假设你能精准地填满桶。
可以这样,装满3加仑的,往5加仑的加,两次,最后倒满5加仑的,3加仑的就还剩1加仑。
这实际上可以看做一个线性组合:

$$ 1=2\cdot 3+(-1) \cdot 5 $$

如果抽象一点呢,一个 $a$加仑的桶和一个$b$加仑的桶,他们能否得到$c$ 加仑的水?
考虑一个特殊情况,6,9,那么直觉告诉我们,应该只会弄出来3的倍数。
实际上,这也就是

$$ ax+by=c $$

是否有整数解。
裴蜀定理即:其充要条件是 $c$是$gcd(a,b)$ 的倍数,$gcd$表示最大公约数,通常省略$gcd$直接用括号$(a,b)$ 表示。

[!证明 ]
不妨设 $c>0$,若 $c<0$在两边同时取负号即可,若$c=0$情形是$trivial$ 的。

满足条件的 $c$是正整数的子集必有下确界$d$,记符合条件的$c$组成集合$S$,考虑$m \neq d \in S$ ,我们可以写成带余除法的形式

$$ m=kd+r $$

其中 $r < d$ 是余数。移项就得到:

$$ r=m-kd $$

从而 $r$也可以被$a,b$表出,从而$r \in S$或$r=0$,前者与$r<d$和$d$是$S$的最小值矛盾,从而只能有$r=0$ ,也就是:

$$ \forall m \in S,m\neq d,有 m=kd $$

从而所有符合条件的数都是 $d$ 的倍数。
下面证明 $d=gcd(a,b)$:

令 $c=a$,则有$(x,y)=(1,0)$符合条件,故$a \in S$,同理$b \in S$。从而$d$是他们的公约数,下面证明是最大公约数。考虑任意公约数$g$,有$g|ax+by$($x|y$表示x整除y),从而 $g|d$,从而$g \leq d$ 。得证。

综上所述,命题成立。

我们也可以逆向进行一些数学的思考,利用上述,可以反过来给出 $gcd$ 的性质:

$$ gcd(a,b)=ax+by $$

即其可被 $a,b$ 通过整数系数线性表出。意外的和线代有一点关联(

辗转相除法(欧几里得算法)

知道了能整出的水是最大公约数,如何计算呢?利用事实:
$\gcd(a, b) = \gcd(b, a \bmod b)$
允许我们辗转相除快速求出最大公约数。

[!证明]
不妨设 $a \leq b$ 。
设 $a = qb + r$,其中 $r = a \bmod b$。我们要证明 $\gcd(a, b) = \gcd(b, r)$。
我们考虑证明他们分别整除彼此来说明二者相等。
先证明左边整除右边。不妨记左边是 $x$右边是$y$, 则从 $a=qb+r$有$k_1x = k_2x + r$,也就是说$r=(k_1-k_2)x$,那么就有$r=0,a=qb$或者$x|r$,若$r=0$实际上也有$x|r$,又有$x|b$从而$x|gcd(b,r)=y$。
接下来证明右边整除左边。如法炮制即可,$a=(k_3+k_4)y$,从而如上可知成立。
结合两方面得到原命题成立。

推论

1

若 $a|bc$,且$(a,b)=1$,则$a|c$ 。

[!证明]
利用裴蜀定理,$au+bv=1$,同乘$c$得到$acu+bvc=c$,由于左侧可被$a$ 整除,故右侧也可以。

2

若 $a|c$ ,$b|c$,且$(a,b)=1$,则$ab|c$ 。

[!证明]
由 $a|c$,可设$c=qa$,从而$b|c=qa$,由推论$1$得$b|q$,故可设$q=mb$,则$c=mab$ ,故命题成立。

3

若 $(a,b)=1$,$(a,bc)=(a,c)$ 。

[!证明]
只需证明二者互相整除。
设 $d_1=(a,bc),d_2=(a,c)$ 。
一方面, $d_2|a,d_2|c$,从而$d_2|bc$且$d_2|a$,从而$d_2|d_1$ 。
另一方面,$d_1|bc$,由$d_1$是$a$约数以及推论$1$ ,$(d_1,b)=1$ ,$d_1|c$,于是也有$d_1|d_2$ 。
综合两方面得到命题成立。

一些定义

互素(relatively prime)

如果 $a$和$b$最大公约数为$1$,即$\exists x, y \in Z , st, ax+by=1$ 。

同余(congruent)

如果 $n|(a-b)$。写作$a \equiv b \pmod n$ 。

逆元(inverse)

如果 $xx^{-1} \equiv 1 \pmod{n}$且$x^{-1} \in {1,2,…,n-1}$ ,那么二者互为模意义的逆元。

裴蜀定理与逆元

裴蜀定理给出,$gcd(a,b)=ax+by$,如果$a,b$互素,那么有$ax+by=1$,从而我们有$ax\equiv 1 \pmod y$或者$by \equiv 1 \pmod x$,也就是说,我们可以得到$a,b$ 的逆元。

余数(remainder)

$m=kd+r$,则$r$即为余数,即为$rem(m,d)$。不难发现,$rem(m,d) \equiv m \pmod d$ 。

密码学与数论

尽管计算机计算速度很快,但仍然有限。要计算一个大整数的质因数分解仍然很难,从而可以利用这一点对信息加密。

下面我们看两个简单的加密方法。

加密方法1

首先,把信息变成一个整数 $m$,例如,把字母从$01$到$26$编号,然后通过计算,适当地加上几个数字让其变为质数。接下来,选择一个很大的质数$k$,加密方式就是$m’=mk$ 。$m’$就是加密后的信息,只要质数足够大,就几乎无法破解。要解密只需要除以$k$ 即可。

但设若一个人截获了两条信息,就有 $m_1’=m_1k, m_2’=m_2k$,那么只要计算$gcd(m,m’)$就得到了密钥 $k$ ,这显然很不安全。

加密方法2

这一次,让 $m’=rem(mk,p)$ 。$p$ 是质数。
如果我们希望解密,利用余数与 $m’$同余,我们有$m’ \equiv mk \pmod p$,如果$k^{-1}$存在,那么两边同乘即可得到$m \equiv m’ \cdot k^{-1} \pmod p$,通过适当的选取,令$m<p$则可确定$m$ 。
利用同余和余数的关系也可以写作 $m=rem(m’k^{-1},p)$ 。

设若一个人同时截获了 $m,m’$,那么他此时也可以破解$k$ 。

[!破解方法 ]
由于 $p$ 是质数,$m,p$互素,从而我们可以得到$\exists x,y \in Z ,mx+py=1$,这里的 $x$便是模$p$意义下$m$ 的逆元。
由 $m’ \equiv mk \pmod p$两边同乘$m$的逆元,得到$k\equiv m’m^{-1} \pmod p$ 。

更安全的加密

直觉上,也就需要更复杂的数学。

欧拉函数(Euler’s Totient Function)

通常记作 $\phi(n)$,表示${1,2,…,n-1}$中与$n$ 互素的数字个数。
例如 $\phi(12)=4,\phi(15)=8$。

欧拉定理

尽管不知道有多少个欧拉定理
这个欧拉定理是:

$$ 如果gcd(n,k)=1,那么k^{\phi(n)}\equiv 1 \pmod n $$

证明:

[!Lemma1]
如果 $gcd(n,k)=1$,那么$ak \equiv bk \pmod n$ $\implies$ $a\equiv b \pmod n$
证明:
由于 $n,k$互素,利用裴蜀定理,可知$k^{-1}$ 存在,两侧同乘即得证结果。

[!Lemma2]
如果 $gcd(n,k)=1$,那么记$r=\phi(n)$,设$k_1,…,k_r$与$n$互素,则有${rem(k_1k,n),…rem(k_rk,n)}={k_1,…,k_r}$。
证明:
①证明第一个集合也有 $r$ 个元素。
设有重复,不妨设 $k_i\neq k_j , rem(k_ik,n)=rem(k_jk,n)$,则$k_ik\equiv k_jk \pmod n$,由$Lemma1$,则有$k_i=k_j$,矛盾,故假设不成立,即第一个集合有$r$ 个元素(互异)。
②证明第一个集合的每个元素都与 $n$ 互素。
考虑任意的 $k_i$,有$rem(k_ik, n)\equiv k_ik \pmod n$,由于$k_i,k$都与$n$ 互素且非零,可知命题成立。
综合①②,可知命题成立。

[!Proof]
现在,利用 $Lemma2$ 我们有;

$$ \begin{aligned} k_1 \cdot k_2 \cdot \cdot \cdot k_r&=rem(k_1k,n) \cdot rem(k_2k,n) \cdot \cdot \cdot rem(k_3k,n) \\ &\equiv k_1k \cdot k_2k \cdot \cdot \cdot k_rk \pmod n \\ &\equiv k_1 \cdot k_2 \cdot \cdot \cdot k_r \cdot k^r \pmod n\end{aligned} $$

利用 $Lemma1$,约去两边的$k_1 \cdot k_2 \cdot \cdot \cdot k_r$,并回想起$r=\phi(n)$ ,就得到

$$ k^{\phi(n)}\equiv 1 \pmod n $$

这就完成了证明

第二个 $Lemma$看似羚羊挂角无迹可寻,实际上可以视作把与$n$互素的$k_i$们乘上$k$仍然互素,但为了限制在$n$ 里取了个模,形式上就可以写成余数。这样实际上证明的核心在于取模后的数并不重复。然后我们运用“算两次”就得到了神奇的欧拉定理。尽管也很神奇,但这样看上去就至少不那么莫名其妙。
据 $Gemini$,这实际上是$Lagrange$ 定理(群论)在模这个群里的特例,但我并不很清楚,也暂时不考虑直奔群论。简记于此。

费马小定理

令 $p$为质数,则$\phi(p)=p-1$ ,那么就有

$$ k^{p-1}\equiv1 \pmod p $$

这就是费马小定理。
利用费马小定理我们可以直接得到 $k$的逆元,注意到$k^{p-1}=kk^{p-2}$,从而$k^{-1}=k^{p-2}$ 。

RSA加密

1. RSA 的数学地基

RSA 的安全性建立在一个简单的数论难题上:大整数分解

  • 把两个大质数 $p$和$q$相乘得到$n$ 非常快。

  • 但只给你 $n$,想把它拆回 $p \times q$却极其困难(当$n$ 足够大时)。


2. 算法流程:如何利用欧拉定理?

第一步:准备“锁”和“钥匙”
  1. 选两个大质数 $p, q$,计算 $n = p \times q$。

  2. 计算 $n$ 的欧拉函数值:$\phi(n) = (p-1)(q-1)$。

  3. 选一个公钥指数 $e$(通常选 65537),要求 $gcd(e, \phi(n)) = 1$。

  4. 关键点: 找到 $e$关于$\phi(n)$的模反元素$d$。

    也就是说,要满足:$e \cdot d \equiv 1 \pmod{\phi(n)}$。

  • 公钥(公开的锁): $(n, e)$- 私钥(藏好的钥匙):$(n, d)$
第二步:加密过程

假设你要发送消息 $M$:

$$ C = M^e \pmod n $$

这里 $C$ 就是密文。

第三步:解密过程(欧拉定理登场!)

接收方收到 $C$后,用私钥$d$ 进行计算:

$$ M = C^d \pmod n $$


3. 为什么这个解密能成功?

这就是数学的神奇之处。我们将解密公式展开:

$$ C^d = (M^e)^d = M^{ed} \pmod n $$

因为我们之前构造了 $ed \equiv 1 \pmod{\phi(n)}$,所以可以写成 $ed = k \cdot \phi(n) + 1$。

那么:

$$ M^{ed} = M^{k\phi(n) + 1} = (M^{\phi(n)})^k \cdot M^1 \pmod n $$

根据欧拉定理,$M^{\phi(n)} \equiv 1 \pmod n$,所以:

$$ (1)^k \cdot M \equiv M \pmod n $$

消息被完美还原了!


4. 为什么它是安全的?

  • 攻击者知道: $n$和$e$(公钥)。

  • 攻击者想要: $d$(私钥)。

  • 阻碍: 要算出 $d$,攻击者必须先知道 $\phi(n)$。

  • 死胡同: 要知道 $\phi(n)$,就必须知道 $p$和$q$。也就是说,攻击者必须分解 $n$

目前,分解一个 2048 位的 RSA 密钥在现实时间内是不可能的。