密码学杂谈 - 上

安全防护

最近做软件的商业license设计,又一次对密码学进行了一些学习和了解,整理形成本文的笔记。密码学比较复杂,我了解有限,所以不打算深入介绍,仅仅针对涉及的几个应用场景进行介绍。

我们使用密码学,个人认为是应对安全防护上的三个概念: 防窃听,防伪造,防篡改,这是安全防护的主要目的。

防窃听是指防止信息在传递过程中被第三方读取。明信片在邮递过程中,信息可以被任何接触到的人看到,信息就泄露了。解决这个问题,最简单的办法,加一个密封的信封。这样信息在传递过程中就是安全的,其它人看不到。

防伪造是指防止信息的来源被第三方伪造。传统的信件防伪方法有印章,比如在圣旨上盖个大印,宣布发布者的身份,避免伪传圣旨。

防篡改是指防止信息被第三方修改。传统的方法是使用蜡丸/火漆来包装信息,完整的蜡丸/火漆表示信息未被修改。篡改信息的知名故事有“传位于四(十四)阿哥”的康熙遗旨事件。

安全防护的防泄露,防伪造,防篡改在不同的场景中有不同的需求,可以单独应用也可以结合使用。

网络中防窃听的方法是发送方把原文信息进行数字加密,传输密文,接收方只有使用秘钥才可以解开,保证信息的_私密性_。防伪造的方法是数字签名,发送方给信息附加一个数字签名,表明信息_来源的真实性_。防篡改的方式是数字摘要,对信息形成一个唯一的摘要,任何微小的原文修改都会导致数字摘要变化,从而保证信息的_完整性_。总结如下表:

安全防护目的措施
防窃听信息的私密性加密
防伪造信息来源真实性签名
防篡改信息的完整性摘要

加密和签名

加密和解密是一个对称操作,使用秘钥对原文进行加密得到密文,再使用同一秘钥对密文进行解密得到原文。

这种使用 唯一秘钥 的加密方式叫做 对称加密 。对称加密执行效率很高,但是在网络中如何安全的传输秘钥是个问题?秘钥无法安全传输,加密就达不到防护效果。

下面是使用openssl工具进行对称加密的演示:

# echo "123abc" | openssl enc -e -aes-128-cbc -pass pass:game404 -base64 -md sha1
U2FsdGVkX1+wwmevh948fa38juYRyBxYYcdL2rWBhMQ=
...
# echo "U2FsdGVkX1+wwmevh948fa38juYRyBxYYcdL2rWBhMQ=" | openssl enc -d -aes-128-cbc -pass pass:game404 -base64 -md sha1
123abc 

非对称加密 可以解决秘钥传输的安全问题。在非对称加密中使用_一对秘钥_: 私钥+公钥。私钥发送方(通常是服务端)保存,公钥通过网络对外发布,可以有多个接收方(通常是客户端)。客户端使用公钥加密后的密文,只能够在服务端使用私钥进行解密,即使再使用公钥也无法完成密文解密。

当然也可以反过来,使用私钥“加密”信息,公钥“解密”信息。但是由于公钥有多个,任何持有公钥的客户端,都可以对信息进行解密,所以这种私钥“加密”的信息,起不到保密的作用。只可以用来验证信息来源的唯一性,这个过程通常叫做 签名验签

私钥和公钥还有一个主要特点:公钥是通过私钥生成的,通过公钥很难推断出私钥,这样由于私钥的唯一性,可以做到信息保密。

总结一下口诀: 公钥加密,私钥解密;私钥签名,公钥验签

同样使用openssl工具创建非对称加密的私钥:

