本文将讨论密码学中的 前向安全性(Forward Security) 与 后向安全性(Backward Security) ,希望读完本文后,你再也不会混淆这两个概念。

在开始本文之前,希望你有如下预备知识:

  • 密码学(Cryptography)是一门什么样的学科?
  • 单向函数(One Way Function)是什么?有哪些例子?
  • 密码算法与密钥是什么?敌手(Adversary)在密码学中是一个怎样的概念?

单向函数与密码算法

现代密码学的基石:伪随机性

Pseudorandomness,即伪随机性,是一个现代密码算法必须要具备的性质,因为从反面考虑,如果你设计的密码算法都做不到「看起来」是随机的,那岂不是很容易就被攻破了?

当然,伪随机性在数学上有着更严格的定义与论证,在密码学中也有更深厚的历史背景(比如其实是姚期智院士率先给出的伪随机性正式定义[1])。伪随机作为现代密码学的核心要素,如何更好地实现它一直是许多科学家追逐的目标,比如采用物理的随机熵源(真随机数发生器),或者使用一个秘密的随机种子(密钥)等等。一个算法的根基如果不具备良好的伪随机性,Rivest也不能打包票对你说“哦我的老伙计,试试这个RSA吧,它真的很棒”。

在现代密码算法中,伪随机性可以由伪随机数发生器(PseudoRandom Number Generator,PRNG)来提供。这就是说,要设计一个具备伪随机性的密码算法,你可以先明确怎么得到一个PRNG。因此,PRNG这个部件的好坏,将直接决定了算法是否足够安全。PRNG在现代密码学语义中的定义如下:

令GGG为一多项式时间算法,其输入为s∈{0,1}ns\in \{0, 1\}^{n}s∈{0,1}n,即为一长度为nnn的01比特串,输出的长度记作l(n)l(n)l(n);其中,l(⋅)l(\cdot )l(⋅)也为一多项式时间算法,但与GGG不同的是,l(n)l(n)l(n)只是表示是nnn的多项式界下的一个值,l(⋅)l(\cdot )l(⋅)可以等于n2n^{2}n2,也可以等于nnn,只要是多项式界内的即可。若G为一PRNG,则应同时满足如下两个条件:

  1. 对于任意的nnn,都有l(n)>nl(n) > nl(n)>n;
  2. 若此时对于任意一具有多项式资源的敌手A\mathcal{A}A,都存在一个可忽略(negligible)的概率ϵ\epsilonϵ,使得下式成立:

∣Pr[A(r)=1]−Pr[A(G(s))=1]∣≤ϵ|\mathrm{Pr}[\mathcal{A}(r)=1] - \mathrm{Pr}[\mathcal{A}(G(s))=1]| \le \epsilon∣Pr[A(r)=1]−Pr[A(G(s))=1]∣≤ϵ

其中,rrr为一随机比特串(不用管它从哪来的),而G(s)G(s)G(s)即为GGG的输出,为一伪随机比特串. 而A(r)=1\mathcal{A}(r)=1A(r)=1与A(G(s))=1\mathcal{A}(G(s))=1A(G(s))=1分别表示敌手A\mathcal{A}A能正确区分出所给比特串是真随机串还是伪随机串。

因此,条件2表明敌手A\mathcal{A}A面对GGG的输出时,只能以一个可忽略的、极小的概率将其与真随机串区分开来,这保证了每个PRNG的输出都会足够贴近真实的随机输出。而对于条件1,如果我们先假设l(n)≤nl(n) \le nl(n)≤n,那这意味着输入与输出都不一定能满足双射的条件,即PRNG的一个输出甚至可能对应着多个输入。由此,这样的PRNG很容易就被攻击者猜解碰撞出来了;因此如果令l(n)>nl(n) > nl(n)>n,如l(n)=2nl(n)=2nl(n)=2n,那么一个输入sss则平均对应着2n=22n/2n2^{n}=2^{2n}/2^{n}2n=22n/2n个PRNG输出,也就是这是一种非常稀疏的映射关系,这种「扩展性」保证了采取穷举手段从PRNG的输出空间来进行碰撞是困难的。

现在我们有了伪随机性这把(简陋)的螺丝刀,还能造出更好的工具吗?

单向函数

首先便是直接由伪随机性抽象而来的、更加直观的,但也非常重要的性质:One-Wayness,即单向性。顾名思义,再结合PRNG的定义,相信大家此时对单向性及单向函数(One-Wayness Function, OWF)也会有这样一个模糊理解:

给函数一个xxx,可以跟容易算出对应的函数值yyy,但是对于函数值yyy,很难逆推得到原来的xxx

