我如何知道我的加密算法是否足够强大?

信息安全 加密
2021-09-11 06:42:06

我正在使用 ruby​​ 并具有以下加密算法:

 @@secret_key = Digest::SHA256.hexdigest(key)
 encrypted = Encryptor.encrypt("encrypt this", key: @@secret_key)
 encoded = Base64.encode64(encrypted).encode('utf-8')
 StoreInDB(encoded)

我要解决的问题:如果黑客控制了我的数据库,他们将无法对存储的“编码”列进行逆向工程。

这够强吗?本质上,编码列是一个 user_id。

2个回答

当问题是:

我如何知道我的加密算法是否足够强大?

那么可能的简短答案是:

  • 它不强。
  • 足够强大
  • 它没有抓住重点。

当专业密码学家设计算法时,他们总是假设他们产生的东西很弱。他们不会相信它,除非他们的“同伴”密码学家(他们实际上是他们的竞争对手,而且是一群相当凶猛的人,尽管通常幽默)认真研究过它。对于非密码学家来说,不那么谨慎是不明智的。

您的算法可能足够强大,其中“足够”意味着“足够不成为系统中的最弱点”。制作一个非常弱的加密算法需要付出特别的努力,以至于攻击者发现值得提前破解它(一个例子是DVD 上使用的CSS,但这仍然很少见)。

您的算法可能没有抓住重点,因为大多数安全性与密码学无关;密码算法发挥着重要作用,但范围很窄。我整天都在向人们解释他们在系统中撒的神奇的加密粉尘并不像他们想象的那么神奇(例如,不,加密 SQL 数据库并不能阻止攻击者通过修改磁盘上的文件来成功更改其内容)。

的算法(您根本没有提供任何细节)可能实际上很强大,并且满足了与您的情况相关的一点。有可能,但经验表明,不太可能。

好的 - 首先你正在编码一个“user_id”(听起来像用户名)这听起来很奇怪,我认为这是一个相对公开的信息 - 而不是密码或类似的秘密 - 但问题是真的是关于加密,所以我离题了......

任何加密算法的“足够强大”都是根据在没有密钥的情况下解密文本需要多长时间来评定的(假设您已经以一种好的方式隐藏了您的密钥)。除了经典的 One Time Pad 之外,没有任何算法是“完美的”——这是一个很好的学术示例,但在 99% 的情况下并不那么有用,因为它需要与加密数据相同大小的密钥空间,因此您将不断生成并存储新密钥——这引发了它自己的安全问题。

所以..任何现实的算法都被认为是“足够强大”,如果它需要更长的时间来解密没有密钥的材料而不是信息的价值。所以 - 如果信息是我明天的午餐计划,很可能我的加密算法可能只需要延迟攻击者 24 小时,到那时,事件就会结束,没关系,因为你找不到我不再有……但如果我的午餐是一些历史性事件或其他什么,这可能会很重要。

所以加密破解计算的因素包括: - 算法的弱点是什么 - 一些算法可以有更容易解密的弱密钥集,其他的可以证明增加一点价值(某些形式的 DES)

  • 密钥空间的大小是多少 - 如果所有密钥都同样安全,那么破解算法的明显方法是尝试给定大小的每个可能的密钥 - 多少密钥是存储大小的一个因素以及密钥的性质被选择(例如,非对称加密中使用素数)

  • 测试解密有多难 - 尝试使用给定密钥选择的测试需要多长时间?

所以......在一个简单的算法中,破解时间可以是:

# of keys in key space X time to test a key

这通常取决于您可以合理地期望黑客拥有多少资源?一个小型组织可能有 10-50 台机器。一个民族国家可能有数百万。威胁的性质是什么——他们可以合理地拥有多少计算能力?您不一定认为它受到他们在百思买的购买力的限制——如果他们在技术上很复杂,他们就会在无辜的用户机器上拥有一个大规模并行的恶意软件僵尸网络来进行计算。