kle*_*fas 3 encryption cryptography encryption-symmetric
我想知道是否有一些强大的(如AES等)加密功能,如下所示:
Key1(Key2(明文))== Key2(Key1(明文))例如"可交换"(也需要解密 - 你需要两个密钥,无关紧要)
谢谢
通过将任何块加密算法置于CTR模式,可以轻松完成此操作.使用单个键的点击率模式如下所示:
ciphertext = plaintext XOR cipher(key, counter)
Run Code Online (Sandbox Code Playgroud)
其中,计数器初始化为IV,并为每个块递增.解密是完全相同的操作.因此,如果您使用两个密钥进行两次CTR加密,则会得到:
ciphertext = plaintext XOR cipher(key0, counter) XOR cipher(key1, counter)
Run Code Online (Sandbox Code Playgroud)
由于XOR是可交换的,因此您可以按任意顺序对其进行反转.
这具有很好的属性,您不需要在同一位置拥有所有密钥.考虑一下:Alice,Bob和Charlie正在参与一个协议,其中Charlie将对Alice和Bob的数据进行双重加密(该协议将假设所有点对点通信都通过类似SSL的通道来保护):
后来,要解密:
这里签名的元组和DH交换的目的是确保Alice和Bob不会通过向其发送不同的IV来欺骗解密错误的流.这可能与您的使用方案无关.此外,Charlie的角色可以由Alice或Bob在真实实现中扮演.
如果您担心CTR模式的潜在安全风险,另一个选择是对会话密钥使用CTR模式加密,而后者又用于在更正常的模式下加密,例如CBC.那是:
sessionkey = RANDOM
IV_0 = RANDOM
IV_1 = RANDOM
enc_sessionkey = sessionkey XOR cipher(key0, IV_0) XOR cipher(key1, IV_0)
ciphertext = enc_sessionkey + IV_0 + IV_1 + cipherCBC(IV_1, sessionkey, plaintext)
Run Code Online (Sandbox Code Playgroud)
虽然其他一些海报已经对秘密共享发表了评论,但如果您不需要只需要一部分密钥进行解密的属性,这就太过分了 - 即,使用秘密共享,您可以使用三个密钥加密,但只需要任何两个解密.如果您想要所有密钥,秘密共享方案并不是必需的.
| 归档时间: |
|
| 查看次数: |
3239 次 |
| 最近记录: |