Introduction to modern cryptography 第二章阅读笔记
Perfectly Secret Encryption
- 随机数生成
- 2.1 定义
- (1) Perfect Secrecy
- 定义一(不可溯源) ----> DEFINITION 2.3
- 定义二(不可区分)
- 定理一 ----> LEMMA 2.5
- (2) 完美不可区分性
- 定义一(不可溯源) ----> DEFINITION 2.6
- 定理一 ----> LEMMA 2.7
- 2.2 一次一密
- 缺点
- 2.3 完全保密的限制
- 2.4 香农的定理
本章大部分证明已略去,需要的读者请自行翻阅原书,或者可在评论区进行讨论。
随机数生成
现代随机数生成算法共以下两步:
- 得到一个高熵的数据池
- 处理高熵数据用以生成比特流
高熵数据池的构成需要不可预知的数据来源,如外部输入和物理现象,前者可以是网络事件的延迟、后者可以是热放射周期。
处理高熵数据以生成随机比特流的正式方式在以后讨论,此处仅简单介绍一种方法:假设数据池中有一不随机比特序列,其中 1 的出现概率为 p,0 出现的概率为 1 - p;此时我们选择当序列中出现 “01” 时输出 0、出现 “10” 时输出 1 (其余情况不输出),便可保证输出的比特序列是均匀的。
注意,密码学中随机数生成器是有明确要求的,必须使用“为密码使用设计”的随机数生成器而不是通用随机数生成器,比如C语言中 stdlib.h 里的函数 rand( ) 并不满足密码学使用。
2.1 定义
- M\mathcal{M}M:明文空间
- K\mathcal{K}K:密钥空间。Gen 可能生成的所有密钥集合
- C\mathcal{C}C:密文空间。Enc 可能生成的所有密文集合
- Gen:密钥生成算法。根据某些分布生成密钥 k 的概率性算法
- Enc:加密算法。输入k∈Kk \in \mathcal{K}k∈K和m∈Mm \in \mathcal{M}m∈M生成密文 c 的概率性算法,写作 c←Enck(m)c \leftarrow Enc_k(m)c←Enck(m) (当为确定性算法时写作 c:=Enck(m)c:= Enc_k(m)c:=Enck(m))
- Dec:解密算法。输入k∈Kk \in \mathcal{K}k∈K和c∈Cc \in \mathcal{C}c∈C生成明文 m∈Mm \in \mathcal{M}m∈M 的算法。满足 perfect correctness 的 Dec 可称为确定性解密算法,同时可记作 m←Enck(c)m \leftarrow Enc_k(c)m←Enck(c)
- perfect correctness:对于所有 k∈Kk \in \mathcal{K}k∈K和m∈Mm \in \mathcal{M}m∈M 以及任何 Enc 生成的 c,可保证 Deck(c)=mDec_k(c) = mDeck(c)=m的概率为 1.
- KKK: 表示 Gen 生成密钥取值的随机变量
- MMM:表示被加密明文的随机变量,需要独立于 KKK
- CCC:表示 Enc 输出密文的随机变量
- Pr[K=k]\mathrm{Pr}[K = k]Pr[K=k]:Gen 生成的密钥为 k 的概率
- Pr[M=m]\mathrm{Pr}[M = m]Pr[M=m]:明文取值于 m∈Mm \in \mathcal{M}m∈M 的概率
- Pr[C=c]\mathrm{Pr}[C=c]Pr[C=c]:密文等于固定值 c 的概率
(1) Perfect Secrecy
假定敌手知道 MMM 的概率分布,即敌手知道不同信息被发送的概率,同时敌手知道使用的加密方案,唯一不知道的是通信双方共享的密钥。敌手可窃听到通信双方的交流内容,即该攻击方式为仅密文攻击。
对于可实现完全保密(perfect secret)的密码方案,攻击者窃听到的密文需要对其识别明文没有任何帮助,即以被观察到的密文为条件,明文 m∈Mm \in \mathcal{M}m∈M被发送的后验概率应该和 m 被发送的先验概率没有区别,即密文不会揭露明文的任何信息。
定义一(不可溯源) ----> DEFINITION 2.3
对于明文空间 M\mathcal{M}M 的密码方案 (Gen, Enc, Dec),当对于 MMM 中所有的概率分布,每个明文 m∈Mm \in \mathcal{M}m∈M 和每个满足 Pr[C=c]>0\mathrm{Pr}[C=c] > 0Pr[C=c]>0的密文 c∈Cc \in \mathcal{C}c∈C,有:
Pr[M=m∣C=c]=Pr[M=m]\mathrm{Pr}[M = m | C = c] = \mathrm{Pr}[M = m] Pr[M=m∣C=c]=Pr[M=m]
则可以说该密码方案是完全保密的,其中c∈Cc \in \mathcal{C}c∈C是为了保证条件概率基于零概率时间。
定义二(不可区分)
此定义基于密文分布不依赖于明文,即对于任意两个明文 m,m′∈Mm, m' \in \mathcal{M}m,m′∈M, m 被加密时的密文分布要和 m’ 被加密的密文分布相同,公式表示如下:
Pr[EncK(m)=c]=Pr[EncK(m′)=c]\mathrm{Pr}[Enc_K(m) = c] = \mathrm{Pr}[Enc_K(m') = c] Pr[EncK(m)=c]=Pr[EncK(m′)=c]
其中概率是基于 KKK 的选择和 Enc 的随机性,同时以上概率都只基于加密方案,并不依赖于 M\mathcal{M}M的底层分布。以上情景表示密文中不包含明文相关的任意信息,即攻击者无法区分 m 和 m’ 的加密形式。
定理一 ----> LEMMA 2.5
带有明文空间 M\mathcal{M}M 的加密方案 (Gen, Enc, Dec) 是完全保密的,当且仅当 M\mathcal{M}M 中的每个 m, m’ 和 C\mathcal{C}C 中的每个 c 都满足定义二中的公式。
(2) 完美不可区分性
该部分为完全保密的另一等效概念。下面介绍敌对不可区分实验 PrivKA,Πeva\mathrm{PrivK}_{\mathcal{A}, \Pi }^{\mathrm{eva}}PrivKA,Πeva,其中 A\mathcal{A}A 表示敌对方,Π\PiΠ = (Gen, Enc, Dec) 表示明文空间为 M\mathcal{M}M 的密码方案:
- 敌手 A\mathcal{A}A 生成明文对 m0,m1∈Mm_0,m_1 \in \mathcal{M}m0,m1∈M
- 使用Gen 生成密钥 k, 同时选定比特位 b∈{0,1}b \in \{0, 1\}b∈{0,1}。计算 c←Enck(mb)c \leftarrow Enc_k(m_b)c←Enck(mb) 并将其发送至 A\mathcal{A}A,其中 c 为挑战密文
- A\mathcal{A}A 生成比特 b’
- 实验的输出被定义为:1,当 b’ = b; 反之为 0.当实验输出为1 时我们称 PrivKA,Πeva=1\mathrm{PrivK}_{\mathcal{A}, \Pi }^{\mathrm{eva}} = 1PrivKA,Πeva=1 并称 A\mathcal{A}A 成功
定义一(不可溯源) ----> DEFINITION 2.6
我们称明文空间 M\mathcal{M}M 的密码方案 Π\PiΠ = (Gen, Enc, Dec) 为完美不可区分的当且仅当对于每一个敌手 A\mathcal{A}A 都有
Pr[PrivKA,Πeva=1]=12\mathrm{Pr}[\mathrm{PrivK}_{\mathcal{A}, \Pi }^{\mathrm{eva}} = 1] = \frac{1}{2} Pr[PrivKA,Πeva=1]=21
定理一 ----> LEMMA 2.7
加密方案 Π\PiΠ 是完全保密的当且仅当其是完美不可区分的。
2.2 一次一密
我们定义 a⊕ba \oplus ba⊕b 表示两等长二进制串 a 和 b 的逐比特异或。在一次一密方案中,密钥是和明文等长的独立字串,密文只需明文和密钥逐比特异或便可得到。正式定义如下:
给定整数 l>0\mathscr{l} > 0l>0,明文空间 M\mathcal{M}M,密钥空间 K\mathcal{K}K 和密文空间 C\mathcal{C}C 都等价于 {0,1}l\{0, 1\}^l{0,1}l (长度 lll 的二进制串)
- Gen: 密钥生成算法根据均匀分布从密钥空间 K={0,1}l\mathcal{K} = \{0, 1\}^lK={0,1}l选择一密钥
- Enc: 给定密钥 k∈{0,1}lk \in \{0, 1\}^lk∈{0,1}l 和明文 m∈{0,1}lm \in \{0, 1\}^lm∈{0,1}l ,加密算法的输出为密文 c:=k⊕mc := k \oplus mc:=k⊕m
- Dec: 给定密钥 k∈{0,1}lk \in \{0, 1\}^lk∈{0,1}l 和密文 c∈{0,1}lc \in \{0, 1\}^lc∈{0,1}l ,解密算法的输出为明文 m:=k⊕cm := k \oplus cm:=k⊕c
从正确性来看,对于每个密钥 k 和每段明文 m 都有 Deck(Enck(m))=k⊕k⊕m=mDec_k(Enc_k(m)) = k \oplus k \oplus m = mDeck(Enck(m))=k⊕k⊕m=m,即一次一密是有效的密码方案。
缺点
- 密钥长度需要和明文一致
- 密钥只能使用一次
2.3 完全保密的限制
总的来说,完全保密要求密码方案的密钥空间至少和明文空间一样大。(另一限制是密钥只能使用一次)
2.4 香农的定理
该定理首先密码方案 (Gen, Enc, Dec) 要求 ∣M∣=∣K∣=∣C∣|\mathcal{M}| = |\mathcal{K}| = |\mathcal{C}|∣M∣=∣K∣=∣C∣,即三个空间大小一致,在此基础上当且仅当满足以下两点才可称该方案是完全保密的:
- 每个密钥 k∈Kk \in \mathcal{K}k∈K 都是以 1/∣K∣1 / |\mathcal{K}|1/∣K∣ 的概率被 Gen 选中的
- 对于每个明文 m∈Mm \in \mathcal{M}m∈M 和每个密文 c∈Cc \in \mathcal{C}c∈C,存在唯一的密钥 k∈Kk \in \mathcal{K}k∈K 使得 Enck(m)\mathrm{Enc}_k(m)Enck(m) 的结果为 c
Introduction to modern cryptography 第二章阅读笔记相关推荐
- Introduction to modern cryptography 第一章阅读笔记
文章目录 前言 1.1 密码学以及现代密码学 1.2 私钥密码的设定 (1) 一些定义 (2) 密码方案的语法 (3) Kerckhoffs原理 1.3 一些密码方案 (1) Caesar's cip ...
- 西瓜书第二章阅读笔记
西瓜书第二章阅读笔记 第二章 模型评估与选择 1.经验误差与过拟合 2.模型评估方法 2.1 留出法 hold out 2.2 交叉验证法 cross valildation 2.3 自助法 boot ...
- 《Introduction To Modern Cryptography》读书笔记二
<Introduction To Modern Cryptography>读书笔记二 本笔记纯粹个人读书习惯与相应见解,内容归纳完全出于个人需要与个人局限,如有修改意见(比如哪儿应该是值得 ...
- 前言 - 现代密码学导论 Introduction to Modern Cryptography
Introduction to Modern Cryptography - Jonathan Katz and Yehuda Lindell 前言 这本书介绍了密码学的基本原理和原则.旨在作 ...
- 西瓜书第三章阅读笔记
西瓜书第三章阅读笔记 第三章 线性模型 1.机器学习三要素 2.基本形式 3.线性回归 3.1 模型 3.2 策略 3.3 求解算法 4.对数几率回归 4.1 模型 4.2 策略 4.3 求解算法 5 ...
- 西瓜书第四章阅读笔记
西瓜书第四章阅读笔记 1.基本概念 1.1 基本算法 1.2 信息熵 1.3 信息增益 2.ID3决策树 3.C4.5决策树 4.CART决策树 5.剪枝操作 6.连续与缺失值处理 7.多变量决策树 ...
- 西瓜书第一章阅读笔记
西瓜书第一章阅读笔记 第一章 绪论 1.机器学习基本术语 2.归纳偏好 3.所有学习算法一样优秀? 4.补充资料 第一章 绪论 1.机器学习基本术语 记录:对一个事件或对象的描述,也称为"示 ...
- 【ERP】ERP发展阶段有哪些?对ERP发展各个阶段概念的理解(20年3月29日第二章学习笔记)
ERP发展历经五大阶段 1.ROP库存订货点法 2.MRP物料需求计划 3.闭环MRP 4.MRPII制造业资源计划 5.ERP企业资源计划 1.ROP库存订货点法 ROP,库存订货点法,很好理解,就 ...
- Hinton机器学习与神经网络课程的第二章学习笔记
Hinton机器学习与神经网络课程的第二章学习笔记 该笔记为自己以后方便查阅,要是有大神感觉我的笔记有哪些地方记的有误差或者不对的话也欢迎指出 文章目录 Hinton机器学习与神经网络课程的第二章学习 ...
- 第一行代码Android第二章读书笔记
第一行代码Android第二章读书笔记 Activity 1.1 手动创建活动 1.2 Toast和Menu/销毁活动 Intent 2.1 显示/隐式 2.2 传递/返回数据 活动的生命周期 3.1 ...
最新文章
- Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource c
- 用开关控制蜂鸣器_室内照明控制系统的调试与检修
- 【Tiny4412】制作最小文件系统脚本
- 关于selectNodes与selectSingleNode的用法的区别
- AgileEAS.NET平台开发案例-药店系统-项目说明
- ps -ef|grep httpServer|grep -v grep|cut -c 9-15|xargs kill -9
- python中的leap_Python-规则打破了leap年?
- 软件工程小学期经历part1
- windows 搭建简单c++环境【mingw】
- 大一计算机基础考试知识点,大学计算机基础考试知识点(完整版)
- 软考中级哪一门比较好过?我建议你考这个。
- 如何用python爬取抖音视频列表
- python怎么打星号金字塔_python打印星号金字塔的方法_后端开发
- 计算机的垃圾站是在硬盘,电脑垃圾回收站在哪里
- 车载蓝牙音乐主动获取播放进度(安富方案)
- Notepad++ 7.6(64-bit)安装Jsonviewer插件
- 一致性哈希算法原理详解
- Espressif 玩转 固件下载
- RxJava2.x是一个非常棒的流式编程,采用的观察者模式思想,事件的产生者产生事间之后发送给绑定的接受者,接受顺序与发送顺序一致.但是 是独立于RxJava1.x存在,本文讲解RxJava2.x的简
- ZooKeeper之节点基本操作(一)