0%

常用加密算法简介

工作中经常遇到不同的加密算法,现开坑对常用的加密,散列,签名算法及原理做个梳理

什么是加密算法?

加密算法就是是将明文信息改变为难以读取的密文内容,使之不可读的过程。只有拥有解密方法的对象,经由解密过程,才能将密文还原为正常可读的内容。

为什么我们需要加密算法

加密算法无论是在信息传输还是日常生活中都非常常见.下面列举生活中一些常见的古典加密算法

  1. 凯撒密码: 将字母序往前或往后移动n位
    假设设定偏移量为3,那么加密过程为 “abc”->”def”
  2. 栅栏密码: 将原文字母交替拍成上下两行,
    如明文为:I L O V E Y O U 将其分为两行
    I O E O
    L V Y U
    按行读取得到密文IOEOLVYU
    感兴趣的可以关注密码吧,这里还发生过一个惊天动地的五层加密的故事

加密算法有哪些类型?

上面介绍的两种加密方法属于对称加密
那么对称加密又是什么意思呢?
加密算法可以分为两种类型:

对称加密

对称加密即加密和解密使用相同的密钥或规则
比如凯撒密码,他的加密规则是向后移位3位.那么这个规则就是所谓的密钥,我知道了这个规则,只要将密文向前移位3位就可以获得原文
在信息传输领域,常用的对称加密算法有:

AES加密
以伽罗瓦域中的乘法运算对原文混淆
DES加密
对原文字节数组进行移位,置换,扩展,压缩,异或等操作来混淆原文,经过精心设计后,DES的加解密使用了相同的算法,只需要将密钥次序逆序

非对称加密

对称加密加解密使用相同密钥带来了安全性问题

  • 双方第一次传输密钥时有泄露风险
  • 双方同时保管密钥,那就是双倍的泄露风险

为了解决这个问题,可以采取非对称加密技术,即加密和解密使用不同的密钥或规则
相较于对称加密来说,非对称加密有两个密钥:公钥和私钥.一般采用难以暴力破解的数学问题用来保证安全性

RSA算法

RSA算法思想是大数的因式分解:

  • 选取两个质数p,q算出他们的乘积n是很简单的
  • 但已知n来求出p,q是困难的
ECC算法

ECC算法 又称椭圆曲线算法.其思想是:
对于离散的光滑的椭圆曲线{ $y^2=x^3+ax+b(\Delta =4a^{3} +27b^{2} \ne 0)$ $mod$ $p$ }
当p取值能使椭圆曲线的循环阿贝尔群成立时,对于曲线上的两点K,G来说

  • 已知k和G,求出K是很简单的
  • 而已知K和G,求出k个G相加等于K是很难的.
    (定义椭圆曲线上的乘法kG只能用迭代相加计算,迭代相加需要k次循环.
    即使使用快速幂计算也没有比k次循环快太多的算法,如果k特别大,比如在区间$[2^{255}, 2^{256}]$上,那么计算k的值就是一个不可能完成的任务)

如图为a=-8,b=5,p=121的曲线
椭圆曲线

相较于RSA算法, ECC安全性能更高,许多地方已经使用了椭圆曲线算法(SSL证书,比特币系统…)

  • 160位ECC即与1024位RSA的安全强度相同
  • 处理速度更快, 存储空间更小
  • 晦涩难懂也是破解门槛的一种 (😀)

其他密码算法

杂凑算法/散列算法/哈希算法

很多人对散列算法有误解,事实上散列算法不属于加密算法,散列算法只是取了原文的摘要.
试想无论多大的原文,你都能转为固定长度的散列值.这如果是可逆的,那得是多强大的压缩算法呢😄
常见散列算法:

  • MD5

    输出长度128位

  • SHA-1

    输出长度160位

  • SHA-256

    输出长度256位

国产密码算法

我国国家密码局也颁布了自主知识产权的一系列密码算法:

  • SM1:
    非公开对称加密算法,以ip核形式提供给需要集成SM1的硬件设备厂商,需要申请
  • SM2:
    非对称椭圆曲线加密算法
    • a = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC
    • b = 0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93
    • p = 0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF
  • SM3:
    杂凑算法,输出长度256位,安全性高于MD5和SHA-1
  • SM4:
    128位对称加密算法,用于无线局域网标准的分组数据算法.
  • SM7:
    128位对称加密算法,用于非接触式IC卡,门禁卡,票据,一卡通等
  • SM9:
    非公开非对称加密算法,用于身份认证,安全性约为3096位RSA

小结

非对称加密与对称加密对比

我们知道了非对称加密相对于对称加密来讲,安全性更高,那我们是不是就都使用非对称加密就好了呢?
答案是否定的,因为要实现非对称加密需要公钥和私钥不同的性质,一般是采用难以破解的数学问题来实现的。
而实现这种数学算法,经常需要大数相乘、取模等操作。我们知道对于计算机而言,乘法的基础还是加法。
而对称加密的性质决定了其实现方式为了不需要做大数相乘等大量运算,而是为了效率,进行一系列位运算、
异或等操作。那么在电路上实现位运算、异或要比做加法简单的多。据测试,极限情况下对称加密算法的效率
可以达到非对称加密算法效率的1000倍以上。

解决方案

那么对于这种对称加密不安全,非对称加密效率低的尴尬情况应该怎么办呢?当然还是有解决方案的,那就是数字信封
数字信封就是对于要传输的原文数据采用对称加密,而双方第一次传输使用非对称加密传输对称密钥。如此便解决了效率问题和安全性问题

具体使用

现在我们知道了目前数据传输常见的加密算法和解决方案,那么非对称加密在实际加密传输过程中,公钥和私钥具体是怎么使用的呢?
公钥和私钥顾名思义,公钥是可以放心的直接公开到网络中让别人获取的,私钥是只能自己保管,任何人都不能获取的。
那么在一次加密传输过程中,以SSL传输举例:
客户端A想要和服务端B传输,A需要拿到B发布的公钥,用公钥加密数据传输给
B,B收到后使用私钥解密。这便是一次加密传输的过程。
是不是看上去非常安全?其实并不是,试想如果客户端A拿到的公钥是假的会怎么样?

假如黑客C生成了一对公钥和私钥,把假的公钥传给了客户端A,A误以为拿到的是服务端B的公钥,那么用公钥加密数据后,
此时如果信息被黑客截获,就可以用自己的私钥解密数据,从而造成了数据泄露。

那么为了解决这个问题,我们就要引出数字签名和PKI体系了
欲知后事如何,请看数字签名和PKI体系