对称、非对称、散列、消息验证码密码的现实和最安全的密码是什么?

信息安全 密码学 加密 移动的 哈希 。网
2021-08-16 08:49:38

我有兴趣在 2011 年更新这两个问题:

  1. 哪种密码学最适合低功率设备(例如手机),但仍然有效?

  2. 对于 .NET 开发人员来说,哪种密码学最安全?

在 08 年 11 月,Rasmus Faber用以下回复回答了这个类似的 Stack Overflow 问题:

  • 对称密码:AES-256

  • 非对称密码:具有 4096 位密钥的RSA(我相信这是 .NET 中的最大值)或具有 571 位密钥的ECDSA(但仅在 .NET 3.5 中支持)

  • 哈希:SHA-512

  • 消息验证码:带有 SHA-512 的 HMAC

话虽这么说,这些对于大多数应用程序来说都是多余的,您应该使用 AES-128、带有 2048 位密钥的 RSA、SHA-256 和带有 SHA-256 的 HMAC。

这些建议今天仍然适用吗?

4个回答

你引用的建议有点矫枉过正。需要考虑的一点是,超过某个级别(例如在密钥大小或散列函数输出大小上),所有函数都是“用可预见的技术无法破解的”,比较它们有点微妙。说 SHA-512 比 SHA-256 “更强大”意味着您在想象 SHA-256 可能会被破坏,据我们现在和未来 40 年所知,这是不正确的(超过 40 年) ,试图设想我们可以拥有什么技术是有风险的;40 年前,没有人想象今天的互联网,但大多数人认为到 2010 年我们都会驾驶飞行汽车)。

AES-128 已经足够安全,而且更便宜(AES-256 使用 14 轮,而 AES-128 使用 10 轮)。

目前最大的破坏 RSA 密钥是一个 768 位模数,它花费了一些巨大的努力(四年,真是大脑袋)。1024 位密钥被认为可用于短期安全,但鼓励使用更大的密钥。2048 位密钥是合适的。使用两倍大的密钥意味着签名或解密工作量增加 8 倍,因此您不想过度使用它。有关RSA 密钥长度如何与安全性相关的调查,请参阅此站点。

256 位曲线上的 ECDSA 已经实现了“牢不可破”的安全级别(即,与使用 128 位密钥的 AES 或针对冲突的 SHA-256 大致相同的级别)。注意素数域有椭圆曲线,二元域有曲线;哪种最有效取决于所涉及的硬件(对于类似大小的曲线,PC 会更喜欢素数字段上的曲线,但使用二进制字段更容易构建专用硬件;较新的 Intel 和 AMD 处理器上的CLMUL指令可能会改变)。

SHA-512 使用 64 位操作。这在 PC 上很快,而在智能卡上则不那么快。SHA-256 通常更适合小型硬件(包括家庭路由器或智能手机等 32 位架构)。

目前,廉价的 RFID 系统的功率太低,无法使用上述任何一种(换句话说,RFID 系统可能没有想象中的那么便宜)。RFID 系统仍然使用经常存在安全问题的自定义算法。另一方面,手机具有足够的 CPU 能力,可以使用 AES 或 RSA 进行适当的加密(是的,即使是便宜的非智能手机)。

引用的答案是我对.NET中最安全的加密的回应。

我的建议(针对高功率和低功率设备):

  • 对称密码:AES-128

  • 非对称密码:具有 2048 位密钥的 RSA 或具有 256 位密钥的 ECDSA/ECDH

  • 哈希:SHA-256

  • 消息验证码:带有 SHA-256 的 HMAC

  • 流密码:CTR 模式下的 AES-128

在安全方面,这些建议仍然有效,我也会提出同样的建议。

对于非对称密码,您真正关心的是三件事:加密、密钥交换和签名。RSA 既可以是加密方案,也可以是签名方案,而 ECDSA 是专门的签名。然而,也有加密和密钥交换的椭圆曲线版本(虽然不确定什么是公共领域)。也就是说,所有三个的参数大小都是相同的。

唯一需要注意的是 SHA-256/512 将很快被替换,但在这种情况下“很快”将是 2012 年。

关于低功率,这实际上取决于低功率。如果用手机,你的意思是智能手机,所有这些都是合适的。对于智能卡、RFID、传感器网络等,情况就不同了。此外,大多数低功率算法不会在标准库中。但是,我会引导您使用“不要矫枉过正”最后一句中的参数大小。

为了安全到 2030 年,NIST 的精明人士建议至少使用 SHA-224、2048 位用于 RSA 或 DSA、224 位 EDCSA 和 AES-128 或 3 密钥三重 DES。

根据他们的工作,截至 2010 年底,美国政府弃用了以下算法:SHA-1、1024 位 RSA 或 DSA、160 位 ECDSA(椭圆曲线)、80/112 位 2TDEA(两个密钥三重 DES )

有关更多信息,请参阅这篇文章及其引用的 NIST 文档:http: //securitymusings.com/article/1587/algorithm-and-key-length-deprecation