密码学
文章平均质量分 87
密码学
_Rye_
左手代码右手诗
一行代码一行诗
展开
-
20 | 综合案例:如何解决约会难题?
其实,这就需要自己定义关联数据,也就意味着我们要定义自己的通信协议。通信协议里,我们一定要定义清楚通信双方都要遵循的格式和规范。在这个案例里,关键就是要告诉织女这封信件的格式,以及怎么解密这封信件。其中,需要包含我们上述提到的算法的选择,以及对应的参数。原创 2023-10-19 08:41:36 · 44 阅读 · 0 评论 -
18 | 如何管理对称密钥?
上一讲,我们讨论了合格的对称密钥需要具备什么条件,以及对称密钥是怎么产生的。但是,了解对称密钥是怎么产生的,是远远不够的,我们还要了解怎么管理这些对称密钥。在我们讨论怎么管理之前,我们还要再给对称密钥分个类,划分的标准就是对称密钥要不要留存。那么,哪种密钥不需要留存呢?我们该怎么管理呢?这是我们这一次要讨论的问题。原创 2023-10-18 22:07:29 · 66 阅读 · 0 评论 -
19 | 量子时代,你准备好了吗?
什么是前向保密性呢?在密码学里,前向保密性指的是即使用来协商或者保护数据加密密钥的长期秘密泄漏,也不会导致数据加密密钥的泄漏。换个角度看,虽然数据加密密钥是由长期的秘密衍生出来的或者保护的,但是数据加密密钥不能再一次通过长期秘密推导出来。是不是感觉有点绕口,不知道该怎么理解?我们来看一看前面讨论过的,从用户口令推导出数据加密对称密钥的算法。每次需要使用这个对称密钥的时候,都可以通过用户口令再次推导出来,而不需要把这个对称密钥保存到硬盘上。这个过程就不是前向保密的。原创 2023-10-18 22:40:38 · 26 阅读 · 0 评论 -
16 | 为什么说随机数都是骗人的?
有一类随机数的算法,叫做确定性的随机数发生器(Deterministic Random Bit Generator, DRBG),使用的就是单向散列函数。怎么解释确定性?确定性说的就是相同的输入,有相同的运算结果。这也就意味着,对于确定性的随机数发生器来说,它的下一个随机数是确定的,是可以计算出来的,当然也是可以预测的。计算结果可以预测,这还算什么随机数?我们上面说过,产生随机数的诀窍,就是持有一部分私密的数据。随机数发生器持有私密的数据,所以计算结果对它来说,是确定的。原创 2023-10-18 19:41:01 · 59 阅读 · 0 评论 -
17 | 加密密钥是怎么来的?
到目前为止,你已经跟我一起走了很长的路了。不知道这一路上,你有了哪些心得和体会?对密码学是不是多了很多新的认知和想法?这一讲,我们继续上路,踏足密码学的世界。前几讲,我们花了很长时间讨论了对称密钥的算法,以及使用对称密钥算法要注意哪些陷阱。但是,不知道你有没有注意到,一直有一个悬而未决的问题。我们要使用对称密钥算法,总得有对称密钥吧。那么,对称密钥是从哪儿来的?这是我们这一次要讨论的问题。原创 2023-10-18 20:57:44 · 109 阅读 · 0 评论 -
12 | 怎么利用加密端攻击?
上一讲,我们讨论了怎么利用解密端攻击 CBC 模式的对称密钥分组算法。那么,加密端的攻击方案是怎么进行的?有什么办法可以规避加密端的攻击?这是我们这一次要解决的问题。虽然我们之前说,CBC 模式应该退休了,但是现实中,它还有广泛的应用。我们花了很多篇幅来讨论 CBC 模式,除了提醒你 CBC 模式的缺陷外,还希望你了解缺陷修补的办法,这样你就可以修复现有的应用了。这一次的讨论,比起上一次,稍显烧脑。因为,这是一个相对较新的攻击技术。不过,我可以保证,如果你了解了这种攻击技术,将会有一个巨大的收获。原创 2023-10-18 15:36:53 · 86 阅读 · 0 评论 -
08 | 该怎么选择初始化向量?
上一讲,我们讨论了对称密钥的常见算法,还讲到了序列算法和分组算法。还记得吗?当时,我建议你优先使用序列算法,因为它有着良好的性能和皮实的用法。另外,我还向你推荐了 AES-256 和 AES-128。但是,由于我们还没有考虑数据分组等因素的影响,所以这个建议的实用性还有待商榷。那么,这一讲,我们就来看看对于分组算法,到底有哪些麻烦?我们又该怎么避免这些麻烦?其实,这是一个解决起来很复杂的问题。不过,今天我们可以先对问题建立一个初步的认知。要知道分组算法有哪些麻烦,就要先知道该怎么计算分组算法。原创 2023-10-18 09:07:52 · 95 阅读 · 0 评论 -
14 | 加密数据能够自我验证吗?
还记得上一讲,我们讲的消息验证码吗?我们讨论过可以使用消息验证码来验证消息的真伪。但是,不知道你有没有注意,在上一次讨论中,我们并没有讨论该如何安全地传递待验证消息。而且,待验证信息的传递还是通过明文的方式进行的,这种方式,信息的私密性会受到影响。我们前面讨论过,单独的加密并不能解决信息的有效传递问题,总是存在这样或者那样的问题。那么,我们能不能把消息验证码和信息加密结合起来,既保持信息的私密性,也保持信息的完整性呢?这就是我们这一次要解决的问题。原创 2023-10-18 18:11:59 · 60 阅读 · 0 评论 -
13 | 如何防止数据被调包?
还记得我们在前面讨论过 CBC 模式补齐预言攻击吗?当时,我们谈到了一个问题,就是解密端是无法判断解密得到的数据是发送者发送的数据,还是被人掉了包的数据的。这就好比,牛郎要送的信是,“七夕今宵看碧霄,牛郎织女渡鹊桥”。织女拆开一看,却是一堆乱码,或者是变成了“我断不思量,你莫思量我。将你从前与我心,付与他人可”。如果这封信真的变成了一堆乱码,就意味着信息没有被有效地送达,这样会给织女愁上加愁;而如果内容是“我断不思量”,简直就是一支穿心箭,这可一点都不好玩。那么,织女看到“我断不思量,你莫思量我。原创 2023-10-18 16:37:03 · 38 阅读 · 0 评论 -
15 | AEAD有哪些安全陷阱?
上一讲,我们讨论了加密数据如何才能够自我验证,自我验证就是指解密的时候,还能够同时检验数据的完整性。我们还谈到了带关联数据的认证加密(AEAD)是目前市场的主流思路。我们有了带关联的认证加密算法,应用程序再也不需要自行设计、解决数据的完整性问题了。但问题是,如果我们要在应用程序中使用带关联数据的认证加密,有哪些算法可以使用?带关联数据的认证加密算法,有没有需要小心的安全陷阱?这是我们这一次需要解决的问题。原创 2023-10-18 19:10:43 · 116 阅读 · 0 评论 -
11 | 怎么利用解密端攻击?
上一讲,我们讨论了对称密钥分组算法的 CBC 链接模式,还提到了异或运算的好处,以及它的风险。但是,我们又留了一个小尾巴,异或运算是怎样带来麻烦的?它是怎么影响 CBC 链接模式的安全性的?我们又有什么有效的办法可以规避异或运算的风险?这两次讨论,有点烧脑,我们姑且把它当做一次打怪升级的过程。如果弄清楚这些问题,你就可以更得心应手地使用分组算法,而且毫无疑问地超越了大部分人对对称密钥分组算法的理解。鉴于这两次讨论的难度,我觉得最好的学习方式,就是拿上纸笔,跟着我的思路,自己画一画攻击的流程。原创 2023-10-18 14:24:25 · 40 阅读 · 0 评论 -
10 | 怎么防止数据重放攻击?
上一讲,我们讨论了对称密钥分组算法的链接模式,从链接模式出发,我们还分析了 ECB 模式,初始化向量和链接模式的缺失导致了 ECB 模式的安全缺陷,尤其是数据重放攻击。我们说,有密码学基础知识的工程师,都应该知道 ECB 模式的安全问题,并且不会在应用程序中使用它。这一讲,我们来讨论一个更广泛使用的加密模式,CBC 模式。CBC 模式,可能是 2018 年之前最常用、最常见的加密模式。和 ECB 模式不同,由于初始化向量和链接模式的使用,CBC 模式解决了数据重放攻击的问题。原创 2023-10-18 11:52:50 · 351 阅读 · 0 评论 -
09 | 为什么ECB模式不安全?
上一讲,我们讨论了对称密钥分组算法的计算过程,我们找到了影响对称密钥算法安全性的五个关键因素,以及初始化向量对算法安全性的影响和选择。不过,还有一些遗留的问题,我们没有来得及讨论,链接模式和数据补齐方案对算法安全性有什么样的影响?它们是怎么影响分组算法安全性的呢?我们又该怎么避免这些安全陷阱呢?其实,这都是对称密钥分析的核心问题。因为,可以说,每一种链接模式、每一种数据补齐方案都有着不同的构造,当然也就对应着不同的分析办法,而且分析起来都较为复杂。原创 2023-10-18 10:19:03 · 553 阅读 · 0 评论 -
07 | 怎么选择对称密钥算法?
上一讲,我们讨论了什么是对称密钥,你还记得决定对称密钥系统安全性的两个关键因素吗?。和单向散列函数一样,我们也要分析如何选择对称密钥算法。所以,有哪些算法是值得我们信任的呢?这就是我们这一次要解决的问题。首先,我们还是先来一起看看曾经流行的和现在流行的对称密钥算法。原创 2023-10-18 00:38:39 · 40 阅读 · 0 评论 -
06|对称密钥:如何保护私密数据?
在讨论对称加密技术之前,我们要先了解加密、解密和密钥这几个概念。其实这几个概念还是很容易理解的。把信息或者数据伪装、隐藏起来,转换成难以解释的信息或者数据,这个过程叫做加密。和加密这个过程相反的过程,就叫做解密。一般来说,加密产生的那个难以解释的信息或者数据,我们把它叫做密文(Ciphertext)。对应的,加密前的数据,我们通常把它叫做明文(Plaintext)。密文信息通常看起来都是晦涩难懂、毫无逻辑的,所以我们一般会通过传输或者存储密文信息,来保护私密数据。原创 2023-10-17 17:52:15 · 82 阅读 · 0 评论 -
05|如何有效避免长度延展攻击?
我们先来看看什么是“长度延展”,这样会有利于你理解“长度延展攻击”。现在,假设我们有两段数据,S 和 M,以及一个单向散列函数 h。如果我们要把这两段数据合并起来,并且还要计算合并后的散列值,这就叫做单向散列函数的长度延展。不过,问题来了,是 S 放在前面(h(S|M)),还是 M 放在前面(h(M|S))?既然,我们说,散列值是无法预测的,那么,数据编排的顺序有意义吗?如果 S 和 M 都是公开的信息,顺序是不重要的。可如果 S 是机密信息,M 是公开信息,这两段数据的排列顺序就至关重要了。原创 2023-10-17 17:03:31 · 33 阅读 · 0 评论 -
04|选择哈希算法应该考虑哪些因素?
因为,遗留的算法,已经走在退役的路上了。那为什么有的人还在保留遗留的算法?因为,保留遗留算法,还是会让系统有更好的兼容性和互操作性,给现有系统升级到新算法留有一段时间。但是,新的代码和项目,就不要再使用遗留算法了。现在,还要继续运营的系统,也要想办法尽快升级算法。到了最后,原创 2023-10-17 16:21:45 · 56 阅读 · 0 评论 -
03|如何设置合适的安全强度?
在密码学中,安全强度通常使用“位”(字节位)来表述。比如说,安全强度是 32 位。这里的“位”是什么意思?N 位的安全强度表示破解一个算法需要 2^N(2 的 N 次方) 次的运算。为什么要使用“位”来表示安全强度?因为这样的话,我们就可以很方便地比较不同算法的安全级别,在同一个安全级别上组合不同的安全算法。比如说,MD5 的安全强度是不大于 18 位,1024 位的 RSA 密钥的安全强度是 80 位, SHA-256 算法的安全强度是 128 位。原创 2023-10-17 14:58:39 · 45 阅读 · 0 评论 -
02|单向散列函数:如何保证信息完整性?
首先,我们从名字上看,一眼就能看出来单向散列函数有两个关键修饰词,“单向”和“散列”。其实,在数学上,单向函数和散列函数是两个不同类型的函数。所以,我们要想理解单向散列函数,我们就要先知道什么是单向函数,什么又是散列函数。如果你没有了解过什么是单向函数,你可以先猜一下,为什么它叫单向函数?单向函数(One-way Function)是正向计算容易,逆向运算困难的函数。也就是说,给定你一个输入,你很容易计算出输出;但是给定你一个输出,你却很难计算出输入是什么。还有这样的函数?是不是感觉有点神奇?原创 2023-10-17 14:10:56 · 467 阅读 · 0 评论 -
01 | 学习密码学有什么用?
从今天开始,我就和你一块儿去试着揭一揭密码学的面纱,看看里面的机关门道。每当我们看到一个新鲜事物时,“这东西是什么,有什么用”这样的问题总是会最先浮现在我们的脑海里,诱惑着我们更进一步地去了解它。那么,密码学是什么呢?它有什么用呢?这就是我们首先要讨论的事情。为了使问题更加直观,我们先从一个例子开始。原创 2023-10-17 11:02:15 · 79 阅读 · 0 评论