1、
密码学于我而言,是一个非常神秘的概念。今天用“区块链+密码学”为关键词,Google到一些基础知识点。主要的学习材料是《区块链技术》中“密码学与安全技术”章节。
咱们继续。
2、
有关“加密与解密算法”的新知:
加解密算法,很重要,是现代密码学核心技术。
加解密的系统是如何构成的呢?有2个典型组件:算法和密钥。——组件这个词儿很工程师范儿,理解成“元素”,或者“构成模块”也OK吧!其中,加解密算法自身是固定不变的,一般是公开可见的!密钥则是关键信息,需妥善保管。
加解密基本过程图解:
image加解密算法如何分类呢?按照加解密过程中所使用的密钥是否相同,分为对称加密和非对称加密。
对称加密Symmetric Cryptography,又称共有密钥加密,Common-key cryptography
非对称加密Asymmetric Cryptography,又称公钥加密,Public-key Cryptography
3、
对称加密算法:
- 好处是加解密效率(速度快,空间占用小)和加密强度都很高。
- 缺点是参与方需要提前持有密钥,一旦有人泄露则系统安全性被破坏;另外如何在不安全通道中提前分发密钥也是个问题,需要借助额外的 Diffie–Hellman 协商协议或非对称加密算法来实现。
- 对称加密算法适用于大量数据的加解密过程;不能用于签名场景;并且需要提前安全地分发密钥。
非对称加密算法:
- 优点是公私钥分开,无需安全通道来分发密钥。
- 缺点是处理速度(特别是生成密钥和解密过程)往往比较慢,一般比对称加解密算法慢 2~3 个数量级;同时加密强度也往往不如对称加密。
- 适用于签名场景或密钥协商过程,但不适于大量数据的加解密。
这两者的优缺点刚好是颠倒的~
对称加密和非对称加密之间,并无谁好谁坏的区别。适用于不同需求,形成互补;有时还能组合使用,形成混合加密机制~
4、
在hash算法中,我们得知,防碰撞是一件非常重要的事,很多曾经好用的hash算法因为被成功碰撞而不再商用。那么在加解密算法中,是否有这样明显的迭代更替,或好坏优劣呢?
有。
其实想来也很正常。密码学进化的一大天然动力就来自于“解密”,这场“攻防”游戏持续下去,必然促进双方共同演化。
对称加密算法有:
分组对称加密代表算法包括 DES、3DES、AES、IDEA 等。
序列加密,又称流加密。代表算法包括 RC4 等。
非对称加密算法:
安全性往往基于数学问题,包括大数质因子分解、离散对数、椭圆曲线等经典数学难题。
代表算法包括:RSA、ElGamal、椭圆曲线(Elliptic Curve Crytosystems,ECC)、SM2 等系列算法。
以上算法的专有名词想来看着很眼晕,盯住看3分钟,很快也会忘掉吧?不过有个超级常见的专有名词“椭圆曲线”,还是了解下吧!
椭圆曲线算法:
应用最广也是强度最早的系列算法,基于对椭圆曲线上特定点进行特殊乘法逆运算(求离散对数)难以计算的特性。
并非单一算法,依然是一系列算法的统称。
SM2中国国家商用密码系列算法标准,也是基于椭圆曲线算法。
5、
既然是密码学范畴,那么任何一个算法,都需考虑到“攻击”的可能性与方式。
明文攻击:利用非对称加密的公钥来加密给定明文,获取对应的密文。
明文攻击的保护方案:
对同样的明文使用同样密钥进行多次加密,得到的结果完全不同,这就避免了选择明文攻击的破坏。
在实现上可以有多种思路。
一种是对明文先进行变形,添加随机的字符串或标记,再对添加后结果进行处理。
另外一种是先用随机生成的临时密钥对明文进行对称加密,然后再将对称密钥进行加密,即利用多层加密机制。
6、
上文提到了对称加密与非对称加密各有优劣,于是产生了混合加密。该机制的主要过程为:
先用非对称加密(计算复杂度较高)协商出一个临时的对称加密密钥(或称会话密钥),然后双方再通过对称加密算法(计算复杂度较低)对所传递的大量数据进行快速的加密处理。
超没想到的一件“辣眼睛”,原来众所熟知的HTTPS就是混合加密的典型应用案例:
安全超文本传输协议(Hyper Text Transfer Protocol Secure,HTTPS)
image与以明文方式传输数据的 HTTP 协议不同,HTTPS 在传统的 HTTP 层和 TCP 层之间引入 Transport Layer Security/Secure Socket Layer(TLS/SSL)加密层来实现安全传输。
如果对HTPPS的具体实现过程感兴趣,可以直接读原文。我是暂时直接略过啦。
7、
关于加解密算法,有几条重要的常识:
虽然很多加密算法的安全性建立在数学难题基础之上,但并非所有算法的安全性都可以从数学上得到证明。
公认高安全的加密算法和实现往往是经过长时间充分实践论证后,才被大家所认可,但不代表其绝对不存在漏洞。使用方式和参数不当,也会造成安全强度的下降。
另一方面,自行设计和发明未经过大规模验证的加密算法是一种不太明智的行为。即便不公开算法加密过程,也很容易被分析和攻击,无法在安全性上得到足够保障。
实际上,现代密码学算法的安全性是通过数学难题来提供的,并非通过对算法自身的实现过程进行保密。
8、
随着我的学习笔记学了2个小节,你有没有晕掉呢?希望没有~
周末咱们继续。
著作权所有。如需转载或引用,请通过本文 PRESS.one 智能合约购买授权许可。或采用 PRESSone APP 扫码:
image.png
网友评论