Encryption 为什么不同的AES实现会产生不同的输出?
我觉得我对散列函数和它们所包含的契约有很好的理解 输入X上的SHA1将始终产生相同的输出。您可以使用Python库、Java库或纸笔。这是一个函数,它是确定性的。我的SHA1和你的、爱丽丝的和鲍勃的做得一样 据我所知,AES也是一个函数。你输入一些值,它就会输出密文 那么,为什么会有人担心Truecrypt(例如)被“破坏”了呢?他们不是说AES坏了,他们是说实现它的程序可能坏了。理论上,AES是固态的。那么,为什么不能通过Truecrypt运行一个文件,通过“reference AES”函数运行它,并验证结果是否相同呢?我知道它绝对不是那样工作的,但我不知道为什么 AES在这方面与SHA1有什么不同?当Truecrypt AES和Schneier*AES都有相同的输入时,为什么Truecrypt AES会输出一个与Schneier*AES不同的文件 最后,我的问题归结为: My_SHA1(X)=Bobs_SHA1(X)=等 但是TrueCrypt_AES(X)!=超晶AES(X)!=VeraCrypt_AES(X)等。为什么?所有这些程序都包装了AES,但有不同的方法来确定诸如初始化向量之类的东西吗Encryption 为什么不同的AES实现会产生不同的输出?,encryption,cryptography,aes,Encryption,Cryptography,Aes,我觉得我对散列函数和它们所包含的契约有很好的理解 输入X上的SHA1将始终产生相同的输出。您可以使用Python库、Java库或纸笔。这是一个函数,它是确定性的。我的SHA1和你的、爱丽丝的和鲍勃的做得一样 据我所知,AES也是一个函数。你输入一些值,它就会输出密文 那么,为什么会有人担心Truecrypt(例如)被“破坏”了呢?他们不是说AES坏了,他们是说实现它的程序可能坏了。理论上,AES是固态的。那么,为什么不能通过Truecrypt运行一个文件,通过“reference AES”函数运
*这就是我的文件加密程序的名称,如果我在您给出的SHA-1示例中编写了一个,那么函数只有一个输入,并且任何正确的SHA-1实现在提供相同的输入数据时都应该产生与任何其他实现相同的输出 然而,对于AES来说,事情有点棘手,因为您没有明确说明“AES”的确切含义,这本身似乎是实现之间感知差异的根源 首先,“AES”不是一个单一的算法,而是一系列采用不同密钥大小(128、192或256位)的算法。AES也是一种分组密码,它接受一个128位/16字节的明文输入块,并使用密钥对其进行加密以生成一个16字节的输出块 当然,在实践中,我们经常希望一次加密超过16字节的数据,因此我们必须找到一种方法来重复应用AES算法,以便加密所有数据。天真地说,我们可以将它分成16字节的块,然后依次加密每个块,但这种模式(称为电子码本或ECB)被证明是可行的。相反,通常使用各种其他更安全的,其中大多数需要初始化向量(IV),这有助于确保使用相同密钥加密相同数据不会产生相同的密文(否则会泄漏信息) 这些模式中的大多数仍然在固定大小的数据块上运行,但我们通常希望加密不是块大小倍数的数据,因此我们必须使用某种形式的,并且对于如何将消息填充到块大小倍数的长度,存在各种不同的可能性 因此,为了将所有这些放在一起,“AES”的两个不同实现应该产生相同的输出,如果以下所有内容都相同:
- 纯文本输入数据
- 键(因此键大小)
- 四,
- 模式(包括任何特定于模式的输入)
- 填充物