【问题标题】:Keystore -- Customized SecretKey entry into Keystore from command lineKeystore -- 从命令行自定义 SecretKey 进入 Keystore
【发布时间】:2014-09-30 06:41:33
【问题描述】:

作为加密和保存数据的一部分,我们使用 AES 算法和 openssl 生成了 KEY。

openssl enc -aes-256-cbc -P -nosalt

Openssl 已生成 KEY 和 IV 值,这些值存储在纯文本文件中。由于将密钥存储在普通文档中是不安全的标准,因此考虑将其移至 Keystore。

因此,我们通过执行以下命令,使用 keytool 生成了一个 Keystore。

keytool -genseckey -keyalg AES -alias aesstore -keysize 256 -keypass changeit -storetype jceks -keystore hello.jceks -storepass changeit

这个 Keystore 拥有一个随机的密钥。因此,我们想将我们的 KEY 和 IV 值移动到 Keystore,以便我们可以从那里获取并使用它们来加密数据。我在下面找到了将自定义 KEY 值存储到 Keystore 的链接,但不是 IV 值。

http://java.dzone.com/articles/secret-key-import-java

因此,如果有人对如何将 KEY 和 IV 值存储到密钥库有任何想法,请分享。

此外,我们正在寻找一种方法,可以将自定义密钥从命令行本身传递到密钥库。

提前致谢。

【问题讨论】:

    标签: java encryption openssl aes keytool


    【解决方案1】:

    每次在操作模式中使用密钥时,IV 都应该是唯一的。因此,用密钥存储 IV 没有多大意义。如果必须,您可以使用哈希函数从密钥中提取 CBC 的 IV,但您应该只使用密钥加密一次并生成 IV。

    通常会生成一个随机 IV,并将其作为密文的前缀。当使用密码时,它们通常与随机盐配对。如果为每个加密操作生成一个新的随机盐,那么指定一个完全随机的 IV 将是虚假的。在这种情况下,IV 可能来自盐。在这种情况下,盐通常会作为密文的前缀。

    因此,您正在寻找存储持久 IV 的选项,而 IV 已被定义为针对每次加密进行更改。这就是为什么在密钥存储实现中找不到解决方案的原因。

    【讨论】:

    • 感谢您的回复。我知道 IV 是密钥存储实现中不断变化的价值。我们的问题是,目前,我们一直在使用持久的 KEY 和 IV 值来加密和保存数据。如果我们将 KEY 移动到 Keystore,我们加密的数据与之前加密的相同字符串数据不匹配,因为 IV 值不同。因此,要解决这个问题,我认为唯一的解决方案是从 Keystore 中提取密钥并在持久 IV 的帮助下加密数据。请提出建议。
    • 你应该改变你的协议,最后只存储一个密钥。但是现在你可以破解它并将IV存储为例如AES-128 密钥。然后你使用aesKey.getEncoded() 取回字节。 AES 密钥由完全随机的数据组成,并且只会返回放入的字节。
    猜你喜欢
    • 2016-08-11
    • 1970-01-01
    • 2018-01-02
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多