密码学入门科普

密码学入门科普

0.传递消息 —— 摘要

摘要MD(Message Digest)是【哈希值】,我们通过散列算法比如MD5算法就可以得到这个哈希值。
摘要只是用于【验证数据完整性和唯一性】的哈希值,不管原始数据是什么样的,得到的哈希值都是【固定长度】的,也就是说摘要并不是原始数据加密后的密文,只是一个验证身份的令牌。所以我们无法通过摘要解密得到原始数据

1.如何不被窃听 —— 加密

密码学入门科普_第1张图片
密码学入门科普_第2张图片

  • 上图这种加密方案在密码学里称为【对称密码】,加密方和解密方使用的是【相同的密钥
  • 知名的密码算法有 AES(2001)、Blowfish(1993)、DES(1977),再远一点,有二战时期的恩尼格码(转轮机原理,德国)、紫色密码(转轮机原理,日本),以及著名的凯撒密码(没错就是地中海北岸那个凯撒)、栅栏密码等。

2.如何交换密钥 —— 非对称加密

为了解决信道安全问题
密码学入门科普_第3张图片

  • Bob 事先生成【一对公钥和私钥】,私钥 pri 由自己保管,把公钥 pub 发给 Alice。
  • Alice 使用 pub 对消息内容进行加密,Bob 用 pri 进行解密。公钥加密,私钥解密
  • 需要注意的是, 只有私钥才可以解密,所以即使 Eve 窃取到了 pub(只有 pub 被传输而容易被窃取),她也无法解密。
  • 这种加密方式在密码学里称为【非对称密码】,所谓“非对称”指的是加密方和解密方用的密钥不一样。
  • 知名的非对称算法有:DSA(数字签名算法,只能用于签名,1991)、ECC(椭圆曲线加密,1985)、RSA(公钥加密算法,1977)等。
  • 这些算法除了用于加密外,还可以用于【数字签名】。非对称算法有个致命弱点: 性能很低。实际应用中一般采用混合加密体制、哈希签名体制。

3.如何防止数据篡改 —— MAC

密码学入门科普_第4张图片
密码学入门科普_第5张图片
图中的 【MAC】指的是【消息认证码】(Message Authentication Code),你现在不需知道它的原理,只要记住 :(1)传入两个参数 message(消息) 和 key(秘钥),进行一系列计算后得到一个值叫 MAC,MAC值 = MAC算法(message消息 + key密钥)。(2)只有 message 和 key 相同的情况下,才能得到相同的 MAC。(3)MAC值一般和原始消息一起传输,原始消息可以选择加密,也可以选择不加密。(4)上面的message(消息)也可能是原始消息的摘要,即通过摘要算法所得的摘要消息

  • 消息认证码有多种实现方式,其中最常见的是 【HMAC】(Hash MAC),即使用哈希算法来实现 MAC,还有一种是基于**【分组密码算法】**的 MAC,不常见。
  • 聪明如你,肯定会想到如果 key(秘钥) 被窃取该怎么办?这就涉及到 数字签名了,后文会讲到。

4.如何校验身份 —— MAC

密码学入门科普_第6张图片

  • MAC包含几种实现方式:基于 HASH 的 MAC 称为 HMAC,应用比较广泛。
  • 有些同学应该接触过阿里云的 Access Key,其实就是 HMAC 的原理。
  • 有些同学在两个系统之间API调用时,会使用同一个 key(秘钥) 做 md5 计算来实现 API 鉴权,这称为“加盐HASH”,可以简单理解为 HMAC 的简化版。
  • MAC值一般和原始消息一起传输,原始消息可以选择加密,也可以选择不加密,通信双方会以相同的方式生成MAC值,然后进行比较,一旦两个MAC值相同表示MAC验证正确,否则验证失败。
  • 同样的,如果 key(秘钥) 被窃取该怎么办?这可以用 数字签名 来解决。

5.更进一步 —— 数字签名

发送方是用 私钥签名,而接收方用 公钥验签,这【跟加密情况正好相反】。
密码学入门科普_第7张图片
非对称算法也叫公钥算法 + 数字签名 组合的方式处理数据,加解密过程如下:
密码学入门科普_第8张图片
密码学入门科普_第9张图片

6.公钥的身份证 —— 数字证书

伪造公钥,Bob 需要事先生成公钥 pub 和私钥 pri ,然后把 pub 分发给 Alice。那么攻击过程就从这入手,Eve 生成自己的一对公钥 pub’ 和 私钥 pri’,截获 Bob 的 pub,并用自己的 pub’ 冒充 Bob 的公钥发给 Alice。
密码学入门科普_第10张图片
密码学入门科普_第11张图片
这是个“偷天换日”的过程,Eve 通过伪造公钥(中间人攻击),不光窃听到 Alice 的消息,还能保证整个过程中 Alice 和 Bob 都没有察觉!

