1.数论
鉴于笨人没怎么学过数论,第一次学有些模糊,记个笔记加深一下印象,没有太多理解,更多是整理。主要内容来自于
裴蜀定理(Bézout’s Identity)
一个
如果抽象一点呢,一个
是否有整数解。
裴蜀定理即:其充要条件是
[!证明 ] 不妨设
,若 在两边同时取负号即可,若 情形是 的。
满足条件的
其中
从而
从而所有符合条件的数都是
令
综上所述,命题成立。
我们也可以逆向进行一些数学的思考,利用上述,可以反过来给出
即其可被
辗转相除法(欧几里得算法)
知道了能整出的水是最大公约数,如何计算呢?利用事实:
[!证明] 不妨设
。 设 ,其中 。我们要证明 。 我们考虑证明他们分别整除彼此来说明二者相等。 先证明左边整除右边。不妨记左边是 右边是 , 则从 有 ,也就是说 ,那么就有 或者 ,若 实际上也有 ,又有 从而 。 接下来证明右边整除左边。如法炮制即可, ,从而如上可知成立。 结合两方面得到原命题成立。
推论
1
若
[!证明] 利用裴蜀定理,
,同乘 得到 ,由于左侧可被 整除,故右侧也可以。
2
若
[!证明] 由
,可设 ,从而 ,由推论 得 ,故可设 ,则 ,故命题成立。
3
若
[!证明] 只需证明二者互相整除。 设
。 一方面, ,从而 且 ,从而 。 另一方面, ,由 是 约数以及推论 , , ,于是也有 。 综合两方面得到命题成立。
一些定义
互素(relatively prime)
如果
同余(congruent)
如果
逆元(inverse)
如果
裴蜀定理与逆元
裴蜀定理给出,
余数(remainder)
密码学与数论
尽管计算机计算速度很快,但仍然有限。要计算一个大整数的质因数分解仍然很难,从而可以利用这一点对信息加密。
下面我们看两个简单的加密方法。
加密方法1
首先,把信息变成一个整数
但设若一个人截获了两条信息,就有
加密方法2
这一次,让
设若一个人同时截获了
[!破解方法 ] 由于
是质数, 互素,从而我们可以得到 ,这里的 便是模 意义下 的逆元。 由 两边同乘 的逆元,得到 。
更安全的加密
直觉上,也就需要更复杂的数学。
欧拉函数(Euler’s Totient Function)
通常记作
欧拉定理
尽管不知道有多少个欧拉定理 这个欧拉定理是:
证明:
[!Lemma1] 如果
,那么 证明: 由于 互素,利用裴蜀定理,可知 存在,两侧同乘即得证结果。
[!Lemma2] 如果
,那么记 ,设 与 互素,则有 。 证明: ①证明第一个集合也有 个元素。 设有重复,不妨设 ,则 ,由 ,则有 ,矛盾,故假设不成立,即第一个集合有 个元素(互异)。 ②证明第一个集合的每个元素都与 互素。 考虑任意的 ,有 ,由于 都与 互素且非零,可知命题成立。 综合①②,可知命题成立。
[!Proof] 现在,利用
我们有;
利用
,约去两边的 ,并回想起 ,就得到
这就完成了证明
第二个
费马小定理
令
这就是费马小定理。
利用费马小定理我们可以直接得到
RSA加密
1. RSA 的数学地基
RSA 的安全性建立在一个简单的数论难题上:大整数分解。
-
把两个大质数
和 相乘得到 非常快。 -
但只给你
,想把它拆回 却极其困难(当 足够大时)。
2. 算法流程:如何利用欧拉定理?
第一步:准备“锁”和“钥匙”
-
选两个大质数
,计算 。 -
计算
的欧拉函数值: 。 -
选一个公钥指数
(通常选 65537),要求 。 -
关键点: 找到
关于 的模反元素 。 也就是说,要满足:
。
- 公钥(公开的锁):
- 私钥(藏好的钥匙):
第二步:加密过程
假设你要发送消息
这里
第三步:解密过程(欧拉定理登场!)
接收方收到
3. 为什么这个解密能成功?
这就是数学的神奇之处。我们将解密公式展开:
因为我们之前构造了
那么:
根据欧拉定理,
消息被完美还原了!
4. 为什么它是安全的?
-
攻击者知道:
和 (公钥)。 -
攻击者想要:
(私钥)。 -
阻碍: 要算出
,攻击者必须先知道 。 -
死胡同: 要知道
,就必须知道 和 。也就是说,攻击者必须分解 。
目前,分解一个 2048 位的 RSA 密钥在现实时间内是不可能的。