如何使用 Google Tink 创建对称加密密钥?

Wil*_* P. 8 cryptography tink

我有一个密钥(比如)“thisist0psecret”,我想将其用作Google Tink 库的对称加密/解密密钥。我很困惑,我无法做这个简单的事情。我可以生成新密钥(使用各种模板 AES128_GCM 等),将它们序列化,然后使用 KeysetReader 读取它们。但是,对于我的一生,我无法弄清楚如何使用我指定的特定密钥字节创建对称密钥。

例如,我可以使用 Tink 执行以下操作:

KeysetHandle ksh = KeysetHandle.generateNew(AeadKeyTemplates.AES128_GCM);
Aead aead = AeadFactory.getPrimitive(ksh);
String pt = "hello, world!";
byte[] encbytes = aead.encrypt(pt.getBytes(), null);
byte[] decbytes = aead.decrypt(encbytes, null);
String orig = new String(decbytes);
assert(pt.equals(orig));
Run Code Online (Sandbox Code Playgroud)

但我想将对称密钥字符串设置为我指定的一组字节,例如“thisist0psecret”,然后使用将进行解密的用户的公钥加密此密钥。

这里的任何 Google Tink 专家都可以阐明一些观点吗?

小智 7

我是 Tink 的首席开发人员。

如果你的key是随机生成的,可以直接使用微妙的API,见:https : //github.com/google/tink/blob/master/java_src/src/main/java/com/google/crypto/tink/subtle /AesGcmJce.java。

不推荐这样做,因为微妙层可能会在没有通知的情况下发生变化(认为它在 Tink 的历史中相对稳定)。

如果您的密钥是密码,您希望使用 Scrypt 或 PBKDF2 之类的东西从中派生出一个密钥。我们尚未在 Tink 中支持本机基于密码的加密,请提交功能请求,我们将了解如何提供帮助。