Eve 不是喜欢伪造公钥吗,Bob 这次就要请 Trent 为自己的公钥注册一张 “身份证” —— 数字证书。见证如见人,哦不对,见证如见公钥!以下是注册数字证书的过程:
密码学入门科普_第12张图片

  • Bob 请求 Trent 为自己的公钥 pub 注册一个证书。
  • Trent 收到请求后,用自己的私钥 pri ’ 对 pub(以及身份信息) 进行签名,得到一个 sign。
  • Trent 把证书 certificate = pub + sign 颁发给 Bob。
  • Bob 把自己的证书 pub + sign 发给 Alice。
  • Alice 使用 Trent 的公钥 pub ’ 对 sign 进行验签,如果校验成功则说明 pub 的确是 Bob 的公钥,因为她相信 Trent 的权威性。

Eve 不可能找 Trent 为她办一个 Bob 的数字证书,因为 Trent 不会同意的,就像警察蜀黍不会给我办一张别人的身份证一样。所以,Eve 无法伪造 Bob 的公钥。

  • 考虑到非对称算法的效率问题,实际应用中一般是先对数据进行哈希,然后才用私钥对哈希值(摘要)进行签名。
  • Trent 在密码技术领域中一般称为 认证机构(Certification Authority,即 CA)。
  • 以数字证书为基础,业界制定了一系列的规范和规格,比如由谁颁发证书、如何进行颁发、如何作废证书等,称为 公钥基础设施(Public-Key Infrastructure,即 PKI)。

7.消息处理方式对比

MAC不能保证消息的不可抵赖性,而数字签名可以保证。

消息处理方式 MD MAC 公私钥(加密和数字签名)
是否加密 不加密 加密 加密
加密算法 对称加密 非对称加密
是否可以防止耍赖

8.加密算法

8.1摘要算法
消息摘要算法主要分为三大类:MDMessage Digest,消息摘要算法)、SHASecure Hash Algorithm,安全散列算法)和MACMessage Authentication Code,消息认证码算法)。

MD系列算法包括 MD2、MD4 和 MD5 共3种算法

算法 摘要长度 实现方
MD2 128 JDK
MD4 128 Bouncy Castle
MD5 128 JDK

SHA算法主要包括其代表算法 SHA1 和 SHA1算法的变种SHA2系列算法以及SHA3系列算法,SHA-2的算法和SHA1是一样的,区别在于其生成的摘要的长度;SHA-3是与SHA-2算法不同的,可替换的加密散列算法。
SHA2系列算法(SHA224、SHA256、SHA384、SHA512)
SHA3系列算法 (SHA3-224、SHA3-256、SHA3-384、SHA3-512等);

算法 摘要长度 实现方
SHA-1 160 JDK
SHA-224 224 Bouncy Castle
SHA-256 256 JDK
SHA-384 384 JDK
SHA-512 512 JDK

MAC算法综合了上述两种算法,主要包括HmacMD5、HmacSHA1、HmacSHA256、HmacSHA384和HmacSHA512算法。MAC与MD和SHA的主要区别在于加入了密钥,密钥是双方事先约定的。

算法 摘要长度 备注
HmacMD5 128 JAVA6实现
HmacSHA1 160 JAVA6实现
HmacSHA256 256 JAVA6实现
HmacSHA384 384 JAVA6实现
HmacSHA512 512 JAVA6实现
HmacMD2 128 BouncyCastle实现
HmacMD4 128 BouncyCastle实现
HmacSHA224 224 BouncyCastle实现

8.2对称加密算法
对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。对称加密又分为:分组加密和流加密
分组加密是每次只能处理特定长度的一块数据的一类密码算法,这里的“一块”就称为分组(block)。一个分组的比特数就称为分组长度(block lenght)。

常见的分组算法有:DES、3DES、DESX、Blowfish、IDEA、RC2、RC5、RC6和AES,以及国密的SSF33、SM1、SM4。
分组加密又可以根据其迭代模式分为ECB,CBC,OFB,CFB,CTR。

8.3非对称加密算法
非对称算法也叫公钥算法,在公钥密码系统中,加密和解密使用的是不同的密钥,这两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。
非对称加密有公钥和私钥两个概念,私钥自己拥有,不能给别人,公钥公开。根据应用的不同,我们可以选择使用不同的密钥加密:
1.签名:使用私钥加密,公钥解密。用于让所有公钥所有者验证私钥所有者的身份并且用来防止私钥所有者发布的内容被篡改,但是不用来保证内容不被他人获得。
2.加密:用公钥加密,私钥解密。用于向公钥所有者发布信息,这个信息可能被他人篡改,但是无法被他人获得。

主要的公钥算法有: RSA、 DSA、 DH 和 ECC,国密SM2

8.4其他消息摘要算法
除了MD、SHA和MAC这三大主流消息摘要算法外,还有一些我们不了解的消息摘要算法,包括RipeMD列、Tiger、Whirlpool和GOST3411算法。
RipeMD系列算法和MAC系列算法相结合,又产生了HmacRipeMD128和HmacRipeMD160两种算法。
Bouncy Castle对RipeMD系列算法和HmacRipeMD系列算法进行了实现。

你可能感兴趣的:(其他)