本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
(1)首先,将明文拆分为若干个16字节的块。如果最后一个块不足16字节,则需要进行填充操作。
(2)对每个块进行加密。具体步骤是:
- 将块与第0轮的轮密钥进行异或操作。
- 进行若干轮加密变换,每一轮包括:字节代换变换(SubBytes)、行移位变换(ShiftRows)、列混合变换(MixColumns)和轮密钥加变换(AddRoundKey)。
- 最后一轮不进行列混淆变换。
- 最后,将加密后的块输出。如果还有未加密的块,继续进行加密操作。
7.SM4对称密码算法的特征:①我国自主设计的分组对称密码算法;②分组长度为128bit,密钥长度为128bit,即十六进制表示为32位,明文和密钥等长;③加密算法和密钥扩展算法都采用32轮非线性迭代结构;④加解密算法结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
8.祖冲之序列密码算法的特征:①中国自主设计的序列密码算法;②面向字的序列密码算法,采用128bit的初始密钥和128bit的初始矢量作为输入,输出以32bit的字为单位的密钥流。(每32bit为一个密钥字);③有三个逻辑层:顶层为一个包含16个单元的线性反馈移位寄存器LFSR,中间层是比特重组BR,最下层为一个非线性变换函数F。
9.非对称加密的应用:①加密通信;②数字签名;③数字证书。
10.RSA非对称加密算法的特征:①该算法的数学基础是初等数论中的欧拉定理,其安全性建立在大整数因子分解的困难性之上,利用了单向陷门函数的原理。
11.RSA非对称加密算法的密钥生成的步骤:
(1)选择两个互质的大素数p和q(保密);
(2)计算n=pq(公开);
(3)计算φ(n)=(p-1)(q-1)(保密);
(4)选择一个随机整数e(0<e<φ(n))(公开),且e与φ(n)互质;
(5)计算e对于φ(n)的模反元素d(保密),(模反元素:在这里指有一个整数d,可以使得ed÷φ(n)的余数为1);
通过以上步骤,得到公钥KU={e,n},私钥KR={d,n}。
12.任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(欧拉函数)
答:
φ
(
n
)
=
n
(
1
−
1
p
1
)
(
1
−
1
p
2
)
…
(
1
−
1
p
r
)
φ(n)=n(1-\frac{1}{p_1})(1-\frac{1}{p_2})…(1-\frac{1}{p_r})
φ(n)=n(1−p11)(1−p21)…(1−pr1),其中
p
1
,
p
2
,
…
,
p
r
p_1,p_2,…,p_r
p1,p2,…,pr表示n被拆解出来的素因子,重复的素因子只取一次。如:n=8,则8=2×2×2,即
φ
(
8
)
=
8
×
(
1
−
1
2
)
=
4
φ(8)=8×(1-\frac{1}{2})=4
φ(8)=8×(1−21)=4。
13.RSA非对称加密算法的加密的步骤:计算
C
=
M
e
m
o
d
n
C=M^e mod n
C=Memodn。
RSA非对称加密算法的解密的步骤:计算
M
=
C
d
m
o
d
n
M=C^d mod n
M=Cdmodn。
例如:已知明文 M=8,e=3,n=15,采用 RSA非对称加密算法进行加密。
*解:由题设可知
C
=
M
e
m
o
d
n
=
8
3
m
o
d
15
=
2
C=M^e mod n=8^3 mod 15=2
C=Memodn=83mod15=2*.
已知密文 C=2,d=3,n=15,采用 RSA非对称解密算法进行解密。
*解:由题设可知
M
=
C
d
m
o
d
n
=
2
3
m
o
d
15
=
8
M=C^d mod n=2^3 mod 15=8
M=Cdmodn=23mod15=8*.
解密结果等于明文,加解密成功。此例中,公钥 KU={3,15},私钥 KR={3,15},(p=5,q=3)。
14.ECC公钥密码算法:①比特币和中国的二代身份证都使用了256bit的椭圆曲线密码算法。
15.SM2公钥密码算法:①以椭圆曲线及相关运算为基础;②为国家密码管理局公布的公钥算法,其加密强度为256位。
16.杂凑算法的基础是杂凑函数(或称HASH函数、散列函数),它是一种单向密码体制。其中,杂凑函数应满足以下条件:
①函数的输入可以是任意长。
②函数的输出是固定长。
③已知x,求H(x)较为容易,可用硬件或软件实现。
④已知h,求使得H(x)=h的x在计算上是不可行的,这一性质称为函数的单向性,称H(x)为单项杂凑函数。
⑤已知x,找出y,使得H(y)=H(x)在计算上是不可行的,若单项杂凑函数满足这一性质,称其为弱单项杂凑函数。
⑥找出任意两个不同的输入x、y,使得H(y)=H(x)在计算上是不可行的。若单项杂凑函数满足这一性质,称其为强单项杂凑函数。
17.SHA-1是一种数据加密算法,它可以输入最大长度为
2
64
2^{64}
264比特的消息,以512比特的数据块为处理单位,输出160bit的消息摘要。在进行散列值计算之前,先要对需要加密的数据进行预处理,分为消息填充、分割已填充消息、为散列值计算设置初始化值。
18.SM3杂凑算法是中国国家密码管理局公布的中国商用密码杂凑算法标准,适用于商用密码中的数字签名和验证、消息认证码的生成与验证、以及随机数的生成。SM3杂凑算法规定数据在内存中的表示为“左高右低”(即数的高阶字节放在存储器的低地址,数的低阶字节放在存储器的高地址)。消息分组长度为512位,摘要值长度为256位,整个算法的执行步骤大致分为四步:消息填充、消息扩展、迭代压缩、输出结果.
19.消息认证函数分为三类:
①消息加密函数:用整个消息的密文作为对消息进行认证的认证标识。
②消息认证码MAC:是以消息和密钥作为输入的公开函数,产生定长的输出,并以此输出值作为认证标识。
③杂凑函数:不需要密钥的公开函数,将任意长度的输入消息映射成一个固定长度的输出值,并以此值作为认证标识
20.基于消息认证码MAC的认证:消息被一密钥控制的公开函数作用后产生的、用作认证符的、固定长度的数值,也称为密码校验和。MAC=C(K,M),其中M是输入消息,C是MAC函数,K是共享密钥。需要通信双方A和B共享一密钥K,如果B收到的MAC与自己计算的MAC一致,则证明:①接收方相信发送方发来的消息未被篡改;②接收方相信发送方不是冒充的。
MAC有以下三种基本模式:
21.MAC函数与Hash函数(杂凑函数)的区别:MAC算法的输入包含密钥,而Hash不包含。
MAC函数与加密函数的区别:MAC算法不要求可逆,是单向函数;而加密算法必须可逆,是双向函数。
22.MAC的优点:①MAC将加密性与认证分离开来,可以满足只需要认证不需要加密的需求。同时MAC使得层次结构更加灵活,可以在传输的不同层次来分别完成加密和认证。②MAC不影响明文的读取,可以一直附在明文后面,在需要的时候灵活认证,可以延长对消息的保护时间,而不仅仅是在传输的时候。故而,上图中,b方案比C方案更好一些。
23.杂凑函数用来提供消息认证的基本使用方式(6种):
(1)消息与杂凑码连接后,用对称密码体制加密,即A→B:
E
K
[
M
∣
∣
H
(
M
)
]
E_K[M||H(M)]
EK[M∣∣H(M)] 。由于所用密钥只有双方共享,因此可保证消息的确来自A,提供了身份认证,同时由于消息和杂凑码都被加密,也提供了保密性。
(2)消息与使用对称密码体制加密后的杂凑码连接,即A→B:
M
∣
∣
E
K
[
H
(
M
)
]
M||E_K[H(M)]
M∣∣EK[H(M)]。由于消息M以明文的方式传输,因此只提供了身份认证,不提供保密性。可用于不要求保密的情况,减少处理负担。
(3)消息与使用公钥密码体制加密后的杂凑码连接,即A→B:
M
∣
∣
E
K
R
A
[
H
(
M
)
]
M||E_{KR_A}[H(M)]
M∣∣EKRA[H(M)]。由于A发送的是用A的私钥加密的杂凑码,因此提供了身份认证和数字签名的作用,但消息是以明文传输,不提供保密性。
(4)消息与使用公钥密码体制加密后的杂凑码连接,再用对称密码体制加密,即A→B:
E
K
[
M
∣
∣
E
K
R
A
[
H
(
M
)
]
]
E_K[M||E_{KR_A}[H(M)]]
EK[M∣∣EKRA[H(M)]]。由于A使用自己的私钥对杂凑码进行加密,因此提供了数字签名和身份认证的作用,然后用对称密码加密消息和加密后的杂凑码,提供了保密性。在实际中较为常见。
(5)双方共享一个秘密值S,计算消息与该秘密值连接后生成的杂凑码,再与消息连接,即A→B:
M
∣
∣
H
(
M
∣
∣
S
)
M||H(M||S)
M∣∣H(M∣∣S)。由于秘密值S只有双方知道,接收方可用发送方传输的消息M与S生成杂凑码进行对比,因此实现身份认证,但不提供保密性。这种方法可以保证攻击者无法伪造消息。
(6)双方共享一个秘密值S,计算消息与该秘密值连接后生成的杂凑码,与消息连接,再使用对称密码体制进行加密,即A→B:
E
K
[
M
∣
∣
H
(
M
∣
∣
S
)
]
E_K[M||H(M||S)]
EK[M∣∣H(M∣∣S)]。由于使用对称密码体制对消息M和杂凑码进行加密,故既实现了身份认证,又实现了保密性。
24.数字签名是由需签名的消息和签名者的私钥按特定规则计算而产生的。
25.数字签名和消息认证的区别:
①数字签名的涵盖范围大于消息认证。消息认证是确保接收方知道发送方的消息完整性,而数字签名除此之外,还可证明消息的确是由发送方发出的,提供了身份认证。
②数字签名用的是一对公私钥对(非对称密码体制),多用于一对多的场合;消息认证往往用的是同一个密钥(对称密码体制),一般在一对一场合使用。
26.DSA可以进行数字签名,但不能进行加密,因为它是单向函数。非对称密码体制都可以进行数字签名和数据加密。
27.DSA进行数字签名的过程:① 使用消息摘要算法将要发送数据加密生成信息摘要。② 发送方用自己的DSA私钥对信息摘要再加密,形成数字签名。③ 将原报文和加密后的数字签名一并通过互联网传给接收方。④接收方用发送方的公钥对数字签名进行解密,同时对收到的数据用消息摘要算法产生同一信息摘要。⑤ 将解密后的信息摘要和收到的数据在接收方重新加密产生的摘要进行比对校验,如果两者一致,则说明在传送过程中信息没有破坏和篡改;否则,则说明信息已经失去安全性和保密性。
28.DSA签名过程:
(1)选择一个素数p,两个随机数q和g,其中,q与p-1互质,
g
=
h
p
−
1
q
m
o
d
p
g=h^{\frac{p-1}{q}}mod\ p
g=hqp−1mod p,
h
∈
Z
,
1
<
h
<
p
−
1
且
(
h
p
−
1
q
m
o
d
p
)
1
h∈Z,1<h<p-1且(h^{\frac{p-1}{q}}mod\ p)>1
h∈Z,1<h<p−1且(hqp−1mod p)>1.
(2)用户私有密钥x,x∈Z且0<x<q.
(3)用户公开密钥
y
=
g
x
m
o
d
p
y=g^xmod\ p
y=gxmod p.
(4)用户随机选取k,要求0<k<q;计算
r
=
(
g
k
m
o
d
p
)
m
o
d
q
r=(g^kmod\ p)mod\ q
r=(gkmod p)mod q,
s
=
[
k
−
1
(
H
(
M
)
x
r
)
]
m
o
d
q
s=[k^{-1}(H(M)+xr)]mod\ q
s=[k−1(H(M)+xr)]mod q,其中,
k
−
1
k^{-1}
k−1表示k关于某个模数的逆元,H(M)表示明文M的hash值;
(5)最终签名(r,s),和M一起发送到验证方。
(6)接收者收到M,r,s后,先验证0<r<q,0<s<q;
(7)计算
w
=
s
−
1
m
o
d
q
w=s^{-1}mod \ q
w=s−1mod q,
u
1
=
[
H
(
M
)
w
]
m
o
d
q
u_1=[H(M)w]mod\ q
u1=[H(M)w]mod q,
u
2
=
r
w
m
o
d
q
u_2=rw\ mod\ q
u2=rw mod q,
v
=
[
(
g
u
1
y
u
2
)
写在最后
在结束之际,我想重申的是,学习并非如攀登险峻高峰,而是如滴水穿石般的持久累积。尤其当我们步入工作岗位之后,持之以恒的学习变得愈发不易,如同在茫茫大海中独自划舟,稍有松懈便可能被巨浪吞噬。然而,对于我们程序员而言,学习是生存之本,是我们在激烈市场竞争中立于不败之地的关键。一旦停止学习,我们便如同逆水行舟,不进则退,终将被时代的洪流所淘汰。因此,不断汲取新知识,不仅是对自己的提升,更是对自己的一份珍贵投资。让我们不断磨砺自己,与时代共同进步,书写属于我们的辉煌篇章。
需要完整版PDF学习资源私我
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!