密码学的发展
加密的发展史随着人类的进化逐步复杂、严谨也更安全,对于早期的移位和字母对应等加密方式我们不难理解。
- 移位 : 比如恺撒密码, 简单点说将 26个英文字母的顺序打乱,得到一个新的字母顺序,之后的英文或是拼英组成的单词就无法直接看出是什么了。
- 字母对应 :比如使用一个密码本, 原文通过对应的字母进行转换。
后来出现了更高级的使用密钥的方式加密,加密和解密使用相同的密钥, 密钥越长,解密就越难。 到1976年出现了非对称加密。
加密的分类
按照密文是否可以被还原,可以将加密分为可逆加密和不可逆加密。严格意义上说,不可逆加密应该算不上加解密的范畴,但是实际开发过程中,还是会使用到使用不可逆加密的方法对某些信息进行加密,比如用户的登录密码。
不可逆加密和可逆加密
- 不可逆加密: 信息摘要和安全散列。将任意大小的原始数据变换成规定长度的输出,获取内容的数字指纹。算法比如MD5,SHA1,PBKDF2,bcrypt。
- 可逆加密: 基于算法,可逆加密又分为对称加密和非对称加密。
对称加密和非对称加密
- 对称加密: 加密密钥和解密密钥相同
- 非对称加密: 加密密钥和解密密钥不相同
在对称加密中,密钥就是一个数字,长度越长, 破解越困难,加解密流程如下:
非对称加密有两个密钥,一个公钥一个私钥。 加密和解密使用不同的密钥。加解密流程如下:
除了公钥加密,私钥解密;也可以使用私钥加密,公钥解密。两者都有着实际的应用。
- 公钥加密,私钥解密。主要用于通信
- 私钥加密(签名),公钥解密(验证), 用于数字签名
加密算法汇总
不同的加密类型,对应的加密算法有:
- 基于算法的加密算法, 也称为古典加密算法, 比如base64, 比特币生成地址使用的base58。 这类算法对原始内容进行置换和替换得到密文, 安全性依赖于算法是否外泄。
- 对称加密算法。 加解密使用同一个密钥。算法常见的有DES、3DES、AES。安全性从依赖算法转向依赖于密钥。
- 非对称加密。 加解密使用同不同的密钥。常见算法:RSA, DH , ECC。
对称加密 | 非对称加密 |
---|
DES , AES ,3DES,PBE | RSA ,DH, ECC |
对称加密算法
- DES , 数据加密算法
DEA( Data Encryption Algorithm, 数据加密算法)。
- 1997 年 DES标准正式发布, 分组长度64比特,其中8比特为奇偶校验位, 所以实际长度为56比特。
DES密钥的实质长度是56比特(7个字节)。 示例:
- 二进制: 01010001 11101100 01001011 00010010 00111101 01000010 00000010
- 十六进制:51 EC 4B 12 3D 42 02
- 十进制:2305928028626269954
可以使用两个DES密钥(DES-EDE2)和三个DES密钥(DES-EDE3)。DES-EDE2长度112比特(14个字节),DES-EDE3长度168比特(21字节)。 示例:
- DES-EDE2: 51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F
- DES-EDE3: 51 EC 4B 12 3D 42 03 30 04 D8 98 95 93 3F 24 9F 61 2A 2F D9 96
-
AES 密钥长度可以从128、192和256个比特中选择。 -
PBE 基于口令的密码 PBE ( Password Based Encryption, 基于口令的密码)。是一种基于口令生成密钥, 并使用该密钥进行加密的方法。 加密和解密使用的是同一个密钥。
在Java语言中使用PBE 加密可以参考: Java使用PBE算法进行对称加解密最简入门和示例
非对称加密的理解
非对称加密来源于数学中的大质因数分解很难的问题,基于欧几里得的证明, 每个数只有一种质因数分解, 一个大整数分解成一堆质数很难。 理解非对称加密, 需要回顾一下下面的数学概念:
- 素数:又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。
- 互质,又称互素。若N个整数的最大公因子是1,则称这N个整数互质。
- 模运算即求余运算。比如 10%3 , 10除以3的余数是1, 所以求模的结果是1。
- 欧拉函数
任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系? 计算这个值的方法就叫做欧拉函数,以φ(n)表示
举例来说: 对于一个很小的数 7, 分解为两个质因数的乘积很容易。但是对于一个大一点的数 589 就很难直接得到答案了(589 =19*31),如果一个更大的数呢?比如54225。 以RSA算法为例,公钥与私钥虽然是一对密钥,但密钥值不同,这对密钥值的生成就建基于大素数的乘积与分解上。
如果上面对非对称加密还不够了解的话,也可以从颜色的角度理解非对称加密的公私钥。
颜色的比喻
混合颜色是一个单向函数, 两个颜色混合输出第三种颜色很简单, 但是反过来就很难。
首先了解一下什么是互补色:每个颜色都有一个互补色,两个互补色叠加得到白光。
- 张三选了两个互补的颜色, 将其中一个作为公钥发给李四
- 李四选了一个颜色, 他将这个颜色和张三混合色的颜色发给张三
- 张三使用自己保留的颜色,叠加到李四的混合色上面。就得到了李四的颜色。
即使李四混合后的颜色被别人知道了, 也很难破译出李四的颜色。
对称加密和非对称加密的优缺点和应用
非对称加密在实际中会结合对称加密使用。常用的使用非对称算法获得共享密钥,使用对称加密处理数据。这也是https 采用的方式。
|