- 明文
- 加密算法
- 密钥
- 密文
- 解密算法
攻击类型 | 密码分析者已知的信息 |
---|---|
唯密文攻击 | 加密算法E、密文C |
已知明文攻击 | 加密算法E、密文C、用同一密钥加密的一个或多个明密文对 |
选择明文攻击 | 加密算法E、密文C、分析者选择的明文及对应的密文 |
选择密文攻击 | 加密算法E、密文C、分析者选择的一些密文及对应的明文 |
选择文本攻击 | 综合3、4 |
无论有多少可使用的密文,都不足以唯一地确定密文所对对应的明文;在一次一密中,密钥长度大于等于明文的长度,一个密钥仅使用一次
代替技术是把明文字母替换成其他字母、数字或符号的方法
置换只是明文的序列发生了变化
补充:
1. 加密算法的使用者应挑选具有以下标准的算法:
破译密码的代价超出密文信息的价值
破译密码的时间超出密文信息的有效生命期
2. 计算安全:攻击者具有有限的计算资源、此时密钥长度可以小于明文长度,并且可以长期使用
3. 一个好的加密算法至少要抵御前三种攻击方式
流密码每次加密数据流的一位或一个字节,古典的流密码密钥有Vigenre密码
分组密码是将一个明文分组作为整体加密并且通常得到的是与明文等长的密文分组
Fesitel交替使用代替和置换技术(实际上是混淆和扩散的实际应用)
扩散:使明文的统计特性消失在密文中(明文有一个比特的变化,将会引起50%的密文比特发生变化)
混淆:使密钥的统计特性消失在密文中(密钥有一个比特的变化,将会引起50%的密文比特发生变化)
Feistel结构的具体实现依赖于以下参数和特征
- 分组长度:分组越长意味着安全性更高,但是会降低加解密速度,安全性的提高源于更好的扩散性
- 密钥长度:密钥较长意味着安全性更高,但会降低加解密速度,安全性的提高源于更好的混淆性
- 迭代轮数:Feistel密码的本质在于单轮不能提供足够的安全性而多轮加密可取得很高的安全性,轮数典型值是16
- 子密钥产生算法:子密钥产生越复杂,密码分析越困难
- 轮函数F:轮函数越复杂,抗攻击能力越强
- DES是Feistel结构,AES不是Feistel结构
- 经典的Feistel结构:数据分组中的一半被用于修改数据的另一半,然后交换这两部分
输入:明文和密钥,明文长64位,密钥长64位(其中有效的长度是56位,其余8位用作奇偶校验位或随意设置)
迭代轮数:16轮迭代
雪崩效应:明文或密钥的微小改变造成密文的巨大改变
安全性:DES的安全性依赖于:密钥长度、迭代轮数、轮函数F的强度
输入:明文长度为16字节(128位),密钥长度为16、24、32字节(128、192、256位)
单轮AES变换:三个代替和一个置换:字节代替、行移位、列混淆、轮密钥加
加密轮数:10轮、12轮和14轮(对于不同的密钥长度)
各阶段作用:
- s盒包含了一个 G F ( 2 8 ) \ GF(2^8) GF(28)域上的逆元求解,最终效果是形成良好的雪崩效应
- 行移位构成了置换算法,加速雪崩效应
- 列混淆使一个输入与多个输出相关
- 轮密钥再异或,使得输出与下一轮输入一体化
- 三代替一置换的结构形成了良好的乘积结构,具有良好的混淆扩散效果
优点:安全性高,密钥长度足够长,经过实践的充分检验、兼容性好、国际组织和我国的银行机构都认可3-DES;
缺点:速度慢
模式 | 描述 | 典型应用 |
---|---|---|
ECB电子密码本 | 用相同的密钥分别对明文分组独立加密 | 单个数据的安全传输(如一个加密密钥) |
CBC密文分组链接 | 加密算法的输入是上一个密文组和下一个明文组的异或 | 面向分组的通用传输、认证 |
CFB密文反馈 | 一次处理s位,上一块密文作为加密算法的输入,产生的伪随机数输出与明文异或作为下一单元的密文 | 面向数据流的通用传输、认证 |
OFB输出反馈 | 与CFB类似,只是加密算法的输入是上一次加密的输出,且使用整个分组 | 噪声信道上的数据流传输(如卫星通信) |
CTR计数器 | 每个明文分组都与一个经过加密计数器相异或,对每个后续分组计数器递增 | 面向分组的通用数据传输、用于高速需求 |
用对称密码进行密钥分配需要①通行双方已经共享一个密钥,该密钥已经通过某种方法分配给通信双方;②利用密钥分配中心
公钥算法依赖于一个加密密钥和一个与之不相关的不同的解密密钥,这些算法都满足:
①仅根据密码算法和加密密钥来确定解密密钥在计算上是不可行的
②两个密钥之间的任意一个都可以用来加密或解密
公钥密码体制的六个组成部分:明文、加密算法、公钥和私钥、密文、解密算法
算法 | 加/解密 | 数字签名 | 密钥交换 |
---|---|---|---|
RSA | 是 | 是 | 是 |
椭圆曲线 | 是 | 是 | 是 |
Diffie-Hellman | 否 | 否 | 是 |
DSS | 否 | 是 | 否 |
传统密码 | 公钥密码 |
---|---|
一般要求:①加密和解密使用相同的密钥和相同的算法②收发双方必须共享密钥 | 一般要求:①同一算法用于加密和解密,但加解密使用不同的密钥②发送方拥有加密或解密密钥,接收方有另一密钥 |
安全性要求:①密钥必须是保密的②若没有其他信息,则解密消息是不可行的③若知道算法和若干密文不足以确定密钥 | 安全性要求:①两个密钥之一必须是保密的②若没有其他信息,解密消息是不可行的③知道算法和其中一个密钥及若干密文不足以确定另一密钥 |
加密和解密过程:
C = M e m o d n \ C=M^e\ mod\ n C=Me mod n
C是密文,M是明文,e是公钥,n是一个随机大整数、
M = C d m o d n = ( M e ) d m o d n = M e d m o d n \ M=C^d\ mod\ n=(M^e)^d\ mod\ n=M^{ed}\ mod\ n M=Cd mod n=(Me)d mod n=Med mod n
其中,发送方已知e,n接收方已知n,d,因此
公钥为 P U = { e , n } \ PU=\{e,n\} PU={e,n},私钥为 P R = { d , n } \ PR=\{d,n\} PR={d,n}
证明过程
即证明 M ≡ C d m o d N \ M\equiv C^d\ mod\ N M≡Cd mod N
∵ C ≡ M e m o d N , d ≡ e − 1 m o d ϕ ( N ) \ ∵C\equiv M^e\ mod\ N,d\equiv e^{-1}\ mod\ \phi(N) ∵C≡Me mod N,d≡e−1 mod ϕ(N)
∴ 即 证 明 M e d = M 1 m o d ϕ ( N ) = M k ϕ ( N ) + 1 ≡ M m o d N \ ∴即证明M^{ed}=M^{1\ mod\ \phi(N)}=M^{k\phi(N)+1}\equiv M\ mod \ N ∴即证明Med=M1 mod ϕ(N)=Mkϕ(N)+1≡M mod N
当 ( M , N ) = 1 时 , 显 然 M k ϕ ( N ) = 1 m o d N , 此 时 M k ϕ ( N ) + 1 ≡ M m o d N 成 立 \ 当(M,N)=1时,显然M^{k\phi(N)}=1\ mod \ N,此时M^{k\phi(N)+1}\equiv M\ mod \ N成立 当(M,N)=1时,显然Mkϕ(N)=1 mod N,此时Mkϕ(N)+1≡M mod N成立
当 ( M , N ) ≠ 1 时 , ∵ N = p q , 设 M = t p , 则 ( M , q ) = 1 \ 当(M,N)≠1时,∵N=pq,设M=tp,则(M,q)=1 当(M,N)̸=1时,∵N=pq,设M=tp,则(M,q)=1
∵ M ϕ ( N ) = M ϕ ( p ) ϕ ( q ) ≡ 1 m o d q \ ∵M^{\phi(N)}=M^{\phi(p)\phi(q)}\equiv1\ mod\ q ∵Mϕ(N)=Mϕ(p)ϕ(q)≡1 mod q
∴ M ϕ ( N ) = r q + 1 , M ϕ ( N ) + 1 = t p ( r q + 1 ) = r t p q + t p = r t N + M ≡ M m o d N \ ∴M^{\phi(N)}=rq+1,M^{\phi(N)+1}=tp(rq+1)=rtpq+tp=rtN+M\equiv M\ mod\ N ∴Mϕ(N)=rq+1,Mϕ(N)+1=tp(rq+1)=rtpq+tp=rtN+M≡M mod N
综上,得证.
基于离散对数计算的困难性
Alice和Bob共享一个素数q,以及整数α(αAlice产生一个私钥 X A , X A < q \ X_A,X_A<q XA,XA<q
Alice计算公钥 Y A = α X A m o d q \ Y_A=α^{X_A}\ mod\ q YA=αXA mod q
Alice把公钥发送给Bob
Alice收到Bob的公钥,计算共享密钥 K = ( Y B ) X A m o d q \ K=(Y_B)^{X_A}\ mod\ q K=(YB)XA mod q
Bob的操作类似
中间人Darth拦截Alice向Bob发送的公钥,将自己的公钥发送给Alice,建立连接,伪造了Bob的身份,同Bob也类似,原因在于密钥交换协议没有对通信的参与方进行身份认证,可以通过使用数字签名和公钥证书来克服
与Diffie-Hellman一样,用户共同选择一个素数q,α是q的原根
用户A生成密钥的过程如下:
①随机生成整数 X A 使 得 1 < X A < q − 1 \ X_A使得1<X_A<q-1 XA使得1<XA<q−1
②计算 Y A = α X A m o d q \ Y_A=α^{X_A}\ mod\ q YA=αXA mod q
③Ade私钥是 X A , 公 钥 是 { q , α , Y A } \ X_A,公钥是\{q,α,Y_A\} XA,公钥是{q,α,YA}
其他任意用户可以通过A的公钥加密信息:
①将信息表示成为一个整数M,其中1≤M≤q-1,以分组序列方式发送信息,每个分块的长度不小于q
②选择任意整数k,使得1≤k≤q-1
③计算一次密钥 K = ( Y A ) k m o d q \ K=(Y_A)^k\ mod\ q K=(YA)k mod q
④将M加密成密文对 ( C 1 , C 2 ) , 其 中 C 1 = α k m o d q ; C 2 = K M m o d q \ (C_1,C_2),其中C_1=α^k\ mod\ q;C_2=KM\ mod\ q (C1,C2),其中C1=αk mod q;C2=KM mod q
用户A恢复明文:
①通过计算得到: K = ( C 1 ) X A m o d q \ K=(C_1)^{X_A}\ mod\ q K=(C1)XA mod q,恢复密钥
②计算 M = ( C 2 K − 1 ) m o d q \ M=(C_2K^{-1})\ mod\ q M=(C2K−1) mod q
消息认证
消息认证是用来验证消息完整性的一种机制或服务,当hash函数用于提供消息认证功能时,hash函数的值通常称为消息摘要
消息中使用hash函数的本质:发送者根据待发送的消息使用该函数计算一组hash值,然后将其同消息一起发送。接受者收到消息后对消息执行同样的hash计算,将计算结果与收到的hash值进行对比,如果不匹配,则接受者断定消息遭受了篡改
Hash码可以通过如下各种不同的方式提供消息认证
- 使用对称密码算法E加密消息和hash码。由于只有A,B共享密钥K,所以提供了保密性
- 使用对称密码算法E但只对hash码进行加密,对于无需保密性的应用,减少了解密操作的负担
- 不适用加密算法,仅使用hash函数也能实现消息认证,该方案假设A,B共享一个秘密值S
- 通过将整个消息和hash加密,在上一个方案的基础上提供保密性
密码学Hash函数H的安全性要求
需求 | 描述 |
---|---|
输入长度可变 | H可应用于任意大小的数据块 |
输出长度固定 | H产生定长的输出 |
效率 | 对任意给定的x,计算H(x)比较容易,用软硬件均可实现 |
抗原像攻击(单向性) | 对任意hash码h,找到满足H(y)=h的y在计算上不可行 |
抗第二原像攻击(抗弱碰撞性) | 对任何的分块x,找到满足y≠x但H(x)=H(y)的y在计算上不可行 |
抗强碰撞性 | 找到任何满足H(x)=H(y)的偶对(x,y)在计算上不可行 |
伪随机性 | H的输出满足伪随机性测试标准 |
抗原像攻击 | 抗弱碰撞攻击 | 抗强碰撞攻击 | |
---|---|---|---|
Hash+数字签名 | 是 | 是 | 是* |
入侵检测和病毒检测 | 是 | ||
Hash+对称加密 | |||
单向口令文件 | 是 | ||
MAC | 是 | 是 | 是* |
*要求攻击者能够实现选择消息攻击
安全hash算法
SHA参数比较(简略)
消息长度 | 字长度 | 消息摘要长度 | |
---|---|---|---|
SHA-1 | <2^64 | 32 | 160 |
SHA-512 | <2^128 | 64 | 512 |
- 附加填充位
填充消息使其长度模1024与896同余,即使消息长度已经满足要求,仍然需要进行填充原因是最后填充的字节信息包含了填充位数信息- 附加长度
在消息后附加一个128位的块,包含了填充前消息的长度- 初始化Hash缓冲区
hash函数的中间结果和最终结果均保存于512位的缓冲区中,缓冲区用8个64位寄存器表示- 以1024位的分组(128字节)为单位处理信息
算法的核心是具有80轮运算的模块- 输出
处理完毕后,从第n轮输出512位摘要
*SHA-3
(1) 消息泄露
(2) 传输分析
(3) 伪装
(4) 内容修改
(5) 顺序修改
(6) 计时修改
(7) 发送方否认
(8) 接受放否认
对(1),(2),要求保密性
对(3)~(6),要求消息认证或数字签名
对(7),要求数字签名
对(8),要求数字签名及抵抗此种攻击的协议
任何消息认证或数字签名机制在功能上都有两层,下层是认证或签名函数,上层是与之匹配的协议
函数分类
将任意长的消息映射为定长的Hash值的函数,以该值作为认证符
对整个消息进行加密后的密文作为认证符
它是消息和密钥的函数,它产生定长的值,该值作为认证符附在消息后
MAC也称密码校验和,由T=MAC(K,M)产生,其中M是一个变长消息,K是收发双方共享的密钥,MAC(K,M)是一个定长的认证符
消息认证码中,消息的每个部分“均匀”地影响结果,因此很难差分攻击
- 若攻击者已知M和MAC(K,M),则他构造MAC(K,M’)=MAC(K,M)在计算上是不可行的
- MAC(K,M)应是均匀分布的
- 设M’是M的一个已知变换,要求Pr[MAC(K,M)=MAC(K,M’)]=2^-n
对给定的消息x,攻击者可以通过攻击密钥空间和攻击MAC值来找出其MAC
对MAC的算法的密码分析攻击同样是利用算法得到某种性质而不是穷举攻击来进行的,理想的MAC算法要求密码分析攻击的代价大于或等于穷举攻击
- 一般像MD5和SHA这样的密码学hash函数,其软件执行速度比诸如DES这样的分组密码要快
- 有许多共享的密码学hash函数代码库
- 不必修改而直接使用现有的hash函数,特别的,很容易免费得到软件上执行速度较快的hash函数及其代码
- 如果找到更快或更安全的hash函数,应很容易替代原来嵌入的hash函数
- 应保持hash函数原有的性能,不过分降低其性能
- 对密钥的使用和处理应该相对简单
- 如果已知嵌入的hash函数的强度,则完全可以知道认证机制抗密码分析的强度
成功攻击HMAC概率等价于对嵌入的hash函数的以下攻击之一:
采用DES运算的CBC(密文块连接方式)
其初始向量为0,需要认证的数据分成连续的64位的分组,最后一组不足64位则补齐。
对消息M有四种同时提供认证和加密的通用方案,安全性还与消息结构有关
数字签名是共要密码体制发展过程中重要的概念之一,它提供其他方法难以实现的安全性
数字签名必须具有以下特征:
- 必须能验证签名者、签名日期和时间
- 必须能认证被签名的戏消息内容
- 签名应能有第三方仲裁,以解决争执
文献[GOLD88]给出了危害程度从高到低排列的攻击类型
- 唯密钥攻击
- 已知消息攻击
- 一般选择消息攻击
- 定向选择消息攻击
- 适应性选择消息攻击
文献[GOLD88]给出了攻击成功的签名方案
- 完全破译
- 通用伪造
- 选择伪造
- 存在性伪造
数字签名需求
- 必须是与消息相关的二进制字符串
- 必须使用发送方某些独有的信息,以防伪造和否分
- 产生数字签名比较容易
- 识别和验证签名比较容易
- 伪造数字签名在计算上不可行,无论是从给定的数字签名伪造消息,还是从给定的消息伪造数字签名
- 保存数字签名的副本是可行的
直接数字签名
指只涉及通信双方的数字签名方案
用共享的密钥对整个消息和签名进行加密,以获得保密性
注意这里是先签名后加密
,这样在发生争执时,第三方可以查看消息及其签名,否则第三方必须知道密钥才能读取原始消息
此方案的弱点是有效性依赖于私钥的安全性,否则发送方可以否认
对于素数q,如果α是q的原根,则有
a , a 2 , . . . , a q − 1 ( m o d q ) \ a,a^{2},...,a^{q-1}\ (mod\ q) a,a2,...,aq−1 (mod q)
的值各不相同,如果α是q的原根
,进一步有
(1)对于任意整数m, a m ≡ 1 ( m o d q ) \ a^{m}\equiv1(mod\ q) am≡1(mod q)当且仅当 m ≡ 0 ( m o d q − 1 ) \ m\equiv0(mod\ q-1) m≡0(mod q−1)
(2)对于任意整数i,j, α i ≡ α j ( m o d q ) \ \alpha^{i}\equiv\alpha^{j}(mod\ q) αi≡αj(mod q)当且仅当 i ≡ j ( m o d q − 1 ) \ i\equiv j(mod\ q-1) i≡j(mod q−1)
(1)生产随机整数 X A \ X_{A} XA,使得 1 < X A < q − 1 \ 1<X_{A}<q-1 1<XA<q−1
(2)计算 Y A = α X A ( m o d q ) \ Y_{A}=\alpha^{X_{A}}(mod\ q) YA=αXA(mod q)
(3)A的私钥是 X A \ X_{A} XA,公钥是 { q , α , Y A \{q,α, Y_{A} {q,α,YA}
(1)选择随机整数 K \ K K,使得其满足1≤K≤q-1以及 g c d ( K , q − 1 ) = 1 \ gcd(K,q-1)=1 gcd(K,q−1)=1,事实上K是瞬时私钥
(2)计算 S 1 = α K ( m o d q ) , S 1 \ S_{1}=α^{K}(mod\ q),\ S_{1} S1=αK(mod q), S1是瞬时公钥
(3)计算 K − 1 ( m o d q − 1 ) \ K^{-1}(mod\ q-1) K−1(mod q−1),即计算K模q-1的逆元
(4)计算 S 2 = K − 1 ( m − X A S 1 ) ( m o d q − 1 ) \ S_{2}=K^{-1}(m-X_{A}S_{1})(mod q-1) S2=K−1(m−XAS1)(modq−1)
(5)签名包括 ( S 1 , S 2 ) \ (S_{1},S{2}) (S1,S2)对
(1)计算 V 1 = α m ( m o d q ) \ V_{1}=α^{m}(mod\ q) V1=αm(mod q)
(2)计算 V 2 = Y A S 1 S 1 S 2 ( m o d q ) \ V_{2}=Y_{A}^{S_{1}}S_{1}^{S_{2}}(mod\ q) V2=YAS1S1S2(mod q)
(3)如果 V 1 = V 2 \ V_{1}=V_{2} V1=V2则签名合法
(4)例子P293
*ElGamal数字签名方案对q的长度没有严格要求,只要小于1024即可,因此可以构建安全性较高的算法
同ElGamal数字签名方案相同,SChnorr数字签名方案也是基于离散对数,其中p是1024位整数,q是160位整数
(1)择素数p和q,使得q是p-1的素因子
(2)选择整数α,使得 α q = 1 ( m o d q ) \ α^{q}=1(mod\ q) αq=1(mod q),值α、p和q构成全局公钥参数,
在用户组内的每个用户都可以选用此值
(3)选择随机整数s,0(4)计算 v = α − s ( m o d p ) \ v=α^{-s}(mod\ p) v=α−s(mod p),作为用户的公钥
(1)选择随机整数r,0
x = α r ( m o d p ) \ x=α^{r}(mod\ p) x=αr(mod p),该过程与待签名消息M无关,可以在预处理过程计算
(2)将x附在消息后面一起计算Hash值e, e = H ( M ∣ ∣ x ) \ e=H(M||x) e=H(M∣∣x)
(3)计算 y = ( r + s e ) ( m o d q ) \ y=(r+se)(mod\ q) y=(r+se)(mod q),签名包括(e,y)对
(1)计算 x ′ = α y v e ( m o d p ) \ x'=α^{y}v^{e}(mod\ p) x′=αyve(mod p)
(2)验证是否 e = H ( M ∣ ∣ x ) \ e=H(M||x) e=H(M∣∣x)
DSA使用安全Hash算法(SHA)
DSA使用是只提供数字签名功能的算法,与RSA不同,DSA虽然是一种公钥密码方案,但是并不能用于加密或密钥交换
*k是随机数,即瞬时私钥,使相同的明文产生不同的密文,PUG是公开参数,PRa是发送方的私钥,PUa是发送方的公钥最终比较r’与r是否相等
p为素数,其中 2 L − 1 < p < 2 L , 512 < L < 1024 \ 2^{L-1}<p<2^{L},512<L<1024 2L−1<p<2L,512<L<1024,且L是64的倍数
q为(p-1)的素因子,其中 2 N − 1 < q < 2 N \ 2^{N-1}<q<2^{N} 2N−1<q<2N,即位长为N位
g = h ( p − 1 ) / q ( m o d p ) \ g=h(p-1)/q(mod\ p) g=h(p−1)/q(mod p),其中h是满足1h ( p − 1 ) / q ( m o d p ) \ h^{(p-1)/q}(mod\ p) h(p−1)/q(mod p)>1的任何整数
x为随机或伪随机整数且0
y = g x ( m o d p ) \ y=g^{x}(mod\ p) y=gx(mod p)
k为随机或伪随机整数且0
r = ( g k ( m o d p ) ( ) m o d q ) \ r=(g^{k}(mod\ p)()mod\ q) r=(gk(mod p)()mod q)
s = [ k − 1 ( H ( M ) + x r ) ] m o d q \ s=[k^{-1}(H(M)+xr)]mod\ q s=[k−1(H(M)+xr)]mod q
签名=(r,s)
w = ( s ′ ) − 1 ( m o d q ) \ w=(s')^{-1}(mod\ q) w=(s′)−1(mod q)
u 1 = [ H ( M ′ ) w ] m o d q \ u_{1}=[H(M')w]mod\ q u1=[H(M′)w]mod q
u 2 = ( r ) ′ w ( m o d q ) \ u_{2}=(r)'w(mod\ q) u2=(r)′w(mod q)
v = [ ( g u 1 y u 2 ) m o d p ] m o d q \ v=[(g^{u_{1}}y^{u_{2}})mod\ p]mod\ q v=[(gu1yu2)mod p]mod q
检验v=r’
通信双方必须使用相同的密钥并且该密钥要对其他人保密
- A选择一个密钥后以物理的方式传递给B
- 第三方选择密钥后物理地传递给A和B
- 如果A和B先前或者最近使用过一个密钥,则一方可以用旧密钥加密新密钥后发送给另一方
- 如果A和B到第三方C有加密链接,C可以在加密链接上传送密钥给A和B
@Nickname4th 2018.12.25 HainuUniversity