2012-02-16 25 views
0

我想在密码加密文件中存储一些数据。该文件应该包含: 1)数据的有效期限 2)数据本身 到期日不一定需要加密,但需要从篡改保护(例如,整个文件可以签名)。有没有办法将密码加密数据和截止日期一起存储?

有没有办法使用OpenSSL使用一些明确定义的加密格式? 我只对在C中编程(最好使用OpenSSL API,例如EVP_ *和朋友)感兴趣,执行进程,脚本,Java,.NET,Python等是不可能的。

P.S. 我对OpenSSL API非常熟悉,但不知何故,我找不到任何好的(至少相对'干净')解决方案。

+0

我想我找到了正确的解决方案:PKCS#12格式是最接近我需要的东西。 – sirgeorge 2012-02-16 12:43:41

+0

这个问题有一个更轻的解决方案:被称为[AEAD](http://en.wikipedia.org/wiki/AEAD_block_cipher_modes_of_operation)。不幸的是,只有可用于openssl的补丁。当然,你需要密码来验证到期日期。 – 2012-02-18 01:03:40

+1

作为单独的注释,不要忘记使用PBKDF2或bcrypt来创建密钥。我建议不要直接使用密码,如果这些算法不是一个选项,至少使用salt来散列它。 – 2012-02-18 01:07:31

回答

1

我想你回答了你自己的问题。您必须对包括过期日期在内的整个文件进行数字签名,以便保护过期日期的真实性,即使是有权访问可用于解密实际数据的密码的用户。

生成例如用于签名加密文件的RSA密钥对。应解密文件的用户同时访问RSA公钥和密码。

显然有这样一个计划的几个警告。例如,添加数字签名不会阻止用户简单地忽略到期日期,数字签名或两者。

相关问题