整理密码学的系统性地基础知识(图解、密码原理、常用算法、openssl)

前言:

  工作中,零零散散接触了些密码学的知识,并产生了些疑问,借者工作不忙的情况下,把这些疑问都弄清楚,比如:单向散列函数和HMAC的联系?对称密码为什么要和迭代模式共用?证书和签名的联系?公钥密码的基本原理?怎么安全的交换共享密钥?为什么加入盐可以防止字典攻击?为什么密码中常用到随机数nounce?这些疑问都可以在本章找到答案。

参考文献:

《图解密码技术》,人民邮电出版社,2015,(日)结城浩(著)

1.1.   对称密码

目的:密钥不被破译的前提下,保证消息的机密性

1.2.   公钥密码

目的:私钥不被破译的前提下,保证消息的机密性

1.3.   单向散列函数

目的:可将任意长度的消息转换成固定长度的短文,可用于验证消息的完整性,即检测出数据是否被篡改。

1.4.   消息认证码

目的:密钥不被破译的前提下,不仅能验证消息的完整性,还能确认消息是否来自所期望的通信对象。

1.4.1.    HMAC

说明:HMAC是一种使用单向散列函数来构造消息认证码的方法(RFC2104)。

1.5.   数字签名

目的:私钥不被破译的前提下,能验证消息的完整性,能确认所期望的通信对象,能防止通信对象事后否认自己先前发送的消息。

上图中直接对消息进行签名的方法,非常耗时,因为公钥密码算法本来就非常慢。所以,可以在签名前后,先将消息通过单向散列函数生成一个很短的数据。对消息的散列值签名的流程图如下图,下图是Alice对消息的散列值签名,Bob验证签名。

1.6.   证书

目的:私钥不被破译并且认证机构是可信的前提下,能在数字签名的基础上验证公钥的合法性。

1.7.   分组模式

说明:

密码算法可分为流密码和分组密码两种:流密码和分组密码。

流密码是对数据流进行连续处理的一类密码算法;

分组密码只能加密固定长度的分组,但是需要加密的明文长度可能会超过分组密码的固定长度,所以需要对分组密码算法进行迭代,实现对一段很长的明文应用分组密码并全部加密。

本节介绍的就是对分组密码算法进行迭代的方法。

1.7.1.    ECB模式

1.7.2.    CBC模式

1.7.3.    CFB模式

1.7.4.    OFB模式

1.7.5.    CTR模式

1.7.6.    GCM模式

说明:GCM模式与上述分组模式不同的是,它除了能提供对消息的加密外,还能提供对消息的完整性。

1.8.   密钥交换

目的:解决收/发双方在通信前需要共享密钥的问题。

1.8.1.    Diffie-Hellman

1.8.2.    公钥密码

1.9.   基于口令的密码(PBE)

目的:PBE是一种根据口令生成密钥并用该密钥进行加密的方法。

1.9.1.    盐的作用

目的:盐是用来防止字典攻击的

原文地址:https://www.cnblogs.com/aimmiao/p/13187244.html