Encryption 确定性只需一个键,但是否更改初始化向量?

Encryption 确定性只需一个键,但是否更改初始化向量?,encryption,tink,Encryption,Tink,我正在使用deterministicaad。我想要实现的是,在很长一段时间内使用相同的密钥,但每24小时更改一次明文的密文(出于GDPR的原因) 我可以每隔24小时选择一个新的初始化向量吗?我使用的代码是: KeysetHandle keysetHandle = KeysetHandle.generateNew( DeterministicAeadKeyTemplates.AES256_SIV); DeterministicAead daead = keysetH

我正在使用
deterministicaad
。我想要实现的是,在很长一段时间内使用相同的密钥,但每24小时更改一次明文的密文(出于GDPR的原因)

我可以每隔24小时选择一个新的初始化向量吗?我使用的代码是:

KeysetHandle keysetHandle = KeysetHandle.generateNew(
                DeterministicAeadKeyTemplates.AES256_SIV);
DeterministicAead daead = keysetHandle.getPrimitive(DeterministicAead.class);
byte[] ciphertext = daead.encryptDeterministically(clearText.getBytes(), "".getBytes());

密文
确实是确定性的,所以至少这部分是好的:-)

我希望能够在BigQuery中解密cyphertext,所以自定义原语让我有点担心

注意:这不是关于金融数据之类的,而是关于能够更新密文行为的推荐模型,同时遵守用户的隐私要求。

根据定义(根据我在这些文档中阅读的内容),似乎没有办法指定IV(因为那样的话,它就不会是确定性的)

DeterministicAead
原语似乎是带有MAC的AES,没有IV

因此,我认为这里唯一的选择是旋转密钥,或者在加密之前将您自己的预加/附加盐添加到明文中,并将其存储以供解密


记住,确定性方案在语义上是不安全的。

我认为你是对的。好的是,我可以在密文(在流中)旁边添加每日变化的salt。这样,我可以在纯文本项的生命周期内,在单独的区域中保留相同的密钥。在这种情况下,不需要语义安全性。我们希望根据匿名用户行为更新推荐模型。我们不使用哈希,因为如果客户允许个性化推荐,我们可以n在多天内解密操作。是的,有意义,同意@bartvandeenen@bartvandeenen这听起来是一个不错的策略。您还可以在每天00:00使用Unix时间戳,而不是salt。