密码学的数学基础2-同余


前言: \quad 本文为密码学的数学基础(王小云版)读书笔记,仅做了一些自认为重要些的笔记,如有错误,欢迎指正.

同余五大性质(重要)

a和b关于正整数m同余等价于存在正整数k,使得 a − b = k m a-b=km ab=km,记做: a ≡ b ( m o d   m ) a\equiv b (mod\ m) ab(mod m),原书中同余有七大性质,本文省去两个,其他内容均以此五大性质为基础,因而需要深刻理解.

  • 同余式可以相加减, 即若有
    a ≡ b (   m o d   m ) , c ≡ d (   m o d   m ) 则 : a ± c ≡ b ± d (   m o d   m ) \begin{array}{c} a \equiv b(\bmod m), \quad c \equiv d(\bmod m) \\则: a \pm c \equiv b \pm d(\bmod m) \end{array} ab(modm),cd(modm):a±cb±d(modm)
  • 同余式可以相乘,即若
    a ≡ b (   m o d   m ) , c ≡ d (   m o d   m ) a \equiv b(\bmod m), \quad c \equiv d(\bmod m) ab(modm),cd(modm)
    则有
    a c ≡ b d (   m o d   m ) a c \equiv b d(\bmod m) acbd(modm)
  • (非常重要) \quad d ⩾ 1 , d ∣ m , d \geqslant 1, d \mid m, d1,dm, 若同余式 a ≡ b ( m o d   m ) a\equiv b (mod\ m) ab(mod m) 成立, 则
    a ≡ b (   m o d   d ) a \equiv b(\bmod d) ab(modd)
  • m ⩾ 1 , ( a , m ) = 1 , m \geqslant 1,(a, m)=1, m1,(a,m)=1, 则存在 c c c 使得
    c a ≡ 1 (   m o d   m ) c a \equiv 1(\bmod m) ca1(modm)
    我们把 c 称为 a a a 对模 m m m 的逆, 记作 a − 1 (   m o d   m ) . a^{-1}(\bmod m) . a1(modm).
    可以根据欧几里得算法得到.具体实现代码可见上一篇博客.
  • 同余式组
    a ≡ b (   m o d   m j ) , j = 1 , 2 , ⋯   , k a \equiv b\left(\bmod m_{j}\right), \quad j=1,2, \cdots, k ab(modmj),j=1,2,,k
    同时成立的充要条件是 a ≡ b (   m o d   [ m 1 , ⋯   , m k ] ) a \equiv b\left(\bmod \left[m_{1}, \cdots, m_{k}\right]\right) ab(mod[m1,,mk])
    公倍数一定是最小公倍数的乘积,加上性质3可以推出.

例2.5 设 n 为整数, 试求出它能被 9 整除的充要条件.
\quad n = a 0 1 0 k + ⋯ + a k − 1 10 + a k . n=a_{0} 10^{k}+\cdots+a_{k-1} 10+a_{k} . \quad n=a010k++ak110+ak. 因为 1 0 i ≡ 1 (   m o d   9 ) , 1 ⩽ i ⩽ k , 10^{i} \equiv 1(\bmod 9), 1 \leqslant i \leqslant k, 10i1(mod9),1ik, 所以
由同余性质 1, 2 得
n ≡ a 0 + a 1 + ⋯ + a k (   m o d   9 ) n \equiv a_{0}+a_{1}+\cdots+a_{k}(\bmod 9) na0+a1++ak(mod9)

9 ∣ a 0 + a 1 + ⋯ + a k ⇔ 9 ∣ n 9\left|a_{0}+a_{1}+\cdots+a_{k} \Leftrightarrow 9\right| n 9a0+a1++ak9n
从例 2.5 同样也可以推出 n 被 3 整除的充要条件为 3 ∣ a 0 + a 1 + ⋯ + a k , 3 \mid a_{0}+a_{1}+\cdots+a_{k}, 3a0+a1++ak, 这就 是我们早已熟知的判断整数能否被 3 整除的方法.

(既约)剩余类,(既约)剩余系

