1 密码学分类2 攻击分类3 安全业务4 算法输入输出位数5 密钥分配管理6 密钥分配7 公钥分配8 三重DES9 杂凑的要求10 欧几里得11 本原根12勒让德符号13数字签名的执行方式14强单向杂凑15模运算性质16 同余式17 DES18 AES19 RSA20 MD521费尔马定理22 欧拉定理23 中国剩余定理24 四种工作模式1 密码学分类单钥体制双钥体制2 攻击分类唯密文攻击已知明文攻击选择明文攻击选择密文攻击3 安全业务认证业务保密业务完整性业务不可否认业务访问控制4 算法输入输出位数DES 64比特明文56比特密钥输出64比特密文AES 128 192 256 比特RSA 输入664比特MD5 输入512比特分组128比特输出5 密钥分配管理两个用户A和B获得共享密钥的方法包括:①密钥由A选取并通过物理手段发送给B。
②密钥由第三方选取并通过物理手段发送给A和B。
③如果A、B事先已有一密钥,则其中一方选取新密钥后,用已有的密钥加密新密钥并发送给另一方。
④如果A和B与第三方C分别有一保密信道,则C为A、B选取密钥后,分别在两个保密信道上发送给A、B6 密钥分配①A向KDC发出会话密钥请求②KDC为A的请求发出应答。
②A存储会话密钥,并向B转发EKB[KS‖IDA]。
④B用会话密钥KS加密另一个一次性随机数N2,并将加密结果发送给A。
⑤A以f(N2)作为对B的应答,其中f是对N2进行某种变换(例如加1)的函数,并将应答用会话密钥加密后发送给B。
7 公钥分配①用户A向公钥管理机构发送一个带时戳的消息,消息中有获取用户B的当前公钥的请求。
②管理机构对A的请求作出应答,应答由一个消息表示,该消息由管理机构用自己的秘密钥SKAU加密,因此A能用管理机构的公开钥解密,并使A相信这个消息的确是来源于管理机构。
③A用B的公开钥对一个消息加密后发往B,这个消息有两个数据项: 一是A的身份IDA,二是一个一次性随机数N1,用于惟一地标识这次业务。
④B以相同方式从管理机构获取A的公开钥(与步骤①、②类似)。
这时,A和B都已安全地得到了对方的公钥,所以可进行保密通信。
然而,他们也许还希望有以下两步,以认证对方。
⑤B用PKA对一个消息加密后发往A,该消息的数据项有A的一次性随机数N1和B产生的一个一次性随机数N2。
因为只有B能解密③的消息,所以A收到的消息中的N1可使其相信通信的另一方的确是B。
⑥A用B的公开钥对N2加密后返回给B,可使B相信通信的另一方的确是A。
8 三重DES三个密钥的三重DES密钥长度为168比特,加密方式为令K3=K2或K1=K2,则变为一重DES。
9 杂凑的要求①函数的输入可以是任意长。
②函数的输出是固定长。
③已知x,求H(x)较为容易,可用硬件或软件实现。
④已知h,求使得H(x)=h的x在计算上是不可行的,即满足单向性,称H(x)为单向杂凑函数。
⑤已知x,找出y(y≠x)使得H(y)=H(x)在计算上是不可行的。
称满足这一性质的杂凑函数为弱单向杂凑函数。
⑥找出任意两个不同的输入x、y,使得H(y)=H(x)在计算上是不可行的。
称满足这一性质的杂凑函数为强单向杂凑函数。
10 欧几里得1. 求最大公因子Euclid算法是基于下面一个基本结论:对任意非负整数a和正整数b,有gcd(a, b)=gcd(b, a mod b)。
2. 求乘法逆元如果gcd(a, b)=1 ,则b在mod a下有乘法逆元(不妨设b<a),即存在一x (x<a),使得bx≡1 mod a。
推广的Euclid算法先求出gcd(a, b),当gcd(a, b)=1时,则返回b的逆元。
11 本原根本原根的定义:素数p的原根定义:如果a是素数p的原根,则数a mod p, a^2 mod p, … , a^(p-1) mod p 是不同的并且包含1到p-1的整数的某种排列。
特别地,如果a是素数p的本原根,则a, a^2, …, a^(p-1)在 mod p下都不相同。
本原根的性质:若A为模n的本原根,则A,A的平方,A的3次方,……,A的φ(n)次方模n 的余数互不相同,而且构成一个模n的简化剩余系。
本原根的应用:应用本原根可以证明:若x的[φ(n)/2]次方模n余1,则x为模n的二次剩余;若x的[φ(n)/2]次方模n余-1,则x为模n的非二次剩余。
12勒让德符号13数字签名的执行方式1. 直接方式指数字签字的执行过程只有通信双方参与,并假定双方有共享的秘密钥或接收一方知道发方的公开钥。
直接方式的数字签字有一公共弱点,即方案的有效性取决于发方秘密钥的安全性。
如果发方想对已发出的消息予以否认,就可声称自己的秘密钥已丢失或被窃,因此自己的签字是他人伪造的。
可采取某些行政手段,虽然不能完全避免但可在某种程度上减弱这种威胁。
例如,要求每一被签字的消息都包含有一个时戳(日期和时间)并要求密钥丢失后立即向管理机构报告。
这种方式的数字签字还存在发方的秘密钥真的被偷的危险,例如敌手在时刻T偷得发方的秘密钥,然后可伪造一消息,用偷得的秘密钥为其签字并加上T以前的时刻作为时戳。
2. 具有仲裁方式的数字签字上述直接方式的数字签字所具有的缺陷都可通过使用仲裁者得以解决。
和直接方式的数字签字一样,具有仲裁方式的数字签字也有很多实现方案,这些方案都按以下方式运行:发方X对发往收方Y的消息签字后,将消息及其签字先发给仲裁者A,A对消息及其签字验证完后,再连同一个表示已通过验证的指令一起发往收方Y。
此时由于A的存在,X无法对自己发出的消息予以否认。
在这种方式中,仲裁者起着重要的作用并应取得所有用户的信任。
14强单向杂凑15模运算性质①[(a mod n)+(b mod n)] mod n = (a+b) mod n。
②[(a mod n)-(b mod n)] mod n = (a-b) mod n。
③[(a mod n)×(b mod n)] mod n = (a×b) mod n。
16 同余式如果(a mod n)=(b mod n),则称两整数a和b模n同余,记为a≡b mod n。
称与a模n同余的数的全体为a的同余类,记为[a],称a为这个同余类的表示元素。
注意:如果a≡0(mod n),则n|a。
同余有以下性质:①若n|(a-b),则a≡b mod n。
②(a mod n)≡(b mod n),则a≡b mod n。
③a≡b mod n, 则b≡a mod n。
③a≡b mod n, b≡c mod n, 则a≡c mod n17 DES1. 初始置换2 轮结构3. 密钥的产生4. 解密和Feistel密码一样,DES的解密和加密使用同一算法,但子密钥使用的顺序相反。
18AES1. 状态、种子密钥和轮数类似于明文分组和密文分组,算法的中间结果也须分组,称算法中间结果的分组为状态,所有的操作都在状态上进行。
状态可以用以字节为元素的矩阵阵列表示,该阵列有4行,列数记为Nb,Nb等于分组长度除以32。
种子密钥类似地用一个以字节为元素的矩阵阵列表示,该阵列有4行,列数记为Nk,Nk等于分组长度除以32。
2. 轮函数Rijndael的轮函数由4个不同的计算部件组成,分别是:•字节代换(ByteSub)•行移位(ShiftRow)•列混合(MixColumn)•密钥加(AddRoundKey)3. 密钥编排密钥编排指从种子密钥得到轮密钥的过程,它由密钥扩展和轮密钥选取两部分组成。
其基本原则如下:轮密钥的比特数等于分组长度乘以轮数加1;种子密钥被扩展成为扩展密钥;轮密钥从扩展密钥中取,其中第1轮轮密钥取扩展密钥的前Nb个字,第2轮轮密钥取接下来的Nb个字,如此下去。
4. 加密算法加密算法为顺序完成以下操作:初始的密钥加;(Nr-1)轮迭代;一个结尾轮19RSA密钥的产生1)选大素数p和q (各100~200位十进制数字),计算n=p×q , ϕ(n)=(p-1)(q-1)1)随机选一整数e,1≤e<ϕ(n),(ϕ(n), e)=1。
因而在模ϕ(n)下,e有逆元.1)计算d = e -1 (mod ϕ(n))1)取公钥为{e,n}。
秘密钥为d(p, q不再需要,可以销毁)加密加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log2n。
然后对每个明文分组m,作加密运算c = me mod n解密对密文分组c的解密运算为m = cd mod n20 MD5①对消息填充,使得其比特长在模512下为448,即填充后消息的长度为512的某一倍数减64,留出的64比特备第2步使用。
步骤①是必需的,即使消息长度已满足要求,仍需填充。
例如,消息长为448比特,则需填充512比特,使其长度变为960,因此填充的比特数大于等于1而小于等于512。
填充方式是固定的,即第1位为1,其后各位皆为0。
②附加消息的长度用步骤①留出的64比特以little-endian方式来表示消息被填充前的长度。
如果消息长度大于264,则以264为模数取模。
Little-endian方式是指按数据的最低有效字节(byte)(或最低有效位)优先的顺序存储数据,即将最低有效字节(或最低有效位)存于低地址字节(或位)。
相反的存储方式称为big-endian方式。
前两步执行完后,消息的长度为512的倍数(设为L倍),则可将消息表示为分组长为512的一系列分组Y0,Y1,…,YL-1,而每一分组又可表示为16个32比特长的字,这样消息中的总字数为N=L×16,因此消息又可按字表示为M[0, …, N-1]。
③对MD缓冲区初始化:算法使用128比特长的缓冲区以存储中间结果和最终杂凑值,缓冲区可表示为4个32比特长的寄存器(A,B,C,D),每个寄存器都以little-endian方式存储数据,其初值取为(以存储方式):A=01234567,B=89ABCDEF,C=FEDCBA98,D=76543210。
实际上为67452301,EFCDAB89,98BADCFE,10325476。
④以分组为单位对消息进行处理每一分组Yq(q=0,…,L-1)都经一压缩函数HMD5处理。
HMD5是算法的核心,其中又有4轮处理过程,如图6.6所示。
⑤输出消息的L个分组都被处理完后,最后一个HMD5的输出即为产生的消息摘要。
步骤③到步骤⑤的处理过程可总结如下:CV0=IV;CVq+1=CVq+RFI[Y q,RFH[Yq,RFG[Y q,RFF[Yq,CVq]]]]MD=CVL其中IV是步骤③所取的缓冲区ABCD的初值,Yq是消息的第q个512比特长的分组,L 是消息经过步骤①和步骤②处理后的分组数,CVq为处理消息的第q个分组时输入的链接变量(即前一个压缩函数的输出),RFx为使用基本逻辑函数x的轮函数,+为对应字的模232加法,MD为最终的杂凑值。