# openssl genrsa -out private.pem 1024
Generating RSA private key, 1024 bit long modulus
...............++++++
.++++++
e is 65537 (0x10001)
# cat private.pem
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQDj73NhxbtD0lNJtYA5bWrMRKYhN07r6BYOKqsFMm9N91ZtvW/R
7w87XO6WSt5uqVzBgQAHshQZNh0PNeBp8DpwIQYArG9x/ZZhZnTIsD3wUpbMbp5E
EF4IBgw1284IKtpvV8a7HJzNchl4//bFGkAU/flIP1Upl6ZkOMk6KP76wQIDAQAB
AoGALAqdWbvyBhXCoBBg2TfKFfQBwZNFPZHXiR83ckafeQocehHLZF3zrH21X/bR
acJxuLXrQpFnDsQE82ZumSmgsKJK27yKIrf4eM7IKB0n6vK8WK9V+3L2FFg+p19i
v9sA/sXZuJ7tNmXcbk3Vsqgv0ZRcro1I5PKZJUKZU3yoakECQQD9prACGI6igdMQ
2YhZvuZPZ1zQPjuCBG046+WKXKFUO/IrLJbvvmpz218wzKdL/24A/dZwZHs/KOOh
FYf11DoJAkEA5gvM98VOA+dGmf/KGy5Fx3CgFW+lEojDaNAFo1ZJY1kr6FJIY9H3
n1mxXbXNObvBKi5FMQVgvsiCCHotw0BI+QJBALCxbgh3vNydXT9umZoS7nK/yRrT
TzbaCI/PXB4POt7nx2Gl9Rra5WMBnQTse1nofGO6b6fphyVPQYpT6lsn1KkCQGg7
JI2G6kg+e/C+wtX560foMcBEq6hwKwnMZyGQsQPAnXJQBdikg+vBeemZu/jSpzzz
ZgpGA4Wt16z7nsx+zhECQCnN3OhSpOlT9Pq8CVXDMVNilutSbnNuO996k89Jg/zR
s1XIN4zfEDxWLJi9N/iZ0BK7JnwtKMZ3Z+9IStWGqkg=
-----END RSA PRIVATE KEY----- 

根据私钥创建公钥:

# openssl rsa -in private.pem -pubout -out public.pem
writing RSA key
# cat public.pem
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDj73NhxbtD0lNJtYA5bWrMRKYh
N07r6BYOKqsFMm9N91ZtvW/R7w87XO6WSt5uqVzBgQAHshQZNh0PNeBp8DpwIQYA
rG9x/ZZhZnTIsD3wUpbMbp5EEF4IBgw1284IKtpvV8a7HJzNchl4//bFGkAU/flI
P1Upl6ZkOMk6KP76wQIDAQAB
-----END PUBLIC KEY----- 

对信息进行加密的部分过程:

# openssl rsautl -sign -in license.md5 -out license -inkey private.pem
# base64 license
hkBRNnalRvi21K+dnOvAg8W3V/ntheouUhlJelwvzzW3CMZbKw08z4TQzV4Qkx0DU7YgiUOdCNvn
KWRdxVnj4jatqLZeMJp9BOYI3SrdzsQETzXQOV/37L+s6nA4T+EM8YfsdgoEfyt5GYezBqQW3Iii
fppNQ4e67qSTBqpfD88= 

在非对称加密过程中还存在2个问题:

1.私钥加密无法达到保密效果,服务端响应信息无法加密。
2.要求明文信息必须小于秘钥长度。

一种容易想到的方法是让每个客户端也生成一对私钥+公钥,这样服务端使用客户端的公钥加密响应信息。这种方法的副作用是服务端需要保存所有的客户端公钥,实现成本较高,一般非金融类业务不会这样处理。对于明文信息必须小于秘钥长度,可采用明文分段方式进行加密,这种方法的副作用是效率更低。

比较好的解决上述2个问题的方法是把对称加密和非对称加密结合起来。客户端随机生成一个对称秘钥,然后使用公钥加密秘钥,服务端收到密文信息后解密得到秘钥。服务端使用秘钥对响应信息进行对称加密,客户端使用秘钥解密信息。这样就解决了服务端响应信息的加密问题。以后客户端再发送请求信息,都可以使用这个秘钥进行对称加密,同时也解决非对称加密效率低和秘钥长度的问题。流程如下:

步骤客户端服务端
1生成对称秘钥-
2公钥加密对称秘钥-
3-私钥解密获得对称秘钥
4使用对称秘钥加密请求明文-
5-使用对称秘钥解密请求密文
6-使用对称秘钥加密响应明文
7使用对称秘钥解密响应明文-

证书

使用对称加密+非对称加密的结合,还有秘钥伪造的安全问题。假设客户端请求A网站服务,需要先获取A网站的公钥。如果在网络传输中B网站使用自己的公钥进行伪装替换,客户端错误的把B网站的公钥当做A网站的公钥。那么客户端发送给A网站的信息就可以被B网站窃取。

