【现代密码学】笔记3

本文探讨了私钥加密的安全定义,包括窃听不可区分性和语义安全的概念,以及伪随机性在生成安全密钥中的应用。文章通过实例和理论阐述了如何通过伪随机生成器构建安全的加密方案,同时提及了黑客和网络安全的学习路径及企业级安全工程师的学习路线。
摘要由CSDN通过智能技术生成
	 ) 
	 
	 
	 
	 \mathsf{Enc}\_k(m\_b) 
	 
	 
	 Enck​(mb​)后得到挑战密文 
	 
	 
	 
	 
	 c 
	 
	 
	 
	 c 
	 
	 
	 c,并发送给 
	 
	 
	 
	 
	 A 
	 
	 
	 
	 \mathcal{A} 
	 
	 
	 A;
	3. A 
	 
	 
	 
	 \mathcal{A} 
	 
	 
	 A输出对所加密明文的猜测 
	 
	 
	 
	 
	 
	 b 
	 
	 
	 ′ 
	 
	 
	 
	 
	 b' 
	 
	 
	 b′,若 
	 
	 
	 
	 
	 b 
	 
	 
	 = 
	 
	 
	 
	 b 
	 
	 
	 ′ 
	 
	 
	 
	 
	 b=b' 
	 
	 
	 b=b′,则 
	 
	 
	 
	 
	 A 
	 
	 
	 
	 \mathcal{A} 
	 
	 
	 A成功;否则,失败;
* 这与之前在完美保密中的不可区分实验类似的,区别在于本实验不是无条件的,而是输入“安全参数”,该参数将作用于安全定义。窃听不可区分实验既用在了信息论安全定义,也用在了计算安全定义,这就在两者之间建立了联系。

在这里插入图片描述

  1. 私钥加密安全定义

    • 一个加密方案在出现窃听者时是不可区分加密,若对于任意概率多项式时间的敌手,存在一个可忽略函数,使得不可区分实验成功概率与1/2相比(两者间的差异)是可忽略的。
    • 其中,多项式时间和可忽略都是对于“安全参数”的函数。
  2. 理解不可区分性的定义

    • 一次一密方案在出现窃听者时是否是不可区分的?
    • 若一个敌手一直在实验中失败,该方案是安全的吗?
    • 在两个连续窃听不可区分实验中,使用同一个密钥的概率有多大?
    • 若从密文中猜测到消息中最低比特的概率是3/4,该方案是安全的吗?
    • 若从密文中猜测到消息中最低3个比特的概率是3/8,该方案是安全的吗?
  • 相关性:

X

X

X和

Z

Z

Z的分布不可区分,

Y

Y

Y和

Z

Z

Z的分布不可区分,那么

X

X

X和

Y

Y

Y的分布是不可区分的吗?

  1. 语义安全(semantic security)

    • 之前在导论部分有一个问题:如何定义不泄漏“meaningful”的信息。下面引入语义安全的概念来解决这个问题。
    • 直觉:没有关于明文的任何有意义的信息泄漏
    • 关于明文的信息用明文的函数来表示,

    h

    (

    m

    )

    h(m)

    h(m)表示敌手预先了解的关于明文的外部信息,

    f

    (

    m

    )

    f(m)

    f(m)表示敌手希望获取的关于明文的有意义的信息

    • 定义:加密方案是窃听者出现时语义安全的,如果对于任意敌手,任意明文分布,任意函数

    f

    f

    f和

    h

    h

    h,一个敌手根据密文和

    h

    (

    m

    )

    h(m)

    h(m)获得

    f

    (

    m

    )

    f(m)

    f(m),另一个敌手只根据

    h

    (

    m

    )

    h(m)

    h(m)获得

    f

    (

    m

    )

    f(m)

    f(m),这两个敌手成功的概率之间的差异是可以忽略的

    • 定理:一个私钥加密方案是窃听者不可区分的,当且仅当该方案是语义安全的。
    • 证明略。直觉上,从右到左:若敌手能够在不可区分实验中成功(不是不可区分的),则意味着根据密文获得了关于区分明文的某些信息(不是语义安全);反之,若敌手能够获得关于明文的某些信息(不是语义安全),那么可以利用这些信息来区分明文(不是不可区分的)。

