必学的密码学基本知识

文章更新于:2020-04-02
注:本文参考自机械工业出版社《密码工程原理与应用》。

一、密码学研究范围

密码学是一门关于加密的艺术和科学。

1、密码学的作用

密码学是整个安全系统的一部分,但也是最关键的一部分。
密码学通常提供系统的访问控制功能。

2、木桶理论

每个安全系统的安全性都取决于它最脆弱的部分。

为了提高系统的安全性,我们需要提高系统最脆弱地方的安全性。所以我们必须先知道那些是最脆弱的。这可以用一个分层的树结构来完成,系统的每部分都是有哪些环节,同时每个环节还有哪些子环节。我们可以将这些环节组织成一颗攻击树(attack tree)

3、对手的设定

因为如果有攻击者想要攻击系统,它一定会攻击系统最薄弱的环节。

所以我们必须把对手设定为最狡猾的对手,这样我们才能更好的完善我们系统的安全性!

二、密码学简介

注1:密码学传统上为了方便举例称发送方为 Alice ,接收方为 Bob,窃听者为 Eve

注2:如果你查字典,你会发现密钥读(yue)。但是一些密码学的老教授读的时候会读 (yao)。所以在不致产生歧义(密钥(yue)和蜜月同音~))的时候,你读哪种应该都是可以的。

扫描二维码关注公众号,回复: 10468817 查看本文章

1、加密

  1. 为了不让我们发送的信息被窃听,我们可以选择在发送信息前,将明文 m 通过加密函数 E 用密钥 ke 进行加密成密文 c ,然后再发送。

  2. 接收方受到密文 c 以后通过解密函数 D 用密钥 ke 进行解密为明文 m ,至此,信息发送完成。

  3. 如果 Eve 进行了窃听,那么他只能得到密文,没有密钥 ke 它将无法得到明文。

  4. 那么问题来了,如何传送密钥吗?如果有安全的信道用来传送密钥,那么直接用来发送信息好了?

    这涉及到了密钥的分发问题,这里先不拓展。暂且认为 AliceBob 使用了另外一个安全的信道进行密钥的协商。比如上次见面的时候协商,或写在纸上邮寄过去等。

  5. kerckhoff原则

    加密方案的安全性必须仅仅依赖于对于密钥 ke 的保密,而不依赖于对于算法的保密。

    事实证明,不公开的算法往往是存在问题的,是经不起检验的。

2、认证

在上一章节中,我们解释了如何进行加密以防止 Eve 窃听到明文。但是这却防不住 Eve 对信息进行修改。

因为 Eve 既然可以窃听到信道,那么他相应的也有可能对信息进行修改、拦截删掉、或者改变几个信息的顺序,这些都是可能的。

而接收方却无法分辨信息是否被篡改。为了解决这个问题,我们引入了认证的概念。

  1. 和加密一样,认证也需要使用一个密钥,这里记为 ka

  2. 在发送信息之前,我们先使用 ka 对信息进行计算得到一个消息认证码(Message Authentication Code),也可以称为 MAC

  3. 发送信息的时候,连 MAC 也一起发送过去。

  4. Bob 接收到信息mMAC 以后,自己对信息计算一遍 MAC ,看是否与发过来的 MAC 相同。如果相同,说明信息安然无恙。如果不相同,就说明信息被篡改或已损坏,直接丢弃便是。

  5. 现在如果 Eve 进行窃听即便同时篡改了信息,但因为他没有认证密钥 ka ,所以他的篡改是无法起到作用的,因为 Bob 收到发现 MAC 不对就该扔了不是~

  6. 但是这还有一个问题,就是这还不足以抵挡 消息重放攻击 。 什么是消息重放攻击呢?

    就比如说,Eve 窃听到信息并不篡改,而是连同 MAC 保存下来,等待一段时间以后,再连同 MAC 一起发送给 Bob ,由于 MAC 是有效的,所以 Bob 会认为消息有效。

    如果在某些场景信息的顺序很重要的话,这同样会造成危害。为了避免这种情况,我们可以在消息中加上编号。并在接收的时候验证编号,如果受到的编号小于已经收到的信息编号,便丢弃。说白了就是如果收到 2 号信息以后,才收到 1 号信息,1 号信息就会被丢弃。

注:加密认证 是两个不同的概念。加密只能保证不泄露明文,而认证则是保证消息的完整性。

3、公钥加密

在上述我们讨论的加密方案中,两者发送信息需要有一个加密密钥 ke 。我们可以设想一下,如果一个团队人数比较多的话,交换密钥是一个非常麻烦的事情,而且人一多,密钥的数量也显著增多。

你的老板可不希望你把大量的工作时间话花费在交换密钥上。

为了解决这个问题,我们引入 公钥加密 的概念。

  1. 首先我们使用一种特殊的算法生成一对密钥(SBob ,PBob),其中 SBob 为私钥,PBob 为公钥。

  2. 然后 Bob 公开他的公钥!这样一来,所有人都可以获取 Bob 的公钥,这也符合公钥的名字哈。

  3. 接着 Alice 就可以使用 Bob 的公钥对信息 m 进行加密成密文 c ,然后发送给 Bob

  4. Bob 受到密文 c 以后,使用 私钥 SBob 对密文进行解密得到明文 m

  5. 那么 Bob 想给 Alice 发信息是用自己的私钥进行加密吗?不可能的,那样任何拥有 Bob 公钥的人都将可以解密信息。那用什么加密?给 Alice 发信息当然是用 Alice 的公钥啦!

  6. 所以说,给谁发信息就用谁的公钥加密,而解密信息则只有对应的私钥才可以。那么如果你想让人家给你发信息,你公开自己的公钥就可以了。

注1:公钥和私钥是不一样的,不像之前提到的加密密钥 ke 。在公钥加密系统中,甚至连加密函数和解密函数都是不一样的。

注2:没有私钥你想解密公钥加密的信息?你解密个试试,我看着你解密。

3、数字签名

等我…
这部分会写的。

三、Enjoy!

有后续…

发布了75 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_21516633/article/details/105267465