青蛙数字安全,一直专注数字安全领域
安全热线:维护中 帮助中心 找回密码 购物车

如何选择正确的加密方法?


要弥合理论和实践之间的差距可能非常困难。在我的职业生涯中,我一再看到这种模式--某人可能非常具有技术性,并且非常熟悉加密技术,但当作为开发人员或系统管理员解决现实世界的业务问题时,这些知识并不总是能转化为可辩护的东西。让我们来看看不同种类的加密,它们所解决的问题,选择哪种算法,以及最重要的,为什么。

我应该推出自己的加密方法吗?

绝对不可以! 加密是很难的。这些都是已解决的问题。你不应该在你的代码中实现你自己的加密原语。"永远不要自己开发加密技术 "是常见的建议,但也不要把这一建议过度泛化。有些人把这个建议带到了一个不合逻辑的极端,坚持只使用第三方库来处理用户登录等问题。你明白其中的区别吗?在经过严格审查的技术和协议的基础上建立一个安全的系统,对于开发者来说是一件合理的事情,可以选择承担。而 "建立 "你自己的密码则不是,而且很可能是更类似于混淆而不是加密的东西。

你想加密什么,为什么?

在选择你要使用的加密方式和选择算法之前,要确保你了解你要解决的问题。如果你的加密方案依赖于将私钥与应用程序一起存储,那么加密就根本没有提供任何价值,这也是一个很好的提示,你真正想做的是对某些东西实施权限,而不是 "加密"。有时,你甚至会在你的要求中被告知客户想要 "加密 "的东西。总是要问为什么,并确定他们试图解决什么问题,或者他们试图减少什么风险。

我需要加密什么?

你应该问自己的第一个问题是,你是想利用飞行中的加密还是静态的加密。值得注意的是,SSL/TLS是一种与协议无关的技术,用于在本来不安全的通道上保护纯文本协议。对静止状态下的东西进行加密是没有用的。然而,组成SSL/TLS的相同构件可以用来对静态的东西进行加密。SSL/TLS结合了对称和非对称加密,以利用两者的优势。对称或非对称加密对于加密静态的东西都是有用的,但可能不是同时进行。如果你担心线上的攻击者,最新修订的SSL/TLS应该是你首先要使用的工具。然而,如果你试图对静态的东西进行加密(例如向客户发送敏感文件),你需要确定采用什么样的密钥管理策略,评估残余风险,并确定它们对你的用例是否可以接受。

对称加密与非对称加密

对称加密依赖于两方共享相同的密钥。一个秘密值被用作黑盒函数的输入,该函数吐出的密码文本只能由拥有相同密钥的人解密。对称加密的速度非常快,而且密钥管理也非常简单。然而,没有办法唯一地识别对话中的各方,因此,它不能很好地扩展到多个当事方。对称加密算法的例子包括RC4、DES和AES。

非对称加密依赖于两个由内在数学属性连接的密钥。一把钥匙不能轻易地从另一把钥匙中导出,但用 "公钥 "加密的东西只能用相应的 "私钥 "解密,反之亦然(事实上,这个推论是数字签名的基础!)公钥与他人共享,私钥则作为唯一识别你的方式而被保密。由于每一方都需要两把钥匙(一把公钥和一把私钥),钥匙管理很快就变得复杂了。很多处理非对称加密的软件,如OpenGPG,提供了一个软件机制来保证大量公共和私人密钥的安全。非对称加密的速度比对称加密慢得多。非对称加密算法的例子包括DSA、RSA和ECC。

鉴于这些优点和缺点,你很可能想依靠非对称加密来加密将与第三方共享的静态事物。对于内部应用来说,通常情况下,对称加密更好的性能使其成为上佳选择。

使用对称加密法进行静态加密

假设你想用对称加密法对一个文件进行静态加密。从2021年的今天开始,AES是黄金标准。但是,所有的AES都是不一样的。AES定义了5种可能的 "模式"。ECB, CBC, CFB, OFB和CTR模式。

AES-ECB(电子密码本)是最简单的模式,但已被证明容易受到各种攻击。它不应该被使用。

AES-CBC(密码块链)提供加密,但不提供认证。不能保证密码文本没有被攻击者操纵过。事实上,2011年影响SSL/TLS的臭名昭著的BEAST攻击,就是依靠AES-CBC的弱点。CBC还要求将信息输入填充为固定大小的块。其他选择没有这个要求。

AES-CFB(密码反馈)对于使AES(它是一个块状密码)表现得像一个流密码很有用。它依赖于一个加密安全的随机值,能够保证安全,而AES-CFB的安全程度仅次于这个值(称为初始化向量,或IV)。

AES-CTR(计数器模式)允许加密操作的极端并行化。它是迄今为止最快的模式。然而,AES-CTR本身存在着某些弱点。它没有防篡改功能(没有消息认证),而且每个区块都需要一个单独的IV。懒惰的实现方式经常为每个区块重复使用相同的IV,从而导致实际攻击。

AES-GCM(伽罗华计数器模式)是对AES-CTR的改进。它保持了极快的并行化,但也强制使用唯一的IV,并提供信息认证。如果你有选择,一定要选择AES-GCM,它被广泛认为是一个不费脑子的选择。

请注意,就所有实际目的而言,128位密钥的AES和256位密钥被认为是同等安全的。在2021年,这两种选择都是可以辩护的。选择128位的密钥是为了提高速度和/或电池的效率,或者选择256位的密钥是为了在未来十年内不被淘汰,因为我们不知道未来在更快、更好的计算机方面会发生什么。

使用非对称加密技术进行静态加密

传统的算法,如DES和RCA,已不再被认为是安全的。实际上,你需要在使用RSA密钥对和使用利用ECC(椭圆曲线加密法)的密钥对之间做出选择。至少有2048位密钥的RSA是经过战斗检验的,并且广泛兼容。它绝不是一个糟糕的选择。ECC是较新的,但也是非常有前途的技术。RSA依赖于大素数的因数分解,而ECC则依赖于椭圆曲线的某些数学特性。ECC可以用较小的密钥大小提供类似的安全性,因此对于移动设备来说,它的性能更强,电池效率更高。

结论

加密是一个非常密集和复杂的话题,但为你的企业做出好的决定并不难。从定义你的业务需求开始,向你自己介绍不同方法的优点和缺点,并看看你的业务领域的其他人是如何解决这些问题的。最重要的是,始终保持对最新行业智慧的了解。十年前,什么是安全的,什么是不安全的,看起来非常不同。