Security Reduction学习笔记(1):密码系统与安全模型的定义
课件地址:Book (uow.edu.au),原作者声明该课件对人类和外星人免费开放
( ̄_ ̄|| )
b站上郭老师本人录制的中文讲课视频:安全归约(第一讲)_哔哩哔哩_bilibili
博主自制的扫描版:安全归-郭福春_compresd.pdf - 蓝奏云 (lanzoum.com)
现代密码学概念:
现代密码学与经典密码学的区别在于它强调定义(definitions)、模型(models)和证明(proofs).
定义澄清:密码学(Cryptology)= 设计密码学(Cryptography)+分析密码学(Cryptanalysis)
密码系统(Cryptosystem):一个密码系统包含一套算法,该系统提供一个或多个安全服务.(例如"数字签名")
密码方案(Scheme):一个密码系统的具体实现.(例如,"ElGamal签名体系")
以上几个概念的关系:
如何定义密码系统:
以数字签名算法为例
-
动机(Motivation),或称该算法提供何种安全服务
(例如Alice想让其他人知道某消息$m$是由自己发布的)
-
涉及哪些实体(Entities)
$(Authority,Signer,Verifier)$
-
包含哪些算法
$(SysGen,KeyGen,Sign,Verify)$
-
这些算法都是由谁执行的
$SysGen (Authority), KeyGen (Signer), Sign (Signer), Verify (Verifier)$
-
每个算法的输入输出都是什么
$SysGen(\lambda) \to SP$
$KeyGen(SP) \to (pk,sk)$
$Sign(SP,sk,m)\to \sigma_m$
$Verify(m,\sigma_m,SP,pk)\to \{0,1\}$
-
- 必须满足什么正确性
合法生成的签名必须被Verify算法接受,非法生成的签名被Verify算法接受的可能性极小
如何定义安全模型:
安全模型可以看作是对密码系统的多种攻击的抽象。如果所提出的方案在安全模型中是安全的,那么它就可以安全地抵御可以在此安全模型中描述的任何攻击。
使用攻击者(adversary)和防御者(challenger)之间的博弈来描述安全模型.
- 防御者是一个密码系统中密钥的拥有者.
- 攻击者试图攻破这个密码系统.
安全模型的定义由如下几部分组成
- 攻击者与防御者之间的初始化
- 攻击者的能力(Capabilities)
- 攻击者可以询问什么
- 什么时候攻击者可以询问
- 安全目标(Security Goal):怎样才算攻破这个密码方案(求解出密钥,伪造合法信息...)
- (攻击者拥有的)优势(Advantage):定义一个参数(比如攻击者伪造出合法签名的概率),满足
- 如果这个参数可忽略,则密码系统是安全的
- 如果这个参数不可忽略,则密码系统是不安全的
例:对数字签名的,针对选择明文攻击的,不可伪造性安全模型(EU-CMA)
-
初始化:
设SP为系统参数,生成密钥对$(pk,sk)$,攻击者获得$pk$,防御者持有$pk,sk$
-
攻击者能力:
生成密文$m$发送给防御者,防御者生成$m$的合法签名$\sigma_m$并发送回来,此后,攻击者可根据防御者上一次的回答,自适应地选择下一次发送的密文
-
安全目标:
攻击者选择一个尚未询问过的$m'$,生成$\sigma_{m'}$,若能被Verify算法通过,则赢得博弈.
-
量化的攻击者优势:
$(m',\sigma_{m'})$被Verify算法接受的概率
关于安全模型的备注:
一个密码系统可能提供多个安全服务.(例如比特承诺(密码协议学习笔记(4):比特承诺 - Isakovsky - 博客园 (cnblogs.com))同时保证隐藏性和绑定性)
那么每个安全服务可能需要不同的安全模型.
当然,一个安全模型也可以涵盖多个安全服务.
安全模型有强(Strong)弱(Weak)之分,越强的安全模型,攻击者拥有的手段越多(比如选择明文攻击模型就比唯密文攻击模型强),要达成的攻击目标越轻松(只要求攻击者伪造信息的模型,相比要求攻击者还原密钥的模型更强).在越强的安全模型下能抵抗攻击,说明这个密码系统越鲁棒.
习题:
在线/离线签名:
动机:
- 用预计算的方式加速签名的生成
- 离线模式下,大多数繁重的计算任务可在不知道待签名信息的情况下预计算
- 在线模式下,可利用离线模式时计算出的信息快速生成签名
尝试为该系统构造密码系统定义和安全模型.
参考答案
在线/离线签名系统定义:
动机:
用预计算的方式加速签名的生成
实体:
$Signer,Verifier$
执行者与算法:
$Signer: KeyGen(\lambda)\to (pk,sk)$
$Signer: OfflineParamGen(sk)\to param$
$Signer: OnlineSign(sk,param,m)\to\sigma$
$Verifier: Verify(pk,m,\sigma)\to\{0,1\}$
要满足的正确性:
合法生成的签名必须被Verify算法接受,非法生成的签名被Verify算法接受的可能性极小
对在线/离线签名的,针对选择明文攻击的,不可伪造性安全模型定义:
初始化:
设$SP$为系统参数,生成密钥对$(pk,sk)$,攻击者获得$pk$,防御者持有$sk$
防御者使用$sk$生成$param$
攻击者能力:
生成密文$m$发送给防御者,防御者生成$m$的合法签名$\sigma_m$并发送回来,此后,攻击者可根据防御者上一次的回答,自适应地选择下一次发送的密文
安全目标:
攻击者选择一个尚未询问过的$m'$,生成$\sigma_{m'}$,若能被$Verify$算法通过,则赢得博弈.
量化的攻击者优势:
$(pk,m',\sigma_{m'})$被$Verify$算法接受的概率
基于身份的签名:
动机:
- 由可信机构生成主密钥对,包括主公钥和主私钥
- 系统中用户可申请一个个人密钥对,个人公钥就是用户身份,例如用户Alice的个人公钥就是$ID="Alice"$,而个人私钥则是通过主密钥对和个人公钥生成的.
- 用户可通过个人密钥对,对消息进行签名
- 验证者可通过主公钥和签名者的个人公钥,验证签名的有效性
尝试为该系统构造密码系统定义和安全模型.
参考答案
基于身份的签名系统定义:
动机:
用户直接将其$ID$作为公钥,私钥则是可信机构使用用户$ID$生成的
实体:
$CA,Signer,Verifier$
执行者与算法:
$CA: SecretKeyGen(SP,ID)\to(sk)$
$Signer: Sign(sk,m)\to\sigma$
$Verifier: Verify(ID,m,σ)\to\{0,1\}$
要满足的正确性:
身份为$ID$的用户合法生成的签名,连同它的$ID$一起,必须$Verify$算法接受,非法生成的签名被$Verify$算法接受的可能性极小
基于身份的的签名,针对选择ID攻击的,任意ID对应的签名不可伪造性安全模型定义(较强的模型):
初始化:
设$SP$为系统参数
攻击者能力:
生成用户$ID$发送给防御者,防御者生成$ID$对应的密钥$sk$并发送回来(攻击者自然可以通过此$sk$任意生成签名),此后,攻击者可根据防御者上一次的回答,自适应地选择下一次发送的$ID$
安全目标:
攻击者选择一个尚未询问过的$ID'$,选择一个明文$m$,然后生成一个签名$\sigma_{m'}$,若$(ID',m,\sigma_{m'})$能被$Verify$算法通过,则赢得博弈.
量化的攻击者优势:
$(ID',m,\sigma_{m'})$被$Verify$算法接受的概率
基于身份的的签名,针对选择明文攻击的,固定ID对应的签名不可伪造性安全模型定义(较弱的模型):
初始化:
设$SP$为系统参数,$ID$为用户身份,防御者生成$ID$对应的$sk$,将$ID$发送给攻击者
攻击者能力:
生成明文$m$发送给防御者,防御者生成签名$\sigma_{m}$并发送回来,此后,攻击者可根据防御者上一次的回答,自适应地选择下一次发送的明文
安全目标:
攻击者选择一个尚未询问过的明文$m'$,然后生成一个签名$\sigma_{m'}$,若$(ID,m,\sigma_{m'})$能被$Verify$算法通过,则赢得博弈.
量化的攻击者优势:
$(ID,m,\sigma_{m'})$被$Verify$算法接受的概率
公钥加密:
动机:
- Bob要向Alice发送消息,但它们之间没有共享密钥
- Alice生成一个密钥对$pk,sk$,将$pk$发送给Bob
- Bob将密文$m$使用$pk$加密为$c$,将$c$发送给Alice
- Alice使用$sk$将$c$解密为$m$
尝试为该系统构造密码系统定义和安全模型.
参考答案
公钥加密系统定义:
动机:
在没有共享密钥的情况下,使用公钥加密实现加密通信
实体:
$Alice,Bob$
执行者与算法:
$Alice: KeyGen(\lambda)\to(pk,sk)$
$Bob: Enc(pk,m) \to c$
$Alice: Dec(pk,c) \to m$
要满足的正确性:
只有持有正确私钥的用户才能完成对密文的解密,不持有对应私钥的用户无法完成解密
公钥加密系统,针对选择密文攻击的,秘密性安全模型:
初始化:
设$\lambda$为系统参数,防御者生成$pk,sk$,将$pk$发送给攻击者
攻击者能力:
生成密文$c$发送给防御者,防御者将其解密为$m$并发送回来,此后,攻击者可根据防御者上一次的回答,自适应地选择下一次发送的密文
安全目标:
防御者生成明文$m'$,将其加密为$c'$并发送给攻击者,攻击者回复一个$m''$,若$m''=m'$,则赢得博弈.
量化的攻击者优势:
$m''=m'$的概率
基于身份的加密:
动机:
- 由可信机构生成主密钥对,包括主公钥和主私钥
- 系统中用户可申请一个个人密钥对,个人公钥就是用户身份,例如用户Alice的个人公钥就是$ID="Alice"$,而个人私钥则是通过主密钥对和个人公钥生成的.
- 另一个用户Bob要向Alice发送消息$m$时,使用主公钥和Alice的个人公钥将消息加密为$c$
- Alice收到后,使用个人私钥和主公钥提取消息$m$
尝试为该系统构造密码系统定义和安全模型.
参考答案
基于身份的加密系统定义:
动机:
用户直接将其ID作为公钥,私钥则是可信机构使用用户ID生成的
实体:
$CA,Alice,Bob$
执行者与算法:
$CA: SecretKeyGen(SP,ID) \to (sk)$
$Bob: Enc(ID,m) \to c$
$Alice: Dec(sk,c) \to m$
要满足的正确性:
只有持有正确对应$ID$私钥的用户才能完成对密文的解密,不持有对应私钥的用户无法完成解密
公钥加密系统,针对选择密文攻击的,秘密性安全模型:
初始化:
设$SP$为系统参数,防御者生成$ID,sk$,将$ID$发送给攻击者
攻击者能力:
生成密文$c$发送给防御者,防御者将其解密为$m$并发送回来,此后,攻击者可根据防御者上一次的回答,自适应地选择下一次发送的密文
安全目标:
防御者生成明文$m'$,将其加密为$c'$并发送给攻击者,攻击者回复一个$m''$,若$m''=m'$,则赢得博弈.
量化的攻击者优势:
$m''=m'$的概率
基于身份广播的加密:
动机:
- 基于身份的加密的扩展
- 使用一组$n$个用户的身份来加密信息
- 如果任何用户的身份在该集合中,则该用户可使用自己的私钥解密
- 密文长度应当为$n$的亚线性级,否则不如干脆直接发送$n$个用不同用户公钥生成的密文.
尝试为该系统构造密码系统定义和安全模型.
参考答案
基于身份广播的加密系统定义:
动机:
用户直接将其ID作为公钥,私钥则是可信机构使用用户ID生成的
实体:
$CA,Alice,Bob$
执行者与算法:
$CA: SecretKeyGen(SP,ID) \to (sk)$
$Bob: Enc(IDs=\{ID_0,ID_1,\cdots\},m) \to c$
$Alice: Dec(sk_i,c) \to m$
要满足的正确性:
对于广播集合,只有持有与其中任意一个$ID$对应的私钥的用户才能完成对密文的解密,不持有对应私钥的用户无法完成解密
公钥加密系统,针对选择密文攻击的,秘密性安全模型:
初始化:
设$SP_0,SP_1,\cdots$为一组系统参数,防御者生成$(ID_0,sk_0),(ID_1,sk_1),\cdots$,将$ID_0,ID_1,\cdots$发送给攻击者
攻击者能力:
生成密文$c$发送给防御者,防御者使用所有私钥$sk_0,sk_1,\cdots$将其解密为$m_0,m_1,\cdots$并发送回来,根据攻击者在生成时,作为参数输入的用户组,这些明文可能有的合法,有的非法,此后,攻击者可根据防御者上一次的回答,自适应地选择下一次发送的密文
安全目标:
防御者生成明文$m'$,使用任意的用户组将其加密为$c'$并发送给攻击者,攻击者回复一个$m''$,若$m''=m'$,则赢得博弈.
量化的攻击者优势:
$m''=m'$的概率