密码学基础讲解

·  阅读 166

这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战


🍬 01. 什么是哈希

简介

  • 哈希是密码学的基础。Hash: 切碎并搅拌
  • 哈希函数 = 散列函数。哈希函数要做的事情是给任意大小的数据生成一个固定长度的数据,作为映射。是独一无二的,是单向不可逆的。
  • 哈希位数是固定的,存在不同内容产生相同哈希的可能,称为'碰撞'。位数越高,碰撞的可能越小。
  • 主要作用:完整性校验
  • 不同叫法:哈希 = Digest摘要 = Checksum校验值 = Fingerprint指纹

哈希算法的分类

  • 1. 普通哈希:==长度小的,安全性低的算法被认为是普通哈希算法==。碰撞率高。==主要用来做完整性校验==
  • 2. 加密哈希 Cryptographic Hash Function:==长度大的,安全性高的算法被称为是加密哈希算法==。碰撞率低。==用在加密算法中==。可以当普通哈希用(一般来说长度越大处理速度越慢)。
  • 区别:==安全性==。原则:只要一种哈希算法出现过碰撞,就不被推荐成加密哈希。
  • 常见长度(常见算法)
    • CRC-32(32位的2进制数,转为16进制为8位) ---- 84fb674c
    • Md5(32位的16进制数) ---- 2d7f2b08853cc9d9c7664e2f56a641c2 曾经属于加密哈希,目前只能用来做校验算法。
    • SHA-1 ------------------- 曾经属于加密哈希,目前只能用来做(安全性高一些的)校验算法。2017年开始 SHA-1算法生成的加密证书也会被各大浏览器拒绝
    • SHA-2 ---------- 是一系列算法的统称,其中包含SHA256
    • SHA256(256位的2进制数,转为16进制为64位) ---- 2d7f2b08853cc9d9c7664e2f56a641c22d7f2b08853cc9d9c7664e2f56a641c2

加密算法和哈希算法的区别

  • 都可以把输入的数据输出为谁也看不懂的数据。但是是完全不同的。
  • 哈希算法:输出长度固定,不可逆
  • 加密算法:输出长度和数据本身的长度有关,可逆
  • 如果被保护数据仅仅用作比较验证,在以后不需要还原成明文形式,则使用哈希; 如果被保护数据在以后需要被还原成明文,则需要使用加密。

实际应用

  • 网站注册
    • 用户密码转为哈希保存到数据库,即使数据库泄露也不会泄露密码。
  • 区块链和加密货币
  • 密码学

🍬 02. 加密通信

加密通信的两种方式:

一、对称加密

  • 发送方和接收方采用相同的key。key在互联网上的传输存在安全问题,不适合在互联网使用

二、非对称加密 = 公开密钥加密 = 公钥加密

  • 发送方和接收方采用不同的key(公钥&私钥)。由无解的数学问题产生的技术,基于反向运算极为困难的单向函数。
  • 公钥和私钥都是key(钥匙),都能解密。对应的两个应用
    • 私钥 -> 解密key;--> 加密通信
    • 公钥 -> 验证key;--> 数字签名
      • 公钥加密技术延伸出了数字签名技术加密通信保证机密性,数字签名用来认证。 (数字签名基本原理:用公钥加密,私钥解密。)
  • 实际应用:银行政府,SSH(登录服务器),HTTPS,比特币
  • 保证公钥没有被掉包:CA(发证机构)
  • 应用&延伸:
    • ==两大应用==:加密通信、数字签名
    • 公钥加密技术要考虑如何确认公钥所有人等技术问题,于是诞生了CA(发证机构)和PKI(公钥基础设施)等概念
  • 知名算法
    • RSA - 鼻祖。基于大素数相乘的结果不可能反向分解的数学原理
    • ECC - 椭圆曲线算法,基于离散对数,安全性比RSA更高。

RSA 数学原理

