Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cryptography 将sha2/sha3截断为16字节是否比使用crc32更糟糕,因为crc32本身提供16个字节作为开始?_Cryptography_Crc32_Sha2_Sha 3 - Fatal编程技术网

Cryptography 将sha2/sha3截断为16字节是否比使用crc32更糟糕,因为crc32本身提供16个字节作为开始?

Cryptography 将sha2/sha3截断为16字节是否比使用crc32更糟糕,因为crc32本身提供16个字节作为开始?,cryptography,crc32,sha2,sha-3,Cryptography,Crc32,Sha2,Sha 3,我在CBC模式下使用AES128,我需要一个16字节的密钥,所以我想知道,如果使用sha2或sha3,然后将其截断为16字节(从左开始取前16个字节),是否会使sha2/sha3比crc32弱,crc32会给我16个开箱即用的字节。加密安全哈希的每一位实际上都是随机的(即,独立于所有其他位)。非加密散列不适用于此。此属性对于安全密钥至关重要。您应始终使用加密散列进行密钥派生 截断长安全散列是创建较短长度的安全散列的一种完全可以接受的方式。您也可以选择任何比特子集,而不仅仅是最重要或最不重要的比特

我在CBC模式下使用AES128,我需要一个16字节的密钥,所以我想知道,如果使用sha2或sha3,然后将其截断为16字节(从左开始取前16个字节),是否会使sha2/sha3比crc32弱,crc32会给我16个开箱即用的字节。

加密安全哈希的每一位实际上都是随机的(即,独立于所有其他位)。非加密散列不适用于此。此属性对于安全密钥至关重要。您应始终使用加密散列进行密钥派生

截断长安全散列是创建较短长度的安全散列的一种完全可以接受的方式。您也可以选择任何比特子集,而不仅仅是最重要或最不重要的比特。如果这不是真的,那么原始散列本身就不安全,因为它会表明输出中存在一些非随机性

SHA-2和SHA-3打算成为加密安全的散列(在这一点上,我们相信他们是)。CRC甚至不打算成为加密安全的散列

如果输入密钥材料本身不是随机的,那么像SHA系列这样的快速散列可能会受到暴力的影响。如果是这样,那么您需要使用密钥拉伸以及散列,例如PBKDF2

但是你不应该使用CRC来做任何事情,它不是一个安全的散列

有关更多讨论,请参阅和

我在CBC模式下使用AES128,我需要一个16字节的密钥,所以我想知道使用sha2或sha3,然后将其截断为16字节(从左边开始取前16个字节)是否会使sha2/sha3比crc32弱,crc32提供了16个现成的字节

问题不清楚CRC或SHAx的输入是如何生成的。OP清除了更多。因此,我在下面部分提供了答案

我的意思是,不管输入是什么(假设输入是偶数abcd),将sha2/3截断为16字节比使用crc32更安全

首先,忘掉CRC,它不是一个加密哈希函数,忘掉它吧

当输入空间较小时,会出现哈希函数的映像前攻击的特殊情况。攻击者可以尝试所有可能的组合来生成密钥。您可以在本加密中阅读更多详细信息。SE Q/a

忘记了小的输入空间吧!像这样的实体很容易达到2^64。也就是说8字节

应该生成像or这样的强密码。这将为您提供易于记住的强密码。另请参阅

一旦你生成了一个好的密码,你就可以将它传递给穷人,以便更好地使用。由于你的输入材料很好,你可以跳过HKDF的
扩展部分。你也可以使用基于密码的密钥派生函数,如Scrypt、PBKDF2和。在这种情况下,选择Argon2,因为它是密码哈希的赢家2015年7月举行了一次国际竞争

我只是想用AES 128对游戏中的声音数据进行加密,我只是想知道,与使用整个crc32输出相比,仅使用16字节的散列密码密钥和sha2/3是否更安全。我从未使用过您提到的任何其他方法

为了正确使用CBC模式,您也需要一个nonce。您也可以使用具有不同信息/nonce的HKDF或PBKDF2、Argon2等来派生nonce。这是非常常见的

注意有关CBC的信息

  • 同一密钥下的nonce必须是唯一的,即(key,IV)对
  • CBC IV必须是,但是,据我所知,这不是你的情况
  • CBC在服务器端容易受到oracle攻击。在您的情况下,这也是不可能的
  • CBC模式只能提供CPA安全性,没有完整性和身份验证。要提供完整性和身份验证,请使用具有不同密钥的HMAC,或使用组合模式
  • 使用加密模式,如AES-GCM和ChaCha20-Poly1305。正确使用,最好使用ChaCha20-Poly1305或XCHACHAHA20-Poly1305,以获得更好的非随机生成

但是crc32会给您32位(4字节),当然?如果您需要将数据转换为固定长度的密钥,请使用密钥派生函数(例如)正在将此标记移到crypto.stackexchange.com(它所属的位置)。我在那里找不到足够接近的副本。这不是一个可回答的问题,因为您如何派生密钥?它是密码,是随机生成的吗?CRC或SHAx的输入是什么?您的环境中空间有限吗?您的IV如何?您的问题不清楚是的。@r3mainer我使用UTF8是为了可能与之有关吗?@kelalaka我的意思是不管输入是什么(假设输入是偶数abcd),将sha2/3截断为16字节是否比使用crc32更安全。2.段不一定在所有情况下都是正确的。实际上,这个问题无法正确回答,因为CRC/SHAx的输入未知,