(既约)剩余类:
给定正整数m,所有对m同余的数组成的集合称为模m的一个剩余类,以r表示m的一个剩余类,如果 ( r , m ) = 1 (r,m)=1 (r,m)=1,则称r为模m的一个既约(或互素)剩余类,模m的所有既约剩余类的个数记作 φ ( m ) \varphi (m) φ(m),即为我们常见的Euler函数
(既约)剩余系:
关于m的所有(既约)剩余类的集合称为模m的(既约)剩余系.

  • m个数完全剩余系(通常称为剩余系)的充要条件为m个数两两对m不同余
  • φ ( m ) \varphi(m) φ(m)个数组成m的既约剩余系的充要条件为, φ ( m ) \varphi (m) φ(m)个数对m不同余,且均与m互素.

构造方法(部分方法,有待补充)

定理 2.13 m = m 1 ⋯ m k , m=m_{1} \cdots m_{k}, m=m1mk, m 1 , ⋯   , m k m_{1}, \cdots, m_{k} m1,,mk 两两既约. 再设 m = m j M j , 1 ⩽ j ⩽ k m=m_{j} M_{j}, 1 \leqslant j \leqslant k m=mjMj,1jk, 及
x = M 1 x ( 1 ) + ⋯ + M k x ( k ) \begin{array}{l} \qquad x=M_{1} x^{(1)}+\cdots+M_{k} x^{(k)} \end{array} x=M1x(1)++Mkx(k)
那么 x x x 遍历模 m m m 的完全(既约)剩余系的充要条件是 x ( 1 ) , ⋯   , x ( k ) x^{(1)}, \cdots, x^{(k)} x(1),,x(k) 分别遍历 m 1 , ⋯   , m k m_{1}, \cdots, m_{k} m1,,mk 的完全 (既约) 剩余系.
通常用于构造一个大数的(既约)剩余系,可以根据此定理进行分解大数,然后进行一一组合,最终得到大数的(既约)剩余系.为方便编程与查看结果,我利用 m = m 1 m 2 m=m_1m_2 m=m1m2,这一假设作为前提,进行C语言代码实现,运行结果一览:剩余系
完整代码如下:

#include<iostream>
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b)
{
	if (!b)
		return a;
	return gcd(b, a % b);
}
ll* residual_system(ll m1, ll m2)//构造(完全)剩余系
{
	if (gcd(m1, m2) != 1)
	{
		cout << "m1与m2不互素,输入错误!" << endl;
		exit(-1);
	}
	ll M2 = m1, M1 = m2;
	ll* R = (ll*)malloc((m1 * m2+1) * sizeof(ll));//如果构造完全剩余系,则共有m=m1*m2个元素
	if (!R)
		exit(-1);
	ll* Temp = R;
	ll x,x1=0,x2=0,m=m1*m2;
	for (x1 = 0; x1 < m1; ++x1)
	{
		for(x2 = 0; x2 < m2; ++x2)
		{
			x = (M1 * x1 + M2 * x2) % m;
			*Temp = x;
			Temp += 1;
			
		}
	}
	*Temp= -1;
	return R;

}
ll* Irreducible_residue_system(ll m1, ll m2)//构造既约剩余系
{
	if (gcd(m1, m2) != 1)
	{
		cout << "m1与m2不互素,输入错误!" << endl;
		exit(-1);
	}
	ll M2 = m1, M1 = m2;
	ll* R = (ll*)malloc((m1 * m2+1) * sizeof(ll));//如果构造既约剩余系,则最多有m=m1*m2个元素
	if (!R)
		exit(-1);
	ll* Temp = R;
	ll x, x1 = 0, x2 = 0, m = m1 * m2;
	for (x1 = 0; x1 < m1; ++x1)
	{
		if (gcd(x1, m1) != 1)
			continue;
		for (x2 = 0; x2 < m2; ++x2)
		{
			if (gcd(x2 ,m2) != 1)
				continue;
			x = (M1 * x1 + M2 * x2) % m;
			*Temp = x;
			Temp += 1;

		}
	}
	*Temp = -1;//以-1作为终止符号
	return R;
}
int main()
{
	ll m1 = 5, m2 = 7;
	ll* R = residual_system(m1, m2);
	cout <<m1 * m2<< "的完全剩余系为:" << endl;
	for (ll i = 0;R[i]!=-1; i++)
	{
		if (!(i % m1)&&i!=0)
			cout << '\n';
		cout << R[i] << '\t';
	}
	m1 = 6;
	m2 = 5;
	ll* R2 = Irreducible_residue_system(m1, m2);
	cout <<'\n'<<m1*m2<< "的既约剩余系为:" << endl;
	for (ll i = 0; R2[i] != -1; i++)
	{
		if (!(i % m1) && i != 0)
			cout << '\n';
		cout << R2[i] << '\t';
	}
	return 0;
}