1. 准备过程

  • 第一步:找出两个(大)质数 p , q
    • 只有1和它本身两个约数(因数)的数叫质数
  • 第二步:做一个乘法:n = pq
  • 第三步:取一个函数 φ(n) = (p-1)(q-1) --欧拉函数
    • φ(fài)
  • 第四步:找出公钥和私钥。
    • 公钥e: 1< e< φ(n) 的整数,并且 e 和 φ(n) 要互质 (互质是公约数只有1的两个整数,叫做互质整数)
    • 私钥d: (e*d) ÷ φ(n) 余1
      • 比如 φ(n) = 20,如果e取3,则d取7即可

2. 算法过程(取模运算) (Alice给Balbo传递m):

  • 加密(加密算法):m^e^ ÷ n 余c
  • 解密(解密算法):c^d^ ÷ n 求余
    • 余数一定是m(可以从数学上证明),如此这样就还原了m

3. 安全性分析

  • Balbo计算了e和d 他要传给Alice一个e,同时还要传给Alice一个数字n。Alice经过加密算法之后得到密文c,要把c传给Balbo所以在他们公开场合传播的数字有一个大数n 和公钥e 以及密文c
  • 解密需要n 密钥d 以及密文c。窃听者只可以知道 n e c 这三个数字,但是不会知道私钥d,所以无法解密
  • ==可不可以 通过e 算出d?==
    • e和d是 除以φ(n) 余1 的数字,所以求d就要知道φ(n),而 φ(n) = (p-1)(q-1),则求φ(n)就要先求p和q。
    • 而p和q怎么求呢?n=pq -->==因数分解==(不是因式分解)。
      • 因数分解=素因数分解=质因数分解。素数=质数
    • 假如窃听者有一种能力,可以把数字n进行质因数分解p和q,那么他就可以求出欧拉函数φ(n),就可以通过这个公钥求出私钥。关键就在于 ==大数的质因数分解非常困难==
  • 一个RSA算法比较常用的是1024位的二进制数,目前人类还没有做到对它进行因数分解
  • 可以比较快计算大数的质因数分解的方法:量子计算机。普通计算机十年能计算出来的量子计算机可能一周就可以计算出来。到时候要更换别的算法或重新生成密钥公钥
    • 每隔一段时间银行系统就要更新一次。我们的数字证书隔一段时间也要重新更新,否则就不能用了。 这是为什么呢,因为我们要不停地更换我们的算法和密钥以保证我们的安全性

数学知识拓展

质数和加密

  • 素数或者说质数,是指只能被1和自身整除的大于1的自然数。对于其他比1大的自然数,它们就都是合数,能够被除了1和自身之外的其他数整数。显然,质数和质数相乘所得到的数必然是合数。
    • 合数是指自然数中除了能被1和本身整除外,还能被其他数(0除外)整除的数。与之相对的是质数,而1既不属于质数也不属于合数。最小的合数是4
  • 一直以来,质数的研究被认为只有纯数学上的意义,实际并没有什么价值。直到上个世纪70年代,麻省理工学院(MIT)的三位数学家李维斯特、萨莫尔和阿德曼共同提出了一种公开密钥加密算法,也就是后来被广泛应用于银行加密的RSA算法,人们才认识到了质数的巨大作用。

百科-因数分解

  • 在数学中,因数分解,又称素因数分解,是把一个正整数写成几个约数的乘积。例如,给出45这个数,它可以分解成3×3×5,根据算术基本定理,这样的分解结果应该是独一无二的。
  • 给出两个大约数,很容易就能将它们两个相乘。但是,给出它们的乘积,找出它们的因子就显得不是那么容易了。这就是许多现代密码系统的关键所在。如果能够找到解决整数分解问题的快速方法,几个重要的密码系统将会被攻破,包括RSA公钥算法和Blum Blum Shub随机数发生器。