伪随机性

  1. 伪随机性概念(Pseudorandomness)

    • 回顾之前完美保密的局限性,密钥长度需要和明文一样长才安全;计算安全中放松了安全的定义,那密钥能不能短一些,或者说能不能放松对随机性的要求,产生足够长但不完全随机的密钥?下面我们来学习伪随机性概念。
    • 真随机性不能由一个可描述的机制产生。这里的“可描述的机制”显然是不包括“掷骰子”,而是指确定性的机制;
    • 伪随机对于不知道其机制的观察者来说,看起来是真的随机;
    • 一个固定的字符串谈不上是否随机/伪随机,随机/伪随机指的是产生字符串的过程
    • 问题:能否绝对地证明随机性?不能,因为我们可能是不知道其机制的观察者。
  2. 区分器(Distinguisher):统计测试

    • 一类判断是否随机的务实的方法是,从一个随机生成器中得到多个随机序列并进行一套统计测试。
    • 例如,序列中0和1的数量之差不应该太大,最大连续0的长度不应该太长等等。
    • 伪随机性意味着下一比特不可预测(next-bit unpredictable),通过所有下一比特测试等且仅当通过所有统计测试。(这是姚期智的贡献)
    • 问题是难以确定多少测试才足够?
  3. 定义伪随机性的直觉

    • 直觉:从一个短的真随机种子生成一个长的随机串,这个伪随机串与真随机串是不可区分的。
    • 这是不是和图灵测试类似?
    • 区分器输入一个比特串,输出1位比特。注意:该比特不一定表示输入的串是否是随机的。
