密码学
第一章
密码学体制
1.明文空间M(全体明文的集合)
2.密文空间C(全体密文的集合)
3.密钥空间K(全体密钥的集合)
4.加密器或加密变换(算法)E
5.揭秘其或解密变换(算法)D
{M,C,K,E,D}称为一个密码体制
分类
按执行的操作方式不同可分为替换密码体制和换位密码体制
按收发双方使用的密钥是否相同可分为对称密码和非对称密码
分组密码和序列密码
单项变换密码体制和双向变换密码体制
确定型密码体制和概率密码体制
攻击方式
- 唯密文攻击:已知一些密文和加密算法
- 已知明文攻击:已知一些密文和加密算法以及对应的明文
- 选择明文攻击:已知加密算法,选择明文得到相应密文,也可选择被加密的明文推导密钥和算法
- 选择密文攻击:已知加密算法,选择不同的密文以及相应的被解密的明文
- 选择文本攻击:明文与密文结合,前两种方法的结合
唯密文攻击最难,攻击强度递增。一个密码体制安全通常指在前三种攻击下安全
RSA:能抵御选择明文
AES:能抵御已知明文
DES:密钥太短,不能抵御已知
第二章
仿射密码
仿射密码是一种替换密码
k和26互质
i为明文 j为明文
(1)加密变换为:Ek0,k1(ai)=aj,j=(ik1+ k0)(mod n),k0 ,k1∈Zn,gcd(k1,n)=1;
(2)解密变换为:Dk0,k1(aj)=ai,i= k1-1(j-k0)(mod n),k0 ,k1∈Zn,gcd(k1,n)=1,其中:k1-1是k1关于n的逆元,即k1-1×k1=1 (mod n)
(3)k1,k0为该算法的密钥。当k0=0时,仿射密码技术退化为乘法密码技术;当k0=1时,仿射密码技术退化为移位替换密码技术。
维吉尼亚密码
(1)加密
明文M=(m1, m2, …, mn)被分为长度为d的字母段,如果消息的长度恰好不是d的倍数,则在末尾填充随机字符。加密函数为:
Ek(m1, m2, …, mn)=((m1+k1) mod 26,(m2+k2) mod 26,…, (mn+kn)) mod 26 = c1, c2, …, cn
(2)解密
解密函数Dk和加密函数Ek一样,只是运算时使用的是减法而不是加法,假设密文C=(c1, c2, …, cn),则解密函数为:
Dk(c1, c2, …, cn)=((c1-k1) mod 26,(c2-k2) mod 26,…,(cn-kn) mod 26 = m1, m2, …, mn
(3)密钥
对于Vigenere密码,密钥是一个字符序列k=( k1, k2, …, kn),其中k1=k2= …= kn(它们是长度为d的英文字串),n为任意值。因此,在原理上存在无限多个密钥。在实际应用中,当密钥的长度比明文短时,密钥可以周期性地重复使用(即k=( k1, k2, …, kn)),直至完成明文中每个字母的加密。
第四章
DES算法
DES加密和解密是互逆的
DES的明文分组长度64 bits,密钥长度为64 bits,其中密钥有8 bits奇偶校验,因此有效密钥长度为56 bits。1
2
3
4
5
6
7
8st=>start: 64位明文
e=>end: 64位密文
op1=>operation: 初始置换IP
op2=>operation: 16轮乘积变换
op3=>operation: 逆初始置换IP^-1
st->op1->op2->op3->e
IP置换
IP置换表:
S盒使用方法
接收6比特的输入,第1和最后1比特构成的2位二进制位行号,中间4位二进制位列号,查S盒得到输出并转化为二进制
E盒扩展
对输入的某些位进行复制和置换,将32 bits扩展为48 bits。
三重DES
DES-EDE2
DES-EEE2
EDE3,EEE3密钥长度为168bits EDE2,EEE2为112bits
AES算法
限定了明文分组为128bits,而密钥长度可为128、192、256bits,因而实际上AES有三个版本:AES-128、AES-192、AES-256,相应的迭代轮数为10轮、12轮、14轮。
字节代替(SubBytes):通过一个非线性的替换函数,用查找表(S盒)的方式把每个字节替换成对应字节(前4bit行值,后4bit列值)
行移位(ShiftRows):将矩阵中每个横列进行循环式移位
列混合(MixColumns):使用线性转换混合每行内的四个字节
轮密钥加(AddRoungKey):矩阵中每个字节都与该次循环的子密钥做异或XOR运算
密钥扩展
首先初始密钥按照矩阵列进行分许,前4列记为$K_0$,$K_1$,$K_2$,$K_3$
1.若$K_i$中,i不是4的倍数,则
Ki = Ki-4XOR Ki-1
2.若$K_i$中,i是4的倍数,则
Ki=Ki-4XOR T[Ki-1]
T[Ki-1]:
1.循环地将Ki-1的元素左移位,每次一个字节,如abcd->bcda;
2.将这4个字节作为S盒的输入,输出新的4个字节 efgh
3.计算一轮的常量r(i)=2(i-4)/4
4.生成转换后的列:[e XOR r(i), f, g, h]
例: $𝑇(𝐾_3)$的计算步骤如下:
1)循环将$𝐾_3$按照字节为单位循环左移1字节,00 55 09 32变成55 09 32 00
2)将55 09 32 00作为S盒的输入,查表得到输出FC 01 23 63
3)查找Rcon表,$Rcon[i/ Nk]=Rcon[1]=01000000$
4)将01000000与FC 01 23 63异或运算得FD 01 23 63
因此$𝑇(𝐾_3 )$={FD 01 23 63}
解密
AES字节基本运算
AES算法的基本运算是在有限域$GF(2^8)$上的加与乘运算。AES算法构造有限域选择的不可约多项式是$p(x)=x^8+x^4+x^3+x+1$
余式的次数至多是7次,共28=256个多项式,这256个余式构成了一个有限域。
重要规则:系数模2 模p(x)
X乘
另外 GF(28)上域元素 x,用二进制表示为{0000 0010}。用十六进制表示为{02}.
因此若b7=0 ,可以得出x•b(x)的结果就是 b(x)对应的8bits二进制向左移一位,最后一位补0。
若b7=1, x•b(x)的结果就是b(x)对应的8bits二进制向左移一位,最后一位补0,再与{1B&3125;(其二进制为00011011,多项式表示为x4+x3+x+1)做逐比特异或来实现。
对称密码工作体制
ECB电子码本模式
ECB操作模式加密: $C_j=E_k(P_j)$
ECB操作模式解密: $P_j=D_k(C_j)$
(1)ECB运行模式在给定的密钥下,同一明文组总产生同样的密文组。
(2)无链接依赖性,各组的加密独立于其它分组,重排密文分组,将导致相应的明文分组重排。
(3)无错误传播,单个密文分组中有一个或多个比特错误只会影响该分组的解密结果。
(4)安全性有限,由于同一明文产生同样的密文,这会暴露明文数据的格式和统计特征。特别是若明文数据都有固定的格式(例如图像)或者并需要以协议的形式定义的数据,一些重要的数据常常在同一位置上出现,使密码分析者可以对其进行统计分析、重传和代换攻击。因此当消息长度超过一个组或者重复使用密钥加密多个单组消息,不建议使用ECB模式
CBC密码分组链接模式
CBC操作模式加密: $C_j=E_K(C_j-1 ⊕P_j)$
CBC操作模式解密: $P_j=D_K(C_j) ⊕C_j-1$
(1)能够隐蔽明文数据的格式规律和统计特性,相同的明文分组产生不同密文分组。
(2)在一定程度上能够识别攻击者在密文传输中是否对数据进行了篡改,如组的重放、嵌入和删除等。
(3)CBC模式各密文分组不仅与当前明文组有关,而且通过反馈作用还与以前的明文组有关。在CBC模式下,最好是每发一个消息,都改变IV,比如将其值加一,这样即使是两个相同的明文使用相同的密钥,也将产生不同的密文,这样大大提供了安全性。但这样产生另外一个问题,接收端(解密方)如何知道使用的IV呢?实际上,IV的完整性要比其保密性更为重要。
(4)具有错误传播. 若在传送过程中,某组密文组Cj出错时,则会影响到分组Cj 和Cj+1 的解密, 即该组恢复的明文 和下一组 恢复数据出错。但后面的分组解密将不会受影响。
(5)在CBC模式中,密文分组若某些比特缺失(例如某些比特位没有收到等),那么即使密文分组中1 bit的缺失,也会导致后续密文分组都受缺失影响,从而此自缺失比特密文分组开始,后续密文分组全部受缺失影响,无法正常解密
CFB密码反馈模式
例:
(1)输入相同明文,改变IV会导致相同的明文输入得到不同的加密输出,IV无需保密。若待加密消息必须按字符(如电传电报)或按比特处理时,可采用CFB模式。CFB实际上是将加密算法DES作为一个密钥流产生器。CFB模式除能获得保密性外,对错误差错比较敏感,还能用于认证。
(2)CFB与CBC的区别是反馈的密文长度为j,且不是直接与明文操作,而是反馈至密钥产生器。解密采用相同方案,都使用加密函数而非解密函数。密文分组$𝐶𝑖$依赖于$𝑃𝑖$和前面的所有明文分组,因此正确的解密一个正确的密文分组需要之前的⌈𝑛/𝑗⌉个密文分组也都正确(确保移位寄存器是正确的)。
(3)在CFB模式中,明文有一组$𝑃𝑖$中单个比特有错,会使以后的密文组都受影响,但经解密后的恢复结果,除原有误的一组外,其后各组明文都正确地恢复。
若在传送过程中,一个或多个比特错误出现在j比特的密文组$𝐶𝑖$中,则会影响到分组$𝑪𝒊$和后续⌈𝒏/𝒋⌉个密文分组的解密(直到nbits的密文被处理,在此之后出错的分组$𝐶𝑖$完全移出移位寄存器)。例如对于8bits(1个字节)的加密,则会产生9字节的错误。
OFB输出反馈模式
(1)与CFB、CBC相同,输入相同明文,改变IV会导致相同的明文输入得到不同的密文输出。
(2)OFB模式的传输过程中的比特错误不会被传播。例如$𝐶𝑖$中出现一个或多个比特错误,在解密结果中只有$𝑃𝑖$受到影响,以后各明文分组则不受影响。但与CFB模式相比,更易受到对消息流的篡改攻击,比如在密文中取1bit的补,那么在恢复的明文中相应位置的比特也为原比特的补。因此使得敌手有可能通过对消息校验部分的篡改和对数据部分的篡改,而以纠错码不能检测的方式篡改,因此对于密文被篡改难以进行检测,无法实现完整性检测。
CTR计数器模式
CTR操作模式加密: $O_i=E_k(CTR+i-1),C_i=O_i⊕P_i$
CTR操作模式解密:$O_i=E_k(CTR+i-1) ,P_i=O_i⊕ C_i$
第五章
序列密码分类
在序列密码中,根据状态函数是否独立于明文或密文,可以将序列密码分为同步序列密码和自同步序列密码两类。
同步序列密码
密钥流独立于消息流产生 。加密端密钥流发生器一位接一位地产生密钥,在解密端发生器产生出完全相同的密钥。
同步密钥流生成器模型特点:
(1)同步:在一个同步序列中,发送方和接收方必须是同步的,即用同样的密钥且该密钥操作在同样的位置(状态),才能保证正确的解密。
(2)无错误传播:在传输期间,一个密文字(或位)被改变(不是删除和插入)只能影响该密文字(或位)的恢复,不会对后续密文字(或位)产生影响。
(3)主动攻击破坏同步:按照同步要求,一个主动攻击对密文进行插入、删除或重放操作都会立即破坏其同步,从而可能被解密器检测出来。作为无错误传播的结果,主动攻击者可能有选择地对密文进行改动,并准确地知道这些改动对明文的影响,这时可以采用为数据源提供认证并保证数据完整性的技术。
自同步序列密码
也称为异步流密码,密钥流的产生不是独立于明文流和密文流的。
自同步密钥流生成器模型特点:
(1)自同步:自同步的实现依赖于密文字被删除或插入,这是因为解密只取决于先前固定数量的密文字。自同步序列密码在同步丢失后能够自动重新建立同步,并正确地解密,只有固定数量的明文字不能解密。
(2)有限的错误传播:因为自同步序列的状态取决于t个已有的密文字符,若一个密文字(或位)在传输过程中被修改(插入或删除),则解密时最多只影响到后续 t个密文字的解密,即只发生有限的错误传播。
(3)难检测主动攻击:相比于同步,自同步使得主动攻击者发起的对密文字的插入、删除、重放等攻击只会产生非常有限的影响,正确的解密能很快自动重建。因此,主动攻击对自同步序列密码很困难的,可能需要采用为数据源提供认证并保证数据完整性的技术。有限的错误传播特性使得主动攻击者对密文字的任何改动都会引起一些密文字解密出错。
(4)密文统计扩散:每个明文字都会影响其后的整个密文,即密文的统计特性被扩散到密文中。所以,自同步序列密码体制在抵抗利用明文冗余度而发起的攻击方面要强于同步序列密码。
LFSR线性反馈移位寄存器
移位寄存器是流密码产生密钥流的一个主要组成部分。GF(2)上一个n级反馈移位寄存器由n个二元存储器与一个反馈函数$f(a_1,a_2,…,a_n)$组成
1.n级线性反馈移位寄存器的状态周期小于等于2n-1。
2.周期达到最大值$2^n-1$时,称{ai}为n级m序列。
3.n级LFSR产生的序列有最大周期$2^n-1$的必要条件是其特征多项式为不可约多项式。
4.若n次不可约多项式p(x)的阶$2^n-1$,则称其为n次本原多项式。
5.设p(x)是GF(2)上的多项式,使p(x)|(xp-1)的最小的p称为p(x)的周期或阶
第六章
非对称密码概述
分组密码和序列密码都属于对称密码体制
(1)主体A若需要其他主体利用非对称密码体制向他发送秘密消息,先要生成一对密钥,其中一个用于加密,另一个用于解密。用于加密的密钥在非对称密码体制中称为公开密钥,也称公开钥或公钥,是不需要保密的。A的公开密钥通常表示为PKA(public key of A)。用于解密的密钥称为秘密密钥,简称秘密钥或私钥,需要解密方严格保密。B的秘密密钥通常表示为SKA(secret key of A)。
(2)B若要向A发送秘密消息m(message),先要获取A的加密密钥,也即公钥。计算c=𝐸𝑃𝐾𝐴 (𝑚) ,得到消息m对应的密文c(cipher),然后把c发送给A。其中c 表示加密消息得到的密文,E(Encrypt)表示对消息进行加密的算法。𝐸𝑃𝐾𝐴 (𝑚)表示用加密算法E和公开密钥PKA对消息m进行加密。
(3)A在接收到密文c后,计算𝑚=𝐷𝑆𝐾𝐴 (𝑐) , 得到密文c对应的消息m。其中D(Decrypt)表示对密文进行解密的算法,𝐷𝑆𝐾𝐴 (𝑐)表示用解密算法D和秘密密钥SKA对密文c进行解密。
由于只有接收者A有解密密钥,故密文c在公共信道的传输过程中是安全的。
RSA密码算法
密钥的产生
① 选择两个满足需要的大素数p和q,计算n=p×q,φ(n)= (p-1)×(q-1),其中φ(n)是n的欧拉函数值。
② 选一个整数e,满足1<e<φ(n),且gcd(φ(n),e)=1。通过d×e≡1modφ(n),计算出d。
③ 以{e,n}为公开密钥,{d,n}为秘密密钥。
假设Alice是秘密消息的接收方,则只有Alice知道秘密密钥{d,n},所有人都可以知道公开密钥{e,n}。
加密
如果想发送消息m给Alice,就选择Alice的公钥{e,n},然后计算:$c≡m^e mod n$,然后把c发送给Alice。
解密
接收方Alice收到c,用私钥计算:$m≡c^dmodn$
- 能够抵御选择明文攻击
- RSA的安全性基于分解大整数难题
(1)不同的用户不能用相同的模数n. 大素数的个数是十分庞大的资源,不用担心会被用完。
(2)p与q的差值要大
(3)p-1和q-1都应有大的素因子。
(4)私钥d的选择。如果私钥d的值比较小,由RSA的解密算法可知,对数据进行解密的速度越快。但是,私钥d的值不能太小,一般要求d≥n1/4。
(5)更换密钥
如果私钥d被泄露,则在模n的情况下重新计算一对密钥是不够的,而是必须选择一个新的公钥n.
(6)e不可太小,否则不安全。
第七章
Hash函数
Hash函数H是一公开函数,不需要密钥,用于将任意长的消息m映射为较短的、固定长度的一个值𝐻(𝑚)
要求:1.接收任意长度的消息输入 2.生成较短的固定长度输出 3.容易快速的计算出哈希值
安全性:
(1)单向性:由消息的哈希值倒推出消息在计算上不可行,即给定𝐻(𝑚),计算m计算上不可行;
(2)抗弱碰撞性:对于任何给定消息及其哈希值,不可能找到另一个能映射出该哈希值的消息,即给定的𝐻(𝑚),很难找到一个$𝑚≠𝑚^′$使得$𝐻(𝑚)=𝐻(𝑚^′)$;
(3)抗强碰撞性: 对于任何两个不同的消息,它们的哈希值必定不同,很难找到两条消息m和$𝑚^′$,使得$𝐻(𝑚)=𝐻(𝑚^′)$。
MD5
消息摘要长度为128bits
SHA-1
SHA-1接受输入消息的最大长度为264-1 bits,生成160 bits的消息摘要。
包含四轮运算,每一轮20回合,总共80回合
(1)填充消息
输入消息M,首先应该填充消息,保证输入SHA-1计算的整个消息长度是512 bits的倍数。
第一个比特位填‘1’,其余全部填‘0’
假设消息M的长度为 𝑙 bits,在原始消息M尾部增加1个比特位”1”和𝑘个”0” 比特位,𝑙和𝑘满足
𝒍+𝟏+𝒌≡𝟒𝟒𝟖(𝐦𝐨𝐝 𝟓𝟏𝟐),
并且k为最小的非负整数。然后再在填充消息的末尾添加64-bit的块,该64-bit块是原始消息比特位长度变换为二进制块,如果消息长度变换为二进制块的位的个数小于64,则在左边补0,使得块的长度刚好等于64 bits。
最后16bits为消息长度值 看例题
(2)被填充消息分组
把填充后的整个消息按照512-bit块进行划分,假若划分为N个512-bit块,依次为:𝑀(0),𝑀(1),⋯,𝑀(N-1)。
每个512-bit块又由16个32-bit字组成,第i个512-bit块的第一个32-bit 字,记为𝑀0(𝑖),第二个32-bit字,记为𝑀1(𝑖),16个32-bit字依次𝑀0(𝑖)𝑀1(𝑖),⋯,𝑀15(𝑖)。
(3)数据扩展
(4)初始化变量
SHA-1的初值变量IV为160 bits的数据块,即5个32-bit的字,依次为𝐻0(0), 𝐻1(0),𝐻2(0)),𝐻3(0), 𝐻4(0),初值变量设置为:
基于分组的CBC-MAC
大多数消息认证码都是基于分组密码,它们有相对较短比特长度或短密码(如基于DES-CBC的MAC是56 bits),MAC函数与加密算法类似,不同之处为MAC函数不必是可逆的,因此与加密算法相比更不易被攻破,提供足够安全。
CBC-MAC算法是最常用的一种基于分组的MAC算法
其初始变量 取值为零,然后把需要认证的数据 进行分组,分组的长度由所选的分组密码算法所决定,若最后一组数据不够分组规定长度,则需要进行必要的填充,最简单填充方法在其后补零.
消息认证
基于消息认证码的认证过程,前提条件是通信双方共享一密钥K。
存在的问题:掌握密钥的人否认
第八章
数字签名
数字签名是在密码学理论的基础上发展起来的,基于公钥密码体制和私钥密码体制都可以获得数字签名,每种签名方案都与某一种或多种密码体制紧密联系在一起。目前主要集中在基于公钥密码体制的数字签名技术的研究。多以非对称密码体制为基础提出数字签名方案。
原理
RSA算法中,一个私钥{d, n}只有唯一的{e, n}与之对应。{e, n}表示了秘密密钥{d, n}的持有者的身份。
让消息发布者Bob先计算s≡md mod n,然后把s附于消息m之后即{m, s}一起放到公共媒介上。
可以通过计算m≡se mod n成立与否,来判定消息是不是Bob发布的消息,以及消息是否被篡改。
分类
按数字签名的所依赖的理论基础分,主要可以分为:
(1)基于大数分解难题的数字签名,如8.3.1节RSA数字签名方案;
(2)基于离散对数难题的数字签名,如8.3.2节介绍的ElGamal数字签名方案,8.4.1和8.4.3节介绍的美国的数字签名方案;
(3)基于椭圆曲线离散对数的数字签名,这类签名往往由基于离散对数的数字签名改进而来,如8.4.2节、8.4.4节和8.4.5节介绍的数字签名方案。
数字签名的用途分,可以把数字签名分为普通的数字签名和特殊用途的数字签名。
RSA数字签名算法
(1)参数产生
①选择两个满足需要的大素数p和q,计算n=p×q, φ(n)= (p-1)×(q-1),其中φ(n)是n的欧拉函数值。
②选一个整数e, 满足1<e<φ(n),且gcd(φ(n),e)=1。通过d×e≡1modφ(n),计算出d。
③以{e,n}为公开密钥,{d,n}为秘密密钥。
(2)签名过程
假设签名者为Bob,则只有Bob知道秘密密钥{d, n}。
设需要签名的消息为m,则签名者Bob通过如下计算对m签名:s≡md mod n
(m, s)为对消息m的签名。Bob在公共媒体上宣称他发布了消息m,同时把对m的签名s置于消息后用于公众验证签名。
(3)验证过程。
公众在看到消息m和对其签名s后,利用Bob的公开验证密钥{e, n}对消息进行验证。公众计算:m≡se mod n是否成立,若成立,则Bob的签名有效。公众认为消息m的确是Bob所发布,且消息内容没有被篡改。也就是说,公众可以容易鉴别发布人发布的消息的完整性。
- RSA加密算法:公钥加密,私钥解密
- RSA签名算法:私钥签名,公钥验证
改进算法
公开的安全哈希函数为H(·),签名算法的参数选择如前所述,改进后签名方案的签名过程和验证过程如下:
(1)签名过程
设需要签名的消息为m,签名者Bob通过如下计算完成签名:s≡H(m)d mod n
(m, s)为对消息m的签名。
(2)验证过程
在收到消息m和签名s后,验证H(m)≡se mod n 是否成立。若成立,则签名有效。
通过使用哈希函数,有效防止了对签名的伪造,增强了签名算法的安全性,这也是在很多签名算法中使用哈希函数的原因之一。
第九章
认证协议
所谓协议(Protocol),就是两个或两个以上的参与者为完成某项特定的任务而采取的一系列步骤,这个定义包含3层含义:
第一,协议自始自终是有序的过程,每一步必须依次执行,在前一步没有完成之前,后面的步骤不可能被执行;
第二,协议至少需要两个参与者,一个人可以通过执行一系列的步骤来完成某项任务,但它构不成协议;
第三,通过执行协议必须能够完成某项任务,即使某些东西看似协议,但没有完成任何任务,也不能成为协议,只不过是浪费时间的空操作。
单向认证
需要第三方参与的单向认证
采用对称密码技术,第三方通常为KDC密钥分发中心,AS认证服务器
无需第三方参与的单向认证
双向认证
在双向认证过程中,通信双方需要互相认证各自的身份,然后交换会话密钥
第十章
密钥组织结构
使用n级密钥Kn通过算法 fn保护明文数据
主密钥K1是整个密钥管理系统的核心
最下层Kn叫工作密钥
密钥分类
- 基本密钥(初始密钥或用户密钥):可以在保留较长时间
- 会话秘钥(数据加密密钥):又叫工作密钥,一般是动态的,使用完后立即清除,一次一密
- 密钥加密密钥:二级密钥
- 主密钥
DH密钥交换协议
Diffie-Hellman算法的惟一目的就是使两个用户能安全地交换密钥,从而得到一个共享的会话密钥(秘密密钥)。需要注意的是该算法本身不能用于加、解密。
算法的安全性是基于Zp上的离散对数问题。
算法
(1)用户A选取一个大的随机数rA(0< rA <p-2 ),计算𝑆𝐴=𝑎𝑟𝐴 (𝑚𝑜𝑑𝑝) ,并且把 𝑆𝐴发送给用户B。
(2)用户B选取一个随机数 rB(0< rB <p-2 ) ,计算𝑆B=𝑎𝑟B (𝑚𝑜𝑑𝑝) 。并且把 𝑆B发送给用户A。
(3)用户A计算 K=SBrA (𝑚𝑜𝑑𝑝),用户B计算K’=SArB (𝑚𝑜𝑑𝑝)
K=arArB (𝑚𝑜𝑑𝑝)
计算时使用欧拉定理和模重复平方剩余定理简化计算