从某种意义上说,您可以定义特定加密算法的强度¹:粗略地说,强度是为了破解加密而需要进行的尝试次数。更准确地说,强度是找到秘密所需的计算量。理想情况下,算法的强度是需要进行的蛮力尝试的数量(由每次尝试的复杂性衡量,或者如果某种并行化允许多次尝试共享某些工作,则减少);随着对算法的攻击提高,实际强度下降。
重要的是要认识到“特定加密算法”包括考虑特定的密钥大小。也就是说,您不是针对 AES 推销 RSA,而是使用 AES-256(具有特定链接模式、IV 等)的 1024 位 RSA(具有特定填充模式)。从这个意义上说,你可以问:如果我有一个用算法 A 加密的数据副本,参数 P 和 Q 的给定值(特别是密钥大小),以及一个用算法 B 加密的副本,参数 P 和 R,那么(A,Pval₁,Qval₁) 和 (B,Pval₂,Rval₂) 中的哪一个可能首先被破解?
在实践中,许多协议涉及使用多个密码原语。不同的原语有不同的可能用途,即使几个原语可以服务于给定功能,也可能有一个比其他原语更适合。在为给定目的选择加密原语时,决策过程有点像这样:
- 什么算法可以完成这项工作?→ 我可以使用 A 或 B 或 C。
- 我需要什么力量?→ 我想要 2 N个操作,所以我需要原始 A 的密钥大小 L A,原始 B 的 L B,原始C的 L C。
- 考虑到我的限制(速度、延迟、内存效率……),其中哪一个(L A -bit A 或 L B -bit B 或 L C -bit C)最好?
例如,假设您的需求是与您不信任的一方交换数据的协议。然后对称密码学无法单独完成这项工作:您需要某种方式来共享密钥。如果您让各方提前交换公钥,则 RSA 等非对称密码学可以完成这项工作。(这不是唯一的可能性,但我不会在这里详细介绍。)因此,您可以决定任何 RSA 密钥长度对您的应用程序具有合适的强度。然而 RSA 既慢又麻烦(例如,没有标准协议将 RSA 加密应用于流——主要是因为没有人打扰,因为它们太慢了)。许多涉及公钥加密的常见协议仅使用它来交换有限持续时间的秘密:某些对称加密算法的会话密钥。这被称为混合加密。同样,您可以根据所需的强度选择会话密钥的长度。在这种情况下,所涉及的两个基元往往具有相同的强度。
¹
相同的概念适用于密码学的其他用途,例如签名或散列。