1、2019/4/30,1,1,离散数学 Discrete Mathematics,汪荣贵 教授 合肥工业大学软件学院专用课件 2010.04,2019/4/30,2,第二章 算法基础,2.1 Algorithms算法 2.2 Complexity of Algorithms算法的复杂性 2.3 The Integers and Division整数和除法 2.4 Integers and Algorithm整数和算法 2.5 Applications of Number Theory数论的应用 2.6 Matrices矩阵 2.7 Recursion 递归,学习内容,2019/4/30,4,基础
2、知识 中国余数定理 大整数的运算技巧 伪素数 密码学应用,数论的应用,2019/4/30,5,定理1 若a和b为正整数,则存在整数s和t,使gcd(a,b)=sa+tb,基础知识,最大公因数的基本性质,2019/4/30,6,2019/4/30,7,引理1 如果a,b和c为正整数,使得gcd(a,b)=1且a|bc,那么a|c,2019/4/30,8,引理2 如果p是素数,且p|a1a2an,其中ai为整数,则对于某个i,p|ai,基础知识,由数学归纳法及引理1易证:,2019/4/30,9,定理2 令m为整数,a,b和c为整数。如果acbc(mod m)且gcd(c,m)=1,那么ab(mo
3、d m)。,基础知识,2019/4/30,10,线性同余形为axb(mod m) 的同余式. m为正整数,a和b为整数,x为变量如果aa- 1(mod m), a- 称为a的模m逆,线性同余,2019/4/30,11,定理3 如果a和m为互素的整数,m1,则存在a的模m逆。而且这个a的模m逆是唯一的。 (即有小于m的唯一正整数 a- ,它是a的模m逆,且a的任何别的模m逆均和a- 模m同余1),线性同余,2019/4/30,12,证: 由定理1及gcd(a,m)=1知有整数s和t,成立:sa+tm=1 于是sa+tm=1(mod m) 由于 tm=0(mod m)所以 sa 1(mod m)s
4、为a的模m逆,2019/4/30,13,例 求3模7的逆 解 由于gcd(3,7)=1, 由定理3知存在3模7的逆7=23+1-23+17=1所以:-2是3模1的一个逆,线性同余,2019/4/30,14,给出一个在a和m互素的条件下,求a的模m逆的方法: 求a和m的线性组合使之等于1;这一线性组合中a的系数就是a模m的一个逆,线性同余,2019/4/30,15,例 线性同余3x4(mod 7)的解是什么? 解 从上例知道-2是3模7的逆。在同余式同乘以-2得: -23x=-24(mod 7) 因为-61(mod 7)且-8 6(mod 7), 所以若x是解,必有x -8 6(mod 7)。
5、验证:3x 36=18 4(mod 7) 6,13,20,及-1,-8,-15,线性同余,2019/4/30,16,基础知识 中国余数定理 大整数的运算技巧 伪素数 密码学应用,数论的应用,2019/4/30,17,定理4 令m1,m2,mn为两两互素的正整数,则同余方程组 x a1(mod m1) x a2(mod m2) x an(mod mn)有唯一的模m=m1m2mn的解。(即有一个解x,使0xm,且所有其他的解均与次解模m同余),中国余数定理,2019/4/30,18,证明:要构造一个适合各方程的解,首先对k=1,2,n,令MK=m/mk,即Mk是除mk以外所有模数的乘积。由于ik时
6、,mi和mk没有大于1的公因子,所以gcd(mk,Mk)=1。从而由定理3知有Mk模mk的逆,整数yk,使得 Mkyk=1(mod mk)要得到合适所有方程的解,令 x a1M1y1+a2M2y2+anMnyn,2019/4/30,19,现在证明x就是所求的一个解。 由于只要jk,就有 Mj=0(mod mk) x的计算式中除第k项以外的各项模mk均同余于0.由于Mkyk 1(mod mk), 我们看到,对k=1,2,n,均有 x akMkyk ak(mod mk) 所以,x是这n个同余方程的同一解。,中国余数定理,2019/4/30,20,例 一世纪时,中国数学家孙聪问道:某物不知其数,三分
7、之余二,五分之与三,气分之余而,此物几何?这一问题可以翻译成: 求同余方程组x 2(mod 3)x 3(mod 5)x 2(mod 7) 的解,中国余数定理,2019/4/30,21,解 令m=357=105,M1=m/3=35,M2=m/5=21,M3=m/7=15. 2是M1=35的模3逆,因为352(mod 3) 1是M2=21的模5的逆,因为21 1(mod 5) 1也是M3=15的模7逆,因为15 1(mod 7) 于是这一方程组的解是那些满足下式的x: xa1M1y1+a2M2y2+a3M3y3=2352+3211+2151 (mod 105)=233 23(mod 105) 23
8、是所有解中最小正整数,被3除时余2,被5除时余3,被7除时余2,2019/4/30,22,基础知识 中国余数定理 大整数的运算技巧 寻找伪素数 密码学应用,数论的应用,2019/4/30,23,假定m1,m2,mn是大于或等于2且两两相素的整数,令m为它们的乘积。由中国余数定理可知每个整数a,0am,均可用唯一的n元组表示。这个n元组由a被mi除的余数组成,也就是说,a可以唯一地表示为 (a mod m1,a mod m2,a mod mn),大整数的运算技巧,2019/4/30,24,例7 求表示小于12的非负整数的有序偶,其中第1分量是用3除的余数,第2分量是用4除以余数 解:求出每个整数
9、用3除和用4除的余数,得到:0=(0,0) 4=(1,0) 8=(2,0) 1=(1,1) 5=(2,1) 9=(0,1)2=(2,2) 6=(0,2) 10=(1,2)3=(0,3) 7=(1,3) 11=(2,3),大整数的运算技巧,2019/4/30,25,要做大整数算术运算,我们选模数m1,m2,mn ,其中每个mi都是大于2的整数,在ij时gcd(mi,mj)=1,且m= m1.m2 mn大于我们要做的算术运算的结果 大整数运算可以再表示它们的n元组的分量上作运算来完成,n元组的分量是用大整数除以mi的余数,i=1,2,n。一旦计算出表示大整数算术运算结果的n元组表示,就可以求解n个
10、模mi同余方程(i=1,2,n)找出结果的值。,大整数的运算技巧,2019/4/30,26,用该方法做大整数算术运算的优点:首先可以用来完成通常一台计算机上不能做的大整数算术运算。其次,对不同模数的计算可以并行操作,加快计算速度,大整数的运算技巧,2019/4/30,27,例 假定在某台处理器上做100以内的整数算术运算比100以上的整数运算快得多,那么只要把整数表示为模两两像素的100以内的整数的余数的多元组,就可以将差不多所有整数计算限制在100以内的整数上。例如,可以以99,98,97和95为模数。(这些整数没有大于1的公因数)根据中国余数定理,每个小于:99989795=89 403
11、930的非负整数均可唯一地用该整数被这四个因数除的除数表示。,大整数的运算技巧,2019/4/30,28,例:计算机系统仅考虑100以内的数的处理。如何对x=123684 和 y = 413456进行相加运算? 解的思路: 取四个两两互质的小于100的数99、98、97、95,得到x+y的同余数表达。 再利用中国同余定理。,大整数的运算技巧,2019/4/30,29,解 123 684 mod 99=33 123 684 mod 98=8, 123 684 mod 97=9及123 684mod95=89 123 684表示为(33,8,9,89) 类似的 413 456可表示为(32,92,
12、42,16) 把4元组的对应分量相加,再按相应的模数减小各个分量。这样可得 (33,8,9,89)+(32,92,42,16)=(65mod99,100mod98,51mod97,105mod95)=(65,2,51,10) 求出(65,2,51,10)表示的整数,必须解同余方程组,2019/4/30,30,x 65(mod 99) x 2(mod 98) x 51(mod 97) x 10(mod 95) 见练习29证明,537 140是方程组唯一小于89 403 930的非负解,因此537 140是要求的和。,大整数的运算技巧,2019/4/30,31,大整数算术运算模数的最好选择是一组行
13、为2k-1的整数,其中k为正整数,这是因为很容易完成模这种整数的二进制算术,还容易找到两两互素的一组这种整数。,大整数的运算技巧,2019/4/30,32,基础知识 中国余数定理 大整数的运算技巧 伪素数 密码学应用,数论的应用,2019/4/30,33,中国古代数学相信,n为素数的充分必要条件是2n-1 1(mod n) 当只要是素数该同余必成立,是正确的 只要同余成立,n就是素数,是不正确的法国数学家费马证明了: 当n为素数时该同余成立,伪素数,2019/4/30,34,定理5(费马小定理) 如果p为一个质数,a不能被p整除的整数,则有ap-1 1 ( mod p) 并且对每个整数a,我们
14、有 apa(mod p),伪素数,2019/4/30,35,通过编程计算发现,反过来结论并不成 立。例如,但是341=11x34为合数!称使得成立的p为伪素数。,2019/4/30,36,基础知识 中国余数定理 大整数的运算技巧 伪素数 密码学应用,数论的应用,2019/4/30,37,信息,也就是字符串,被译成数字,然后对每个字符对应的数用移位或模26的线性同余转换为另一个数。这些方法都是私钥加密系统的例子。,密码学基本概念,2019/4/30,38,20世纪70年代中期,密码学中引入了公钥密码系统的概念。在这样的一个系统中,每个人都可以有一个众所周知的加密密钥,而解密密钥是保密的,只有信息
15、的预期接受人能解密。加密密钥并不能让人轻易找到解密密钥,密码学基本概念,2019/4/30,39,用RSA加密法时,信息被翻译成若干整数序列。为此可以先将每个字母翻译成整数,例如用凯撒密码翻译。这些整数再分成组,各组成为一个大整数,以代表一个字母段。,RSA加密,2019/4/30,40,加密过程是先把表示普通文字(即原信息)的整数M转换为表示密码文字(即加密信息)的整数C,C的计算公式是 C=Memod n加密后的信息以一段段数字的形式发送给预期的接收者,RSA加密,2019/4/30,41,例 用RSA密码系统为信息STOP加密,其中p=43,q=59,所以n=4359=2537. 此外e
16、=13.注意:gcd(e,(p-1)(q-1))=gcd(13,4258)=1解 我们把STOP的字母翻译成相应的等价数码,然后按4个数字一组分段。这样得到 1819 1415,用映射 C=M13 mod 2537,2019/4/30,42,例 用RSA密码系统为信息STOP加密,其中p=43,q=59,所以n=4359=2537.此外e=13.注意gcd(e,(p-1)(q-1))=gcd(13,4258)=1解(续) 为每一段加密。快速取模乘法计算得 181913mod 2537=2081 141513mod 2537=2182加密后的信息为 2081 2182,2019/4/30,43,
17、如果知道解密密钥d,即e模(p-1)(q-1)的逆数,就可以很快恢复原信息。 (由于gcd(e,(p-1)(q-1)=1,该逆数一定存在。) 若 de1(mod(p-1)(q-1) 则有整数k,成立 de=k(p-1)(q-1)+1,RSA解密,2019/4/30,44,由:C=Memodn 知:Cd =(Me)dmodn=Mdemodn=M1+k(p-q)(q-1) modn,RSA解密,2019/4/30,45,(假定gcd(M,p)=gcd(M,q)=1,这一关系只在很少情况下不成立), 根据费马小定理,有: Mp-1 1(mod p) 及 Mq-1 1(mod q) 于是 Cd M*(
18、MP-1)k(q-1) M*1 M(mod p) 及 Cd M*(Mq-1)k(p-1) M*1 M(mod q) 由于gcd(p,q)=1,从中国余数定理知 Cd M(mod pq),2019/4/30,46,例 收到加密信息是0981 0461。如果这是用上例中的RSA密码加密的,解密后的原信息是什么? 解 该信息是用RSA密码系统n=4359和指数13加密的。练习题4证明d=937是13模4258=2436的逆数。我们用937作为解码指数。要为数字段C解密,计算 P=C937mod 2537,2019/4/30,47,为解密上述信息,用同余幂算法计算0981937mod2537=0704及0461937mod2537=1115. 从而原信息的数码形式是 0704 1115。 翻译成字母 HELP,2019/4/30,48,如果知道模n的分解,即:n=pq,则可以根据欧几里得算法迅速得到e模(p-1)(q-1)的逆d。得以解密但是,至今还没有有效的n的分解方法。从目前的技术看:分解400位的整数,需要十亿年!,RSA系统的保密性,本节内容到此结束,谢谢大家!,