这种理解其实已经非常接近单向函数的正式定义了,如下所示:

一个函数f若称为单向函数,则应满足如下两个条件:

  1. (容易计算)存在一多项式时间算法Af(⋅)A_{f}(\cdot )Af​(⋅),对于任意输入x∈{0,1}∗x \in \{0, 1\}^{*}x∈{0,1}∗,都能在多项式时间内输出Af(x)=f(x)A_{f}(x)=f(x)Af​(x)=f(x);
  2. (难以求逆)对于所有的多项式时间算法D(⋅)D(\cdot )D(⋅),都存在一个极小的可忽略概率ϵ\epsilonϵ,使得下式成立:

Pr[D(f(x))∈f−1(f(x))]≤ϵPr[D(f(x)) \in f^{-1}(f(x))] \le \epsilon Pr[D(f(x))∈f−1(f(x))]≤ϵ

其中,xxx的选取是从{0,1}n\{0,1\}^{n}{0,1}n中随机均匀采样。在上述定义中,难以求逆这一性质只需要在输入是均匀选取的这一条件下成立即可,即对于极个别的输出点,攻击者还是有可能还原其对应的输入的。在某些比较极端的定义里,难以求逆这一性质甚至只要求在输入xxx足够长时才满足。

此时你可能会说,既然一个单向函数是容易计算的,那对于一个特定的输出yyy,那我为什么不能试着遍历所有xix_{i}xi​,从而找到f(x∗)=yf(x^{*})=yf(x∗)=y?没错,任何单向函数在给出足够时间和计算资源的条件下,都是可求逆的;但不要忘记条件2中面向的是多项式时间算法,对于那些指更高级的攻击算法,单向函数可能真的一下就被攻破了。因此,条件2所谓的难以求逆,实际上是难以「高效」求逆。

