离散数学——数论与加密

离散数学——数论与加密

素数无限证明

假设素数是有限的,分别是从 p 1 p_1 p1 p n p_n pn ,那么:

Q = p 1 p 2 … p n + 1 Q = p_1 p_2 \ldots p_n + 1 Q=p1p2pn+1

一定不存在素数约数 p j p_j pj 的,其中 1 ≤ j ≤ n 1 \leq j \leq n 1jn 。因为假设存在,那么 p j ∣ ( Q − p 1 p 2 … p n )    ⟺    p j ∣ 1 p_j \mid (Q - p_1 p_2 \ldots p_n) \iff p_j \mid 1 pj(Qp1p2pn)pj1 是不成立的,因此一定存在一个不在 p 1 p_1 p1 p n p_n pn 中的素数,因此素数是无穷的。

素数定理

素数定理指不超过 x x x 的素数个数大约是 x ln ⁡ x \frac{x}{\ln x} lnxx

素因子分解唯一性证明

引理:如果 gcd ⁡ ( a , b ) = 1 \gcd(a,b) = 1 gcd(a,b)=1 并且 a ∣ b c a \mid bc abc 那么 a ∣ c a \mid c ac

引理: 如果素数 p ∣ a 1 a 2 … a n p \mid a_1 a_2 \ldots a_n pa1a2an 那一定存在 a j a_j aj 使得 p ∣ a j p \mid a_j paj

假设存在两个不同的分解:

a 1 a 2 … a n = b 1 b 2 … b s a_1 a_2 \ldots a_n = b_1 b_2 \ldots b_s a1a2an=b1b2bs

去掉两边的公因子之后:

a i 1 a i 2 … a u = b j 1 b j 2 … b v a_{i1} a_{i2} \ldots a_u = b_{j1} b_{j2} \ldots b_v ai1ai2au=bj1bj2bv

由引理可知 a i 1 a_{i1} ai1 一定能够整除右面的某一个因数,又因为坐标和右边的因数都是素数,一定存在和 a i 1 a_{i1} ai1 相等的 b j b_{j} bj

卡迈尔数

存在满足 b n − 1 ≡ 1 m o d    n b^{n-1} \equiv 1 \mod n bn11modn 的所有 gcd ⁡ ( b , n ) = 1 \gcd(b,n) = 1 gcd(b,n)=1 的数称为卡迈尔数。

原根和离散对数

原根是指对于一个素数 p p p Z p \mathbb{Z}_p Zp 中存在一个元素 r r r 使得 Z p \mathbb{Z}_p Zp 去掉 0 0 0 之后的所有元素都是 r r r 的幂次。

p p p 是素数的时候,一定存在原根。

如果 r e ≡ a m o d    p r^e \equiv a \mod p reamodp ,称 e e e a a a 在模 p p p 下的离散对数,写作 log ⁡ r a = e \log_{r}a = e logra=e

寻找一个离散对数是一个 NP 问题,没有多项式时间算法。

伪随机数生成

一种利用线性余数生成器生成的随机数:

x n + 1 = ( a x n + c ) m o d    m x_{n+1} = (ax_n + c) \mod m xn+1=(axn+c)modm

其中 a a a 称为因子, c c c 称为增量, m m m 称为模数, x 0 x_0 x0 称为种子。

c = 0 c = 0 c=0 时称为纯因数线性余数生成器。

加密

使用 f ( p ) = ( p + k ) m o d    26 f(p) = (p + k) \mod 26 f(p)=(p+k)mod26 这种称为位移加密, k k k 称为密钥。

使用 f ( p ) = ( a p + k ) m o d    26 f(p) = (ap + k) \mod 26 f(p)=(ap+k)mod26 这种称为仿射加密。当且仅当 gcd ⁡ ( a , 26 ) = 1 \gcd(a,26) = 1 gcd(a,26)=1 时有唯一解。

因为通过同一套加密方式将字符映射,因此也称为单表加密。这种加密很容易被词频攻击方式攻击。因此将一块的字母替换成另一块的方式称为块加密。例如通过简单的排列就能替换块。

加密系统

加密系统是一个五元组 ( P , C , K , D , E ) (\mathcal{P},\mathcal{C},\mathcal{K},\mathcal{D},\mathcal{E}) (P,C,K,D,E)

  • P \mathcal{P} P 称为明文字符集。
  • C \mathcal{C} C 称为密文字符集。
  • K \mathcal{K} K 称为密钥空间,是所有可能的密钥的集合。
  • E \mathcal{E} E 称为加密函数。
  • D \mathcal{D} D 称为解密函数。
  • E k E_k Ek 称为在密钥为 k k k 下的加密函数, D k D_k Dk 称为在密钥为 k k k 下的解密函数。

