密码学常用算法的工作原理和特点

电子说

1.2w人已加入

描述

现如今,常用的加密算法不外乎私钥加密方法和公钥加密方法。私钥加密方法可以用来保护关键/敏感数据。密钥密文只需一把钥匙(由通信双方共享)破解,因此被称为对称性密码设计学。

1949 年,贝尔实验室的 Claude Shannon 公布了私钥加密方法的基本理论。数十年来的演化已经孕育出了很多高质量的私钥加密算法。然而,直到 1975 年,一个名为 DES 的强大私钥加密方法才得到了广泛使用。

公钥/非对称性密码设计学诞生于 20 世纪 70 年代中期。公钥加密方法需要用到一对密钥,分别是对外公开的公钥和相对应的由个人持有的私钥。例如,接收方可以创建一对密钥,并将公钥分享给任何想要向 ta 发送密文的人。发送方可以使用公钥加密发送给接收方的信件,接收方可以用私钥来解密。

加密算法的强大程度取决于三个主要因素:

基础设施 —— 如果相关密码设计主要由软件实现,那么底层基础将是最薄弱的环节。如果你总是会加密某些信息,那么对黑客来说,最好的做法是黑进你的电脑,在信息被加密前将其偷到手。相比破解密钥来说,入侵系统或者使用病毒感染系统要容易得多。很多情况下,破解密钥最简单的方法是窃听用户,并在密钥被传入加密程序时进行拦截。

密钥长度—— 在密码设计学中,密钥长度很重要。如果攻击者无法安装按键监视器(keystroke monitor),那么破解密文的最佳方法就是通过不断的试错来暴力破解。实用的加密算法必须将密钥长度设定得足够长,来杜绝暴力破解的可能性。但是,随着电脑运算速度一年比一年快,密钥长度的安全阈值也需要一直提高。 专家们承认,小于等于 64 位的密钥,包括 DES 密钥在内,都很容易被暴力破解。在 1999 年,电子前线基金会(Electronic Frontier Foundation)资助开发了一种叫做 “Deep Crack” 的设备,可以在三天以内破解一个 DES 加密密钥。所以现在加密算法的密钥长度一般都在 100 位以上,少数算法支持 256 位的密钥。

算法质量 —— 算法质量本身是很难评价的,基于一个现有算法去构造一个看似可行的算法是很容易的,但只有经验老道的专家仔细检查才能发现其中的微妙漏洞。算法中的漏洞会产生 “捷径”,让攻击者可以在暴力搜索攻击时候跳过大批密钥。举个例子,流行的压缩程序 PKZIP 以前继承了一个定制的的加密功能,使用 64 位的密钥。理论上来说,应该要 264 尝试才能试完所有的密钥。但实际上,有捷径可走,所以攻击 PKZIP 加密算法只需 227 次尝试就能破解密文。发现这样漏洞的唯一办法就是尝试破解算法,一般来说就是使用对付其它算法的技巧。只有在经过这样的分析和攻击之后,算法的质量才会展现出来,所以,还没有找出这样的漏洞,并不代表这个算法永远不被发现有漏洞。

算法的类型

DES —— DES 已经经受住了时间的考验,多来年出版的研究都证明了其质量。经过四分之一世纪的研究之后,研究员也只能找出一些猜测式的攻击方法,而且实用性还不如暴力破解。DES 算法的唯一真实弱点就是它过短的密钥长度(56 位)。

加密算法

三重 DES —— 使用 112 位或者 168 位的密钥连续三次使用 DES 算法。最终这个算法会比其它有类似强度的算法慢得多,而且,因为计算机还是强大到了能破解这个算法,这一方法已经过时了。

AES —— 高级加密标准(AES)支持三种密钥大小,128 位的、192 位的和 256 位的,而数据则按 128 位为一个组。现在 AES 被当成标准,全世界都在使用。

Rijndael 密码表

加密算法

DES 是明确设计为内置在硬件中的,从没考虑过怎么让它在软件层面实现。后来,NIST 评估了执行效率和存储需求,保证 AES 能在 C 语言和 Java 语言中工作,既能在工作站中运行,也能在资源更有限的环境比如嵌入式 ARM 处理器和智能卡中运行。

虽然荷兰研究院 Vincent Rijman 和 Joan Daemen 发明的 Rijndael 算法赢得了 NIST 精算,但所有进入 AES 决赛的算法相对比 DES 和 DES 的替代品都显现出了巨大的进步。所有这些算法都是分组加密(block cipher)算法并且支持 128 位乃至更大的密钥;没有一种算法有严重的漏洞;最终选择其实是密码设计强度和性能的权衡。

AES 基于一种叫做 “置换-排列” 的设计原理,在计算中既有置换,又有排列,无论在软件层还是硬件层,计算起来都很快。不像其前辈 DES,AES 不使用费斯托密码(Feistel)原理,AES 是 Rijndael 密码的一种变种,使用固定的 128 位大小作为输入,而且支持 128 位、192 位 和 256 位的临界维数(critical dimension)。相反,Rijndael 设计规范仅指定了输入组和密钥的大小都是 32 的倍数,最小是 128 位,最大是 256 位。

AES 在一个 4×4 的字节矩阵上操作,这些举证叫做 “状态”。但是 Rijndael 算法的某些版本的输入组更大,因此矩阵更大。大部分 AES 计算都是在一个特定的有限域内完成的。

AES 算法所用的密钥大小会相应决定转换操作的重复轮数。对应关系如下:

128 位密钥对应 10 轮重复

192 位密钥对应 12 轮重复

256 位密钥对应 14 轮重复

加密算法

每一轮都包含几个处理步骤,而每个步骤都包含 4 个相似大不同的阶段,其中包括取决于加密密钥本身的一个结算。在解密的时候,需要用同一把密钥来反向重复操作、将密文恢复成原文。

量子密码学

加密算法

上面这个图示说明了量子密钥分发方案(BB84 协议),它实现了一种包含量子力学的密码学协议,能够保证安全通信。它让通信双方可以生成一个共享的随机密钥(是个对称密钥),这个密钥只有他们双方才知道,因此可以用于加解密消息。量子力学是一组描述组成宇宙的光子、电子和其它粒子运动规律的科学定律。

业界一直在尽最大努力寻找能够抵抗黑客攻击的最高安全手段,而新一代的密码设计学已经从数学转向物理学。量子力学科学家已经进入密码学的世界了,这些科学家希望利用量子力学的原理来发送无法被黑的消息。这就是 “量子密码学” 的大概,它是在过去这几十年里才成长起来的。

量子密码学将自己的根扎在量子物理学中。组成我们这个宇宙的基本粒子具有内在的不确定性,可能同时存在于此处或彼处,也可以有不止一种状态。只有在撞上一个物体或者被测量时,它们才会显现出运动现象。

密码设计学是信息安全的一个迷人领域,也是最复杂的学科之一。不过,我们从简单的凯撒密码和波利比乌斯密码介绍到多轮加密的 DES 和 AES 算法,相信读者会觉得理解起密码算法的概念来不那么复杂了。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分