2015-06-08 34 views
1

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

+0

这个问题似乎是脱离主题,因为它不是关于编程或开发。请参阅帮助中心的[我可以询问哪些主题](http://stackoverflow.com/help/on-topic)。也许[密码学堆栈交换](http://crypto.stackexchange.com/)或[信息安全堆栈交换](http://security.stackexchange.com/)将是一个更好的地方要问。 – jww

+0

这是关于编程,因为我想知道是否函数EVP_EncryptInit_ex(ctx,NULL,NULL,key,iv)随机化密钥本身或我必须做的。我不想通过2轮PBKDF传递我的密码。这不会是必要的。 – MKAROL

回答

1

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

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


这表明,只有功能EVP_EncryptInit_ex(ctx, NULL, NULL, key, iv)使用键....我想知道如果我要使用PKCS#5 随机键或功能需要的照顾。

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

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


AES_256_GCM是一个不错的选择。 Integrated Encryption Scheme可以改善的几种方法之一。您可以在GitHub上看看openssl-pkey-ec-iesCrypto++BouncyCastle也有椭圆曲线集成加密方案的实现,所以你有其他选择。

一定要测试互操作性。他们互通,但需要旋转一些旋钮。 interop的问题是提供它的标准太多了,而且每个标准都有些不可互操作。为了给你一个细微差别的想法,ECIES调用了一个特定的变量被哈希(它是给定数据串的长度)。一个标准代表4个八位组中的变量,另一个标准代表8个八位组中的变量。如果您不知道,这是唯一的区别,并会导致互操作问题。

+0

如果你去进行密码散列,那么你可以使用随机盐生成一个随机密钥(和IV,如果这是你想要的)。 –

+0

取而代之,我建议使用PBKDF2-HMAC-SHA-256或PBKDF2-HMAC-SHA-512,具体取决于需要多少个密钥位; OpenSSL同时支持。 –

相关问题