对称AES加密概念

时间:2018-12-06 10:54:59

标签: encryption aes

我有一个在Django上运行的网站项目。它的一项功能需要存储第三方网站的用户/密码。因此,它需要对称加密,因为它需要在自动化过程中使用这些凭据。 我知道,存储凭据绝不是一个好主意,但是在这种情况下,没有其他选择。 到目前为止,我的想法是创建一个Django应用程序,该应用程序将保存和使用这些密码,而不执行其他任何操作。有了这个,我可以拥有2个“ Web服务器”,它们将不会接收来自外部的任何请求,而只能通过Redis或其他方式获得任务。因此,我可以在一定程度上隔离它们(它们是唯一有权访问此额外数据库的服务器,它们将不处理任何Web请求,等等) 第一个问题:这个计划听起来是否可靠,还是存在重大缺陷?

第二个问题是关于加密本身的: AES的所有工作都需要一个加密密钥,好的,必须以某种方式“保护”。但是我对IV更感兴趣。 每个用户可以在额外数据库中保存一个或多个凭据集。在用户ID上使用某种散列哈希或生成每个用户自定义IV的方法是一个好主意吗?大多数时候,我看到IV只是随机生成的。但是然后,除了密钥,我还必须将它们存储在某个位置。 对我来说,这里有些混乱。我需要密钥和IV才能解密,但是我将以相同的方式“存储”它们。因此,如果有人受到侵害,IV可能不会吗?如果我通过已知程序即时生成IV,那会有什么不同?问题是,每个人都可以知道IV,如果他们知道他们的用户ID,因为代码将是开源的。...

最后,我需要一些指导,以指导如何处理每个用户的关键和最佳唯一IV。到目前为止非常感谢您阅读:-)

1 个答案:

答案 0 :(得分:2)

  

此计划听起来是否可靠,还是存在重大缺陷?

存储使用凭证的需要在设计上是一个缺陷,至少我们都感谢您意识到这一点。

最好在规定的条件下使用单独的凭证服务和专用数据存储区。我不喜欢存储用户凭据的选项,但是让我们跳过学术讨论到实际的事情。

  

AES的所有工作都需要一个加密密钥,好的,需要以某种方式“保护”。

是的,这是整个问题。

  

生成每个用户的自定义IV?

IV允许重复使用同一密钥进行多种加密,因此有效地,对于每个密文,它都必须是唯一的(如果用户有多个密码,则每个密码都需要一个IV)。通常,将IV放在密文之前,因为需要解密它。

  

如果我通过已知程序即时生成IV,那会有所不同吗?

IV本身不需要保密。

某些加密模式要求IV不可预测(例如CBC模式),因此最好将IV生成为随机数。有一些模式使用IV作为计数器来仅加密/解密部分数据(例如CTR或OFB),但是仍然要求IV对于每个密钥和加密都是唯一的。