实际上,任意一个PRNG都可看作是一个单向函数 [2],而要证明这一点,即证「对于一个PRNG算法 G\mathcal{G}G,如果存在敌手D\mathcal{D}D能以不可忽略的概率对 G\mathcal{G}G的输出结果求逆,那么存在一敌手D′\mathcal{D}^{'}D′也能以不可忽略的概率分辨G\mathcal{G}G的输出与真随机串」。一般而言这种证明采取“安全性归约”的方法即可,不过这和本文内容无关。总之,基于PRNG可以构造出单向函数,而有了单向函数这个「高级扳手」,我们就可以造出更方便的工具了,比如大名鼎鼎的(密码学安全的)哈希函数。

阿克琉斯之踵:密钥的管理

PRNG与OWF由于其简洁但重要的计算性质,常被用于生成密码算法的密钥,而PRNG这种「看起来」随机的特点,正是方便我们生成一些别人不想预测出的敏感信息。另外,OWF则能帮助我们为已有密钥提供一个「陷门」(Trapdoor),陷门的输出(通常为OWF的输出)可以作为新密钥、或者某个公开校验值等等。

二者的配合让一个系统中,密钥的在线更新成为了可能。如果一个OWF提供的伪随机性足够好,那我们是不是可以用它源源不断地生成新密钥呢?当然可以!

如上图所示,系统管理员可以使用当前密钥KiK_{i}Ki​、当前时间戳tit_{i}ti​以及一个盐值Salt(如0x12345),在MD5这一哈希函数的帮助下源源不断的迭代出新密钥ki+1=MD5(ki∣∣tI∣∣Salt)k_{i + 1} = \mathrm{MD5}( k_{i} || t_{I} || Salt)ki+1​=MD5(ki​∣∣tI​∣∣Salt)。当然,MD5可以替换为其他常见的、更安全的哈希函数。

可是,随着密码分析技术的不断增强,原来认为安全的MD5目前来看也不那么安全了,原本的单向函数也不再那么单向了。而管理员此时还觉得:

反正我密钥一直都在给你们更新,况且MD5也没那么容易被攻击,这个方案又不是不能用

密码学之前后向安全性相关推荐

  1. 密码学认证密钥交换协议安全性和常见攻击-更新中

    目录 协议安全属性 已知密钥安全(Known Key Secrecy) 完美前向安全(Perfect Forward Secrecy,PFS) PKG前向安全 抗未知密钥共享(Unknown Key- ...

  2. 信安精品课:第3章密码学基本理论精讲笔记

    第3章 密码学基本理论精讲笔记 一.本章知识框架 二.本章大纲要求 3.1 密码学概况 ●密码学发展简况●密码学基本概念●密码安全性分析 3.2 密码体制分类 ●私钥密码体制●公钥密码体制●混合密码体 ...

  3. 第三章:密码学基本理论

    一.思维导图: 二.本章大纲要求 3.1 密码学概况 ●密码学发展简况 ●密码学基本概念 ●密码安全性分析 3.2 密码体制分类 ●私钥密码体制 ●公钥密码体制 ●混合密码体制 3.3 常用密码算法 ...

  4. 浅谈密码学——加密者与破译者的博弈

    密码学是网络安全.信息安全.区块链等产品的基础,常见的非对称加密.对称加密.散列函数等,都属于密码学范畴. 密码学有数千年的历史,从最开始的替换法到如今的非对称加密算法,经历了古典密码学,近代密码学和 ...

  5. CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲

    前言 密码学为数据的处理.存储和通信过程提供附加的安全级别.近年来,数学家和计算机科学家开发了一系列日益复杂的算法,这些算法被设计用于确保机密性.完整性.身份认证和不可否认性.在密码学家花费大量时间开 ...

  6. 信安第二版:第3章密码学基本理论学习笔记

    一.本章大纲要求 3.1 密码学概况 ●密码学发展简况●密码学基本概念●密码安全性分析 3.2 密码体制分类 ●私钥密码体制●公钥密码体制●混合密码体制 3.3 常用密码算法 ●DES密码算法●IDE ...

  7. 前言 - 现代密码学导论 Introduction to Modern Cryptography

    Introduction to Modern Cryptography - Jonathan Katz and Yehuda Lindell 前言 ​    这本书介绍了密码学的基本原理和原则.旨在作 ...

  8. 【人人都懂密码学】一篇最易懂的Java密码学入门教程

    密码与我们的生活息息相关,远到国家机密,近到个人账户,我们每天都在跟密码打交道: 那么,密码从何而来?生活中常见的加密是怎么实现的?怎么保证个人信息安全?本文将从这几方面进行浅谈,如有纰漏,敬请各位大 ...

  9. 清华姚班的科研能力,能孵化出一家怎样的公司?

    鱼羊 发自 凹非寺 量子位 报道 | 公众号 QbitAI Top2大学实验室里的科研成果,能孵化出怎样的商业价值? 现在,清华大学的又一张王牌浮出水面-- 转化图灵奖得主姚期智院士和清华大学交叉信息 ...

  10. 区块链BaaS云服务(29) 溪塔科技 CITA-Cloud

    1. CITA( Cryptape Inter-enterprise Trust Automation ) 是一个面向企业级应用的支持智能合约的区块链框架,CITA 将区块链节点的必要功能解耦为六个微 ...

最新文章

  1. 报名 | 腾讯量子实验室发起Alchemy竞赛,推动分子性质的AI预测研发
  2. Linux oracle数据库自动备份自动压缩脚本代码
  3. endnote初始化数据库支持_5 个免费的在线 SQL 数据库环境,比Navicat 香
  4. 牛客网(剑指offer) 第五题 用两个栈来实现一个队列
  5. ROS-kinetic 机器语音 之科大讯飞SDK
  6. VB程序逆向常用的函数
  7. Tensorflow源码解析1 -- 内核架构和源码结构
  8. google提供的adb工具包_开源化学信息学工具包(Open Access Cheminformatics Toolkits)
  9. Python 函数 -next()
  10. UITabBarController中自定义UITabBar
  11. 深度学习中的样本采样
  12. Android 文本监听接口TextWatcher详解
  13. matlab 模式识别工具箱下载,模式识别matlab工具箱
  14. 解密搭建平台赚钱的方法一:详解搭建网站收入的几个来源
  15. Python pandas.DataFrame.add_suffix函数方法的使用
  16. 2021年中国巴豆酸市场趋势报告、技术动态创新及2027年市场预测
  17. 先尝甜头后食苦果 曾经的光伏巨头如今都身在何方?
  18. 面部皮肤200种问题_颧骨内推真那么吓人?这是一篇耗时200个小时的功课
  19. 学习中遇到的小技巧(陆续更新……)
  20. Java就业方向有哪些?学习Java开发能做什么?

热门文章

  1. 安卓apk360加固
  2. 深圳市集体户户口簿首页pdf版获取指南
  3. 大话设计模式之爱你一万年:第十八章 行为模式:中介者模式:那些年的情书-邮局传情:1. 中介者模式基本概念
  4. Linux bpf 1.1、BPF内核实现
  5. LC053-最大子序和
  6. 【JavaWeb】1、XML、Tomcat
  7. 国内资深安全专家详谈网页***
  8. 人力资源管理专业知识与实务(初级)【6】
  9. 二建带记忆功能计算机,二建实务记忆技巧
  10. H264编码-码率控制原理以及JM代码分析