🍬 03. 数字签名

  • 数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明
  • 理解:
      ●加密通信数字签名
    作用保证机密性用来认证
    原理公钥加密,私钥解密私钥加密,公钥解密
  • 实现过程
    • 发送方首先对发送文件采用哈希算法,得到一个固定长度的消息摘要;再用自己的私钥对消息摘要进行签名,形成发送方的数字签名。==数字签名将作为队件和原文一起发送给接收方==;接收方首先用发送方的公钥对数字签名进行解密得到发送方的数字摘要,然后用相同的哈希函数对原文进行哈希计算,得到一个新的消息摘要,最后将消息摘要与收到的消息摘要做比较。
      1. Alice 准备好要传送的信息(明文);
      2. Alice 对数字信息进行哈希运算,得到一个信息摘要;
      3. Alice 用自己的私钥对信息摘要进行加密得到 Alice 的数字签名,并将其附在信息上;
      4. Alice 随机产生一个加密密钥,并用此密码对要发送的信息进行加密,形成密文;
      5. Alice 用 Bob 的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES密钥连同密文一起传送给Bob;
      6. Bob 收到 Alice 传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 Alice随机产生的加密密钥;
      7. Bob 然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃;
      8. Bob 用 Alice 的公钥对 Alice 的数字签名进行解密,得到信息摘要;
      9. Bob 用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要;
      10. Bob 将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
      复制代码
    • 图解:
  • 实际作用 / 特点
    • 认证 / 鉴权 (确认签署人身份)
      • 数字签名能够让信息接收者确认发送者的身份
    • 防止抵赖
      • 消息的接收方可以通过数字签名来防止所有后续的抵赖行为,因为接收方可以出示签名给别人看来证明信息的来源
    • 保证文件完整性
      • 对比数字摘要是否一致
  • 总结
    • 是 公钥加密技术的两大应用之一
    • 私钥加密,公钥解密
    • 无需暴露私钥,证明自己持有私钥

🍬 04. 数字证书

  • 百度百科:数字证书
    • 数字证书是指CA(电子认证服务)机构发行的一种电子文档,是一串能够表明网络用户身份信息的数字,
    • 数字证书提供了一种在计算机网络上验证网络用户身份的方式,因此 数字证书又称为数字标识
    • 数字证书对网络用户在计算机网络交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性。
  • 数字证书 = CA证书种类包含服务器证书(SSL证书)、电子邮件证书、客户端个人证书、企业证书、代码签名证书

数字证书-1

需要事先了解什么是加密通信和数字签名

  • 一个由可信的第三方发出的 用来证明 所有人身份以及所有人拥有公钥 的电子文件。-- 基于对第三方机构的信任

产生原因

  • 使用数字签名的传输过程存在风险 - 中间人攻击:使用数字签名进行信息传输,容易被黑客攻击,伪造文件和公钥,且Alice无法察觉。问题的本质在于:公钥本身没有办法证明自己的主人是谁
  • 使用数字证书的传输过程:不把公钥放在云上。证书携带发送人公钥,同发送内容和数字签名一同发送给Alice。
    • 一个标准的数字证书
    • 如何确保证书本身是可信的:证书上的数字签名是证书的数字签名。用户去发证机构网站找到发证机构的公钥,解密证书签名,从而验证证书是否安全和完整(验证过程见数字签名的实现过程)。
      • ==(对于SSL证书):各大浏览器都内置了对全球各大CA机构的验证机制==。即拥有CA的公钥,可以验证CA的签名来判断证书是否有问题。证书没问题,则证书携带的公钥等也没问题

数字证书-2

  • 实现了非对称加密算法:对数据进行加密/解密
  • 签名算法:确保数据完整性和抗否认性
  • 摘要算法:确保证书本身没有被篡改

数字证书采用链式签名认证:

  • Root CA证书(根证书)
    • 下一级证书
      • 用户证书
  • 如图:

总结

  • 数字证书就是集合了多种密码学算法,用于实现数据加解密、身份认证、签名等多种功能的一种网络安全标准。
  • 数字证书采用链式签名管理,顶级CA证书已内置在操作系统中。
  • 常用算法:MD5/SHA1/SHA256/RSA/DSA/...
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改