密码学系列——简介密码学
前言
整理密码学。
我们在编程中常常需要密码问题,比如说https,aes等。他们都用到了密码这个概念。
密码学是网络安全、信息安全、区块链等产品的基础,常见的非对称加密、对称加密、散列函数等,都属于密码学范畴。
正文
从古至今密码学一直存在,那么在古代密码是怎么样的呢?
我们常常在电视剧中看到一张纸舔一舔然后显示出字了,或者用火然后烤一烤然后出现一些图案。
这些也属于密码学。当然这样是不够的,古人的思想不止于此,他们通过其他方法把文字加密了。
① 替换法
替换法很好理解,就是用固定的信息将原文替换成无法直接阅读的密文信息。例如将 b 替换成 w ,e 替换成p ,这样bee 单词就变换成了wpp,不知道替换规则的人就无法阅读出原文的含义。
替换法有单表替换和多表替换两种形式。单表替换即只有一张原文密文对照表单,发送者和接收者用这张表单来加密解密。在上述例子中,表单即为:a b c d e - s w t r p 。
多表替换即有多张原文密文对照表单,不同字母可以用不同表单的内容替换。
例如约定好表单为:表单 1:abcde-swtrp 、表单2:abcde-chfhk 、表单 3:abcde-jftou。
当然这会使得设计变得困难。
② 移位法
移位法就是将原文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后得出密文,典型的移位法应用有 “ 恺撒密码 ”。
例如约定好向后移动2位(abcde - cdefg),这样 bee 单词就变换成了dgg 。
上面的称作古典密码学。
本来古典密码学好好的,然后概率论发生了,这个时候密码就变得非常容易破解。
百度百科讲解一下如何破解的。
频率分析基于如下原理:在任何一种书面语言中,不同的字母或字母组合出现的频率各不相同。
而且,对于以这种语言书写的任意一段文本,都具有大致相同的特征字母分布。
比如,在英语中,字母E出现的频率很高,而X则出现得较少。类似地,ST、NG、TH,以及QU等双字母组合出现的频率非常高,NZ、QJ组合则极少。英语中出现频率最高的12个字母可以简记为“ETAOIN SHRDLU”。
比如说采用替换法,我发现出现很多个Z。但是按理说E应该最多,那么我尝试把Z换成X,这样破解的概率大大增加。
那么现代密码加密方式是啥?
① 散列函数
散列函数,也见杂凑函数、摘要函数或哈希函数,可将任意长度的消息经过运算,变成固定长度数值,常见的有MD5、SHA-1、SHA256,多应用在文件校验,数字签名中。
MD5 可以将任意长度的原文生成一个128位(16字节)的哈希值
SHA-1可以将任意长度的原文生成一个160位(20字节)的哈希值
② 对称密码
对称密码应用了相同的加密密钥和解密密钥。对称密码分为:序列密码(流密码),分组密码(块密码)两种。流密码是对信息流中的每一个元素(一个字母或一个比特)作为基本的处理单元进行加密,块密码是先对信息流分块,再对每一块分别加密。
③ 非对称密码
对称密码的密钥安全极其重要,加密者和解密者需要提前协商密钥,并各自确保密钥的安全性,一但密钥泄露,即使算法是安全的也无法保障原文信息的私密性。
散列函数和非对称密码一般用于文件校验和身份验证,而对称用于数据传输加密。
主要是因为非对称密码加密解密消耗时间。