如何检查AES算法的有效性?

时间:2018-07-31 06:01:01

标签: algorithm validation encryption aes

我使用执行AES编码的代码,并且使用了10多年。我不知道此代码是否编写正确的问题!该算法编写于15年前,非常小(只有一百行),可以在ios / android / windows 32bit-64bit / MacOs上编译。

例如,在代码中我看到了:

  • 在将密码发送给加密算法之前,密码已用MD5哈希(因此为16个字节)。我当然可以轻松更改此部分,但还可以使用其他什么算法? SHA2吗?

  • iV用当前时间初始化,然后压缩输出的第一个块是iV(因此它是公共的)。不知道是好是坏!

  • 我还需要检查什么?

现在我如何检查输出的有效性,以了解一切是否按预期工作?

1 个答案:

答案 0 :(得分:1)

  

使用执行AES编码的代码,而我使用它已有10多年的历史。我不知道这段代码是否写得好!

这称为加密。从问题(约100行)开始,我假设您想验证使用AES加密而不是AES加密本身的代码。我写了一个小blog about encryption。它专注于Java,但是原理是通用的

  

在将密码发送给加密算法之前,已用MD5(因此以16个字节)对密码进行了哈希处理。我当然可以轻松更改此部分,但还可以使用其他什么算法? SHA2吗?

您的意思是-密码的哈希用作加密密钥吗? (我经常看到) 如果是这样,今天可能还不够。如果密码是人为提供的(不是具有高熵的长随机数据),则最好使用一些PBKDF从密码生成加密密钥。

  

iV用当前时间初始化,然后压缩输出的第一个块是iV(因此它是公共的)。不知道是好是坏!

IV必须是唯一的,并且可以是公开的。某些加密模式(例如CBC)要求IV不可预测(随机)

  

我还需要检查什么?

您可以检查AES实现本身是否由某些成熟的库/框架提供,以防止某些旁通道攻击。

同样,应该对数据进行身份验证(签名,附加哈希,..),以防止恶意(称为authenticated encryption

  

现在我如何检查输出的有效性,以了解一切是否按预期工作?

好吧-只有您才能知道输出是否正确。