【现代密码学】笔记3,2024年最新程序员学的啥

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
img

正文

	 ] 
	 
	 
	 − 
	 
	 
	 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存在。后面我们会进一步学习。
  1. 真实案例

    • 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面对的就是 
     
     
     
     
     
     Π 
     
     
     ~ 
     
     
     
     
     \tilde{\Pi} 
     
     
     Π~一次一密;
    
    • 回答前面关于

    D

    D

    D输出什么的问题:破解加密方案的

    A

    \mathcal{A}

    A成功时,

    D

    D

    D输出1;否则,

    D

    D

    D输出0。

  3. 证明不可区分加密方案(续)

    • 规约完毕,证明

    A

    \mathcal{A}

    A在实验中成功的概率是可忽略的
    + 当

     w 
     
     
     
     w 
     
     
     w为真随机串 
     
     
     
     
     r 
     
     
     
     r 
     
     
     r,就是一次一密, 
     
     
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     D 
     
     
     ( 
     
     
     r 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     = 
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     
     
     P 
     
     
     r 
     
     
     i 
     
     
     v 
     
     
     K 
     
     
     
     
     A 
     
     
     , 
     
     
     
     Π 
     
     
     ~ 
     
     
     
     
     
     e 
     
     
     a 
     
     
     v 
     
     
     
     
     ( 
     
     
     n 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     = 
     
     
     
     1 
     
     
     2 
     
     
     
     
     \Pr[D(r)=1] = \Pr[\mathsf{PrivK}^{\mathsf{eav}}\_{\mathcal{A},\tilde{\Pi}}(n)=1]=\frac{1}{2} 
     
     
     Pr[D(r)=1]=Pr[PrivKA,Π~eav​(n)=1]=21​;
    + 当 
     
     
     
     
     w 
     
     
     
     w 
     
     
     w为伪随机串 
     
     
     
     
     G 
     
     
     ( 
     
     
     k 
     
     
     ) 
     
     
     
     G(k) 
     
     
     G(k), 
     
     
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     D 
     
     
     ( 
     
     
     G 
     
     
     ( 
     
     
     k 
     
     
     ) 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     = 
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     
     
     P 
     
     
     r 
     
     
     i 
     
     
     v 
     
     
     K 
     
     
     
     
     A 
     
     
     , 
     
     
     Π 
     
     
     
     
     e 
     
     
     a 
     
     
     v 
     
     
     
     
     ( 
     
     
     n 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     = 
     
     
     
     1 
     
     
     2 
     
     
     
     + 
     
     
     ε 
     
     
     ( 
     
     
     n 
     
     
     ) 
     
     
     
     \Pr[D(G(k))=1] = \Pr[\mathsf{PrivK}^{\mathsf{eav}}\_{\mathcal{A},\Pi}(n)=1] = \frac{1}{2} + \varepsilon(n) 
     
     
     Pr[D(G(k))=1]=Pr[PrivKA,Πeav​(n)=1]=21​+ε(n);
    + 根据伪随机生成器定义,上下两个公式相减, 
     
     
     
     
     
     ∣ 
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     D 
     
     
     ( 
     
     
     r 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     − 
     
     
     Pr 
     
     
     ⁡ 
     
     
     [ 
     
     
     D 
     
     
     ( 
     
     
     G 
     
     
     ( 
     
     
     k 
     
     
     ) 
     
     
     ) 
     
     
     = 
     
     
     1 
     
     
     ] 
     
     
     ∣ 
     
     
     
     = 
     
     
     ε 
     
     
     ( 
     
     
     n 
     
     
     ) 
     
     
     ≤ 
     
     
     
     n 
     
     
     e 
     
     
     g 
     
     
     l 
     
     
     
     ( 
     
     
     n 
     
     
     ) 
    

最后

文章到这里就结束了,如果觉得对你有帮助可以点个赞哦

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

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
img

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

	 G 
	 
	 
	 ( 
	 
	 
	 k 
	 
	 
	 ) 
	 
	 
	 
	 G(k) 
	 
	 
	 G(k), 
	 
	 
	 
	 
	 Pr 
	 
	 
	 ⁡ 
	 
	 
	 [ 
	 
	 
	 D 
	 
	 
	 ( 
	 
	 
	 G 
	 
	 
	 ( 
	 
	 
	 k 
	 
	 
	 ) 
	 
	 
	 ) 
	 
	 
	 = 
	 
	 
	 1 
	 
	 
	 ] 
	 
	 
	 = 
	 
	 
	 Pr 
	 
	 
	 ⁡ 
	 
	 
	 [ 
	 
	 
	 
	 
	 P 
	 
	 
	 r 
	 
	 
	 i 
	 
	 
	 v 
	 
	 
	 K 
	 
	 
	 
	 
	 A 
	 
	 
	 , 
	 
	 
	 Π 
	 
	 
	 
	 
	 e 
	 
	 
	 a 
	 
	 
	 v 
	 
	 
	 
	 
	 ( 
	 
	 
	 n 
	 
	 
	 ) 
	 
	 
	 = 
	 
	 
	 1 
	 
	 
	 ] 
	 
	 
	 = 
	 
	 
	 
	 1 
	 
	 
	 2 
	 
	 
	 
	 + 
	 
	 
	 ε 
	 
	 
	 ( 
	 
	 
	 n 
	 
	 
	 ) 
	 
	 
	 
	 \Pr[D(G(k))=1] = \Pr[\mathsf{PrivK}^{\mathsf{eav}}\_{\mathcal{A},\Pi}(n)=1] = \frac{1}{2} + \varepsilon(n) 
	 
	 
	 Pr[D(G(k))=1]=Pr[PrivKA,Πeav​(n)=1]=21​+ε(n);
	+ 根据伪随机生成器定义,上下两个公式相减, 
	 
	 
	 
	 
	 
	 ∣ 
	 
	 
	 Pr 
	 
	 
	 ⁡ 
	 
	 
	 [ 
	 
	 
	 D 
	 
	 
	 ( 
	 
	 
	 r 
	 
	 
	 ) 
	 
	 
	 = 
	 
	 
	 1 
	 
	 
	 ] 
	 
	 
	 − 
	 
	 
	 Pr 
	 
	 
	 ⁡ 
	 
	 
	 [ 
	 
	 
	 D 
	 
	 
	 ( 
	 
	 
	 G 
	 
	 
	 ( 
	 
	 
	 k 
	 
	 
	 ) 
	 
	 
	 ) 
	 
	 
	 = 
	 
	 
	 1 
	 
	 
	 ] 
	 
	 
	 ∣ 
	 
	 
	 
	 = 
	 
	 
	 ε 
	 
	 
	 ( 
	 
	 
	 n 
	 
	 
	 ) 
	 
	 
	 ≤ 
	 
	 
	 
	 n 
	 
	 
	 e 
	 
	 
	 g 
	 
	 
	 l 
	 
	 
	 
	 ( 
	 
	 
	 n 
	 
	 
	 ) 

最后

文章到这里就结束了,如果觉得对你有帮助可以点个赞哦

[外链图片转存中…(img-0ZIqVcPX-1713437008309)]

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

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注前端)
[外链图片转存中…(img-Wrrjga0T-1713437008309)]

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

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值