关于网络通信、设备交互等计算机通信场景中的常用加解密算法概要。
加密算法类型
对称加密
加密、解密用的是同样的密钥,通常密钥较小256bit。
最快速、最简单的一种加密方式。
效率高,被广泛使用在很多加密协议的核心中。
在对称加密算法中常用的算法有:DES、TDEA /3DES、AES、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK等。
非对称加密
为数据的加密、解密提供了一对密钥,公钥(PK)、私钥(SK)。
在加密过程中,发送方利用接收方的公钥进行加密,接收方利用自己的私钥进行解密;
在认证过程中,发送方利用自己的私钥进行签名,接收方利用发送方的公钥进行验签。
在非对称加密算法中常用的算法有:RSA、ECC(椭圆曲线加密算法)、Elgamal、背包算法、Rabin、D-H。
具体算法
常见的对称加密算法
DES
DES是Data Encryption Standard(数据加密标准)。
分组加密算法,典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法;
密钥长64位,实际上56位参与DES运算(第8、16、24、32、40、48、56、64位是校验位,使得每个密钥都有奇数个1);
分组后的明文组 和 56位的密钥 按位替换或交换的方法形成密文组。
TDES/3DES
Triple DES的缩语(即三重数据加密标准)。
TDES/3DES是DES加密算法的一种模式,它使用3条64位的密钥对数据进行三次加密。
AES
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。
AES的基本要求是,采用对称分组密码体制,密钥的长度最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。
AES加密数据块分组长度必须为128bit,密钥长度可以是128bit、192bit、256bit中的任意一个(如果数据块及密钥长度不足时,会补齐)。
AES加密有很多轮的重复和变换。大致步骤如下:
-
密钥扩展(KeyExpansion),
-
初始轮(Initial Round),
-
重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,
-
最终轮(Final Round),最终轮没有MixColumns。
RC4
RC4(Rivest Cipher 4)是一种流加密算法,对字节流进行加解密,它的密钥长度范围在[1,255]可变。
其算法的核心是“随机数生成器”+“异或运算”组组成。初始化密钥时,给定一个密钥后,伪随机数生成器接受密钥并构造生成出S盒;在加解密时,利用S-Box对明文数据进行逐字节加密。
常见的非对称加密算法
RSA算法
RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,因此命名RSA。
公钥加密算法,通常是先生成一对RSA密钥,公钥(PK)、私钥(SK),SK取决于PK,
-
模数N 和 PK用于对数据进行加密,加密算法E;
-
模数N 和 SK用于对数据进行解密,解密算法D;
通信双方各自秘密保留各自的私钥,并且得到对方的公钥就可以进行通信。
加密通信中,PK加密,SK解密
签名交易中,SK签名,PK验签。
ECC(椭圆曲线加密算法)
ECC是Elliptic curve cryptography(椭圆曲线加密算法)。
Elgamal
ElGamal算法,是一种较为常见的加密算法,它是基于1985年提出的公钥密码体制和椭圆曲线加密体系。既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。
在加密过程中,生成的密文长度是明文的两倍,且每次加密后都会在密文中生成一个随机数K,在密码中主要应用离散对数问题的几个性质:求解离散对数(可能)是困难的,而其逆运算指数运算可以应用平方-乘的方法有效地计算。
背包算法
这是一个非对称算法,即可生成多个不同的公钥,分发给其他人,然后其他人用各自的公钥加密文件,而算法只生成一个私钥(自己保存),这私钥可解密不同公钥加密的文件。在不知道私钥的前提下,破解文件是一个NP难问题。
杂凑/摘要的基本定义
Hash
散列算法,把任意长度的输入,变换成固定长度(128bit,即16Byte)的输出,该输出就是散列值。并且不可逆向解析原本输入的内容。
Hash就是找到一种数据内容和数据存放地址之间的映射关系。
SHA
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,是FIPS所认证的安全散列算法。能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。
且若输入的消息不同,它们对应到不同字符串的机率很高。
SHA家族的五个算法,分别是SHA-1、SHA-224、SHA-256、SHA-384,和SHA-512。
杂凑/摘要的实际算法
HASH的实际算法
MD4(HASH算法)
是一种用来测试信息完整性的密码散列函数的实行。其摘要长度为128位,一般128位长的MD4散列被表示为32位的十六进制数字。
MD5(HASH算法)
对输入以512位分组,输出是4个32位字的级联,与MD4相同。
不可逆的加密算法,最牢靠之一,对任何字符串都可以加密成一段唯一的固定长度的代码。
一般认为MD5码可以唯一地代表原信息的特征,通常用于密码的加密存储、数字签名、文件完整性验证。
MAC算法
MAC算法 (Message Authentication Codes) 带秘密密钥的Hash函数:消息的散列值由只有通信双方知道的秘密密钥K来控制。此时Hash值称作MAC。
MAC算法原理(以直联银联pos和POS中心通讯为例):
-
将欲发送给POS中心的消息中,从消息类型(MTI)到63域之间的部分构成MAC ELEMEMENT BLOCK (MAB)。
-
对MAB,按每8个字节做异或(不管信息中的字符格式),如果最后不满8个字节,则添加“0X00”。
SHA的实际算法
SHA
安全哈希算法,可以对任意长度的数据运算生成一个160位的数值;
SHA-1
生成20Byte的哈希结果。
在SHA1算法中,我们必须把原始消息(字符串,文件等)转换成位字符串。SHA1算法只接受位作为输入。
SHA-256
生成32Byte的哈希结果。
总结
所有算法的研究和设计,离不开数学的知识。
欲善其事,先利其器!对于普通开发者,了解相关的算法介绍、使用场景、使用的业务逻辑,若要深入研究算法的设计,仍需要下大工夫!
更多技术干货分享,敬请关注微信公众号:DigCore
或者扫码关注公众号