公钥加密系统

上面的加密方式,例如位移和仿射加密都称为私钥加密系统,一个私钥加密系统指如果知道了加密密钥,我们就知道了解密密钥,因此,在加密过程中,密钥对第三者是不可见的,典型的公钥加密系统有 AES 等等。

而对于公钥加密系统,知道如何加密对解密是没有任何帮助的。即在整个加密系统中,公钥是对所有人都可见的,只有私钥是只有解密者才知道,典型的公钥加密系统是 RSA 加密。

在 RSA 加密算法中,首先要生成一个二元组 ( n , e ) (n,e) (n,e) 其中 n = p q n = pq n=pq p p p q q q 均为素数,并且 e e e ( p − 1 ) ( q − 1 ) (p - 1)(q - 1) (p1)(q1) 是互素的。一般来说 n n n 是超过 200 位以上的数字,目前为止,可以在合理的时间内找到这样的一个 n n n 却无法在合理的时间内对 n n n 进行质因数分解,基于这个原理, RSA 能做的加密解密不对称。

对于 RSA 加密,首先我们必须先将明文转换为一串数字,以每个字母转换成两位数字为例,例如将 A 转换为 00 ,接着,找到一个 252525 … 25 ≤ n 252525 \ldots 25 \leq n 25252525n 这种格式的数字记长度为 2 N 2N 2N ,将这串数字按照 2 N 2N 2N 的长度进行等长分割,其中 2 N 2N 2N 的位数小于 n n n 的位数,不足的部分可以使用末尾填充的方式进行填充。

现在一个明文被分成 m 1 , m 2 , … , m k m_1,m_2,\ldots,m_k m1,m2,,mk 几段,将每一段进行加密,得到 c i c_i ci

c i = m i e m o d    n c_i = m_i^e \mod n ci=miemodn

因为 RSA 算法是按块加密,也称块加密算法。

解密需要找到一个在 ( p − 1 ) ( q − 1 ) (p-1)(q-1) (p1)(q1) 为模下的 e e e 的乘法逆元 d d d ,即 e d ≡ 1 m o d    ( p − 1 ) ( q − 1 ) ed \equiv 1 \mod (p-1)(q-1) ed1mod(p1)(q1)

假设 gcd ⁡ ( M , p ) = 1 \gcd(M,p) = 1 gcd(M,p)=1 并且 gcd ⁡ ( M , q ) = 1 \gcd(M,q) = 1 gcd(M,q)=1 ,那么根据费马小定理:

C d ≡ M e d ≡ M 1 + k ( p − 1 ) ( q − 1 ) ≡ M × ( M q − 1 ) k ( p − 1 ) ≡ M m o d    q C^d \equiv M^{ed} \equiv M^{1 + k(p-1)(q-1)} \equiv M \times (M^{q-1})^{k(p-1)} \equiv M \mod q CdMedM1+k(p1)(q1)M×(Mq1)k(p1)Mmodq

我们把 ( n , e ) (n,e) (n,e) 作为公钥, ( n , d ) (n,d) (n,d) 作为私钥, p p p q q q 必须销毁。

同理:

C d ≡ M m o d    p C^d \equiv M \mod p CdMmodp

根据中国剩余定理的推论:

C d ≡ M m o d    p q C^d \equiv M \mod pq CdMmodpq

密钥交换协议

对于私钥加密系统来说,如果双方想要加密传输数据,就必须在不安全的通道下交换密钥,一种 DH 密钥交换协议可以完成此工作。

  1. A 和 B 选择一个素数 p p p 和一个原根 a a a
  2. A 选择一个秘密数字 k 1 k_1 k1 计算 a k 1 m o d    p a^{k_1} \mod p ak1modp 发送给 B 。
  3. B 选择一个秘密数字 k 2 k_2 k2 计算 a k 2 m o d    p a^{k_2} \mod p ak2modp 发送给 A 。
  4. A 计算 ( a k 2 ) k 1 m o d    p (a^{k_2})^{k_1} \mod p (ak2)k1modp 并且 B 计算 ( a k 1 ) k 2 m o d    p (a^{k_1})^{k_2} \mod p (ak1)k2modp

前三条都是对外界可见的,但是外界计算不出来第 4 条,因为离散对数是一个 NP 问题。

数字签名

数字签名是保证数据来源的准确性。数字签名是 RSA 反用的一个例子。 A 通过私钥给 M M M 加密,将 C + M C+M C+M 一起发送给接收者,接收者通过 ( n , e ) (n,e) (n,e) 公钥进行解密,检查是否和 M M M 一样,因为只有 A 能够制作数字签名,因此保证了数据不会篡改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值