COMP3357 Cryptography (P1): Private-key Encryption, MAC & Hash Functions
课程内容笔记,自用,不涉及任何 assignment,exam 答案
Notes for self use, not included any assignments or exams
Course Overview
课程目标:了解现代加密学的基本原理,概念以及模型,基础的量子加密
-
Basic Principles:confidentiality (私密性),integrity (完整性), authentication (源认证)
-
Cryptographic Primitives:symmetric key encryption (对称加密),public key encryption (公钥加密),message authentication code (MAC, 消息认证码),hash functions (哈希函数),digital signatures (数字签名)
-
Basics of Quantum Cryptography:quantum key distribution, random number distribution
对称密钥加密
私钥加密 (private-key cryptography),又称 对称密钥加密 (symmetric-key cryptography), 单钥加密 (single-key cryptography), 共享密钥加密 (shared-key cryptography)
-
要求 The Task:两个诚实的用户 (honest users,与 恶意用户 malicious users 相对) Alice 与 Bob 想 communicate privately over an insecure communication chanel (例如:Internet 或 WLAN,不安全信道意味着敌手 adversary 能够窃听频道中传输的所有信息)
-
威胁 The Threat:恶意敌手 Eve 拥有频道访问权限,她能够窃听频道中传输的所有信息
-
加密目标 The Goal:Eve 无法理解 (interpret & understand) Alice 与 Bob 交流的信息
私钥 (对称密钥) 加密提供的解决办法:
- Alice 与 Bob 在某个 Secure channel (Eve 无法进行窃听) 上设立一个随机密钥 \(k\)
- Alice 使用该密钥 \(k\) 将明文 (plaintext) \(m\) 加密成 密文 (ciphertext) \(c\)
- Alice 将密文 \(c\) 通过之前的不安全信道传输给 Bob (在此过程中,Eve 只能获得于她而言无意义的密文信息)
- Bob 使用密钥 \(k\) 对密文解密得到明文
私钥加密除了可用于 在不安全信道上交流 (Communicate over an Insecure Channel) 之外,还可用于 数据的安全储存 (Secure Storage of Data)
此时将 Alice 与 Bob 视作不同时间段上的同一诚实用户,数据储存的设备视作不安全信道即可
私钥加密的正式定义:
私钥加密的正确性 (correctness):即 \(Dec_k(Enc_k(m))=m\)
由此可以看出加密函数可能是一个随机函数 (即,对于确定的明文 \(m\) 与密钥 \(k\),多次通过加密函数 \(Enc\) 加密后的密文有可能是不同的),而解密函数是一个确定函数
初探加密方法的安全性定义:关于柯克霍夫原则
- 柯克霍夫原则 Kerckhoff's principle
即使密码系统的任何细节已为人悉知,只要密钥未泄漏,它也应是安全的
- 科克霍夫原则是决定了算法公开、算法通用 (standardised encryption schemes)、加速密码算法互通的鼻祖原则
该原则也使得对密钥的储存和传输 (storage & transmission) 变得尤为重要
移位加密 (凯撒加密) 与 充足密钥空间原则
古老的对英语英语文本的加密方法,对明文中的每个字母移动 \(k\) 位进行加密
易证其正确性 (correctness)
由于 密钥空间 (key space) 太小,使用暴力 (brute-force) 枚举所有可能的 密钥 \(k\) 即可破解 (\(k \in [0, 25]\))
这就引出了加密方法的 充足密钥空间原则 (Sufficient Key Space Principle):也就是说,一个安全的加密方法应该有足够大的密钥空间以抵御暴力穷举密钥的破解法
Cryptanalysis 密码分析
- Classical attack (经典密码分析):Brute-Force & mathematical analysis
- Implementation attack (实施攻击):通过攻击特定的设施获取密钥,通常使用逆向工程 (reverse engineering)
- Social Engineering (社会工程学)
单字母替换加密 Mono-Alphabetic Substitutional Cipher
- 单字母替换加密中的密钥 \(k\) 是由随机的 \(26\) 字母排列 (arbitrary permutation of the alphabet) 所定义的
在单字母替换加密中,明文中的每一个字母在加密后都会被另一个固定的字母替代,替代的规则由密钥 \(k\) 代表的随机字母排列决定,而不是通过移位产生的
因此,密钥空间大小为 \(26! \approx 2^{88}\),密钥长度为 \(\lceil{log_2{(26!)}} \rceil\)。足够大的密钥空间使得暴力穷举密钥的方法对单字母替换加密无效 (infeasible) - 密钥空间大小-密钥长度与暴力穷举攻击所需时间的关系图
- 单字母替换加密的破解:频率攻击 (Frequency Attack)
如果取得了足够多的密文,通过统计每个字母出现的频率,我们就可以猜出密码中的一个字母对应于明码中哪个字母 (需要对语言中字母出现频率的先验知识)
类似的,利用语言的性质与模式 (properties and patterns of language) 进行破译也属于频率攻击
威胁模型 Threat Models
-
Ciphertext-only attack 唯密文攻击
敌手观察到若干条密文并尝试获得关于其明文的信息 -
Known-plaintext attack 已知明文攻击
敌手以某种方式得到了若干条使用同一密钥进行加密的 明文-密文对 (plaintext-ciphertext m/c pairs)。在此基础上,敌手尝试获得其他用同一密钥进行加密的密文的明文信息
已知明文攻击实例:某个机密文件若干年后公开,之前观察过密文的敌手即可获得明文-密文对。移位加密和替换加密都能够很轻易的用已知明文攻击进行破解 -
Chosen-plaintext attack (CPA) 选择明文攻击
敌手可以选择若干明文 \(m_i\),并且以某种方式得到对应的明文-密文对 \(m_i/c_i\)
选择明文攻击实例:敌手给 Alice 发送了一封邮件,Alice 使用私人密钥 \(k\) 对该邮件进行了加密。敌手以某种方式取得了该封加密后的邮件 -
Chosen-ciphertext attack (CCA) 选择密文攻击
敌手可以选择若干密文 \(c_i\),并且以某种方式得到解密后的明文 \(Dec_k(c_i)\)
选择密文攻击实例:Alice 的电脑能对密文进行解密,敌手在 Alice 外出吃午饭的时候获得了电脑的使用权限
CCA 与 CPA 看起来相似,但实际上有能抵御 CPA 而不能抵御 CCA 的加密系统 (例 El Gamal 加密系统)
REVIEW: Basic Probablilty Theory
随机变量,概率分布,条件概率,全概率公式,贝叶斯定理
-
Probability distributions of the Key and Message
-
Probability distribution of Ciphertext
随机变量 \(K\) 和 \(M\) 是独立的:\(K\) 由加密算法决定,\(M\) 则与 Alice 选择发送的信息有关
我们认为 \(Gen\) 由密钥空间中随机独立的选取密钥 \(k\)
-
单钥加密公式 Private-key Encryption Formulae
在已知密文为 \(c\) 时,明文为 \(m\) 的概率:
\(Pr[M=m|C=c]=Pr[C=c|M=m]\frac{Pr[M=m]}{Pr[C=c]}\) (贝叶斯公式)
其中,\(Pr[C=c|M=m]=\sum \limits_{k: Enc_k(m)=c} Pr[K=k]\) (信息与密钥的概率分布)
\(Pr[C=c]=\sum \limits_{m'}Pr[C=c|M=m']Pr[M=m']\) (全概率公式,计算出任意特定密文的概率)
Perfect Secrecy 完美加密
-
威胁模型 Threat Model
敌手 Adversary 知道密钥函数 \(Gen\),加密函数 \(Enc\),解密函数 \(Dec\) 以及明文的概率分布 \(M\) (特别注意,敌手是知道明文的概率分布的,这里可能与先入为主的窃听&解密印象不同)
敌手被动窃听通讯并且得到了一条 (只有一条,single) 密文
敌手并不知道 Alice 与 Bob 之间的密钥 -
完美加密:定义1
即,\(m\) 的 先验概率 (apriori probability) 等于在观察某条密文后,\(m\) 的 后验概率 (aposteriori probability)
也就是,密文不会向敌手泄露任何额外的关于明文的信息 (additional information about plaintext) -
等价定义2
证明见 pdf:很好证,带上已知条件计算 \(Pr[M=m|C=c]\) 即可发现等于 \(Pr[M=m]\) 从而得证 -
等价定义3:Perfect indistinguishability 完美不可分辨性
完美不可分辨性的定义借助了一个实验:在此实验中,一个被动的敌手获得了单条密文,并尝试推测该条密文对应的明文
- 敌手选择两条明文 \(m_0, m_1 \in M\)
- 密钥函数 \(Gen\) 生成密钥 \(k\),对应的加密函数 \(Enc\) 根据该密钥对随机对敌手选择的两条明文中的一条 \(m_b, b\in \{0, 1\}\)进行加密,敌手获得该加密后的密文 \(c_b\)
- 敌手推测密文 \(c_b\) 对应的是原明文中的第 \(b' (b' \in \{0, 1\})\) 条
- 若敌手推测正确,则该实验的结果为 \(1\),反之为 \(0\)
结果是 \(\frac{1}{2}\) 的原因:敌手随机猜测正确的概率也是 \(\frac{1}{2}\)
若敌手做到正确的概率超过 \(\frac{1}{2}\) 则该加密方案不是完美不可分辨 (即完美加密) 的
One-Time Pad Encryption Scheme 一次性密码本加密
-
Definition
- 在一次性密码本加密中,明文空间 \(M\),密文空间 \(C\),密钥空间 \(K\) 的大小是相同的 (\(|M|=|C|=|K|\))
(一般来说,在任何加密方案中密文空间的大小都要大于明文空间的大小 \(|C|>|M|\),否则一个密文会对应多个明文,无法被解密) - 一次性密码本的加密函数是一个 确定函数 (deterministic Algorithm),即,确定的明文 \(m\) 与密钥 \(k\) 产生的密文 \(c\) 是唯一的 (即 \(m \oplus k\))
- 在一次性密码本加密中,明文空间 \(M\),密文空间 \(C\),密钥空间 \(K\) 的大小是相同的 (\(|M|=|C|=|K|\))
-
正确性
一次性密码本加密是正确的:
\(Dec_k(Enc_k(m))=Dec_k(m \oplus k)=k \oplus m \oplus k =m\) -
一次性密码本加密是完美加密
对于确定的明文空间概率分布 \(M\),随机确定明文 \(m\) 与密文 \(c\)
明文,密文,密钥的长度为 \(l\)
\(P[M=m|C=c]=\frac{P[C=c|M=m]P[M=m]}{P[C=c]}\)
\(P[C=c|M=m]=P[k=m\oplus c]=2^{-l}\)
\(P[C=c]=\sum_{m' \in M}P[C=c|M=m']P[M=m']=\sum_{m'\in M}Pr[k=c \oplus m']P[M=m']=2^{-l}\sum_{m'\in M}P[M=m']=2^{-l}\)
\(\therefore P[M=m|C=c]=\frac{2^{-l}Pr[M=m]}{2^{-l}}=P[M=m]\) -
思考 \(1\)
这个公式我们很熟悉:\(P[C=c|M=m]=\sum_{Enc_k(m)=c} P[K=k]\)
那为何 \(P[M=m|C=c]\) 需要使用贝叶斯公式计算,而不能采用相同的逻辑?
上图的 (1)(2) 两公式是等价的,同样也是错误的:举一个简单的例子
通过 (1)(2) 两公式得到的结果显然与敌手的先验知识不符
出现这样的结果,原因在于某个密文 \(c\) 可以有多对明文-密钥对 \((m,k)\) 产生
明文空间 \(M\) 与密钥空间 \(K\) 的概率分布决定了密文空间 \(C\) 的分布,反之错误 (上文提到的两公式便是由 \(C\) 与 \(K\) 尝试反推 \(M\) 的分布) -
思考 \(2\)
一次性密码本加密可以完全抵挡暴力穷举的 BruteForce 攻击————即使敌手算力与时间无限,只要未获得密钥,也无法攻破一次性密码本加密
当密钥为全 \(0\) 串时,密文与原文一致:某人为了防止这种情况的发生,修改了密钥生成函数 \(Gen\),使其不会生成全 \(0\) 的密钥。这种做法对吗?理论上来说,是错误的:这样做将会破坏一次性密码本的完美加密性,使得敌手可以通过密文得到关于明文的信息
-
思考 \(3\):一次性密码本的安全性在于一次性
One-Time Pad is secure only if the key is used exactly once.
若同一个密钥 \(k\) 加密了两组明文 \(m_1\),\(m_2\),那么窃取到密文 \(c_1\), \(c_2\) 的敌手可以得到关于明文的信息:
\(c_1 \oplus c_2=m_1\oplus k \oplus m_2 \oplus k=m_1 \oplus m_2\)
-
思考 \(4\):一次性密码本加密不提供消息认证 message authentication
若敌手得到了部分的明文,其可结合密文得到密钥片段
利用该密钥片段,敌手可篡改其他使用该密钥的明文片段
这进一步说明了一次性密码本加密中的密钥只能使用一次
一次性密码本加密的最优性 (Optimality) 与密码学中的香农定理
-
Optimality of the One-Time Pad
一次性密码本虽然具有完美加密性,但是其最大的短板在于密钥的长度必须大于等于明文的长度
那么存不存在这样一种加密算法,其具有完美加密性,但对密钥的长度没有限制?
很可惜,没有:可以证明,具有完美加密性的算法,其密钥空间的大小 \(|K|\) 必定 \(geq\) 其明文空间的大小 \(|M|\)
证明如下:
-
密码学中的香农定理 Shannon's Theorem
证明见 pdf,多看几遍
计算安全 Computational Security - Relaxation of Perfect Secrecy
完美加密有固有的短板 (inherent drawbacks,即要求密钥空间大于等于明文空间),且实际生活中我们并不需要如此高强度的加密
从这个信息论上的概念出发,我们放宽限制 (relaxation),使得我们能在克服完美加密的诸多不便的同时,保证信息安全
这个概念就是计算安全 Computational Security
相比于完美加密,计算安全放宽了两个限制
- 敌手算力有限 (bounded computational power),攻击时间有限
- 加密能在极小 (tiny) 的概率下被攻破
计算安全的定义分为具体定义 (Concrete Version) 与渐进定义 (Asymptotic Version)
具体定义太过局限,因此我们主要介绍渐进定义
计算安全的渐进定义 Computational Security : Asymptotic Version
-
安全参数 Security Parameter \(n\)
对每一种加密策略,我们引入安全参数 \(n\)
\(n\) 一般对应密钥的长度
根据复杂度理论 (complexity theory),我们可以用安全参数 \(n\) 表示加密方 (honest parties) 加密的实现时间,敌手的攻击时间 (\(T(n)\)) 以及敌手攻破加密方案的概率 \((P(n))\) -
“高效”敌手:采用概率多项式时间算法攻击 Efficient (Probabilistic Polynomial Time, PPT) Adversary
引用自 这里,真的解释的很清楚
关于 Probabilistic (Randomized):意味着敌手拥有真随机数源,可获得足够长的均匀 \(0/1\) 比特串
关于 Polynomial Time:意味着算法复杂度是多项式级别的
关于高效 Efficient:在计算理论中多项式复杂度拥有特殊地位,其普遍被认为是高效的。扩展 Church-Turing 命题佐证了这一点 (见引用) -
可忽略成功概率 Negligible Success Probability
可忽略成功概率是用可忽略函数 Negligible function表示的:即在渐进意义上,比任意多项式函数的倒数小的函数
另外两种简洁一点的定义:
进行判断时用第三种很方便- 可忽略函数的闭包 (closure) 性质
- 可忽略函数的闭包 (closure) 性质
-
计算安全的渐进定义
有了上面这些概念,我们可以引出计算安全的渐进定义
当安全参数 \(n > N\) 时 (\(N\) 可视为是一个安全参数最低限制),任意的概率多项式时间算法 (relaxtion 1) 都不能以高于可忽略函数的概率 (relaxation 2) 破解该加密策略,我们说该加密策略是计算安全 (computational secure) 的 -
利用计算安全重定义 redefine单钥加密与敌手不可分辨实验
重定义的部分较好理解,回去看 pdf 即可 (注意重定义后 \(Gen\), \(Enc\), \(Dec\) 函数的时间复杂度)
有一个点:
在完美加密中,敌手无法或者关于明文的任何信息,所以随意猜测正确的概率是 \(\frac{1}{2}\)
在计算安全中,由于放宽了限制,敌手尝试用 BF 来对密钥进行随机枚举从而破解加密。由于敌手的算力有限 (relaxation 1),BF 只能做到多项式级别复杂度的枚举,因此其随机枚举到正确密钥的概率是 \(\frac{t(n)}{2^n}\) (\(t(n)\) 是某个多项式函数)。
因此最后敌手胜利的概率是 \(\frac{1}{2}+\frac{t(n)}{2^n}\)
伪随机 Pseudorandomness
-
Intro
我们人类其实不知道如何用算法来产生真正的随机数。随机恐怕是个哲学概念,人类用概率论,随机变量来描述随机,但是真正的随机性的定义,包括概率的定义,都是高度值得怀疑的
伪随机数 (Pseudorandom numbers) 是计算安全的加密策略 (computationally secure encryption scheme) 中的重要组成部分
与真随机数不同,伪随机数是根据一系列的算法生成的:只要其通过了一系列的统计检验 (efficient statistical test),我们就视其为随机数
-
Statistical Test 统计检验
注意,所有的统计检验都是多项式级别复杂度的算法 (efficient)
下面是一些统计检验算法的例子:
经过统计检验的伪随机数列将会被视作真随机数进行使用,由此可以看出Pseudorandomness is a relaxation of true randomness
-
Definition
先看前置定义:伪随机的概念是定义在一系列分布 \(\{D_n\}=\{D_1, D_2, ...\}\) 上的
随着 \(n\) 增加,distinguishing probability 将会趋近于 \(0\)
Pseudorandom number generators (PRGs/PRNGs)
-
Intro
-
Prerequisite Definition
有许多前置定义:
\(PRG\):将短随机种子 (种子是由 uniform distribution 产生的真随机短串) 扩大为长的伪随机数串的函数
\(PRG\) (\(G\) 函数) 定义了一系列分布 \(D_n\) :若这一系列 \(D_n\) 满足伪随机定义,则称 \(G\) 为伪随机数发生器 (Pseudorandom gernerator)
注意:\(G\) 函数一定是 deterministic 的 :保证种子作为唯一的随机性来源
-
Formal Definition
注意,虽然种子 \(s\) 是真随机,均匀选取的,但是 \(G(s)\) 并不是
由于 \(G\) 是 deterministic 的,所以一个种子对应一个扩大的伪随机数串:所有 \(G(s)\) 输出的 \(p(n)\) 长度的伪随机数串占所有该长度数串的 \(\frac{2^{n}}{2^{p(n)}}\) -
Example: PRG or not?
No.
Check parity of \(x\), if parity is \(0\), \(D\) outputs \(1\)
if \(x = G(s), s \leftarrow U_n\), then \(P[D(x)=1]=1\)
if \(x \leftarrow U_{p(n)}\), then \(P[D(x)=1]=\frac{1}{2}\) (任意 \(01\) 串的 \(n\) 位是其前 \(n-1\) 位的校验码的概率为 \(\frac{1}{2}\))
\(1-\frac{1}{2}=\frac{1}{2}\) is non-negligible
No.
Check msg of \(x\), if msg is \(1\), \(D\) outputs \(1\)
if \(x = G(s), s \leftarrow U_n\), then \(P(D(x)=1)=\frac{2}{3}\) (题目条件)
if \(x \leftarrow U_{2n}\), then \(P(D(x)=1)=\frac{1}{2}\) (msb 为 \(1\) 的串占所有串的 \(\frac{!}{2}\))
\(\frac{2}{3}-\frac{1}{2}=\frac{1}{6}\) is non-nengligible
(a) \(T\)
(b) \(F\), A distinguisher for \(G'\) can output "not random/0" when the last bit is not \(0\)
(c) \(T\)
(d) \(T\)
(e) \(F\), A distinguisher for \(G'\) can output "not random/0" when the first \(n\) bits does not equal to the last \(n\) bits -
Notes on PRG (1)
如果我们定义算法 \(D\) 为:判断当前数串是否是由某个 seed 经过函数 \(G\) 产生,若是,输出 \(1\)
那么最终的 distinguishing probability 为 \(1-\frac{2^n}{2^{p(n)}}\)
可以发现,由于 \(p(n)\) 远大于 \(n\),这个概率其实是 non-negligible 的
那么岂不是说明任何函数 \(G\) 都不是 secure PRG 了?
这个误区是因为没有考虑到 \(D\) 的复杂度:实际上,对于所有的 secure PRG,算法 \(D\) 的复杂度是不能做到多项式级别的 -
Notes on PRG (2)
虽然有关于 secure PRG 的具体定义,但是遵照这一定义仍然很难判断某个算法 \(G\) 究竟是不是 secure PRG.
secure PRG 的存在可建立在另一个假设 :单向函数存在 (there exists one-way function),但同样这一假设也是未经验证的
Linear Congruential Generator (LCG, 线性同余发生器)
一种 PRG:注意,它是 not cryptographically secure 的
Blum Blum Shub Generator
一种 PRbG (pseudorandom bit generator):它是 cryptographically secure 的 (至少目前来说)
注:\(M\) 与 \(s\) 是 relatively prime 的,意味着 \(gcd(M, s)=1\)
其安全性在于 difficulty of factoring: 类似于单向函数 (one-way function) 的概念,两个大质数 \(p\) 与 \(q\) 的相乘 \(M=p\times q\) 是很简单的,然而将 \(M\) 因式分解 (factoring) 比较困难
相关:二次剩余问题 Quadratic Residuosity Problem
Pseudo One-Time Pad / Stream Cipher
-
Intro
One-Time Pad 虽然具有完美加密性,但最致命的缺陷就是其密钥 \(k\) 的长度必须与明文 \(m\) 的长度相等
我们可以利用 PRG 来弥补这一缺陷
选取随机种子作为密钥 \(k\),利用 PRG 产生与明文 \(m\) 长度相等的伪随机序列 \(G(k), |G(k)|=p(n)\):这样,the parties 在安全信道上只需传输长度较小的密钥 \(k\) -
Definition
Pseudo One-Time Pad 可以建立在任意的 PRG \(G\) 上;其仍是一种单钥加密方案 (private-key encryption)
与 OPT 类似,Pseudo OPT 的正确性 (Correctness) 易证 -
(重要) Pseudo One-Time Pad : Computational Security
我们将用 proofs of Reduction (归约法) 进行证明
关于归约法十分精彩的解释:我们假设存在PPT的敌手 (adversary) 可以以不可忽略 (non-negligible) 的优势 (advantage) 攻破此密码方案,那么通过归约 (reduction) ,就可以同样以不可忽略的优势破解该困难问题。这与我们对该困难问题已知的困难性 (hardness) 相互矛盾 (contradiction) ,所以不可能存在这样的敌手去攻破我们的密码方案,因此他是安全的。
Assumption:G 是 (secure) PRG
Protocal to be proved: Pseudo One-Time Pad/Stream Cipher 是 EAV-secure -
Proof : Pseudo One-Time Pad is EAV-secure
这里的逻辑有点难绕,具体的证明见 pdf:这里我主要梳理一下自己的逻辑已知:\(G\) 是一个 secure PRG:即,任何敌手都无法以高于 \(\epsilon (n)\) 的概率分辨 \(y_1 (k \leftarrow U_{n}, y_1:=G(k))\) 与 \(y_2 (y_2\leftarrow U_{p(n)})\)
对于 true OTP,即使用真随机密钥的 OTP 方案,敌手是无法攻破的 (OTP 的 perfect secrecy)
对于 pseudo OTP,若敌手能在 EAV-secure 实验中取得胜利 (即,敌手以不可忽略的优势攻破了 pseudo OTP),意味着敌手能够以某种方式分辨密文 \(m\) 是由伪随机密钥 \(y_2\) 加密还是由真随机密钥 \(y_1\) 加密的求证:若敌手攻破了 pseudo OTP,则其亦可以攻破 secure PRG
(逻辑:这里的求证逻辑是这样的,已知 secure PRG 是一个难以攻破的 困难问题;若我们能求证敌手攻破了 pseudo OTP 代表攻破了 secure PRG,则其逆否命题 secure PRG 安全代表 pseudo OTP 安全也成立;结合 secure PRG 是一个难以攻破的困难问题,可推出 pseudo OTP 难以攻破,从而得证)
证明:
通过归约思想,我们构造一个 distinguisher \(D\),其以尝试攻击 pseudo OTP 的敌手 \(A\) 作为子程序 (subroutine):这样成功将 pseudo OTP 的 EAV-security 与 secure PRG 联系起来。我们假设 \(A\) 以不可忽略的优势成功攻破了 pseudo OTP 的 EAV-security;此时,\(D\) 可将 \(A\) 作为预言机 (oracle):若 \(A\) 在 EAV-secure 实验中成功分辨出正确的明文 \(m_b\),代表其发现了密钥是伪随机的 (因为根据完美加密性,若密钥是真随机的,\(A\) 无法分辨出正确的明文,即其成功的概率是 \(\frac{1}{2}\)),\(D\) 从而输出 \(1\);这就意味着若 pseudo OTP 被攻破,secure PRG 同样会被攻破。而这个结论与 secure PRG 问题的困难性矛盾,我们由此推出 pseudo OTP 是 EAV-secure 的 -
Pseudo One-Time Pad:Points to note
利用 PRG,我们得到了 EAV-secure 的改良 OTP 算法,从而解决了 OTP 算法密钥必须与明文等长的难题
但是,OTP 算法密钥只能使用一次的缺点并没有得到解决
接下来我们将会寻找密钥较短且可重复使用的安全加密方案 (CPA-security) -
Two-Time Pad is insecure
无论是同一密钥加密多次,还是密钥之间存在联系,都会大大降低安全性 -
OTP and pseudo OTP is malleable
当密钥只使用一次时,OTP 与 pseudo OTP 均提供私密性 (confidentiality),但不提供完整性 (message integrity)
Multiple-message secrecy and CPA-secure
-
Mutiple-message secrecy
在不安全的信道上使用同一密钥 \(k\) 与加密策略加密 多条 消息
若这样的加密策略是安全的,则称其有 multiple-message secrecy
显然,OTP 是不具有 mutiple-message secrecy 的 -
Chosen-Plaintext Attacks 选择明文攻击
之前我们接触了唯密文攻击 ciphertext-only attacks:唯密文攻击是假定密码分析者拥有密码算法及明文统计特性,并截获一个或多个用同一密钥加密的密文,通过对这些密文进行分析求出明文或密钥
而选择明文攻击 CPA 给予敌手更多的优势:攻击者拥有加密机的访问权限 (oracle access),可构造任意明文所对应的密文
具体来说,敌手自主选择若干条明文 \(m_1, m_2, ..., m_n\),并通过加密机获取对应的密文 \(c_1, c_2, ..., c_n\)。此时敌手被挑战者给予用 同一密钥 \(k\) 加密 的密文 \(c\),并尝试获取其明文 \(m\) -
CPA security
一个加密方案是 CPA secure 的意味着其能抵抗 CPA 攻击
且,一个 CPA secure 的加密方案一定也是 multiple-message secure 的 -
CPA Indistinguishability Experiment : CPA 不可分辨实验
CPA 不可分辨实验与 EAV 不可分辨实验的区别在于:CPA 不可分辨实验中的敌手时刻拥有加密机的访问权限 (oracle access to \(Enc_k(\cdot)\))
-
CPA security : definition
定义在 CPA 不可分辨实验上的 CPA security
-
A CPA security encryption scheme must be RANDOMIZED
注意,由于敌手拥有对加密机的 oracle access,他可以对任意指定明文进行加密,包括 CPA 不可分辨实验中的 \(m_0, m_1\)
这意味着 CPA 安全的加密方案必须是一个随机算法 (randomized algorithm):也就是说,相同的明文 \(m_0\) 与密钥 \(k\) 可对应多个不同的密文 \(c_0^{1}, c_0^{2}, c_0^{3}, ...\)
否则,敌手仅需要通过比对挑战者给出的密文 \(c_b\) 与通过 Oracle access 得到的结果 \(c_0, c_1\) 就能攻破 CPA security
-
CPA security 的衍生定义:CPA secure for multiple encryption
-
CPA security means CPA security for mutiple encryption
任意单钥加密方案是 CPA-secure 的,则其在多次加密中也是 CPA-secure 的
注意这与 EVA-secure 的不同:单次加密 EVA-secure 的某个单钥加密方案不一定是多次加密 EVA-secure 的,例如 OTP 与 stream cipher
Pseudorandom Functions and Permutations
-
Intro
之前我们提到,一个 CPA-secure 的单钥加密方案算法必须是 randomized 的:为了构建 CPA-secure 的单钥加密方案,我们引入伪随机函数的定义
Pseudorandom Functions (PRFs) 本质上是对于某 input,output 随机的函数 -
Random Functions 随机函数
对于输入有 \(n\) 种,输出有 \(m\) 种的函数集 \(Func_n\),其大小 \(|Func_n|=m^{n}\),因此上例中的 \(|Func_n|=(2^n)^{2^n}=2^{2\cdot 2^n}\)
随机函数即在以上的函数集 \(Func_n\) 中随机均匀抽取的某个函数
解释一下第二个 equivalence:一个随机函数对应一个长度为 \(n\cdot 2^n\) 的串。想象一下我们随机生成一个该长度的串,将其分为 \(2^n\) 份,每一份的长度为 \(n\);这样,对于 \(2^n\) 种输入 \(x\) 都有其对应的长度为 \(n\) 的 \(f(x)\) -
Keyed Functions
在我们的研究中,keyed function 中的 key \(k\),输入 \(x\) 与输出 \(F(k, x)\) 长度一致,即 \(|k|=|x|=|F(k,x)|=n\)
并且,函数 \(F\) 是一个 PPT 的算法
-
Pseudorandom Functions : definition 伪随机函数
几个注意:- 符号 \(F_k(\cdot)\) 与 \(f(\cdot)\) 代表 \(D\) 有对其的 Oracle access,即 \(D\) 可以对 Oracle \(O\) 进行 PPT 次询问并得到对应的答案
- distinguisher \(D\) 的任务是,判断预言机 \(O\) 是伪随机函数 \(F_k(\cdot)\) 还是真随机函数 \(f(\cdot)\)
- 为什么 \(D\) 获得的是 \(f\) 与 \(F_k\) 的 Oracle access 而不是整个算法:(注意,在之前的不可分辨实验中,敌手是知道具体的加密策略的) 这是因为,一个真随机函数 random function 要用 \(n\cdot 2^n\) 位表示,而 PPT 的 distinguisher \(D\) is limited to polynomial time,无法得到该指数级的输入
- 重要!函数 \(f\) 与 \(F(k, x)\) 都是 deterministic 的:虽然 \(f\) 是真随机函数 random function,但这一"随机"体现在它是在 \(Func_n\) 中随机选取的;一旦选定,它就固定下来。同样,伪随机函数 \(F\) 一旦选定了 \(k\),其对 \(Func_n\) 的分布也随之固定。distinguisher \(D\) 可以是 randomized 的
- \(D\) 是不知道密钥 \(k\) 的!
-
Diagram intro:
F is pseudorandom if the 2 diagrams above are indistinguishable for any efficient \(D\)
例子:
当 oracle 是真随机函数 \(D\) 输出 \(1\) 概率是 \(\frac{1}{2^n}\) 的原因:\(y_1\oplus y_2\) 有 \(2^n\) 种取值 -
Random Permutations 真随机排列
定义真随机排列 \(f \in Perm_n\)
\(Perm_n\) 中包含了所有长度为 \(n\) 的串到长度为 \(n\) 的串的排列,因此 \(|Perm_n|=(2^n)!\) -
Keyed Permutaions
我们只研究 length-preserving 的 Keyed Permutation,即 \(l_in(n)=l_key(n)=n\)
并且,Keyed Permutation \(F\) 也必须是 efficient 的:即 \(F_k(x)\) 与 \(F^{-1}_k(y)\) 对任意 polynomial 的 \(|k|, |x|, |y|\),其算法都在 polynomial time 内
若一个 efficient, keyed permutation \(F\) 是伪随机的,意味着任何 PPT 敌手都无法区分 \(F_k, k \leftarrow U_n\) 与真随机排列 \(f\) -
Strong pseudorandom permutations
对于一个强伪随机排列,PPT 敌手 \(D\) 将会被给予 \(F_k, F^{-1}_k, f, f^{-1}\) 的 oracle access
Block Ciphers (区块加密) 是应用强伪随机排列的一个实例 -
PRG from pseudorandom functions 用伪随机函数构造 PRG
将 \(1,2,...l\) 视为 \(x_1, x_2, ...x_l\) 可能更好理解 (这里强调的主要是它们的两两不同)
由于 \(|s|=|x|=|F_s(x)|=n\),构建 PRG 的 expansion factor \(p=\frac{|x|\times l}{|s|}=\frac{nl}{n}=l\)
可通过归约证明,安全的伪随机函数构造的 PRG 也一定是安全的,
且通过 Extended Church-Turing Thesis,PPT 的伪随机函数构造的 PRG 也一定是 PPT 的
-
pseudorandom function from PRG
利用 PRG,我们可以构造一个 block length 较小的 PRF
记得之前在介绍 Random Function 的时候提到过,random function 实际上就相当于生成一个长度为 \(n^2 \cdot n\) 的串
这里我们利用类似的思想,由于明文 \(x\) 长度定义为 \(p(n) (p(n)=O(\log n))\),因此明文空间大小为 \(2^{p(n)}\)
我们利用 PRG 生成长度为 \(2^{p(n)}\cdot n\) 的串,分成 \(2^{p(n)}\) 份,每份的长度都为 \(n\):选择第 \(x\) 份作为结果
这样就得到了一个 polynomial-time 的,用 PRG 来构造的 pseudorandom function
CPA-secure Encryption from Pseudorandom Functions
-
Definition
注意,密钥是 \(k \leftarrow U_n\),\(r\) 是加密 Enc 时产生的一个辅助随机量!也就是,对于每次加密,都会随机产生一个 \(r\)
且 \(r\) 是密文 \(c\) 中的一部分:这意味着敌手可以获取 \(r\)
\(k\) 与信息 \(m\) 等长 -
CPA-secure Encryption V.S. Pseudorandom OTP (stream ciphers)
我们会发现 CPA-secure Encryption 与 Pseudorandom OTP 很相似
它们采取的方案都是将某个 pseudorandom pad 与明文按位异或产生密文 (对于 CPA-secure Encryption,该 pad 是 \(F_k(r)\),对于 pseudorandom OTP,该 pad 是 \(G(k), k \leftarrow U_n\))甚至可能我们会产生这样的疑问:既然 CPA-secure Enc 中的 \(k\) 能随机产生,我们为什么不直接将其与明文进行异或,或是采取 pOTP 中利用 PRG 扩展 \(k\) 的方案,而是大费周章的设计一个伪随机函数 \(F\) 和辅助随机量 \(r\) 来产生 pseudorandom pad \(F_k(r)\) 呢?
这就涉及到 CPA-secure 与 EAV-secure 的区别
我们可以发现,CPA-secure Enc 中的密钥 \(k\) 可以重复使用加密多条信息,而保证密钥复用安全的关键就在于随机的 \(r\):它确保了 \(Enc\) 是 randomized 的,对于相同的 \(k\) 与 \(m\),\(Enc_k(m)\) 的结果是随机的
而对于 pOTP,其加密方案是 deterministic 的,这也导致其不能多次使用同一密钥,不具有 CPA-secure -
Security of the CPA-secure encryption scheme : Designing proof of reduction
对这一套应该有点熟悉了:基于安全的 \(A\) 定义的 \(B\),在证明 \(B\) 的安全性时使用归约证明
构建 PPT 敌手 \(A\) 尝试攻击 CPA-secure Enc;构建 distinguisher \(D\) 尝试区分 random function 与 pseudorandom function,并将敌手 \(A\) 作为子程序 (subroutine)
归约开始,\(D\) 为敌手 \(A\) 模拟 (emulate) \(PrivK^{CPA}\) 实验环境- 执行 \(A(1^n)\),敌手输出两条文本 \(m_0, m_1 \in \{0, 1\}^n\)
- \(D\) 随机选择 \(b \leftarrow \{0, 1\}\)
- \(D\) 模拟 \(Enc\) 加密方案:随机产生 \(r^{*} \leftarrow \{0, 1\}^n\),询问 (query) 预言机得到 \(y^{*}=O(r^{*})\) (这里不用提供 \(k\)! 见伪随机函数 \(F\) 的定义),在对 \(m_b\) 进行加密形成挑战文本 (challenge ciphertext) \(c_b=<r^{*}, y^{*} \oplus m_b>\) 并将其发回给敌手
- 敌手 \(A\) 在产生 \(b'\) 之前,可能会对 \(D\) 模拟的预言机进行若干次询问 (这是 CPA 敌手 的能力):对于每次询问 \(m\),\(D\) 随机产生 \(r \leftarrow \{0, 1\}^n\) 并向上级预言机询问得到 \(y=O(r)\),后以 \(c=<r, y \oplus m>\) 作为对 \(A\) 的回答
- 敌手输出 \(b'\):若 \(b'=b\),\(D\) 输出 \(1\) (not random),反之输出 \(0\)
通过归约,我们将这两个概率关联在了一起:若某敌手以不可忽略的优势攻破了 EAV-secure,那么 pseudorandom function 也同样会被攻破
详细的概率证明见 PDF Lect 7,具体思路如下- 通过归约机,证明当 \(O\) 是真随机函数 \(f\) 时,敌手 \(D\) 赢得 CPA-secure 实验胜利的概率 (在此 EAV-secure 实验中使用的函数是真随机函数 \(f\)) \(=\) \(D\) 输出
not random
的概率,记为 \(Pr_f\) - 通过归约机,证明当 \(O\) 是伪随机函数 \(F_k\) 时,敌手 \(D\) 赢得 CPA-secure 实验胜利的概率 (在此 EAV-secure 实验中使用的函数是伪随机函数 \(F_k\)) \(=\) \(D\) 输出
not random
的概率,记为 \(Pr_F\) - 计算出当 \(O\) 是真随机函数 \(f\) 时敌手 \(D\) 胜利的概率 \(Pr_f = \frac{p(n)}{2^n}+\frac{1}{2}\) (分为 repeat 与未 repeat 两种情况)
- 根据伪随机函数的定义我们有 \(|Pr_f-Pr_F\leq \epsilon (n)|\)
- 整理 (3)(4) 得 \(Pr_f\leq \frac{1}{2}+\epsilon(n)+\frac{q(n)}{2^n}\),又 \(\frac{q(n)}{2^n}\) 也是可忽略得,于是 CPA-secure 得证
Block Cipher Modes of Operations 区块加密法工作模式
-
Encrypting arbitrary length message
利用 CPA-secure 对多条信息加密保密的特点,我们可以将长信息分为若干条短信息进行加密
但是可以发现,由于密文是 \(<r, F_k(r) \oplus m>\) 形式,密文的长度是信息长度的两倍,也就是说,ciphertext expansion factor 是 \(2\)
-
Block Cipher Modes of Operations :区块加密法工作模式
应用 Block Cipher Modes of Operations,我们可以对长消息进行加密的同时将密文长度限制在一定范围内
注意:谈到 Block Cipher 时,运用较多的是 (伪)随机排列 (Pseudo)Random Permutations
我们将会介绍三种区块加密模式:CBC,ECB 与 CTR
Cipher Block Chaining mode (CBC)
-
CBC: Cipher Block Chaining mode
CBC 的加密过程不是 parallelizable 的,因此效率较低 (insufficient):想加密第 \(i\) 个 block 必须先完成前 \(i-1\) 个 block 的加密
但 CBC 的解密过程是 parallelizable 的:解密第 \(i\) 个 block 只需要第 \(i-1\) 个 block 的信息即可CBC 的加密同样是 randomized 的,这是由于 \(IV\) 的选取是随机的 (与 CPA-secure encrypt scheme 中的 \(r\) 作用相同)
CBC 加密的 ciphertext expansion 仅有 1 block:长度增加了 \(n\) (即 \(IV\))
-
altering CBC scheme Version 1
这个问题中的算法甚至都不是 EAV-secure 的:
我们列出用该方法加密时的加密序列 \([IV, F_k(m_1) \oplus IV, F_k(m_2) \oplus (F_k(m_1) \oplus IV), ...]\)可以发现,当构造 \(m_0\) 的第一个 block \(m_{0,1}\) 与第二个 block \(m_{0,2}\) 相等时 \(m_{0,1}=m_{0,2}\)
其对应的密文的第二个 block \(c_{0,2}=F_k(m_{0,2}) \oplus (F_k(m_{0,1}) \oplus IV)\) 的结果即为 \(IV\),也就是第零个 block 的结果 \(c_{0,0}=IV\) (这是由于 \(F_k\) 是 deterministic 的)我们再构造一个不满足该特点的信息 \(m_1\)
这样,当检查 challenge text \(c\) 时,若我们发现 \(c\) 的第零个 block 与第二个 block 相等,输出 \(0\) ,否则输出 \(1\),这样就破解了该算法的 EAV-secure
至于敌手更强的 CPA-secure 就更加不用说了 -
altering CBC scheme Version 2
这里的||
代表或
(答案来自本课 TA : Zhang, C. )
思路是通过全 \(1\) 串得到一个与 \(IV\) 无关的量 \(F_k(111..11)\) -
altering CBC scheme Version 3
若采用 CBC 加密时,每次加密时并不随机选取 \(IV\),而是将该次加密的 \(IV\) 设为上次加密时的 \(IV'\) 加一 (即 \(IV=IV'+1\))
这样的策略是 CPA-secure 的吗
已知上一次对信息 \(m\) 加密的结果 \(c\): \(<IV, F_k(IV \oplus m_1), F_k(F_k(IV \oplus m_1) \oplus m_2), ...>\)
若我们构造一个 \(m_0\) 使得 \(IV \oplus m_1 = (IV + 1)\oplus m_{0, 1}\),即 \(m_{0,1}=IV \oplus (IV+1)\oplus m_1\)
即可在 \(m_0\) 加密后观察到 \(c_{0, 1}=c_1\)
所以该策略甚至不是 EAV-secure 的 (思路很像版本 \(1\),构造特殊的 \(m\),该 \(m\) 可以使其对应的 \(c\) 展现出某些可预测的结果) -
Chained CBA mode & TLS-CBC-IV attack
Chained CBA mode 不是 CPA-secure 的:具体可看下面这个例子
Eletronic Code Book (EBA) mode
ECB mode 没有任何的 ciphertext expansion
简单粗暴,对每一个分组直接应用伪随机排列
然而,由于 ECB 的加密算法是 deterministic 的,所以其不可能是 CPA-secure 的
甚至,由于其用相同的密钥分组加密了多条信息,其连 EAV-secure 都无法做到
Counter mode (CTR)
-
Definition
最重要的概念是 counter (计数器),其初始值 \(ctr\) 随机指定,对每一组密码 \(+1\),并生成对应的 pseudorandom pad \(y_i:=F_k(ctr+i)\)
同样,为了 decryption,该 ctr 的初始值需要作为密文进行传递
-
Points to Note
CTR 的 \(F_k\) 并不要求是伪随机排列,只规定是伪随机函数 (pseudorandom function)
注意:当我们使用伪随机函数 \(F_k\) 进行加密时,潜意识是想利用其的逆 \(F_k^{-1}\) 进行解密
CTR 的解密 \(Dec\) 并不需要知道 \(F_k^{-1}\) (其利用的是求出 block 对应的 pseudorandom pad \(y_i:=F_k(ctr+i)\) 并利用异或抵消)
注意,CBC 的解密 \(Dec\) 是需要知道 \(F_k^{-1}\) 的,因此在其加密定义中 \(F_k\) 指的是伪随机排列对 pseudorandom pad \(y_i\) 的处理甚至可以在收到信息 (message) 之前进行:这是因为其完全独立于明文的内容
CBC 则不行,因为其每一个 block 所对应的加密处理都依赖于上一个 block 密文的内容CTR 更为高效 (efficient):其加密与解密均是 parallelizable 的
如果 CTR 中的 counter 并非完全随机 (fully random) 的,那么其安全性将比 CBC 更低:若 ctr 被破解,则整个密文都有被解密的风险;而 CBC 中的 \(IV\) 被破解并不会对整个密文造成这么大的威胁
-
CTR mode : security
Block cipher : Practical Issue
研究完这 CBC, EBA 与 CTR 三种加密方式后,我们来考虑 Block cipher 在使用时可能出现的实际问题
-
block length 太短
当 block length 过于短时,即使强伪随机函数也不能保证 block cipher 的安全性 -
初始化随机量的随机性
若 \(IV\) (即 CTR 中的 \(counter\)) 随机性较弱,则 CBC 比 CTR 更为安全 -
Non-Adversarial Transmission Error 非敌手传输性错误
传输时可能出现错误,例如:丢包 (dropped packets),change bits 等等,这样接收方得到的密文解密后将会与明文有出入
不同的加密方式发生传输错误后的表现不同
存在 error correction,re-transmission 等机制进行纠正 -
关于 CBC 与 CTR 中的 single-bit error
CBC:
\(<m_0, m_1, m_2, ...>\) 经过加密后 \(<IV, c_0, c_1, c_2, ...>\)
若 \(c_i\) 中有一位发生了 single-bit error 成为 \(c_i'\),考虑 Dec 还原出来的明文 \(m'\) 会受到什么影响
\(m_i'=Dec(c_i')=F_k^{-1}(c_i')\oplus c_{i-1}\neq F_k^{-1}(c_i)\oplus c_{i-1}\) (因此,\(m_i'\) 与正确的明文 \(m_i\) 完全无关)
\(m_{i+1}=Dec(c_{i+1}')=F_k^{-1}(c_{i+1}')\oplus c_i\) (由于 \(c_{i+1}= c_{i+1}'\),所以 \(m_{i+1}'\) 与正确的明文 \(m_i\) 相比只有一位是翻转的)
因此,CBC 中的某个 block \(i\) 只会影响到密文中的第 \(i\) 与 第 \(i+1\) 个 blockCTR:
<m_0, m_1, m_2, ...> 经过加密后 \(<ctr, c_0, c_1, c_2, ...>\)
同上,考虑 \(c_i\) 中有一位发生了 single-bit error
\(m_i'=Dec(c_i')=F_k(ctr+i) \oplus c_i'\) (\(m_i'\) 与正确的明文 \(m_i\) 相比只有一位是翻转的)
因此,CTR 中的某个 block \(i\) 只会影响到密文中的第 \(i\) 个 block
Active Attacker : Chosen-Ciphertext Attack (CCA)
-
Intro
在 CCA 选择密文攻击中,敌手不仅能够进行 CPA,还允许敌手选择一系列密文并且得到它们解密后的原文
一个主动的敌手 (active adversary) 能够假装发送者,向接收者发送一系列密文,并观察解密后的原文 -
Definition : CCA 不可分辨实验 (CCA Indistinguishability experiment)
注意:
敌手同时拥有 \(Enc\) 与 \(Dec\) 的 oracle access
敌手不能用 Dec 的 oracle access 来解密 challenge ciphertext \(m_b\) -
CCA Security
很明显不是,假设我们得到的 challenge ciphertext \(c_b=<r, c>\)
则 \(Dec(c_b)=F_k(r)\oplus c\)
我们构造密文 \(<r, c'>\) 并输入 Dec 得到 \(m'=F_k(r) \oplus c'\)
于是我们将 \(m' \oplus c'\) 得到 \(F_k(r)\)
得到 \(F_k(r)\) 后,使用 \(F_k(r) \oplus c\) 即可得到明文 \(m\)
(第二种利用 single-bit error 的方法见下面的 malleability 相关) -
CCA Security : Multiple Encryption
即,一个 CCA-secure 的加密方案,对多重加密一定也是 CCA-secure 的 -
Malleability
加密方案的 malleability 是指,若对密文进行修改,将观察到可预测的改变
完美加密 (prefect secrecy) 并不代表 non-malleability:例如,OTP 就是一个 malleable 的加密方案
Alice 翻转密文中的某一位将会导致 Bob 接收到某一位翻转的明文
一个 non-malleable 的加密方案应该是这样的:若敌手将密文 \(c\) 修改成 \(c'\),\(Dec\) 要么弹出错误信息,要么生成一个与正确的明文 \(m\) 完全无关的新明文 \(m'\) -
CCA-security and Malleability
简要证明:若加密方案 \(A\) 是 malleable 的,则意味着敌手可以通过修改密文,经过 Dec 后观察到可预测的改变
那么,在进行 CCA 不可分辨实验时,敌手可修改 challenge ciphertext \(c\) 为 \(c'\),并通过 Dec 的 oracle access 观察可预测的改变,即,通过 \(m'\) 与真正明文 \(m\) 的对比从而推出真正的 \(b\)
由此我们可以得出,凡是 malleable 的加密方案一定不是 CCA-secure 的;
而 CCA-secure 的加密方案一定具有 non-malleability
Overview of Information Theory Concepts 信息论的基本概念
-
熵 Entropy
熵是 \(-\log_2\Pr[X]\) 的期望,即 \(E(-\log_2 \Pr[X])\)
熵描述的是信息的不确定性 (uncertainty),也就是说,一个确定的信息,其熵为 \(0\)
一般而言,\(H(X)\leq \log_2|\mathscr{X}|\) (例,一个取值有 \(n\) 种的信息,每一个取值均匀分布 \(\frac{1}{n}\) 其有着最高理论熵 \(\log_2 n\)) -
条件熵 Conditional Entropy
条件熵是 \(-\log_2 \Pr[X|Y]\) 的期望,即 \(E(-\log_2 \Pr[X|Y])\)
条件熵描述的是,在已知 \(X\) 的情况下,\(Y\) 的不确定性
注意,\(H(X|Y)\leq H(X)\) 可以这样理解:得知 \(Y\) 并不会增加 \(X\) 的不确定性;若 \(X\) 与 \(Y\) 独立,则 \(H(X|Y)=H(X)\) -
Chain Rule and other entropy relations
\(XY\) 联合的不确定性:\(X\) 的不确定性 \(H(X)\) 加上已知 \(X\) 后,\(Y\) 的不确定性 \(H(Y|X)\)
可根据 \(H(X|Y)\leq H(X)\) 证明,\(H(XY)\leq H(X)+H(Y)\) 当且仅当 \(X, Y\) 独立时取等号 -
相对熵 Relative Entropy
相对熵可视作两个 关于 \(x\) 的概率分布的距离 (distance)
或者说是 "the inefficiency of assuming distribution q(X) when the correct distribution is p(X)"
\(D(p(x)||q(x))=E_P(\log_2 \frac{p(x)}{q(x)})\)
一般来说,\(D(p(x)||q(x))\neq D(q(x)||p(x))\) -
互信息 Mutual Information
互信息用来描述两个变量之间相互依赖的程度,具体来说是 随机变量 \(X\) 由于已知随机变量 \(Y\) 而减少的“信息量/不确定性”
换句话来说,也是已知 \(Y\) 的情况下,我们得到的关于 \(X\) 的信息 (\(X\) 减少的信息量被我们得到/我们增加了对 \(X\) 的确定性)
互信息也可以用来描述将 \((X,Y)\) 视为独立变量的代价 (price) (实际上 \(X\), \(Y\) 并不相互独立)
互信息的性质可以很容易由上面的几个描述推理出来
\(I(X;Y)=H(X)-H(X|Y)=H(Y)-H(Y|X)\) (\(X\) 原来的不确定性 \(H(X)\) 减去已知 \(Y\) 后 \(X\) 的不确定性 \(H(X|Y)\) 得到 \(X\) 减少的不确定性)
注意 \(I(X;X)=0\), \(I(X;Y)=I(Y;X)\) -
密钥熵与信息熵 Key Entropies & Message Entropies
接下来,我们将尝试用信息论里的术语来重定义完美安全
先介绍密钥熵与信息熵的概念:
密钥熵与信息熵是对于敌手 \(Eve\) 而言的:密钥与信息的熵 (不确定性 uncertainty) 根据敌手的先验知识 (a priori) 进行计算
当敌手观察到 ciphertext \(C\) 后,密钥与信息熵可被描述为
\(H(K|C)=-\sum \limits_{k\in \mathscr{K}, c\in \mathscr{C}} \Pr[K=k, C=c]\log_2\Pr[K=k|C=c]\)
\(H(M|C)=-\sum \limits_{m\in \mathscr{M}, c\in \mathscr{C}} \Pr[M=m, C=c]\log_2\Pr[M=m|C=c]\)
由于观察到 \(C\) 只可能使密钥熵与信息熵减少 (less uncertain),所以有 \(H(K|C)\leq H(K), H(M|C)\leq H(M)\) -
Perfect Secrecy in Information-Theoretic terms
即,\(M\) 与 \(C\) 相互独立:敌手观察到 \(C\) 并不会使 \(M\) 的不确定性减少,即 \(H(M|C)=H(M), I(M;C)=0\)
对任何完美安全的加密方案,密钥的不确定性一定 \(\geq\) 信息的不确定性:这也是为什么香农提出任何完美安全加密方案中,密钥的长度一定 \(\geq\) 信息的长度
证明:
首先,根据 Chain’s Rule,\(H(K, M|C)=H(K|C)+H(M|K, C)\) (given \(C\); \(K,M\) 联合熵 \(=\) given \(C\); \(K\) 的熵 \(+\) given \(K, C\); \(M\) 的熵)
由于 \(Dec\) 是一个确定的算法 (即,已知 \(k\), \(c\) 一定能得到 \(m\)),所以有 \(H(M|K, C)=0\)
所以 \(H(K,M|C)=H(K|C)+0=H(K|C)\)
又有 \(H(M|C)\leq H(K,M|C)\) (联合变量 \((K, M)\) 的不确定性不会比 \(M\) 的不确定性小)
所以 \(H(M|C)\leq H(K|C)\)
又 \(H(K|C)\leq H(K)\) (conditioning doesn't increase entropy),\(H(M|C)=H(M)\) (安美加密的定义)
所以有 \(H(M)\leq H(K)\)
Message Authentication Code 消息认证码
-
Integrity V.S. Secrecy
Message Integrity 是指:保证消息是由发送方 (intended party) 发送而来,而未在传输过程中被更改 (来源有两种:传输错误或敌手的恶意更改)
消息认证码 (Message Authentication Code, MAC) 是一个保证 message integrity 与 authentication 的 Cryptographic primitive
一个加密方案可以是 secret without integrity 的:例如完美加密的 OTP 是 malleable 的
一个加密方案可以是 integrate without secrecy 的:例如在 MAC 保护下直接在公共频道上发送未经加密的消息
这是由于:Encryption does not provide Integrity -
MAC:Definition
-
MAC 安全性证明:MAC-forge 实验
、
注意:
敌手不知道 \(k\)
敌手拥有 MAC 的 oracle access
敌手不能通过 \(Mac_k(\cdot)\) 产生最后的 \((m, t)\) (联想到 CCA 中,敌手不能通过 \(Dec(\cdot)\) 还原 challenge ciphertext \(c\))
与之前的 EAV-security, CPA-security, CCA-security 实验对比,这里的概率是 \(\epsilon(n)\) 而不是 \(\frac{1}{2}+\epsilon(n)\)
这是因为:之前的实验都是不可分辨 (indistinguishability) 实验,而这一实验要求敌手尝试自主生成 valid 的 \((m, t)\) 对,因此没有可以通过随机猜测获取的概率 \(\frac{1}{2}\)
(Lec 9 p.15 有相关问题):(unbounded computational power adversary; \((m_0, Mac_k(m_1)), P=\frac{1}{2}\); No, \(P=\frac{1}{2^6}\)) -
Replay Attacks : 重放攻击
以上我们介绍的 MAC 是无法抵御重放攻击的,因为它是 stateless 的
高级的 MAC maintain state:通过 sequence number (synchronized counter) 与 时间戳 (time-stamp) 来抵御重放攻击 -
Construct a Fixed-Length MAC
A Fixed-Length MAC 指的是,消息 \(m\) 与密钥 \(k\) 等长的 MAC
我们用伪随机函数 \(F_K\) 来构建一个固定长度的 MAC
-
Security of the Fixed-Length MAC Construction
证明的模式与证明 CPA encryption 安全性的模式一模一样
首先构造归约:
\(\mathscr{S}\) 尝试分辨伪随机函数 \(F_K\) 与真随机函数 \(f\in Func_n\),并利用敌手 \(\mathscr{A}\) 作为其子程序 (subroutine)
敌手 \(\mathscr{A}\) 进行 Message Authentication 实验 \(Mac-forge_{\mathscr{A}, \Pi}(n)\)
当 \(\mathscr{A}\) 利用 Oracle access 权限向 \(\mathscr{S}\) query \(Mac_k(m)\) 时,\(\mathscr{S}\) 就对 \(\mathscr{O}\) 进行询问,并将结果发回给 \(\mathscr{A}\)
若最后 \(\mathscr{A}\) 的输出是 valid 的:即 \(\mathscr{O}(m)=t\) 则 \(\mathscr{S}\) 输出 \(1\) 否则输出 \(0\)由于归约成立,以下两个式子均成立:
第一个式子是 \(\mathscr{O}\) 是伪随机函数 \(F_K\) 的情况
第二个式子是 \(\mathscr{O}\) 是真随机函数 \(f\) 的情况:由于 \(f\) 真随机,\(\mathscr{A}\) 不能通过研究 \(f(m_1), f(m_2), ...f(m_q)\) 预测到 \(t^{*}=f(m), m\notin {m_1, m_2, ...n_q}\),因此其能做出的最好决策只有输出一个随机的 \((m, t^{*})\):而 \(F_K(m)=t^{*}\) 的概率是 \(\frac{1}{2^n}\)
两式相减之后整理得到
需要注意的是,Not All PRFs are secure MACs
对于 PRF: \(\{0,1\}^{\lambda}\times \{0,1\}^{l_1(\lambda)}=\{0,1\}^{l_2(\lambda)}\)
若 \(l_2(\lambda)=c, \log \lambda, \ln \lambda\) 数量级则 MAC 不安全 (因为 \(\epsilon(\lambda)\) 此时变为 non-negligible) -
MAC for longer messages:CBC-MAC construction
之前我们介绍了定长 MAC:这种 MAC 要求信息长度 \(|m|\) 与密钥 \(|k|\) 一致
而 CBC(CipherBlock Chaining)-MAC construction 允许对更长的信息进行 MAC
与 CBC 加密进行对比:- CBC-MAC 是 deterministic 的,其 \(IV=0^n\),而 CBC 加密是随机化的,其 \(IV\) 要随机选取才能保证 CBC 的安全性
- CBC-MAC 只输出一个 block \(t_l\) 作为 MAC tag
(这个问题我自己想出来了!这样修改后的 CBC-MAC 无法通过 Message Authentication Experiment)
根本原因是:
CBC-MAC 中的敌手 \(\mathscr{A}\) 需要产出 \((t, m)\),意味着其可以自主选择 \(t\) 即 \(IV\) 的生成
而 CBC 中的 \(IV\) 是由 Enc 随机生成的,敌手无法进行操作,其只能操作 \(m\)
具体 attack:
query \(\mathscr{O}\) with \(m\) 得到 \(t=(t_0, t_l)\)
若 \(m=m_1||m_2||...m_l\)
构造 \(m'=\overline{m_1}||m_2||...m_l\) 与 MAC \(t'=(\overline{t_0}, t_l)\)
可证明 \((m', t')\) 是 valid 的
-
Security of the Basic CBC-MAC construction
CBC-MAC 安全当且仅当 \(l\) 是固定的 (另一种形式上的 fix-length:虽然密钥长度不一定要与信息长度等长,但是**信息的长度是固定的 \(|m|=l(n)\) **)
注意 \(l\) 指的是 block 的数量,\(n\) 指的是每个 block 的长度
若信息长度不固定,敌手可在 MAC security 实验中胜出
下面是当信息长度不固定时,敌手通过长度 \(l(n)\) 的信息与 \(n\) 的信息攻破长度为 \(l+1(n)\) 信息的 CBC-MAC 安全
\(\mathscr{A}\) queries \(\mathscr{O}\) with \(m_1, m_2\), \(|m_1|=l(n), |m_2|=n\)
\(\mathscr{A}\) gets corresponding \(t_1, t_2\)
\(\mathscr{A}\) could construct a valid \(l+1(n)\)-length \(m=m_{11}||m_{12}||...m_{1l}||(m_2\oplus t_1)\) and tag \(t=t_2\)
Thus CBC-CMC for messages whose length are \(l+1(n)\) is insecure
当信息长度固定时,Oracle 不会对敌手传入的长度非 \(l(n)\) 的信息进行回应 -
CBC-MAC for arbitrary-length messages
若我们需要传输非固定长度的信息且需要保证 CBC-MAC 安全,有三种改良方法- 将信息长度 \(l\cdot n\) 以 \(n\) 位的 string 表示,插入到信息的首端 (作为第一个 block)再计算 \(t_l\)
- 计算 \(k_l=F_k(l)\) 并以 \(k_l\) 作为执行 CBC-MAC 的密钥
- 计算 \(t=F_{k_2}(t), k_2\neq k\) 并使用 \(t\) 作为最后的 tag
可以发现这些方法都是在 Basic CBC-MAC 中添加了与 \(l\) 相关的随机性
Hash functions & Hash-MAC
(注意复习 exercise)
-
Hash Functions: Intro
哈希函数能够将 任意长 (arbitrary length) 的输入串 压缩 (compress) 成 长度固定的短串 (short, fix-length digest)
一个哈希函数越优秀,其避免 冲突 (collision) 的能力就越强
若任何敌手都无法在 PPT 时间内找到哈希函数 \(H\) 的冲突,我们说 \(H\) 是 collision resistant 的 -
Keyed Hash Functions
关于 \(s\) 的注意:- 不是所有的 \(s\) 都是 valid keys:\(s\) 一般由算法 \(Gen\) 产生,not necessarily in a uniform manner
- 与 \(F_k\) 不同,\(H^s\) 的 \(s\) 并不要求保密:也就是说,我们要求 \(H\) 的 collision resistant 建立在敌手已知 \(s\) 的情况下
-
Hash Functions: Definition
注意在 fix-length Hash functions 中,\(l'(n)\) 是 \(x\) 的长度,而 \(l(n)\) 是 \(H_s(x)\) 的长度 -
Collision-Finding Experiment:\(Hashcol_{\mathscr{A}, \Pi}\)
与各种加密方法一样,我们采用定义实验的方法来说明哈希函数的安全性,即 collsion resistance
-
Hash Functions: Security definition (collision resistant)
如上文介绍,哈希安全可以指 collision resistance (冲突抗性),这是哈希安全的一个最强的定义
除此之外,还有两个常见的弱化定义 (weaker notion),Preimage resistance (原像抗性) 与 Second-preimage resistance (次原像抗性)
下面我们将介绍这两个较弱的定义并探索这三个定义之间的关系 -
Preimage Resistance 原像抗性
即,不存在任何 PPT 敌手可以通过哈希值 \(y\) 找到其原像 \(x, H^s(x)=y\);在这个过程中,哈希函数与 \(s\) 均被敌手掌握
本质上而言,原像抗性代表着 \(H^s\) 是一个 one-way function: easy to compute, difficult to recover -
Second-preimage Resistance / Target-collision Resistance 次原像抗性
次原像抗性可以看作是冲突抗性 (collision resistance) 条件的放松:
在冲突抗性实验中,敌手掌握 \(s\) 与哈希函数 \(H\),要求输出 \(x_1, x_2, x_1 \neq x_2\) 使得 \(H^s(x_1)=H^s(x_2)\)
而在次原像抗性实验中,敌手掌握了 \(s\), \(H\) 与一条信息 \(x_1\):其只需要输出另一条信息 \(x_2\) 使得 \(H^s(x_1)=H^s(x_2)\) 即可 -
Collision Resistance implies Second-preimage Resistance
若 \(H\) 有冲突抗性,则其有次原像抗性
对于这类证明,我们可以通过证明他们的逆否命题来进行 (若想要正面进行证明,使用传统的 proof by reduction + 概率,PDF 上有具体过程)
注意,具有次原像抗性的 \(H\) 不一定是具有冲突抗性的,下面构造了一个具有次原像抗性但不具有冲突抗性的 \(H\)
(这里可以计算敌手赢得 second-preimage attack 实验的概率,可以发现是 negligible 的 - Lec11 Rec. 00:40:34) -
Second-preimage Resistance implies Preimage Resistance
若 \(H\) 有次原像抗性,则其有原像抗性
类似的,通过逆否命题
若 subroutine 执行 preimage attack 时返回的 \(x'=x\),simulator 不能攻破次原像抗性
而输出 \(\Pr[x'=x]=\frac{2^{l(n)}}{2^{l'(n)}}=2^{l(n)-l'(n)}\) (在平均意义上),而一般来说,\(l'(n) >> l(n)\),所以 \(\Pr[x'=x]\to 0\)
同样,具有原像抗性的 \(H\) 不一定拥有次原像抗性,见下例
-
Secure Hash
总的来说,哈希的三个安全定义遵循这样的关系
冲突抗性 Collision Resistance (最强) \(\rightarrow\) 次原像抗性 Second-preimage Resistance \(\rightarrow\) 原像抗性 Preimage Resistance
这里我想分析一下自己对于定义的强 strong 与 弱 weak 的理解
所谓强的定义,指的是对敌手的限制最少:若在这种定义下敌手都无法攻破方案的安全性,则说明该方案安全性很强
由此可以推出,若某个方案在强定义下是安全的,则其在弱定义下也是安全的
若某个方案的弱安全定义被攻破,则其强安全定义一定也会被攻破 -
Attack on Hash: Bruteforce
-
Attack on Hash: Birthday problem 生日悖论
在介绍生日攻击之前,我们先介绍生日悖论 (Birthday Problem)
首先,需要说明的是,在设计哈希算法的一般攻击 (general attack) 时,我们一般将哈希算法视作完全随机函数:因为我们设计的是一般攻击,这样的攻击是不会对不同哈希方案的特点进行分析的
生日悖论 (Birthday problem) 与 Balls into Bins 问题和这样的问题模型是一致的
经过证明(见下),\(m\) 个 balls 随机 分配到 \(N\) 个 bins 里,当 \(m \approx 1.2\sqrt{N}\) 时,存在 \(1\) 个 bin 中有 \(2\) 个 balls 的概率约为 \(50\%\)
-
Attack on Hash: Birthday attack 生日攻击
这样,我们构造了一个复杂度为 \(\mathscr{2^{\frac{n}{2}}}\) 的攻击算法,比 BruteForce \(2^n\) 要优秀很多
Birthday Attack 的两个 implications:
-
HASH-MAC: Message Authentication using Hash Functions
引入可看 PPT —— Lec11 的 idea 部分:
注意,直接使用 Hash Functions 作为 MAC tag 是不可行的,因为 Hash 的 \(s\) 是被敌手所掌握的,因此不能舍弃原来的 MAC 算法
使用 Hash-MAC 本质上来说是一种让 Fixed-Length MAC 认证 arbitrary length message 的一种方式
-
The security of HASH-MAC construction
若 fixed lengthed MAC \(\Pi\) 是 unforgeable 的且 Hash Functions \(H\) 是 Collision Resistant 的,那么 HASH-MAC \(\Pi'\) 同样是 unforgeable 的
在正式证明中,需要构造两个 proof of reduction:
1 是通过 \(\Pi'\) 的敌手攻破 \(H\) 的冲突抗性
2 是通过 \(\Pi'\) 的敌手攻破 \(\Pi\) 的安全性 (在未发生冲突的情况下)
具体可看 PPT
Authenticated Encryption 认证加密
-
引入与一些概念总结
Integrity:即 unforgeability,敌手无法 forge 出 valid 的密文 (在 \(Enc-forge\) 实验中) 或 \((m,t)\) 对 (在 \(Mac-forge\) 实验中)
一个 non-integrity 的消息可能在传输过程中被篡改,或是由敌手传输的假消息 (forged message)
Unforgeable MAC 能够提供 Message Authentication 与 Integrity
Confidentiality 与 Integrity 是正交的概念:它们都是信息安全的重要组分,然而拥有 Confidentiality 并不意味着 Integrity,拥有 Integrity 也并不意味着 Confidentiality
我们已经分别介绍了提供 Confidentiality 的各种 Encryption 方法与提供 Integrity 的各种 MAC 方法
接下来,我们要求将这两者结合起来:既提供 Confidentiality (保密性),又提供 Integrity (完整性),这样的加密方法被称为 Authenticated Encryption
这里的保密性指 CCA-security -
Malleability 与 Integrity
注意,non-malleability don't imply any types of integrity
我们可以参考 non-malleability 的定义
可构造一个 unforgeable 的加密方案 (这说明其提供 integrity),但它是 malleable 的 (详见 tutorial 2 slides) -
Adding MAC to a private-key encryption
注意,密文 \(c\) 经过了加密 \(Enc(\cdot)\) 与 MAC \(Mac(\cdot)\) 两种算法的某种 combination 而产生
-
The Unforgeable Encryption Experiment
联想 MAC 的 Unforgeable Encryption Experiment
敌手尝试构造一个有效的 \((m, t)\) 使得 \(Vrfy(m, t)=1\)
而对于加密方案 \(\Pi\),敌手尝试构造一个有效的 \(c\),使得 \(Dec(c)=m\) 而不会出现错误
-
Authenticated Encryption : Definition
先定义添加了 MAC 后的 private-key encryption 的 unforgeable,即其提供 integrity
即,通过了 \(Enc-Forge\) 实验的加密方案是 unforgeable 的
若该加密方案还能通过 \(PrivK^{CCA}\) 实验 (敌手获得 \(Dec(\cdot)\)),则该加密方案是一个 Authenticated Encryption -
Constructions for Authenticated Encryption
我们知道,在 Authenticated Encryption 中,获得密文 \(c\) 的算法是由 \(Enc()\) 与 \(Mac()\) 以某种方式 combine 而成的
具体来说,有以下三种 combination:- Encrypt-and-authenticate: 加密与认证分别独立进行
- Authenticate-then-encryption: 先进行认证,将 tag 与 m 合并后进行加密
- Encryption-then-authenticate: 先对 plaintext 进行加密,再认证密文
- Encrypt-and-authenticate: 加密与认证分别独立进行
-
Encrypt-and-authenticate (Eaa)
- Eaa 的组合可能甚至无法提供 EAV-security
这是因为 \(t\) 可能会泄露关于原文 \(m\) 的信息:毕竟,MAC 算法提供 integrity,却不一定提供 confidentiality
若 \(MAC_k(m)=F_k(m)\) 是 unforgeable 的 MAC,可以证明 \(MAC_k'(m)=F_k(m)||m\) 同样也是 unforgeable 的
然而,这一 unforgeable 的 \(MAC'\) 算法提供 \(0\) 保密性:它把原文 \(m\) 完全泄露了 - 若 Eaa 组合中的 MAC 算法提供了一定保密性 (例,EAV-secure),但如果其是 deterministic 的,则多次 MAC 后会泄露关于原文的信息 (原理与多次 OTP 不是 CPA-secure 的原理相同)
因此,Encrypt-and-authenticate 组合并非 Authenticated Encryption
- Eaa 的组合可能甚至无法提供 EAV-security
-
Authenticate-then-encrypt (Ate)
Ate 组合得到的加密方法可能不是 CCA-secure 的,我们通过一个例子来说明
由于是 CTR mode,易知该 \(Enc'\) 是 CPA-secure 的:但其与任意 unforgeable 的 MAC 通过 Ate 形成的加密方法不是 CCA-secure 的
敌手在 \(PrivK^{CCA}\) 实验中获得的 challenge ciphertext 为 \(c=Enc_{k_E}(m_b||Mac_{k_M}(m_b))\)
事实上,这个加密方法也不提供 integrity (unforgeablilty)
在观察到 \(c\) 后,敌手能够产生一个全新的 \(c'\) 使得 \(m:=Dec(c')\) 而不输出错误
这也符合 malleable 的方案一定不提供 integrity 的规律 -
Encrypt-then-authenticate (Eta): Secure!
Eta 组合先对原文进行加密,再对得到的密文 \(c\) 进行认证,最后输出 \(c'=(c,t)\)
若 \(Vrfy(c,t)=1\),输出 \(m=Dec_{k_E}(c)\),否则输出错误
可以证明,任意 CPA-secure 的加密方法与 strong unforgeable 的 MAC 经过 Eta 组合后形成的加密方法是一个 Authenticated Encryption
- Strong Unforgeable MAC
Strong Unforgeable MAC 给予了敌手更少的限制:若敌手连 Strong Unforgeable MAC 都无法攻破,就更加无法攻破 Unforgeable MAC 了
(这是因为 canonical 定义下的 MAC 本身就是 deterministic 的)
证明:
Unforgeable:
若敌手要产生一个全新的,有效的 \(c\),其必须产生一个全新的 \((c',t:=MAC(c'))\) 对;
由于 MAC 是 strong unforgeable 的,因此无法以 non-negligible 的优势实现
(若 MAC 是 unforgeable 的,则可能存在敌手能以 non-negligible 的优势找到 \((m, t')\),其中 \(m\in Q\),而 \(t'\neq Q\),\(t\) 与 \(t'\) 均是 \(m\) 的两个可能的 tag)
CCA-secure:
这里将 CCA-secure 归约到 CPA-secure 的方法是:由于 MAC 的存在,\(Dec(\cdot)\) 无法使敌手获得任何额外的信息 - Strong Unforgeable MAC
-
Independent Keys for Encryption and Authentication
加密与认证的密钥必须是不同的:见下例
使用相同密钥进行加密与认证,即使加密是 CCA-secure 且认证是 unforgeable 且采用 Eta 形式组合的加密方法,最后甚至会将原文完全泄露 -
Attacks on Authenticated Encryption
有三种针对 Authenticated Encryption 的攻击,分别是
Replay Attacks,Reorder Attacks,Reflection Attacks (很好理解,见 Lec 12 Slides)
在信息中加入 counter 与 identity 等信息可以阻止这些攻击,这被称为 Secure Sessions using Authenticated Encryption