我是否必须在OpenSSL中随机化密钥

时间:2015-06-08 23:04:09

标签: openssl cryptography passwords aes pkcs#5

我想在我的软件中使用AES_256_GCM。 OpenSSL wiki页面给出了一个例子:wiki page 它显示只有函数EVP_EncryptInit_ex(ctx,NULL,NULL,key,iv)使用键。
我的密钥是密码的SHA3_256哈希值(SHA3_256的Qt实现) 我想知道我是否必须使用PKCS#5来随机化密钥或函数来处理它。

1 个答案:

答案 0 :(得分:1)

  

我的密钥是密码的SHA3_256哈希值(SHA3_256的Qt实现)。

您可能应该使用OpenSSL的PKCS5_PBKDF2_HMAC_SHA1将密码消化为密钥。请参阅How to use PKCS5_PBKDF2_HMAC_SHA1()

  

它表明只有函数EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)使用密钥....我想知道我是否必须使用PKCS#5来   随机化密钥或功能处理。

字符串或文件的每次加密都应该有自己的随机IV。 IV 不能 重复。您的另一个选择是为每个字符串或文件使用随机密钥。

加密操作的输出是{IV,CipherText}对。

AES_256_GCM是个不错的选择。可以改善的几种方法之一是使用Integrated Encryption Scheme。您可以在GitHub上查看openssl-pkey-ec-iesCrypto++BouncyCastle也有Elliptic Curve集成加密方案实现,因此您还有其他选择。

务必测试互操作。他们互操作,但它需要一些旋钮转动。互操作的问题在于提供它的标准太多了,而且每个标准都是不可互操作的。

为了让您了解细微差别,ECIES调用特定变量进行哈希处理(它是给定数据字符串的长度)。一个标准表示4个八位字节的变量,另一个标准表示8个八位字节。这是唯一的区别,如果您不知道,会导致互操作问题。