先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Web前端全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip1024c (备注前端)
正文
]
−
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存在。后面我们会进一步学习。
-
真实案例
- C语言的
random()
- Netscape早期版本的漏洞https://people.eecs.berkeley.edu/~daw/papers/ddj-netscape.html
- C语言的
- 从这两个例子可以看出来,输出都是可预测的。
-
关于PRG的一些问题
- 利用下一比特不可预测,还有PRG的不可区分实验定义可以解决这些问题。
-
充分种子空间
- 稀疏输出:当扩展因子为
2
n
2n
2n时,在长度为
2
n
2n
2n的串中只会产生
2
−
n
2^{-n}
2−n。
- 蛮力攻击:给定无穷的时间,通过枚举所有种子来产生所有串,能以较高的概率区分出伪随机串。
- 充分种子空间:种子必须长来抵抗蛮力攻击。
-
不充分的随机性
- 2008年,为了避免一个编译警告,Debian的一个发布版本中误删了一行代码,引起OpenSSL中关于随机生成器的漏洞。
规约法
-
规约法(Reduction)
- 规约法是将一个问题A变换为另一个问题B。变换的意思可以理解为,A可以通过解决B来解决。
- 规约
A
≤
m
B
A \le_m B
A≤mB:
A
A
A可规约为B,如果B的解存在并且给定该解时A可解,其中
m
m
m表示映射规约;这里可以将规约理解为A对B的子函数调用,除了子函数B是一个黑盒,解决A的步骤都应该是明确的。
- 解决A不能比解决B更难,因为A可以通过解决B来得到解决。
- 例题,测量矩形面积可规约到测量矩形边长;计算一个数的平方可规约到两个数乘积,相反可以规约吗?
规约证明
-
规约证明
- 我们现在站在敌手的角色来思考,希望解决“破解”加密方案这个问题,并且在此之前我们已经知道有个一“假设”问题是不可解决的;
- 为了证明一个加密方案
Π
\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)一定是可忽略的。
-
一个规约法证明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的算法输出。
-
一个规约法证明PRG的例子(续)
- 由此,建立了不可区分定义中概率的联系。
构造安全的加密方案
-
一个安全的定长加密方案
- ∣
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,解密也是;
- 定理:该定长加密方案是窃听下不可区分的。
- 直觉上,这个方案和一次一密是类似的,除了密钥更短并且用伪随机生成器生成的比特串来与明文异或。因为伪随机对于任何敌手都可以认为是真随机,所以对于敌手而言,该方案与一次一密是一样的。由此,我们得到了一个安全的加密方案,同时避免了一次一密的最大局限性——密钥过长。
-
证明不可区分加密方案
- 思路:区分伪随机性为难题假设,破解加密方案为规约的子函数。针对伪随机生成器
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。
-
证明不可区分加密方案(续)
- 规约完毕,证明
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 (备注前端)
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!