Euler定理,Wilson定理

定理描述与证明

模 m 的既约剩余系可以取种种不同的形式,但不难看出每个既约剩余系中所 有数的乘积模 m m m 是不变的, 即若 { r 0 , ⋯   , r φ ( m ) − 1 } , { r 0 ′ , ⋯   , r φ ( m ) − 1 ′ } \left\{r_{0}, \cdots, r_{\varphi(m)-1}\right\},\left\{r_{0}^{\prime}, \cdots, r_{\varphi(m)-1}^{\prime}\right\} {r0,,rφ(m)1},{r0,,rφ(m)1} 是模 m m m 的两
个既约剩余系, 那么必有
∏ j = 1 φ ( m ) r j ≡ ∏ j = 1 φ ( m ) r j ′ (   m o d   m ) \prod_{j=1}^{\varphi(m)} r_{j} \equiv \prod_{j=1}^{\varphi(m)} r_{j}^{\prime}(\bmod m) j=1φ(m)rjj=1φ(m)rj(modm)
由此就可得到下面著名的Euler 定理.
Euler 定理 \quad ( a , m ) = 1 , (a, m)=1, (a,m)=1, 则有
a φ ( m ) ≡ 1 (   m o d   m ) a^{\varphi(m)} \equiv 1(\bmod m) aφ(m)1(modm)
证明 : \quad r 0 , ⋯   , r φ ( m ) − 1 r_{0}, \cdots, r_{\varphi(m)-1} \quad r0,,rφ(m)1 是模 m m m 的一组既约剩余系,由定理 2.11 :
a , b a, b a,b 是任意整数,且 ( a , m ) = 1 , (a, m)=1, (a,m)=1, 那么,x 遍历模 m m m 的一组 完全剩余系时, ax + b 也遍历模 m 的一组完全剩余系。
知:
( a , m ) = 1 (a, m)=1 (a,m)=1 时, a r 0 , ⋯   , a r φ ( m ) − 1 a r_{0}, \cdots, a r_{\varphi(m)-1} ar0,,arφ(m)1 也是模 m m m 的既约剩余系,同时
因此
∏ j = 0 φ ( m ) − 1 r j ≡ ∏ j = 0 φ ( m ) − 1 ( a r j ) ≡ a φ ( m ) ∏ j = 0 φ ( m ) − 1 r j (   m o d   m ) \prod_{j=0}^{\varphi(m)-1} r_{j} \equiv \prod_{j=0}^{\varphi(m)-1}\left(a r_{j}\right) \equiv a^{\varphi(m)} \prod_{j=0}^{\varphi(m)-1} r_{j}(\bmod m) j=0φ(m)1rjj=0φ(m)1(arj)aφ(m)j=0φ(m)1rj(modm)
由于 ( r j , m ) = 1 , j = 0 , ⋯   , φ ( m ) − 1 , \left(r_{j}, m\right)=1, j=0, \cdots, \varphi(m)-1, (rj,m)=1,j=0,,φ(m)1, 所以
a φ ( m ) ≡ 1 (   m o d   m ) a^{\varphi(m)} \equiv 1(\bmod m) aφ(m)1(modm)
Wilson 定理 \quad p p p 是素数, r 1 , ⋯   , r p − 1 r_{1}, \cdots, r_{p-1} r1,,rp1 是模 p p p 的既约剩余系,则
∏ r   m o d   p r ≡ r 1 ⋯ r p − 1 ≡ − 1 (   m o d   p ) \prod_{r \bmod p} r \equiv r_{1} \cdots r_{p-1} \equiv-1(\bmod p) rmodprr1rp11(modp)
特别地有
( p − 1 ) ! ≡ − 1 (   m o d   p ) (p-1) ! \equiv-1(\bmod p) (p1)!1(modp)
证明…有时间再补充,主要思路为利用配对思想进行配对