伪随机生成器(PRG)
  1. 伪随机生成器 (Pseudorandom Generator) 定义

    • 一个确定性的多项式时间算法

    G

    :

    {

    0

    ,

    1

    }

    n

    {

    0

    ,

    1

    }

    (

    n

    )

    G : {0,1}^n \to {0,1}^{\ell(n)}

    G:{0,1}n→{0,1}ℓ(n)是一个伪随机生成器(PRG),如果:
    + 延展:

     ∀ 
     
     
     n 
     
     
     , 
     
     
     ℓ 
     
     
     ( 
     
     
     n 
     
     
     ) 
     
     
     > 
     
     
     n 
     
     
     
     \forall n, \ell(n) > n 
     
     
     ∀n,ℓ(n)>n。只有生成更长的串才有意义,否则可以直接从种子中复制一段输出;
    + 伪随机:对于任意PPT区分器 
     
     
     
     
     D 
     
     
     
     D 
     
     
     D, 
     
     
     
     
     
     ∣ 
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     D 
     
     
     ( 
     
     
     r 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     − 
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     D 
     
     
     ( 
     
     
     G 
     
     
     ( 
     
     
     s 
     
     
     ) 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     ∣ 
     
     
     
     ≤ 
     
     
     
     n 
     
     
     e 
     
     
     g 
     
     
     l 
     
     
     
     ( 
     
     
     n 
     
     
     ) 
     
     
     
     \left|\Pr[D(r)=1] - \Pr[D(G(s))=1]\right| \le \mathsf{negl}(n) 
     
     
     ∣Pr[D(r)=1]−Pr[D(G(s))=1]∣≤negl(n)。其中, 
     
     
     
     
     r 
     
     
     
     r 
     
     
     r是随机的,种子 
     
     
     
     
     s 
     
     
     
     s 
     
     
     s随机的, 
     
     
     
     
     ℓ 
     
     
     ( 
     
     
     ⋅ 
     
     
     ) 
     
     
     
     \ell(\cdot) 
     
     
     ℓ(⋅)是延展因子。这里的意思是输出不同结果的概率差可以忽略,如果有一个区分器始终输出1,则两个概率都是1,差为0;另外,输出1并不需要表示特定含义,改成输出0也可以。
    
    • 存在性:若单向函数存在或

    P

    N

    P

    \mathcal{P} \ne \mathcal{NP}

    P=NP,则PRG存在。后面我们会进一步学习。

  2. 真实案例

    • C语言的random()
    • Netscape早期版本的漏洞https://people.eecs.berkeley.edu/~daw/papers/ddj-netscape.html
  • 从这两个例子可以看出来,输出都是可预测的。
  1. 关于PRG的一些问题

    • 利用下一比特不可预测,还有PRG的不可区分实验定义可以解决这些问题。
  2. 充分种子空间

    • 稀疏输出:当扩展因子为

    2

    n

    2n

    2n时,在长度为

    2

    n

    2n

    2n的串中只会产生

    2

    n

    2^{-n}

    2−n。

    • 蛮力攻击:给定无穷的时间,通过枚举所有种子来产生所有串,能以较高的概率区分出伪随机串。
    • 充分种子空间:种子必须长来抵抗蛮力攻击。
  3. 不充分的随机性

    • 2008年,为了避免一个编译警告,Debian的一个发布版本中误删了一行代码,引起OpenSSL中关于随机生成器的漏洞。

规约法

  1. 规约法(Reduction

    • 规约法是将一个问题A变换为另一个问题B。变换的意思可以理解为,A可以通过解决B来解决。
    • 规约

    A

    m

    B

    A \le_m B

    A≤m​B:

    A

    A

    A可规约为B,如果B的解存在并且给定该解时A可解,其中

    m

    m

    m表示映射规约;这里可以将规约理解为A对B的子函数调用,除了子函数B是一个黑盒,解决A的步骤都应该是明确的。

    • 解决A不能比解决B更难,因为A可以通过解决B来得到解决。
    • 例题,测量矩形面积可规约到测量矩形边长;计算一个数的平方可规约到两个数乘积,相反可以规约吗?
规约证明
  1. 规约证明

    • 我们现在站在敌手的角色来思考,希望解决“破解”加密方案这个问题,并且在此之前我们已经知道有个一“假设”问题是不可解决的;
    • 为了证明一个加密方案

    Π

    \Pi

    Π在假设

    X

    X

    X下是安全的,就是证明“破解”问题不可解。

    • 将解决“假设”

    X

    X

    X问题的算法

    A

    \mathcal{A}’

    A′规约到“破解”

    Π

    \Pi

    Π的算法

    A

    \mathcal{A}

    A。如果加密方案可以被破解,则假设问题也可以解决。然而,由于假设问题是难以解决的,这导致矛盾,说明加密方案不可以被破解。

    • 先令一个概率多项式时间的算法

    A

    \mathcal{A}

    A能够以概率

    ε

    (

    n

    )

    \varepsilon(n)

    ε(n)破解

    Π

    \Pi

    Π ;

    • 假设:一个问题

    X

    X

    X是难以解决的,即不存在多项式时间算法来解决

    X

    X

    X;

    A

    \mathcal{A}’

    A′是一个解决

    X

    X

    X的概率算法;

    • 规约:解决假设问题

    X

    X

    X可以通过破解加密方案

    Π

    \Pi

    Π,即将

    A

    \mathcal{A}’

    A′规约到

    A

    \mathcal{A}

    A,

    A

    \mathcal{A}’

    A′通过以

    A

    \mathcal{A}

    A作为子函数可以以概率

    1

    /

    p

    (

    n

    )

    1/p(n)

    1/p(n)有效地解决问题

    X

    X

    X;

    • 矛盾:若加密方案可以被有效破解,即

    ε

    (

    n

    )

    \varepsilon(n)

    ε(n)是不可忽略的,则

    A

    \mathcal{A}’

    A′可以以不可忽略的概率

    ε

    (

    n

    )

    /

    p

    (

    n

    )

    \varepsilon(n)/p(n)

    ε(n)/p(n)解决问题

    X

    X

    X,这与假设矛盾,因而

    ε

    (

    n

    )

    \varepsilon(n)

    ε(n)一定是可忽略的。

  2. 一个规约法证明PRG的例子

    • 假设

    F

    F

    F是PRG,证明

    G

    G

    G也是PRG。

    • 问题A:如何区分

    F

    F

    F;问题B:如何区分

    G

    G

    G;

    • 从A规约到B:区分

    F

    F

    F的算法输入按位取反后作为区分

    G

    G

    G的算法输入,区分

    G

    G

    G的算法输出作为区分

    F

    F

    F的算法输出。

  3. 一个规约法证明PRG的例子(续)

    • 由此,建立了不可区分定义中概率的联系。

构造安全的加密方案

  1. 一个安全的定长加密方案

    G

    (

    k

    )

    =

    (

    k

    )

    |G(k)| = \ell(|k|)

    ∣G(k)∣=ℓ(∣k∣),

    m

    {

    0

    ,

    1

    }

    (

    n

    )

    m \in {0,1}^{\ell(n)}

    m∈{0,1}ℓ(n), 一个PRG以长度为

    n

    n

    n的密钥作为种子,输出与明文相同长度的pad;

    • G

    e

    n

    \mathsf{Gen}

    Gen:

    k

    {

    0

    ,

    1

    }

    n

    k \in {0,1}^n

    k∈{0,1}n,密钥作为种子,长度小于明文长度;

    • E

    n

    c

    \mathsf{Enc}

    Enc:

    c

    :

    =

    G

    (

    k

    )

    m

    c := G(k)\oplus m

    c:=G(k)⊕m,加密方法和一次一密一样;

    • D

    e

    c

    \mathsf{Dec}

    Dec:

    m

    :

    =

    G

    (

    k

    )

    c

    m := G(k)\oplus c

    m:=G(k)⊕c,解密也是;

    • 定理:该定长加密方案是窃听下不可区分的。
    • 直觉上,这个方案和一次一密是类似的,除了密钥更短并且用伪随机生成器生成的比特串来与明文异或。因为伪随机对于任何敌手都可以认为是真随机,所以对于敌手而言,该方案与一次一密是一样的。由此,我们得到了一个安全的加密方案,同时避免了一次一密的最大局限性——密钥过长。
  2. 证明不可区分加密方案

    • 思路:区分伪随机性为难题假设,破解加密方案为规约的子函数。针对伪随机生成器

    G

    G

    G的区分器

    D

    D

    D以

    A

    \mathcal{A}

    A为子函数,使得当

    A

    \mathcal{A}

    A破解了

    Π

    \Pi

    Π则

    D

    D

    D可以区分出

    G

    G

    G,与

    G

    G

    G的伪随机性矛盾。注意这里我们用了符号

    Π

    ~

    \tilde{\Pi}

    Π~来表示

    Π

    \Pi

    Π的一个变体,来刻画加密方案中可能使用了真随机串来加密;

    • 回顾针对伪随机生成器的区分器

    D

    D

    D的问题是,输入一个串

    w

    w

    w,输出一个比特;这里关键问题是输出的比特从何而来?

    D

    D

    D规约到

    A

    \mathcal{A}

    A。回顾窃听者不可区分实验中,

    A

    \mathcal{A}

    A与一个挑战者进行3轮交互:
    1. A

     \mathcal{A} 
     
     
     A选择两个不同明文 
     
     
     
     
     
     m 
     
     
     0 
     
     
     
     , 
     
     
     
     m 
     
     
     1 
     
     
     
     
     m\_0, m\_1 
     
     
     m0​,m1​,并发送给挑战者;
    2. 挑战者生成密钥,并随机挑选一个明文 
     
     
     
     
     
     m 
     
     
     b 
     
     
     
     
     m\_b 
     
     
     mb​加密后得到挑战密文 
     
     
     
     
     c 
     
     
     
     c 
     
     
     c,并发送给 
     
     
     
     
     A 
     
     
     
     \mathcal{A} 
     
     
     A;
    3. A 
     
     
     
     \mathcal{A} 
     
     
     A输出对所加密明文的猜测 
     
     
     
     
     
     b 
     
     
     ′ 
     
     
     
     
     b' 
     
     
     b′,若 
     
     
     
     
     b 
     
     
     = 
     
     
     
     b 
     
     
     ′ 
     
     
     
     
     b=b' 
     
     
     b=b′,则 
     
     
     
     
     A 
     
     
     
     \mathcal{A} 
     
     
     A成功;否则,失败;
    
    • 区分器

    D

    D

    D成为窃听不可区分实验中的挑战者,特别之处在于:在第2步,不需要生成密钥,而是直接以输入串

    w

    w

    w作为pad来加密,

    c

    :

    =

    w

    m

    b

    c := w \oplus m_b

    c:=w⊕mb​;根据

    w

    w

    w的两种可能,分两种情况:
    + 当

     w 
     
     
     
     w 
     
     
     w是由 
     
     
     
     
     G 
     
     
     
     G 
     
     
     G生成的,即伪随机串,则 
     
     
     
     
     c 
     
     
     
     c 
     
     
     c就是加密方案 
     
     
     
     
     Π 
     
     
     
     \Pi 
     
     
     Π中密文, 
     
     
     
     
     A 
     
     
     
     \mathcal{A} 
     
     
     A面对的就是 
     
     
     
     
     Π 
     
     
     
     \Pi 
     
     
     Π;
    + 当 
     
     
     
     
     w 
     
     
     
     w 
     
     
     w是真随机串,则 
     
     
     
     
     c 
     
     
     
     c 
     
     
     c不同于加密方案 
     
     
     
     
     Π 
     
     
     
     \Pi 
     
     
     Π中密文,而与一次一密中一样, 
     
     
     
     
     A 
     
     
     
     \mathcal{A} 
     
     
     A面对的就是 
    

如何自学黑客&网络安全

黑客零基础入门学习路线&规划

初级黑客
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

如果你想要入坑黑客&网络安全,笔者给大家准备了一份:282G全网最全的网络安全资料包评论区留言即可领取!

7、脚本编程(初级/中级/高级)
在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

如果你零基础入门,笔者建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习;搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime;·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;·用Python编写漏洞的exp,然后写一个简单的网络爬虫;·PHP基本语法学习并书写一个简单的博客系统;熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选);·了解Bootstrap的布局或者CSS。

8、超级黑客
这部分内容对零基础的同学来说还比较遥远,就不展开细说了,附上学习路线。
img

网络安全工程师企业级学习路线

img
如图片过大被平台压缩导致看不清的话,评论区点赞和评论区留言获取吧。我都会回复的

视频配套资料&国内外网安书籍、文档&工具

当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

img
一些笔者自己买的、其他平台白嫖不到的视频教程。
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值