1.定义
密码学是对安全通信技术的研究——维基百科
(通俗易懂的来说:两个人在互联网上讲话,但不让第三个人知道)
2.密码学的两个功能:
(1).加密通信(所有人都能看懂的信息转换为密文,实现加密,这个比较好理解)
(2).数字签名(用于确认身份,使其不能冒充对方)
3.应用领域:军事,银行支付,区块链...
4.密码学几个基础概念:加密和解密,密文,密钥
(1)加密:把信息通过加密算法转换成密文(就是一堆看不懂的内容)
过程:把“加密算法”封装为一个函数,把“信息和密钥(就是一小段数据)输入”到函数,输出结果就是"密文"
(2)解密:把密文通过解密算法转换成信息
过程: 同理,把“解密算法”封装为函数,把“密文和密钥输入”到函数,输出结果就是"信息"
举例:凯撒密码
结合图来看,凯撒想给将军传递的信息是:A DOG,通过加密算法(使字母往后移3位)密钥为3,得到密文“D GRM”;发给将军,密文“D GRM”通过解密算法(使字母往前移3位)密钥为3,得到信息是:A DOG”
5.加密通信分类:对称与非对称
(1)对称:发出者和接收者“密钥相同”
算法举例:AES
(2)非对称:发出者和接收者“密钥不同”(分别是公钥和私钥)
算法举例:RSA,ECC
!!!重点理解:Alice给Bob发一句话,Bob(接收方)生成公钥(可以公开)和私钥(严格保密),Alice用Bob的公钥加密,发送给Bob,Bob收到后用自己的私钥解密
思考:为什么要发明非对称加密???
非对称加密只需传递公钥,公钥本身就是可公开的,也可以实现数字签名
6.数字签名:证明身份
简单来说:用私钥生成一串数字签名,公布出去给其他人,其他人用公钥去验证数字签名是否有效,如果通过就可以确认身份啦~
7.数字签名使用——散列算法
(接下来会有一点复杂,但是会特别有意思,我会尽量说的通俗易懂,如果你看懂了,就会突然顿悟生活中的很多密码小细节哟~~~)
(1)定义
散列(哈希,Hash)算法:单向加密技术,即输入信息,进行计算,输出摘要。主要是用来验证原始数据是否发生变化。
(2)特点:
- 很难反推出信息
- 一旦改变信息,摘要会跟着改变
- 对于不同的消息,对应的摘要几乎不可能相同
(3)应用:
保存密码、数据防篡改和完整性保护、数字签名等
理解(基于不同的应用场景):
(1).有时候下载网上各种文件和软件,真的安全吗?有人会在这个文件中加入病毒,那怎么办?
在网上下载文件时,经常会提供 MD5 值供校验。因为文件实际可能是从世界各地的镜像站下载的,有可能会被篡改,然后加入病毒什么的,就很危险。所以下载完成之后计算一下 MD5 看是否和网站本身MDS值一致,就知道是否被篡改了。
(2).平时我们登陆不同地方,输入密码,会直接被后台看见吗?那岂不是很危险?
一般系统在设计时,都不会直接保存密码原文,如果你的密码直接被看到了,就很危险,使用为了防止密码泄漏,可以用散列函数保存原始密码的摘要,而不是直接保存密码本身。根据散列函数的特点,即便摘要泄漏了,也很难反推出密码是什么,就安全了很多。
(3).为什么有时候注册新用户,系统老是会提醒我们密码不要太短,不要连续,不能是生日等?
虽然散列函数是单向的,但可以使用彩虹表(就是把常见的组合的摘要都计算出来,得到一个摘要表),去比对一下就很容易就能知道原文是什么。
(4).为什么注册新用户,系统老是会提示我们加入几个符号,为了把密码变长?
为了避免被彩虹表攻击,可以在计算摘要时,随机添加一点东西进去再计算摘要,这个东西叫盐值 (salt)。由于盐值足够长且是随机的,这样想通过事先计算的彩虹表去碰撞就会更困难了。例如上面那个字符串很容易能搜到是 admin
的 MD5 值。而如果我们给 admin
后面拼接上 P6R8ERaZ
,再计算出 adminP6R8ERaZ
的 MD5 值 70a1a6831709d7e7cb6cc35ccdfdbd39
,再去搜索这个值就很难找到他的原文了。