Euler定理应用:

欧拉定理是费马小定理的推广和一般化,常见的应用如下:

1.RSA公钥密码体制

在计算机领域中广泛使用的RSA公钥密码算法也正是以欧拉函数为基础的。基于欧拉定理及大数的素因子分解极为困难而提出的RSA公钥密码体制在1977年由罗纳德·李维斯特、阿迪·萨莫尔和伦纳德·阿德曼一起提出。RSA加密体制广泛应用于信息安全领域中的信息加密和数字签名,其应用原理是产生一对密钥,一个为用户所保留,另一个则可以为任意用户获得,并且很难通过一个密钥去获取另一个密钥,从而保证公钥体制的安全性。
(1)算法简介。设p,q为两个保密的充分大的质数,n=pq,则φ(n)=(p-1)(q-1);取一个整数e,满足1<e<φ(n),且满足(e,φ(n))=1;求出e关于φ(n)的逆元d,使得 e d = 1 ( m o d   φ ( n ) ) ed=1(mod\ \varphi (n)) ed=1(mod φ(n));则可以(d,n)为密钥,以(e,n)为公钥,或者以(e,n)为密钥,以(d,n)为公钥.随即销毁p与q。
加解密的方法为加密: C = M e ( m o d   n ) C=M^e(mod\ n) C=Memod n其中M表示明文,C表示密文。解密: M = C d ( m o d   n ) M=C^d(mod\ n) M=Cdmod n其中M表示明文,C表示密文。要证明这样的加解密方式是可行的,只需证明:对任意整数k,有 k e d = k ( m o d   n ) k^{ed}=k(mod\ n) ked=k(mod n)这等价于 k m φ ( n ) + 1 = k ( m o d   n ) km\varphi (n)+1=k(mod\ n) kmφ(n)+1=k(mod n)若(k,n)=1,则原式等价于 ( k φ ( n ) ) m = 1 ( m o d   n ) (k\varphi (n))m=1(mod\ n) (kφ(n))m=1(mod n),显然成立;若k=mp,原式等价于 ( m p ) α φ ( n ) + 1 m = m ( m o d   q ) (mp)^{α\varphi (n)+1}m=m(mod\ q) (mp)αφ(n)+1m=m(mod q),与前面相同;若k为n倍数,则显然成立。则证毕。通常用公钥加密,密钥解密。
(2)RSA的优缺点。RSA算法是目前理论上最为完善的公钥密码体制,是公钥密码体制中最优秀、影响最大的加密算法。RSA的安全性是基于大整数素因子分解的困难性,在理论上一直未能得到证明。RSA经历了各种攻击,至今未能被完全攻破。但数学上至今未能证明分解就是攻击RSA的最佳方法,不排除今后有发现多项式时间内分解的算法。并且,囿于素数产生技术的限制,生产随机数的程序必须不能给攻击者任何信息,即保证随机性与不可预测性,故生产密钥的复杂度也较高。另外,由于进行的都是非常大的数的计算,RSA的速度不可避免地被拖慢,比对应同样安全级别的对称密码算法慢近1000倍。

2.群论中的运用

在群论中的运用有限循环群生成元个数的计算公式可以用欧拉函数表出。G为循环群是指G的每个元都是G的某一固定的元a的乘方,即对于任何≤n且与n互素的正整数r,αr是G的生成元。若G是n阶循环群,则G含有φ(n)个生成元。

Wilson定理应用:

Wilson定理的应用常用于计算化简以及一些证明题中,见习题1第(2)问.

习题

