03-密码学基础:如何让你的密码变得“不可见”?

网站优化

  03-密码学基础:如何让你的密码变得“不可见”?

  上⼀ 讲 ,我们学习了⻩⾦法则的三部分核⼼内容:认证、授权、 审计。 它们描述了⽤⼾在使⽤应⽤的各个环节 ,我们需要采取的安全策略。

  可以说 ,密码学是“⻩⾦法则”的基础技术⽀撑。失去了密码学的保护 ,任何认证、授权、 审计机制都 是“可笑”的鸡肋。

  在实际的⽣活⼯作中经常会有这样的场景发⽣: 多个用户共⽤⼀ 个Wi-Fi来上⽹ 、共⽤⼀ 个服务器来跑任 务; 多个进程共⽤⼀ 个数据库来完成数据存储。在这些场景中 ,多⽅交互都通过⼀ 个共同的通道来进⾏ ,那 我们该如何保障其中内容的CIA呢?这就需要⽤到各种加密技术了。今天 ,我们就⼀ 起来学习密码学相关的知识。

  接下来 ,我来介绍⼀ 些经典的密码学算法:对称加密算法、⾮对称加密算法和散列算法。

  对称加密算法

  ⾸先 ,我们来看对称加密算法。所谓对称加密 ,代表加密和解密使⽤的是同⼀ 个密钥。概念很简单 ,但是也 很不具体、直观。为了帮助你理解 ,我把具体的加解密过程 ,画了⼀ 张图 ,你可以看⼀ 下。

  我们常⻅的经典对称加密算法有DES、 IDEA、AES、 国密SM1和SM4。下⾯我们⼀ 起来具体看看。 第⼀ 种对称加密算法是DES (数据加密标准 ,Data Encryption Standard) 。

  DES应该是最早的现代密码学算法之⼀ 。 它由美国政府提出 ,密钥⻓度为56位。 ⽬前 , 它暴⼒破解56位密码的时间 , 已经能控制在24⼩时内了。DES实际上是⼀ 个过时的密码学算法 。

  第⼆种对称加密算法是IDEA (国际数据加密算法 ,International Data Encryption Algorithm) 。IDEA由瑞⼠研究⼈员设计 ,密钥⻓度为128位。对⽐于其他的密码学算法 ,IDEA的优势在于没有专利的限 制。相⽐于DES和AES的使⽤受到美国政府的控制 ,IDEA的设计⼈员并没有对其设置太多的限制 ,这让IDEA 在全世界范围内得到了⼴泛地使⽤和研究。

  第三种需要了解的对称加密算法是AES (⾼级加密标准 ,Advanced Encryption Standard) 。

  在DES被破解后 ,美国政府推出了AES算法 ,提供了128位、 192位和256位三种密钥⻓度。通常情况下 ,我 们会使⽤128位的密钥 ,来获得⾜够的加密强度 ,同时保证性能不受影响。 ⽬前 ,AES是国际上最认可的密 码学算法。 在算⼒没有突破性进展的前提下 ,AES在可预期的未来都是安全的。

  最后⼀种是国密SM1 (SM1 Cryptographic Algorithm) 和SM4 (SM4 Cryptographic Algorithm) 。

  我们知道 , 密码学作为安全的基础学科 , 如果全部依靠国外的技术 , 对于国家安全可能产⽣不利影响。 因此 , 中国政府提出了⼀ 系列加密算法。 其中 , 国密算法SM1和SM4都属于对称加密的范畴。 SM1算法不公开 ,属于国家机密 ,只能通过相关安全产品进⾏使⽤ 。⽽SM4属于国家标准 ,算法公开 ,可⾃⾏实现使⽤ 。 国密算法的优点显⽽易⻅: 受到国家的⽀持和认可。

  借助下⾯的对⽐情况表 ,相信你会对这⼏种对称加密算法有更清晰的认识。

  现在你应该对⼏种经典的对称加密算法有了初步地了解。接下来 ,我们来看⼀ 看它们是如何应⽤的。

  在加密通信中 (如HTTPS、VPN、SSH等) ,通信双⽅会协商出⼀ 个加密算法和密钥 ,对传输的数据进⾏加密 ,从⽽防⽌第三⽅窃取。在类似数据库加密这种存储加密技术中 ,通信双⽅也是将存储空间中的数据进⾏ 加密 ,这样即使硬盘被物理窃取 ,也不会导致信息丢失。在公司内部 ,为了避免⽤⼾的Cookie和隐私信息 发⽣泄漏 ,也需要对它们进⾏加密存储。对于⼤部分公司来说 ,选取AES128进⾏加解密运算 ,就能获得较⾼的安全性和性能。 如果是⾦融或政府⾏业 ,在涉及国家层⾯的对抗上 ,有⼀ 定的合规需求 ,则需要应⽤国密算法。

  另外 ,在选取加密算法的时候 ,存在不同的分组计算模式: ECB/CBC/CFB/OFB/CTR。你需要知道的是:选取CBC和CTR这两种推荐使⽤的模式就可以 满⾜⼤部分需求了 ,它们在性能和安全性上都有较好的保证。

  非对称加密算法

  有对称就⼀ 定会有⾮对称。⾮对称加密代表加密和解密使⽤不同的密钥。具体的加解密过程就是 ,发送⽅使 ⽤公钥对信息进⾏加密 ,接收⽅收到密⽂后 ,使⽤私钥进⾏解密。具体我也画了⼀ 张图 ,你可以和上⾯的对 称加密算法的图⼀ 起对照着看⼀ 下。可以看到 ,⾮对称加密和对称加密算法的最⼤区别就是 ,加密和解密使⽤的密钥是不同的。

  当使⽤对称加密算法的时候 ,你不仅要跟每⼀ 个通信⽅协定⼀ 个密钥 ,还要担⼼协商过程中密钥泄漏的可能 性。⽐如 ,我当⾯告诉了你⼀ 个密码 ,怎么保证不被偷听呢?⽽在⾮对称加密算法中 ,公钥是公开信息 ,不 需要保密 ,我们可以简单地将⼀ 个公钥分发给全部的通信⽅ 。也就是说 ,我现在就可以告诉你⼀ 个公钥密码 ,即使这意味着所有阅读这篇⽂章的⼈都知道了这个密码 ,那也没关系。 因此 ,⾮对称密钥其实主要解决 了密钥分发的难题。除了加密功能外 ,⼤部分的⾮对称算法还提供签名的功能。 这也就是说 ,我们可以使⽤私钥加密 ,公钥解密。⼀ 旦接收⽅通过公钥成功解密 ,我们就能够证明发送⽅拥有对应的私钥 ,也就能证实发送⽅的⾝份 ,也就是说 ,私钥加密就是我们说的签名。

  你还可以这样理解 ,⽐如我现在和你说话 , 内容经过了我的私钥加密 ,你⽤公钥解得了明⽂。 因为私钥只有 我拥有 ,所以只有我能够发出这段话来 ,别⼈都不可能。这也就是说 ,我不可能狡辩称这段话不是我说的。

  所有的⾮对称加密算法 ,都是基于各种数学难题来设计的 , 这些数学难题的特点是: 正向计算很容易 , 反向

  推倒则⽆解。经典的⾮对称加密算法包括:RSA、 ECC和国密SM2。

  好了 ,这3种⾮对称加密算法的优缺点我也总结成了⼀ 张表格 ,你可以看⼀ 看。

  我们前⾯说了 ,对⽐于对称加密算法 ,⾮对称加密算法最⼤的优势就是解决密钥分发的问题。 因此 ,现在⼤ 部分的认证和签名场景 ,其实使⽤的都是⾮对称加密算法。 ⽐如 ,在SSH登录、Git上传等场景中 ,我们都 可以将⾃⼰的公钥上传到服务端 ,然后由客⼾端保存私钥。

  那么 ,如果你遇到需要使⽤⾮对称加密的场景 (⽐如多对⼀ 认证) ,我推荐你使⽤ECC算法。

  散列算法

  散列算法应该是最常⻅到的密码学算法了。 ⼤量的应⽤都在使⽤MD5或者SHA算法计算⼀ 个唯⼀ 的id。 ⽐如是 ,如果不是⻓度受限 (32个字符) ,我还是不推荐你继续使⽤MD5的。

  Git中的提交记录、 ⽂件的完整性校验、 各种语⾔中字典或者Map的实现等等。 很多场景下 , 我们使⽤散列算法并不是为了满⾜什么加密需求 ,⽽是利⽤它可以对任意⻓度的输⼊ ,计算出⼀ 个定⻓的id。

  作为密码学的算法 ,散列算法除了提供唯⼀ 的id ,其更⼤的利⽤价值还在于它的不可逆性。 当⽤⼾注册 ,提

  交账号密码时 ,作为⼀ 个安全的应⽤ ,是绝对不能够存储明⽂密码的。 因此 ,我们对⽤⼾的密码通过散列算法进⾏计算 , 存储最终的散列值。在后续登录的过程中 ,我们如果计算出的⽤⼾提交的密码的散列值和你存储的散列值⼀ 致 ,就可以通过验证

  了。这样⼀ 来 ,任何⼈ (即使是内部员⼯) 都不知道⽤⼾真实的密码是什么 ,⽽⽤⼾也能够完成密码的校。验

  除了刚才说的不可逆性 , 在密码学上 , 我们对散列算法的要求还有: 鲁棒性 (同样的消息⽣成同样的摘要) 、唯⼀ 性 (不存在两个不同的消息 ,能⽣成同样的摘要) 。

  经典的散列算法包括MD5、SHA、 国密SM3。下⾯我们逐⼀ 来看。

  我们先来看第1种 ,MD5 (消息摘要算法 ,Message-Digest Algorithm 5) 。

  MD5可以⽤来⽣成⼀ 个128位的消息摘要 ,它是⽬前应⽤⽐较普遍的散列算法 ,具体的应⽤场景你可以⾃⾏

  参阅。虽然 ,因为算法的缺陷 ,它的唯⼀ 性已经被破解了 ,但是⼤部分场景下 ,这并不会构成安全问题。但

  第2种是SHA (安全散列算法 ,Secure Hash Algorithm) 。

  SHA是美国开发的政府标准散列算法 , 分为SHA-1和SHA-2两个版本 , SHA-2细分的版本我们就不介绍了。

  和MD5相同 , 虽然SHA的唯⼀ 性也被破解了 ,但是这也不会构成⼤的安全问题。 ⽬前 , SHA-256普遍被认为

  是相对安全的散列算法 , 也是我最推荐你使⽤的散列算法。

  第3种是国密SM3 (SM3 Cryptographic Algorithm) 。

  国密算法SM3是⼀种散列算法。其属于国家标准 ,算法公开 ,加密强度和国际标准的SHA-256相当。和国密

  SM2⼀ 样 ,它的优势也在于国家的⽀持和认可。

  上述算法的相关对⽐情况 ,我也总结了⼀ 下 ,如下表所⽰:

  另外 ,我们在使⽤散列算法的时候 ,有⼀ 点需要注意⼀ 下 ,⼀ 定要注意加“盐”。 所谓“盐” ,就是⼀ 串随机的字符 , 是可以公开的。 将⽤⼾的密码 “盐”进⾏拼接后 , 再进⾏散列计算 , 这样 , 即使两个⽤⼾设置了相同的密码 , 也会拥有不同的散列值。 同时 , ⿊客往往会提前计算⼀ 个彩虹表来提升暴⼒破解散列值的效率 , ⽽我们能够通过加 “盐”进⾏对抗。 “盐”值越⻓ , 安全性就越⾼。

  总结

  好了 ,我们来总结⼀ 下这⼀ 节 ,你需要掌握的重点内容。

  在这节课中 ,我对各种加密算法和应⽤场景进⾏了全⾯的介绍。 密码学是⼀ ⻔深奥的学科 ,⽽作为密码学的使⽤者 ,你只需要正确地理解各类算法的特性和功能 , 就可以满⾜⽇常的应⽤需求了。

  总的来说 ,在使⽤的时候 ,你要记住下⾯这些内容: 对称加密具备较⾼的安全性和性能 ,要优先考虑。 在⼀对多的场景中 (如多⼈登录服务器) ,存在密钥分发难题的时候 ,我们要使⽤⾮对称加密; 不需要可逆计算 的时候 (如存储密码) ,我们就使⽤散列算法。在具体算法的选取上 ,你只需要记住: 对称加密⽤AES-CTR、 ⾮对称加密⽤ECC、 散列算法⽤SHA256加盐。 这些算法就能够满⾜⼤部分的使⽤场景了 , 并且在未来很⻓⼀ 段时间内 ,都可以保持⼀ 个较⾼的安全强度。

标签: 网站优化