密码学3 如何设置安全强度

247 阅读6分钟

密码学之安全强度

在密码学这么讲究量化的领域,有很多可以衡量算法的破解难度的指标,其中最常用的便是安全强度。

什么是安全强度

在密码学中,安全强度通常使用“位”(字节位)来表述。比如说,安全强度是 32 位。这 里的“位”是什么意思?N 位的安全强度表示破解一个算法需要 2^N(2 的 N 次方) 次的运算。

安全强度为何用位表示?
因为用位做单位,我们就可以很方便地比较不同算法的安全级别,在同一个安全级别上组合不同的安全算法。比如说,MD5 的安全强度是不大 于 18 位,1024 位的 RSA 密钥的安全强度是 80 位, SHA-256 算法的安全强度是 128 位。

算法组合的木桶效应
也许我们会想到将几种算法组合在一起会怎么样,实际上这个组合的强度并不高,因为组合的强度,由最弱的算法和密钥决定。

安全强度与破解难度的计算
MD5的安全强度最多 18 位,也就是说,我们运算 2^18=262144 次就 可以破解,按现在的计算机一毫秒一次运算的速度计算,需要 262144 毫秒,折合 4.34 分钟。

那 128 位的安全强度呢?假设我们现在有一台速度快 1000 倍的计算机,它能做到 1 纳秒 运算一次。如果我们做类似上面的运算,即使我们同时使用 10 亿台计算机,破解它也需要 一千万个十亿年。80 位的安全强度,同样的条件,破解大概需要 38 年。

从上面的计算结果来看,我们可以发现虽然只是稍微增加几十位的安全强度,破解难度就有巨大的提升。因为,破解难度是安全强度位数的指数(2^N)。所以,在实践中,我们应该优先选择安全强度足够高的算法。

安全强度会变吗?

每一个密码算法诞生的时候,都有一个理论上的设计安全强度。注意,理论上的意思就是 有可能与实际情况不符

比如单向散列函数 SHA-1 在 1993 年发布的时候,它的设计安全强度是 80 位。12 年后,在 2005 年 2 月,中国密码学家王小云教授带领的研究团队发现,SHA-1 的安全强度小于 69 位,远远小于设计的 80 位。从此,SHA-1 的安全强度开始一路衰减。

很快,2005 年 8 月,王小云教授的团队又改进了破解算法,发现 SHA-1 的安全强度只有 63 位了。 2015 年 10 月,密码学家马克·史蒂文斯(Marc Stevens),皮埃尔·卡普曼(Pierre Karpman)和托马斯·佩林(Thomas Peyrin)的研究团队发现 SHA-1 的安全强度只有 57.5 位。 更要紧的是,他们估算,如果使用云计算,按照 2015 年亚马逊 EC2 云计算的定价和算力,57 位的安全强度,2015 年的破解成本大致是 10 万美元,你可以感受下密码强度和破解成本的数字。

2020 年 1 月,密码学家盖坦·勒伦(GaëtanLeurent)和托马斯·佩林(Thomas Peyrin) 又发现, SHA-1 的攻击复杂度是 63.4 位,攻击成本大约为 4.5 万美元。 根据上面的数字,我们可以感受到,一个 64 位安全强度的密码算法,它现在的破解成本大概是 5 万美元左右。不同类型的算法,破解成本也许有很大偏差,但是我们依然可以大 致估算攻击成本。5 万美元,无论是对于一个有组织的研究机构,还是犯罪集团,都是一 个很小的数目。 这可以说明什么?如果一个系统的安全强度低于 64 位,它的安全性几乎形同虚设。

所以,算法的安全强度不是一成不变的,几乎所有密码学算法的安全强度都会衰减。今天看起来安全的算法,明天也许就有破解的办法。所以,一个好的安全协议,应该考虑备份计划和应急计划。

使用多大的安全强度?

业界内最新推荐的三个常用指标:

image.png

通过参考上述的三个指标,我们可以大致估算出我们需要的安全强度。

假设,我们现在要设计一个新系统,预期寿命十年,也就是,我们要从 2020 年开始运营,运营到 2030 年结束。而且我们还要保证到 2030 年,这个系统还是足够安全的。

首先,我们按照 NIST 的建议,2030 年后,112 位的安全强度已经不能使用了,所以,如果我们遵守 NIST 的推荐指标,这个系统就不建议选择 112 位安全强度的算法。

在 BSI 建议里,2030 年之前够用的话,我们应该选择 256 位的安全强度。

我们再看 ECRYPT-CSA 的建议,128 位的安全强度只能用于 2028 年之前。到了 2030 年,128 位的安全强度就不能满足 ECRYPT-CSA 的建议了。所以,如果我们遵循 ECRYPT-CSA 的建议,这个系统就需要使用 256 位的安全强度。

量子计算时代的担忧
ECRYPT-CSA 的建议为什么这么保守?其实,这种保守的姿态背后,隐含了对量子计算时代来临的担忧。在量子计算时代,128 位的安全强度稍显脆弱,可是 256 位的安全强度还是足够的。虽然量子时代还没有到来,但是我们现在就要开始考虑量子时代的挑战了。

所以我们可以得出一个结论,128位安全强度目前来说是够用的,,但是从长远来看,一个长期运营的系统,如果性能瓶颈不是问题,现在就可以开始考虑使用 256 位强度的密码算法了。