题目描述

  1. 设素数 p 为奇数, 证明:
  • [ 1 ] . 当 p = 4 m + 3 p=4 m+3 p=4m+3 时, 对任意整数 a a a 均有 a 2 ≢ − 1 (   m o d   p ) a^{2} \not \equiv-1(\bmod p) a21(modp)
  • [ 2 ]. 当 p = 4 m + 1 p=4 m+1 p=4m+1 时, 必有整数 a a a 满足 a 2 ≡ − 1 (   m o d   p ) . a^{2} \equiv-1(\bmod p) . a21(modp).
  1. m = m 1 m 2 ⋯ m k , m 1 , m 2 , ⋯   , m k m=m_{1} m_{2} \cdots m_{k}, m_{1}, m_{2}, \cdots, m_{k} m=m1m2mk,m1,m2,,mk 两两既约, ( m , a i ) = 1 \left(m, a_{i}\right)=1 (m,ai)=1. 证明: =  当  x ( i ) \stackrel{\text { 当 }}{=} x^{(i)} =  x(i) 分别遍
    m i m_{i} mi 的完全 (既约) 剩余系时,
    x = ( M 1 a 1 x ( 1 ) + M 2 + ⋯ + M k ) ( M 1 + M 2 a 2 x ( 2 ) + ⋯ + M k ) ⋯ ( M 1 + M 2 + ⋯ + M k a k x ( k ) ) x=\left(M_{1} a_{1} x^{(1)}+M_{2}+\cdots+M_{k}\right)\left(M_{1}+M_{2} a_{2} x^{(2)}+\cdots+M_{k}\right) \cdots\left(M_{1}+M_{2}+\cdots+M_{k} a_{k} x^{(k)}\right) x=(M1a1x(1)+M2++Mk)(M1+M2a2x(2)++Mk)(M1+M2++Mkakx(k))
    x = m 1 1 a 1 x 11 + m 2 a 2 x 12 … n k k a n x=m_{1}^{1} a_{1} x^{11}+m_{2} a_{2} x^{12} \ldots n_{k}^{k} a_{n} x=m11a1x11+m2a2x12nkkan

参考思路

(1).反证法:假设成立,存在 a a a 使 a 2 ≡ − 1 a^{2} \equiv-1 a21 (   m o d   p ) , (\bmod p), (modp), then a p − 1 ≡ a 2 ( 2 m + 1 ) ≡ ( − 1 ) 2 m + 1 ≡ − 1 (   m o d   p ) , a^{p-1} \equiv a^{2(2 m+1)} \equiv(-1)^{2 m+1} \equiv-1(\bmod p), ap1a2(2m+1)(1)2m+11(modp), since p ≠ 2 p \neq 2 p=2 这与欧拉定理矛盾,得证.
(2) Let a = ( 2 m ) ! , a=(2m) !, a=(2m)!, then
a 2 = ( 1 × 2 × ⋯ × 2 m ) ( 1 × 2 × ⋯ × 2 m ) ≡ ( 1 × 2 × ⋯ × 2 m ) [ ( − 1 ) ( p − 1 ) × ( − 1 ) ( p − 2 ) × ⋯ × ( − 1 ) ( 2 m + 1 ) ] (   m o d   p ) ≡ ( − 1 ) 2 m ( p ! ) (   m o d   p ) ≡ − 1 (   m o d   p ) \begin{aligned} a^{2} &=(1 \times 2 \times \cdots \times 2 m)(1 \times 2 \times \cdots \times 2 m) \\ & \equiv(1 \times 2 \times \cdots \times 2 m)[(-1)(p-1) \times(-1)(p-2) \times \cdots \times(-1)(2 m+1)] \quad(\bmod p) \\ & \equiv(-1)^{2 m}(p !) \quad(\bmod p) \\ & \equiv-1 \quad(\bmod p) \end{aligned} a2=(1×2××2m)(1×2××2m)(1×2××2m)[(1)(p1)×(1)(p2)××(1)(2m+1)](modp)(1)2m(p!)(modp)1(modp)(非常巧妙地运用了Wilson定理)
2.待补充…

参考论文:孙焱. 欧拉函数的性质及简单应用[J]. 商情, 2017, 000(048):288.
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值