密码学:一文看懂初等数据加密一对称加密算法
文章目录
我们都有使用密码保护私密信息的经历,甚至可以说是习惯。我们往往不希望无关的人窥探我们的隐私,从孩童时代就知道用“密码日记本”记录自己的一些隐私。密码日记本无非是一个带锁的日记本。不管是读日记还是写日记都离不开这个密码。
上述情形就好比我们应用黑匣子,需要读写操作,需要同一套密钥。写操作伴随加读操作伴随解密。加密和解密操作使用同一套密钥,这就是对称加密算法的核心。
对称加密算法简述
对称加密算法是当今应用范围最广,使用频率最高的加密算法。它不仅应用于软件行业,在硬件行业同样流行。各种基础设施但凡涉及安全需求,都会优先考虑对称加密算法。
对称加密算法的由来
对于大多数对称加密算法而言,解密算法是加密算法的逆运算,加密密钥和解密密钥相同。如果我们把Base64算法改良将其字符映射表作为密钥保存,就可以把这个改良后的Base64算法作为一种对称加密算法来看。当然,加密算法这样改良后的安全强度还远远不够,但足以让我们认识对称加密算法的特点。
对于Base64概念模糊的同学可以来这里报到:密码学:一文看懂Base64算法
对称加密算法易于理解,便于实现,根据加密方式又分为密码和分组密码,其分组密码工作模式又可分为ECB、CBC、CFB、OFB和CTR等,密钥长度决定了加密算法的安全性。
有关对称加密算法相关理论知识,可以来这里报到:密码学:一文读懂对称密钥体系
对称加密算法发展至今已相当完备。以DES算法为例,由于密钥长度的不满足,衍生出了DESede算法 (也称为TripleDES或3DES算法,翻译成中文是“三重DES”算法)。为了替代DES算法又有了AES (Rijndael) 算法。此外,还有RC系列算法包含RC2、RC4以及针对32位/64位计算机设计的RC5算法(细分为RC5-32和RC5-64,分别对应32位和64位计算机)
除了上述算法,我们还常常会用到Blowfish、 Twofish、Serpent、IDEA和PBE等对称加密算法。
对称加密算法的家谱
在对称加密算法中,DES算法最具有代表性,堪称典范。DESede是DES算法的变种。AES算法则作为DES算法的替代者,而IDEA算法作为一种强加密算法,成为电子邮件加密软件PGP (Pretty Good Privacy) 的核心算法之一。
数据加密标准-DES
DES算法和DESede算法统称DES系列算法。DES算法是对称加密算法领域中的典型算法,为后续对称加密算法的发展奠定了坚实的基础。DESede算法基于DES算法进行三重迭代,增加其算法安全性。经过一番筛选,Rijndeal算法最终成为了AES算法。这期间,对称加密算法发展迅速,与Rijndeal算法竞争的算法包括Blowfish、Serpent等。IDEA算法也源于增加算法的安全性替代DES算法,诸多对称加密算法的发展均源于DES算法的研究而来。
简述
1973年,美国国家标准局 (NBS, National Bureau ofStandards) (即现在的美国国家标准技术研究所 (NationalInstitute of Standards and Technology,NIST) ) 征求国家密码标准方案,IBM公司提交了自己研制的算法 (Luciffer算法,于1971年末提出)。1977年7月15日,该算法被正式采纳,作为美国联邦信息处理标准生效,并很快应用到国际商用数据加密领域,成为事实标准,即数据加密标准 (DataEncryption Standard,DES) ,DES算法由此诞生。
DES算法作为现代密码学领域中第一个官方授权的加密算法受到全球各大密码学机构的关注。DES算法密钥偏短,仅有56位迭代次数偏少,受到诸如查分密码分析和线性密码分析等各种攻击威胁,安全性受到严重威胁。不仅如此,由于DES算法具有半公开性质,被怀疑存在美国国家安全局 (National SecurityAgency,NSA) 安置的后门,受到各大密码学机构的强烈质疑。
1998年后,实用化DES算法破译机的出现彻底宣告DES算法已不具备安全性。1999年NIST颁布新标准,规定DES算法只能用于遗留加密系统,但不限制使用DESede算法。以当今计算机技术能力,经DES算法加密的数据在24小时内可能被破解。由此,DES算法正式退出历史舞台,AES算法成为它的替代者。
即便如此,DES算法对于密码学领域的贡献确实是巨大的。各种对称加密算法均由研究DES算法发展而来,对后续对称加密算法的发展起到奠基作用。DES算法实现不仅遍布软件行业,甚至很多硬件芯片本身也具备DES加密实现。同时,作为一款较易实现的加密算法,DES算法也成为最应学习的对称加密算法,其地位堪比C语言在计算机语言中的地位。
基于CBC工作模式的DES算法相关文档可参考:RFC1829
历经20年发展,DES算法不仅应用在软件行业,成为电子商务必不可少的加密算法,同时也逐步渗透到硬件行业。芯片级DES算法生产工艺相当完备,完全可以支持底层加密需求。
DES算法的消息传递模型
先来看看DES算法的消息传递过程,如下
DES算法的消息传递过程
甲乙双方作为消息传递双方 (甲方作为发送方,乙方作为接收方)我们假定甲乙双方在消息传递前已商定加密算法,欲完成一次消息传递需经过如下步骤:
1)由消息传递双方约定密钥,这里由甲方构建密钥
2)由密钥构建者公布密钥,这里由甲方将密钥公布给乙方
3)由消息发送方使用密钥对数据加密,这里由甲方对数据加密
4)由消息发送方将加密数据发送给消息接收者,这里由甲方将加密数据发送给乙方
5)由消息接收方使用密钥对加密数据解密,这里由乙方完成数据解密
对称加密算法的优点就是简单易行,通俗易懂。对于上述单向消息传递而言,如果乙方想要回复甲方消息,并不需要重复步骤1、2,仅须由乙方执行步骤3、4,由甲方执行步骤5即可。
基于DES算法构建的消息传递模型大都按照上述模型构建,同时包括其他对称加密算法,如DESede、AES和IDEA等。
并不是所有基于对称加密算法的消息传递模型都按此步骤构建,PBE算法就是一个例外。
和Base64算法的消息传递模型的区别
Base64算法和DES算法消息传递模型的主要差别在于密钥的使用。
基于Base64算法的消息传递模型中没有密钥的概念。那是因为Base64字符映射表本身已经公开,而Base64字符映射表本身起到了密钥的作用。消息传递双方通讯前不需要商榷该密钥,也就省去了构建密钥、公布密钥的步骤。
算法的实现
来看一个加密例子:
原文: DES
密钥: qA2oZBaKNOk=
加密后: QwCjNM5G8KM=
解密后: DES
随着计算机的发展,密钥长度仅有56位的DES算法显得越来越不安全,为了提高其安全强度,DES算法在设计上的漏洞已经不能通过单纯地增加密钥长度来弥补,这引发了对称加密算法研发竞赛。
DESede和AES算法正是这场竞赛中具有代表性的算法。
三重DES-DESede
作为DES算法的一种改良,DESede算法针对其密钥长度偏短和迭代次数偏少等问题做了相应改进,提高了安全强度。但这仍不是终点,DESede算法的出现仅为DES算法的改良提供了一种参考。DESede算法处理速度较慢,密钥计算时间较长,加密效率不高等问题使得对称加密算法的发展仍不容乐观。
DES算法被广大密码学机构质疑的原因主要在于DES算法的半公开性,违反了柯克霍夫原则,各大密码学结构怀疑美国国家安全局在未公开的算法实现内安置后门。
DES算法有3点安全隐患: 密钥太短、迭代偏少和半公开性。这使得淘汰DES算法成为一种必然,但要淘汰DES算法必须找到合适的替代方案。
针对密钥太短和迭代偏少问题,有人提出了多重DES的方式来克服这些缺陷。比较典型的有两重DES (2DES) 、三重DES(3DES)和四重DES (4DES)等几种形式,但在实际应用中一般采用3DES方案,它还有两个别名Triple DES和DESede。在Java中,我们通常称其为DESede算法。当然,其他两种名称在使用时同样可以获得支持。
DESede算法将密钥长度增至112位或168位,抗穷举攻击的的能力显著增强,但核心仍是DES算法,虽然通过增加迭代次数提高了安全性,但同时也造成处理速度较慢,密钥计算时间加长,加密效率不高的问题。
三重DES-DESede实现
DESede算法与DES算法实现的主要差别在于算法、密钥长度两个方面。
- 算法: 自然不用说,这是基本差别,只是DESede还有很多别名,如TripleDES和3DES指的都是DESede算法。
- 密钥长度:DES算法实现支持56位密钥长度,加上Bouncy Castle相应实现可以支持到64位密钥长度。DESede算法实现所支持的密钥长度支持为112位和168位。DESede算法密钥长度恰恰是DES算法密钥长度的2倍或3倍。
来看看一个例子:
原文: DESede
密钥: N8jTp6RuZxkjJea2XVvquV5YegHQ31cV
加密后: touXuJw8vrc=
解密后: DESede
高级数据加密标准一AES
DES算法漏洞的发现加速了对称加密算法的改进,通过对DES算法的简单改造得到的DESede算法虽然在一定程度上提升了算法安全强度。但DESede算法低效的加密实现和较慢的处理速度仍不能满足我们对安全的要求。AES算法正是基于这些缘由而诞生。
1997年,NIST发起了征集DES替代算法一AES (AdvancedEncryption Standard,高级数据加密标准)算法的活动。1997年9月12日,NIST发布了征集算法的正式公告和具体细节,要求AES算法要比DESede算法快,至少与DESede算法样安全,具有128位的分组长度,支持128位、192位和256位的密钥长度,同时要求AES要能够在世界范围内免费使用。
1998年8月20日,NIST在“第一次AES候选大会”上公布了满足条件的15个AES的候选算法,继而又从中筛选出5个候选算法,包括MARS、RC6、Rijndael、Serpent和Twofish。
2000年10月2日,由Daemen和 Rijmen两位比利时人提出的Rijndael算法,以其密钥设置快、存储要求低,在硬件实现和限制存储的条件下性能优异当选AES算法。
经过验证,目前采用的AES算法能够有效抵御已知的针对DES算法的所有攻击方法,如部分差分攻击、相关密钥攻击等。至今,还没有AES破译的官方报道。
AES算法因密钥建立时间短、灵敏性好、内存需求低等优点,在各个领域得到广泛的研究与应用。
目前AES常用 于 UMTS (Universal MobileTelecommunications System,通用移动通信系统) 。基于SSH (Secure shell,安全外壳) 协议的一些软件也使用了AES算法,SecureCRT。
除了常用的SSH软件外,在一些无线路由器中也使用AES算法构建加密协议。
实现
原文: AES
密钥: 4qrBlCmeHHyEAyoNRY2djo1HWx8LLCH2NQHG9c0ahi4=
加密后: XhWaN6Am1T3NVSFYs1OMVg==
解密后: AES
国际数据加密标准-IDEA
早在NIST发布征集AES算法以前,就已经有人在找寻DES算法的替代算法了。IDEA算法的提出者未像DESede算法那样在原有DES算法的基础上做改进,而是独辟蹊径地寻求了突破性解决方案。IDEA算法早于AES算法作为DES算法的可选替代算法出现。
IDEA (International Data Encryption Algorithm,国际数据加密标准)算法是由旅居瑞士的中国青年学者来学嘉和著名密码专家James Massey于1990年提出的一种对称分组密码,并于1992年修改完成
IDEA算法使用长度为128位的密钥,数据块大小为64位。
从理论上讲,IDEA属于“强”加密算法。
IDEA算法在美国之外提出并发展起来,避开了美国法律上对加密技术的诸多限制。因此,有关IDEA算法和实现技术的书籍均可自由出版和交流,极大地促进了IDEA算法的发展和完善
IDEA算法是目前较为常用的电子邮件加密算法之一。
电子邮件加密软件PGP (Pretty Good Privacy) 使用了具有商业版权的IDEA算法,实现邮件加密/解密工作。
实现
原文: IDEA
密钥: W1a1IFCKIbXKdnejfT5b2A==
加密后: er43StU2Txk=
解密后: IDEA
基于口令加密-PBE
前面阐述了几种常用的对称加密算法,这些算法的应用模型甚至包括实现)几乎同出一辙。但并不是所有的对称加密算法都是如此,PBE算法综合了上述对称加密算法和消息摘要算法的优势,形成了对称加密算法的一个特例。
PBE (Password Based Encryption,基于口令加密)算法是一种基于口令的加密算法,其特点在于口令由用户自己掌管,采用随机数 (这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。
PBE算法没有密钥的概念,密钥在其他对称加密算法中是经过算法计算得出的,PBE算法中则使用口令替代了密钥。
密钥的长短直接影响了算法的安全性,但不方便记忆。
即便是我们将密钥通过Base64编码转换为可见字符,长密钥一样不容易记忆。因此,在这种情况下密钥是需要存储的,但是口令则不然。
比如我们程序员天天都要开关电脑,那么进入操作系统的唯一途径就是输入口令。口令是我们便于记忆的一种凭证,基于这一点,PBE算法使用口令代替了密钥。
PBE算法并没有真正构建新的加密/解密算法,而是对我们已知的对称加密算法(如DES算法)做了包装。使用PBE算法对数据做加密/解密操作时,其实是使用了DES或AES等其他对称加密算法做了相应的操作。
既然PBE算法使用了我们较为常用的对称加密算法,那就无法回避密钥的问题。口令并不能替代密钥,密钥是经过加密算法计算得出的,但口令本身不可能很长,单纯的口令很容易通过穷举攻击方式破译,这就引入了“盐””。
盐能够阻止字典攻击或预先计算的攻击,它本身是一个随机信息,相同的随机信息极不可能使用两次。将盐附加在口令上,通过消息摘要算法经过迭代计算获得构建密钥/初始化向量的基本材料,使得破译加密信息的难度加大。
PBE算法是对称加密算法的综合性算法,常见算法如PBEWithMD5AndDES,该算法使用了MD5和DES算法构建PBE算法。
基于PBE算法的消息传递模型
基于PBE算法的消息传递模型与基于DES算法的消息传递模型还是有一定差别的。
甲乙双方作为消息传递双方 (甲方作为发送方,乙方作为接收方),我们假定甲乙双方在消息传递前已商定加密算法和迭代次数,欲完成一次消息传递需经过如下步骤:
1)由消息传递双方约定口令,这里由甲方构建口令
2)由口令构建者公布口令,这里由甲方将口令公布给乙方
3)由口令构建者构建本次消息传的使用的盐,这里由甲方构建胜
4)由消息发送方使用口令、盐对数据加密,这里由甲方对数据加密
5)由消息发送方将盐、加密数据发送给消息接收者,这里由甲方将盐、加密数据发送给乙方
6)由消息接收方使用盐、口令对加密数据解密,这里由乙方完成数据解密
对于上述单向消息传递而言,如果乙方想要回复甲方消息,甲乙并不需要重复步骤1、2,仅仅需由乙方执行步骤3、4、5,由甲方执行步骤6即可。
当然,甲乙双方也可以在消息传递过程中传递迭代次数。
我们可以设想,“盐”本身是一种可以由消息传递双方按一定规律约定的信息,譬如时间。也可以是某个不可变物理硬件的编号,譬如U盘的自身唯一标识。
甲乙双方可以通过约定消息传递时间,并将其作为“盐”的基本信息,根据预定算法(如MD5算法)对其处理,最终获得真正的“盐”。这样一来,“盐”就无需传递,提高了安全性。
换一种思路考虑,有这样一种系统,使用者需要将U盘插入计算机,同时输入口令方能登录系统,那么U盘就是“盐”信息的提供者。即使U盘丢失,加密的信息也未必能被窃取。
从另一个角度思考"盐”与口令就像两把不可分割的钥匙
应用场景
对称加密是一种加密方式,其中使用相同的密钥进行加密和解密。常用的对称加密算法包括 DES(Data Encryption Standard)、AES(Advanced Encryption Standard)、3DES(Triple DES)、Blowfish 等。对称加密算法的主要特点是加密解密速度快,但密钥管理相对复杂。
下面是对称加密的一些常用应用场景:
-
数据传输保密性:
对称加密常用于确保数据在传输过程中的保密性。通信的两端使用相同的密钥来加密和解密传输的数据,以防止未经授权的访问者能够读取或篡改数据。例如,在安全套接字层(SSL/TLS)中,对称加密算法用于保护 Web 浏览器和服务器之间的数据传输。 -
文件加密:
对称加密可以用于对存储在本地计算机或云存储中的文件进行加密。用户可以使用相同的密钥来加密和解密文件,确保只有授权用户能够访问文件内容。 -
数据库加密:
对称加密可以用于对数据库中的敏感数据进行加密。这可以防止未经授权的访问者在数据库被盗或泄漏时查看敏感信息。 -
身份验证令牌加密:
在身份验证和授权场景中,对称加密可用于加密和验证令牌,确保只有授权的用户能够访问受保护的资源。例如,JSON Web Tokens(JWTs)可以使用对称加密算法进行签名和验证。 -
硬件加密:
对称加密也常用于硬件加密设备,如智能卡、硬件安全模块(HSM)等。这些设备可以用于存储密钥并执行对称加密操作,以提供更高的安全性。 -
电子邮件加密:
对称加密可以用于加密电子邮件的内容,确保只有合法的收件人能够解密和阅读电子邮件。
但是需要注意的是,密钥的安全分发和管理对系统的整体安全性至关重要。
参考
《Java加密与解密艺术》
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!