解决的办法就需要使用 证书。由一个专业的安全机构,给A网站颁发一个证书。证书实际上就是把A网站的公钥使用自己的私钥包装一下。同时这个机构还会和操作系统配合,提前在操作系统中预制自己的公钥。这样通讯中获取到A站点的证书后,使用操作系统提供的安全机构公钥解密得到A站点的公钥,从而解决公钥伪造问题。以上处理方式就是https协议的安全基础。

摘要

摘要一个应用场景是公示信息的完整性。下载网站在提供软件下载的时候,一般还会提供一个数字摘要,用来防止流氓软件捆绑。比如下面pypy软件包的摘要信息:

pypy3.9-v3.7.8 sha256:
---------------------
89dd0399a89a04b58c22e9b773747258807996bd5071dbf996a85bf8af432393pypy3.9-v7.3.8rc1-linux32.tar.bz2
f3f90203afcf7ee359e8c8a871bfaa06d96f926781fd94fb81f471dcd32f7332pypy3.9-v7.3.8rc1-linux64.tar.bz2
9a5d7217d8173bbdf1c7351b34651fee0596b0bcfe6fe4becae150d4a5469487pypy3.9-v7.3.8rc1-osx64.tar.bz2
4651d804341046be824af0ca35b7ebbbb6d5cdcef0d4a373891398dba182d010pypy3.9-v7.3.8rc1-src.tar.bz2
c4db62a854c2cc994d46fac0105a8e3bd4273093b9844c1f7cb69118fae6df72pypy3.9-v7.3.8rc1-src.zip
ad214e4a44c893dc503e7e0b6f6bdfa7523db80b9d4890523f8ee96339d05fc9pypy3.9-v7.3.8rc1-win64.zip 

通过特定的散列算法,对 pypy3.9-v7.3.8rc1-linux32.tar.bz2 计算得到值为 89dd0399a89a04b58c22e9b773747258807996bd5071dbf996a85bf8af432393 的摘要。下载完成后比较一下摘要就知道软件包的完整性。

下面是另外一个摘要算法md5的示例:

➜~ echo "123456789" | md5sum
b2cfa4183267af678ea06c7407d4d6d8-
➜~ echo "123456789" | md5sum
b2cfa4183267af678ea06c7407d4d6d8-
➜~ echo "1" | md5sum
b026324c6904b2a9cb4b88d6d61c81d1-
➜~ echo "123456780" | md5sum
9af763c0ffc99c565a6a9460e1a2ca7e- 

散列函数形成的摘要都具有下面几个特点:

  • 单向 只能够从tar包得到一个摘要值,从摘要值是无法还原完整的tar包
  • 结果确定 同一个算法对每个输入的计算结果是确定
  • 结果定长 可以看到字符串"1"和"123456789"得到的结果长度都是一样的
  • 结果分散无规律 可以看到字符串"123456780"和"123456789",仅仅变动了1个字符,摘要却变化非常大
  • 效率高 工程上摘要的计算非常快速

下面是摘要算法的一些应用场景。

去重

因为摘要算法的确定性,所以可以用来进行去重。对于数据是否变更,仅仅需要比较信息的摘要指是否变动:

if data["targets_md5"] != self.route_data.get("targets_md5", None):do_update()
else:log.info("update_router_info targets not changed !")pass 

密码保护

系统存储用户密码时,并不记录密码本身,仅记录密码的散列值。这样只有用户自己知道密码的明文。校验密码时,只要输入的密码正确,得到的散列值一定是一样的,表示校验通过。即使系统的数据库不小心产生泄露问题,也不会导致用户的密码泄露。

很多用户习惯使用同一个密码访问所有网站,比如A网站和B网站使用同一个密码,假设网站都是明文存储用户名和密码。A网站是大站点,网络安全处理比较好。但是B网站是小站点,发送了数据库泄露。这样攻击者利用盗取数据中的用户名和密码,从而拿到用户在A网站的重要信息。

