安全规约第一讲
写在前面
安全规约课程笔记,整理一下以备以后查询使用,如果有错误欢迎留言讨论
本文的内容和图片均来自b站的郭福春老师的安全规约课程:https://space.bilibili.com/2095536965
密码发展史
经典密码:古罗马
近代密码:二战
现代密码(科学):70年代以后
模型:计算模型,安全模型
概念澄清:
Cryptography:对称密码,工要密码,等等,是一种方法来达到一种目标(security)
Cryptanalysis:已有Cryptography的分析。比如分析一些公钥密码,提出一些攻击方案.etc
Cryptosystem:提出一种具体的security studys
Scheme:实现cryptosystem的一种方案
四者关系如下:
如何定义一个算法
当现有方案无法解决需求的时候,就必须要提出一种新的算法来满足需求
具体步骤:
确定一个完整的安全目标
确定涉及到几个参与方
需要确定至少需要几个算法(当然越少越好,但也不可能无限制优化)Ex:签名,有一个签名算法必然有一个对应的验证算法。
每个算法的名字该如何命名(类似编程中的函数名)
每个算法应该由2中的谁运行(为了给审稿人理清思路hhh)
每个算法的输入输出是啥
算法的正确性(下回分解)
举个例子:定义一个数字签名的算法
上面就是一个讲故事的方式(只有讲故事的时候才Alice,bob,正式的描述算法的时候要精确一些,比如服务器,路由器,云,AS等,这种场景下使用ABC审稿人会锤爆你的狗头#滑稽),在这个过程中:
参与方:signer,verifier
有几个算法:看涉及到几个计算,一个计算对应一个算法。故有3个计算(算法)+ 1个系统参数(system parameter generation)
给算法取名:SysGen,KeyGen,Sign,Verify
注:取名的要求
- 美观
- 简洁
- 易懂
Ex:KeyGen(完美),KeyGeneration(太长),Key_Gen(少用下划线),Key Gen(不要用空格),i(审稿人提刀在路上了)
- 每个算法由谁运行:
- 抽象化:
- 箭头和等号是有区别的,谨慎使用
- 输入和输出的符号有一般的约定,不要乱用
- 就算抄,也要改几个符号,简简单单的修改
- 正确性:
如何定义一个安全模型(第29期)
如何分析一个方案的安全性
可以从以下几个方面考虑:
如何分析一个scheme的安全性
一个scheme(在安全模型下是安全的)可以抵抗所有(any)攻击吗?
安全模型是为了提出一个方案而定义的吗
- 安全模型是为了提出一个方案而定义的吗
什么是安全模型?
一个安全模型可以当成一个集合,攻击类型可以看成一个一个点。一个集合无法包含所有的点,即一个安全模型无法包含所有的攻击
抽象攻击:侧重介绍敌手可以获取什么信息以及如何获取这些信息。
安全模型是为了cryptosystem定义而不是为了某一个具体scheme定义
比如有个cryptosystem;里面有个scheme用到了hash函数,那你定义安全模型的时候就不能用hash函数,因为一个cryptosystem不一定用到hash函数,如果你定义了hash函数就意味着所有的cryptosystem都用到了hash函数
定义安全模型的方法
game,下面用的这个种
伪代码(对新手不友好)
Game方法:通过一种game的方式(adversary vs challenger)来描述
challenger:crypsystem的拥有者,产生公私钥
adversary:尝试break这个cryptsystem(而不是scheme)
显而易见,二者存在信息差
则一个安全模型定义了:
adversary能力:
what:他可以查询什么信息
when:他什么时候可以查询这些信息
adversary的安全目标:
- how:如何赢得这场game(break the cryptsystem)
定义安全模型的四步:
- setup:初始化定义双方
2.capabilities:描述什么时间敌手会以什么方式获取信息(query),并且challenger要诚实的回应(response)
当然要诚实的回答,这个问题类似减法的时候高位不给低位借咋整(锤爆高位的狗头#滑稽)
3.安全目标:定义一个敌手赢得游戏的目标
4.优势(advantage):定义一个满足条件的参数(parameter)
Ex:对于一个签名方案,定义一个安全模型
- 并不是所有的放哪都有Advantage
- 有些行为必须被禁止,比如问问challenger的私钥是啥
什么时候该定义一个安全模型
当我们需要考虑一个算法的输入和输出的是时候就可以定义一个安全模型。
需要确定哪些需要考虑,哪些不需要,并且抽象化
比如确认参与方应该问啥
形式化描述一个安全模型(可以借鉴,不能copy)
Ex:
安全模型定义的一些注释(听不清了,变身截图狂魔)
- 一个Cryptosystem可能有多个sercuity service
比如Alice给bob发消息,会对其加密并且签名,故这里alice提供了两个服务,签名和加密。
- 一个sercuity service 需要一个security model 去定义
- 一个安全模型可以对应多个sercuity service
standard model是一种计算模型
standard security model 是一种安全模型
标准的安全模型不一定是最强的,没有对比的话很难区分standard & strong
标准/强/弱的区别在证明的时候区别是很大的
19期文章有更加详细的解释
没有安全模型,就无法把攻破方案抽象成解决一个计算问题
无法把攻破方案抽象成解决一个计算问题,就没法定义一个安全模型
一些例子和练习
- 以上的定义和解释可以从一些论文和公开资料中获得
密码学报 2019 第六期的文章也有一些资料可以查看