笔者在学习和工作中,经常跟【算法】打交道;基于平时对【算法】的了解,特写此文来整理一下常见的算法。注意,此文不对算法的具体细节做深究,仅供基础入门学习。限于篇幅原因,本文先介绍【对称加密算法】。
对称加密算法,顾名思义,就是算法的执行过程是对称的;用最简单的话说,就是加密方和解密方使用的密钥是一致的,只不过执行的过程是相反的,一方(A)对明文(P)使用密钥K1进行加密得到密文(C),另一方(B)对密文(C)使用密钥K2进行解密拿到明文(P'); 要想两者的明文P和P'相等,必须保证密钥K1等于K2,这就是对称加密算法的基本要求。
常见的对称算法有DES、TDES、AES、SM4、RC2/4等。
DES全称为Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法,1977年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),并授权在非密级政府通信中使用,随后该算法在国际上广泛流传开来。【摘自:百度百科 https://baike.baidu.com/item/DES/210508】
DES算法,有以下特点:密钥长度适中、实现原理较为简单、加解密过程较为高效。通常我们见到的DES密钥长度为8字节,即64比特位,但是实际使用的密钥的有效位是56比特位,即每个字节的最高位(第8、16、24、32、40、48、56、64比特位)实际都是不参与算法加解密运算的,我们称之为校验位,它们存在的目的是使得每个密钥都有奇数个1。由此可知,有2组8字节不完全相同的密钥,加解密结果是一致的这种情况是可能存在的。
算法对数据做加解密,都是以一定长度的数据块作为输入的;并且,对称算法有个特点,输入数据块的长度一般等于密钥的长度;也就是说,在进行DES运算(加密或解密)时,输入的数据长度都必须是8字节。同时,在DES对称算法中,输出的数据长度等于输入的数据长度,即8字节输入8字节输出。至此,有的童鞋会问,如果我们要执行加密的数据远远不止8字节呢,应该怎么办?这个问题就已经涉及到加解密过程的数据分组问题了,常见的分组方式有ECB方式和CBC方式,后续会对这2种方式做更为详细的介绍。
TDES全称是Triple Data Encryption Standard,即我们常说的3DES;三重数据加密算法(TDEA,Triple Data Encryption Algorithm)。它是DES算法的加强版本。TDES的执行过程如下:其中C表示密文、P表示明文、E表示加密运算、D表示解密运算、Kx表示不同组别的密钥。
TDES加密过程为:C=Ek3(Dk2(Ek1(P)))
TDES解密过程为:P=Dk1(EK2(Dk3(C)))
由上可知,标准的TDES的密钥长度是24字节的,即K1-K2-K3;但在实际生产使用过程中,也常使用16字节长度的密钥,此时密钥的K3部分将由K1来充当,即K1-K2-K1,强制把16字节的密钥转换为24字节的密钥。另一方面,从TDES加解密的过程,我们也可以发现当K1=K2,使用TDES的效果与单DES的效果是一致的。
注意的是,前面说到对称算法加解密运算,输入数据长度一般等于密钥的长度,而TDES的密钥长度是24字节,但这并不意味着执行TDES加解密时,输入数据长度必须是24字节;相反,它的输入数据长度还是8字节,与DES运算的输入完全一样。这也就是为什么说TDES是DES的加强版。同样的8字节输入数据经DES运算和TDES运算,通常是不一样的,除非TDES的密钥满足K1=K2的关系。
高级加密标准,全称是Advanced Encryption Standard,缩写:AES。在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。【摘自 百度百科 https://baike.baidu.com/item/aes/5903?fr=aladdin】它是一种不同于DES的另一类对称算法,加密的强度比DES高,破解的难度也较大,同时实现它的加解密运算难度也高一些。
由于它也是对称加密加密算法,所以前面对加密算法描述的特点它都有,不同的是,它的是密钥长度有3种可能值,16字节、24字节、32字节,分别对应的密钥强度为128比特位、192比特位和256比特位。执行加解密运算时,输入数据的长度为16字节(128比特位),且输出数据长度等于输入数据长度。
SM算法是国密算法,国密即国家密码局认定的国产密码算法。主要有SM1、SM2、SM3、SM4,其中SM1 为对称加密,其加密强度与AES相当,但该算法不公开,调用该算法时,需要通过特定的加密芯片的接口进行调用;SM4为对称加密算法;SM3为信息摘要算法;SM2为非对称加密算法。后续的文章会对SM算法做更为详细的介绍。
SM4算法的特点是密钥长度和分组长度均为128位;虽然密钥长度跟DES类似,但加密强度却能与AES媲美;并且在国家信息安全战略的大背景下,国密算法的大力推广得到了越来越多的支持。像目前国内出厂很多涉及金融安全的终端产品,如POS机、ATM机、密钥键盘、金融交易后台、商业银行系统等等,都是强制要求必须支持国密相关算法,并且发售的机器或上线的系统都必须通过国家密码局授权的国密认证,拿到对应的国密认证证书,才能最终商用,这或许能成为SM算法大放异彩的一个契机,若干年后指不定街边的小小机器都在跑国密算法呢。
RC2是由著名密码学家Ron Rivest设计的一种传统对称分组加密算法,它可作为DES算法的建议替代算法。它的输入和输出都是64比特。密钥的长度是从1字节到128字节可变,但目前的实现是8字节(1998年)
RC4加密算法是大名鼎鼎的RSA三人组中的头号人物Ronald Rivest在1987年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box长度可为任意,但一般为256字节。该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性。
中文名称/简称 | 密钥长度可能值 | 加解密数据块长度 | 资源消耗 | 运算速度 | 安全性 |
---|---|---|---|---|---|
数据加密标准/DES | 8字节 | 8字节 | 中 | 较快 | 低 |
3重数据加密标准/TDES | 16字节、24字节 | 8字节 | 高 | 慢 | 中 |
高级加密标准/AES | 16字节、24字节、32字节 | 16字节 | 低 | 快 | 高 |
国密对称算法/SM4 | 16字节 | 16字节 | 高 | 快 | 高 |
RC算法(RC2) | 目前使用是8字节 | 8字节 | 低 | 快 | 低 |
RC算法(RC4) | 密钥长度可变 | 长度可变 | 低 | 快(快DES10倍) | 低 |
经过以上分析和总结,相信大家对对称加解密算法都有了一个大概的认识,这里并没有很具体地讲到每个算法的实现细节,那些数学理论的东西应该是数学家去验证的东西,我们作为算法的使用者和推广者,只需要了解其大致的基本原理,重点需要熟知每种加密算法的特性,根据实际应用的不同场景、对加密要求、运行环境等因素综合考虑,实现并使用最优的加密算法,即可。
文中的观点仅代表博主之愚见,算法方面的描述,也可能有纰漏的地方,若有发现,也请读者帮忙指正。感激不尽。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !