常用加解密算法介绍
1. 哈希算法
常见的函数包含MD系列、SHA-1、SHA-2家族、SHA-3家族、SM3等。
1.1 MD5(单向散列算法)
全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2、MD3和MD4发展而来。MD5算法的使用不需要支付任何版权费用。
MD5功能: 输入任意长度的信息,经过处理,输出为128位的信息(数字指纹);不同的输入得到的不同的结果(唯一性);根据128位的输出结果不可能反推出输入的信息(不可逆);
# 语法
md5sum 文件名 > 保存校验和文件名
# 示例
md5sum test.txt > test.txt.md5
1.2 SHA-1/SHA-2/SHA-3
SHA全称Secure HASH Algorithm,由NIST开发;
SHA-1于1995年进行修订发布,要求输入最大长度2^64 -1位数据,输出固定160位消息摘要,处理过程按照512位数据块进行分组。
SHA1的IV设定方法为十六进制数(0-F),每两个数构成一个字节,其中A(32bit数)顺时针0-7,B顺时针8-F,C逆时针F-8,D逆时针7-0,E取C3\D2\E1\F0,因此固定为:
(0x67452301U), (0xEFCDAB89U), (0x98BADCFEU), (0x10325476U),(0xC3D2E1F0U)
SHA-2是一系列Hash函数的统称,其中包括SHA-224\256\384\512等,区别主要在于函数内部结果和生成的摘要值长度,SHA-512还有另外变体为SHA512_224、SHA512_256,主要是基于SHA512产生的摘要值进行截断,与SHA512区别在于IV和输出长度不一致。
其中,SHA-224\256分组大小为512位,SHA-384\512, SHA-512_224和SHA-512_256分组大小为1024bit。
SHA-224生成224位消息摘要,初始IV为:
(0xC1059ED8U),(0x367CD507U),(0x3070DD17U),(0xF70E5939U),
(0xFFC00B31U),(0x68581511U),(0x64F98FA7U),(0xBEFA4FA4U)
SHA-256生成256位消息摘要,初始IV(取自然界前8个素数平方根小数部分前32位)为:
(0x6A09E667U),(0xBB67AE85U),(0x3C6EF372U),(0xA54FF53AU),
(0x510E527FU),(0x9B05688CU),(0x1F83D9ABU),(0x5BE0CD19U)
SHA384生成384位消息摘要,初始IV为:
(0xCBBB9D5DC1059ED8),(0x629A292A367CD507),(0x9159015A3070DD17), (0x152FECD8F70E5939),
(0x67332667FFC00B31), (0x8EB44A8768581511),(0xDB0C2E0D64F98FA7), (0x47B5481DBEFA4FA4)
SHA-3对于SHA-2是一种补充或者备用方案而不是替代。
SHA-3算法的函数系列均基于KECCAK哈希算法,补充了FIPS 180-4规定的SHA-1和SHA-2哈希函数系列,SHA-3算法包括四个加密哈希函数SHA3-224,SHA3-256,SHA3-384,SHA3-512 和两个可扩展输出函数(XOF)SHAKE128和SHAKE256。
SHA3算法的原理参考:https://blog.csdn.net/weixin_41754258/article/details/119645704
1.3 SM3 加密算法
SM 3是中国国家密码管理局 2010 年公布的中国商用密码杂凑算法标准。适用于商用密码应用中的数字签名和验证。
SM3 是在 SHA-256 基础上改进实现的一种算法,其安全性和 SHA-256 相当。SM3 和 MD5 的迭代过程类似,也采用 MD(Merkle-Damgard)结构。消息分组长度为 512 位,摘要值长度为 256 位。
SM 3 算法的设计思想:SM 3 算法采用分组密码结构设计,采用置换、非线性函数和模运算来实现数据的混淆和扩散,以确保数据的安全性。
SM 3 算法的加密流程:包括消息填充、初始向量设定、消息分组、迭代加密等步骤,最终生成哈希值作为数据的加密结果。
SHA3算法的原理参考:
https://cloud.tencent.com/developer/article/2419203
2. 对称算法
常见的对称算法有:RC, GCM, DES, TDES, AES,
AES-GCM, AES-CCM, SM4
2.1 RC算法
RC算法包括RC2,RC4,RC5
RC2 是由著名密码学家 Ron Rivest 设计的一种传统对称分组加密算法,它可作为 DES 算法的建议替代算法。它的输入和输出都是64bit。密钥的长度是从1字节到128字节可变,但目前的实现是8字节(1998年)。
RC4 于1987年提出,和 DES 算法一样,是一种对称加密算法,但不同于 DES的是,RC4 不是对明文进行分组处理,而是字节流的方式依次加密明文中的每一个字节,解密的时候也是依次对密文中的每一个字节进行解密。
RC4 算法的特点是算法简单,运行速度快,而且密钥长度是可变的,可变范围为1-256字节(8-2048bit),在如今技术支持的前提下,当密钥长度为128bit时,如今也没有找到对于128bit密钥长度的 RC4 加密算法的有效攻击方法.
RC5 分组密码算法是1994由麻萨诸塞技术研究所的 Ronald L. Rivest 教授发明的,并由 RSA 实验室分析。它是参数可变的分组密码算法,三个可变的参数是:分组大小、密钥大小和加密轮数。在此算法中使用了三种运算:异或、加和循环。
2.2 DES/TDES算法
DES 加密算法出自 IBM 的研究,后来被美国政府正式采用,之后开始广泛流传,但是近些年使用越来越少,因为 DES 使用56位密钥(密钥长度越长越安全),以现代计算能力24小时内即可被破解。
DES 算法的入口参数有三个:Key、Data、Mode。
- Key 是 DES 算法的工作密钥。
- Data 是要被加密或被解密的数据。
- Mode 为 DES 的工作方式,有两种:加密或解密。
3DES(或称为 Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称。它相当于是对每个数据块应用三次 DES 加密算法。即通过增加 DES 的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。3DES 的密钥长度为24个字节,而 DES 的密钥长度为8的倍数,比如8,16,24都可以。
2.3 AES算法
2.3.1 常用AES算法
AES 加密算法采用分组密码体制,每个分组数据的长度为128位16个字节,密钥长度可以是128位16个字节、192位或256位,我们通常采用需要初始向量 IV 的 CBC 模式,初始向量的长度也是128位16个字节。
AES 加密的五个关键词,分别是:分组密码体制、Padding、密钥、初始向量 IV 和四种加密模式。
- 分组密码体制
AES 采用分组密码体制,即 AES 加密会首先把明文切成一段一段的,而且每段数据的长度要求必须是128位16个字节,如果最后一段不够16个字节了,就需要用 Padding 来把这段数据填满16个字节,然后分别对每段数据进行加密,最后再把每段加密数据拼起来形成最终的密文。 - Padding
Padding 就是用来把不满16个字节的分组数据填满16个字节用的,它有三种模式 PKCS5、PKCS7 和NOPADDING。
PKCS5 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的几,比如缺少5个字节,就在末尾填充5个字节的5。PKCS7 是指分组数据缺少几个字节,就在数据的末尾填充几个字节的0,比如缺少7个字节,就在末尾填充7个字节的0。NoPadding 是指不需要填充,也就是说数据的发送方肯定会保证最后一段数据也正好是16个字节。 - 初始向量IV
初始向量 IV 的长度规定为128位16个字节,初始向量的来源为随机生成。至于为什么初始向量能使加密更安全可靠,会在下面的加密模式中提到。 - 四种加密模式
一共有四种加密模式,分别是 ECB(电子密码本模式,相对不安全)、CBC(密码分组链接模式)、CFB、OFB、CTR,我们通常采用需要初始向量 IV 的 CBC 模式。
AES流程图:
2.3.2 AES-GCM, AES-CCM算法
- AES-GCM
AES-GCM加密算法指的是该对称加密采用Counter模式,并带有GMAC消息认证码。
GCM ( Galois/Counter Mode)中的G就是GMAC, C就是指CTR, 指的是该对称加密采用Counter模式,并带有GMAC消息认证码, GCM可以提供对消息的加密合完整性校检。
有些信息是我们不需要保密,但信息的接收者需要确认它的真实性的,例如源IP,源端口,目的IP,IV,等等。因此,我们可以将这一部分作为附加消息加入到MAC值的计算当中。
下图的Ek表示用对称秘钥k对输入做AES运算。最后,密文接收者会收到密文、IV(计数器CTR的初始值)、MAC值。
- AES-CCM
CCM(Counter with Cipher Block Chaining-Message Authentication Code)是CBC-MAC与CTR的组合,可同时进行数据加密及认证,它基于对称秘钥分组加密算法,分组大小 128bits,因此 CCM 可以用于 AES,但是不能用于DES、3DES(分组大小为64bits)。CCM模式可以认为是分组加密算法的一种模式。
CCM是CTR加密模式和CMAC认证算法的混合使用,常用在需要同时加密和认证的领域,比如WiFi安全中的WPE协议,它使用了AES-CCM模式。
CCM首先使用CBC-MAC(Cipher Block Chaining-Message Authentication Code)模式对传输帧进行认证,然后使用CTR模式进行数据的加密。
2.4 SM4算法
SM4 是中国国家密码管理局提出的一种分组密码算法,也称为 SMS4。它属于对称加密算法,分组长度为 128 比特,密钥长度也为 128 比特。SM4 算法采用了与 AES 类似的轮函数结构,但具体的 S 盒和线性变换与 AES 不同,因此具有独特的加密性能。
SM4算法主要包括加解密算法和密钥扩展算法,采用 32 3232 轮非线性迭代的数学结构,其中算法中每一次迭代运算为一轮非线性变换。主要操作包括异或、合成置换、非线性迭代、反序变换、循环移位以及S盒变换等。加密算法和解密算法的数学架构、运算法则、运算操作等都是完全相同的,解密运算只需要将加密算法中生成的轮密钥进行反序使用。
3. 消息认证码MAC算法
-
基于Hash函数的MAC:HMAC
HMAC在各种网络应用中都能找到,如安全传输层协议TLS、网络安全IPSec。并且,HMAC还是美国国家标准与技术研究院NIST所使用的标准。常见又HMAC-SHA1,HMAC-SHA256
流程:
-
基于分组密码的MAC:DAA和CMAC
数据认证算法DAA 使用广泛,它建立在DES之上,采用CBC密文分组链接模式。因为安全弱点和算法陈旧,容易产生伪造攻击,目前已经废止。
DAA流程:
CMAC建立在AES之上,采用CBC密文分组链接模式,是DAA的进阶版。
CMAC流程:
4. 非对称算法
RSA、Elgamal、背包算法、Rabin、D-H、ECC ( "Elliptic Curve Cryptography)。使用最广泛的是 RSA 算法,Elgamal 是另一种常用的非对称加密算法。
-
RSA算法
RSA 是目前主流的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。
量子计算里的秀尔算法能使穷举的效率大大的提高。由于 RSA 算法是基于大数分解 (无法抵抗穷举攻击),因此在未来量子计算能对 RSA 算法构成较大的威胁。一个拥有 N 量子位的量子计算机,每次可进行2^N 次运算,理论上讲,密钥为1024位长的 RSA 算法,用一台512量子比特位的量子计算机在1秒内即可破解。 -
DAS算法
ElGamal数字签名方案是基于离散对数求解的困难性,使用私钥进行加密,公钥进行解密。
Schnorr数字签名方案是基于离散对数求解的困难性,将生成签名所需的消息计算量最小化。
DSA (Digital Signature Algorithm) 是 Schnorr 和 ElGamal 签名算法的变种,被美国 NIST 作为 DSS (DigitalSignature Standard)。 DSA 是基于整数有限域离散对数难题的。
简单的说,这是一种更高级的验证方式,用作数字签名。不单单只有公钥、私钥,还有数字签名。私钥加密生成数字签名,公钥验证数据及签名,如果数据和签名不匹配则认为验证失败。数字签名的作用就是校验数据在传输过程中不被修改,数字签名,是单向加密的升级。 -
ECC算法
在了解ECC算法之前,需要了解常见的椭圆曲线密码学标准:
NIST曲线:由美国国家标准技术研究院(NIST)定义,包括P-224、P-256、P-384、P-521等。
Brainpool曲线:由Brainpool工作组定义,设计时考虑了更广泛的安全需求,包括抵抗量子计算机的攻击, 包括BrainpoolP160r1、BrainpoolP256r1等。
SECG曲线:由Standards for Efficient Cryptography Group(SECG)发布,包括secp256k1等,是比特币等加密货币的默认曲线。
ANSI曲线:由美国国家标准学会(ANSI)定义,包括prime192v1等,也是一些早期应用中的曲线选择。
国密SM2曲线:由中国国家密码管理局发布,是一种国产的椭圆曲线密码标准,包括SM2P256等曲线,用于中国的加密和数字签名标准。
DH(Diffie-Hellman)、ECDH(Elliptic Curve Diffie-Hellman)、DHE(Diffie-Hellman Ephemeral)、ECDHE(Elliptic Curve Diffie-Hellman Ephemeral)、ECDSA(Elliptic Curve Digital Signature Algorithm)和ECSSA(Elliptic Curve Schnorr Signature Algorithm)都是密码学中用于密钥交换和数字签名的算法。下面是它们之间的详细介绍:
DH 和 ECDH
DH:Diffie-Hellman算法是一种基于离散对数问题的密钥交换协议。它允许双方在公开通道上协商出一个共享密钥,而无需泄露任何关于密钥的信息。
ECDH:Elliptic Curve Diffie-Hellman算法是DH的一个变种,它使用椭圆曲线代替了原始DH算法中的素数域。由于椭圆曲线具有更高的安全性,因此ECDH通常比DH更安全,同时密钥长度也更短。
DHE 和 ECDHE
DHE:Diffie-Hellman Ephemeral(短暂Diffie-Hellman)是一种使用临时私钥进行密钥交换的协议。每次会话都会生成新的私钥和公钥对,从而提高了安全性。
ECDHE:Elliptic Curve Diffie-Hellman Ephemeral(椭圆曲线短暂Diffie-Hellman)是ECDH的一个变种,它同样使用临时私钥进行密钥交换。由于使用了椭圆曲线,ECDHE比DHE更安全且效率更高。
ECDSA 和 ECSSA
ECDSA:Elliptic Curve Digital Signature Algorithm(椭圆曲线数字签名算法)是一种基于椭圆曲线的数字签名算法。它使用椭圆曲线上的点来表示数字签名,从而实现了与RSA等传统数字签名算法相当的安全性,但密钥长度更短。
ECSSA:Elliptic Curve Schnorr Signature Algorithm(椭圆曲线Schnorr签名算法)是一种基于椭圆曲线的数字签名算法,它是Schnorr签名算法的椭圆曲线版本。与ECDSA相比,ECSSA在某些方面具有更好的性能和安全性特性,但目前尚未得到广泛采用。
6. 其他算法
- E0/E21/E22/SAFER+
(E0, E1, E21, E22, SAFER+)通常与无线通信标准中的加密和认证相关,特别是在GSM(全球移动通信系统)和UMTS(通用移动通信系统)等蜂窝网络中。
E0 是 GSM 系统中使用的加密算法。它是一种流密码,用于保护空中接口(Air Interface)上传输的语音和数据。E0 算法基于 A5/1 密码算法,该算法在 GSM 标准中定义,并且已知存在一些安全漏洞。
E21 和 E22 同样不是广泛认可的加密算法名称。在 GSM 和 UMTS 标准中,存在一种称为 A5/2 的加密算法,它是 A5/1 的一个简化版本,主要用于出口市场,因为它被认为比 A5/1 更容易破解。
SAFER+(Secure And Fast Encryption Routine Plus)是一种块密码,由 James Massey 和 Xuejia Lai 开发。它是对原始 SAFER 算法的改进,旨在提供更高的安全性和效率。SAFER+ 算法在多种应用中使用,包括 GSM 系统中的加密。 - PBKDF
PBKDF(Password-Based Key Derivation Function,基于密码的密钥派生函数)是一种用于从用户密码派生出加密密钥的算法。它通常用于存储密码的哈希值,以及在需要时从密码重新生成密钥。
PBKDF 算法的一个典型实现是 PBKDF2(Password-Based Key Derivation Function 2),它是 PKCS #5 标准的一部分。PBKDF2 使用 HMAC(Hash-based Message Authentication Code)作为伪随机函数,并支持多种哈希算法,如 SHA-1、SHA-256 和 SHA-512。
PBKDF2 的工作原理如下:
输入用户密码、盐值、迭代次数和所需密钥长度。
使用 HMAC 和选定的哈希算法对密码和盐值进行迭代哈希运算。
将迭代结果截取为所需长度,作为派生的密钥。