md5算中123456789的值固定是b2cfa4183267af678ea06c7407d4d6d8,所以即使使用散列存储,也可以反向推断值为b2cfa4183267af678ea06c7407d4d6d8的密码明文是123456789。这种攻击方法一般称为 彩虹表,就是利用一些常用密码的散列值进行推测密码明文。解决这个问题的方法是 加盐 。加盐是一个通俗说法,利用散列算法的分散特性,在明文中混入一个其它数据,这样得到密文就会产生大的变化。校验的时候只要保证使用相同的盐,就可以确定明文是正确。

明文+盐值 --> 密文 

接口签名

摘要算法还可以用来做服务之间接口的安全认证。比如某个接口的参数如下:

appid: wxd930ea5d5a258f4f
mch_id: 10000100
device_info: 1000
body: test
nonce_str: ibuaiVcKdpRxkhJA 

对接口的参数信息进行拼接,形成一个原始的字符串:

stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"; 

结合参数信息和秘钥形成一个摘要签名:

MD5签名方式:
stringSignTemp=stringA+"&key=192006250b4c09247ec02edce69f6a2d" //注:key为商户平台设置的密钥key
sign=MD5(stringSignTemp).toUpperCase()="9A0A8659F005D6984697E2CA0A9CF3B7" //注:MD5签名方式 

因为秘钥进行双方服务器存放,不进过网络传输。所以每个请求可以通过验证签名确定来源和信息的完整性。

小结

本文我们了解了密码学的一些应用场景和解决问题的目的。目的这个很重要,可以让我们知道 加密签名摘要 都在保护什么。加密是保护信息的私密性,签名是保护信息来源真实性,摘要是保护信息的完整性。进而可以根据自己的需求,灵活的应用,比如创建一个自己的授权证书license。

下一节我会介绍一些算法的具体实现,以及如何实现一个license。

参考链接

初入计算机行业的人或者大学计算机相关专业毕业生,很多因缺少实战经验,就业处处碰壁。下面我们来看两组数据:

2023届全国高校毕业生预计达到1158万人,就业形势严峻;

国家网络安全宣传周公布的数据显示,到2027年我国网络安全人员缺口将达327万。

一方面是每年应届毕业生就业形势严峻,一方面是网络安全人才百万缺口。

6月9日,麦可思研究2023年版就业蓝皮书(包括《2023年中国本科生就业报告》《2023年中国高职生就业报告》)正式发布。

2022届大学毕业生月收入较高的前10个专业

本科计算机类、高职自动化类专业月收入较高。2022届本科计算机类、高职自动化类专业月收入分别为6863元、5339元。其中,本科计算机类专业起薪与2021届基本持平,高职自动化类月收入增长明显,2022届反超铁道运输类专业(5295元)排在第一位。

具体看专业,2022届本科月收入较高的专业是信息安全(7579元)。对比2018届,电子科学与技术、自动化等与人工智能相关的本科专业表现不俗,较五年前起薪涨幅均达到了19%。数据科学与大数据技术虽是近年新增专业但表现亮眼,已跻身2022届本科毕业生毕业半年后月收入较高专业前三。五年前唯一进入本科高薪榜前10的人文社科类专业——法语已退出前10之列。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。

网络安全行业特点

1、就业薪资非常高,涨薪快 2022年猎聘网发布网络安全行业就业薪资行业最高人均33.77万!

img

2、人才缺口大,就业机会多

2019年9月18日《中华人民共和国中央人民政府》官方网站发表:我国网络空间安全人才 需求140万人,而全国各大学校每年培养的人员不到1.5W人。猎聘网《2021年上半年网络安全报告》预测2027年网安人才需求300W,现在从事网络安全行业的从业人员只有10W人。
img

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

行业发展空间大,岗位非常多

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…

职业增值潜力大

网络安全专业具有很强的技术特性,尤其是掌握工作中的核心网络架构、安全技术,在职业发展上具有不可替代的竞争优势。

随着个人能力的不断提升,所从事工作的职业价值也会随着自身经验的丰富以及项目运作的成熟,升值空间一路看涨,这也是为什么受大家欢迎的主要原因。

从某种程度来讲,在网络安全领域,跟医生职业一样,越老越吃香,因为技术愈加成熟,自然工作会受到重视,升职加薪则是水到渠成之事。

黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

img

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值