Encryption 有两个密钥对称交换加密函数吗?
我想知道是否有一些强大的(如AES等)加密功能可以这样工作:Encryption 有两个密钥对称交换加密函数吗?,encryption,cryptography,encryption-symmetric,Encryption,Cryptography,Encryption Symmetric,我想知道是否有一些强大的(如AES等)加密功能可以这样工作: 对称的 2个键:纯文本->2个键->加密文本,但不能影响键的顺序,即 Key1(Key2(明文))==Key2(Key1(明文)) e、 g.“交换的” (解密也需要-您需要两个密钥,顺序无关紧要) 谢谢你说的是秘密分裂。是的,有很多关于它的研究。维基百科将是一个很好的起点。您可以制作一个交换加密算法,但加密方法必须限于。这将限制加密功能的强度,因为它大大减少了可能使用的加密方法。因此,如果一个黑客想要破坏你的算法,而新算法是可交
- 对称的
- 2个键:纯文本->2个键->加密文本,但不能影响键的顺序,即
谢谢你说的是秘密分裂。是的,有很多关于它的研究。维基百科将是一个很好的起点。您可以制作一个交换加密算法,但加密方法必须限于。这将限制加密功能的强度,因为它大大减少了可能使用的加密方法。因此,如果一个黑客想要破坏你的算法,而新算法是可交换的,这将大大提高他破坏它的机会,因为他需要尝试的解密方法会减少。然而,这对于您的目的来说可能是好的,这取决于您预期的黑客攻击量
此外,我不确定“秘密分裂”是否是你想要的,正如atk所提到的。我简要地看了一下,但从我所看到的(至少对于基本情况)来看,您不能单独执行操作,因为需要同时提供两个密钥来执行加密/解密操作。换句话说,您不能使用一个人的密钥调用encrypt来获得可以使用第二个密钥调用encrypt的结果。但是,如果您同时拥有两个密钥,这可能是一种很好的尝试方法。这不是一种交换加密,但有一些经过验证的秘密共享算法(注意,这与“密钥协议”不同。) 两种最著名的方法是Shamir和Blakley。一般来说,这些算法接受一个秘密并产生许多“共享”。当有足够的可用共享达到阈值时,可以恢复秘密。在最简单的情况下,需要两个共享,但阈值可能更高 要用简单的术语解释沙米尔的方法,请考虑图形上的一条线。如果你知道这条线上的任何两点,你就知道这条线的一切。任何字节字符串,如对称密码的加密密钥,在base-256中都只是一个大数字。Shamir的算法将此秘密视为直线的“y-截距”(x=0时直线的y坐标)。然后随机选择直线的斜率。计算x=1、x=2、x=3……处直线的y坐标,并将每个点指定给不同的股东 如果这些股东中的任何两人聚在一起,他们可以通过他们的两点画一条线,回到y轴。它与轴相交处的y坐标是原始机密。然而,每个股东只有一点;单凭他们自己,他们猜不出关于原始秘密的任何事情 阈值可以通过增加多项式的次数来增加。例如,如果使用抛物线代替直线,则需要三个共享,而不是两个共享 真正的实现还有很多,比如使用模块化算法,但这就是它背后的概念。Blakley的方法类似,但它使用平面的交集来编码秘密
您可以使用的实现,这可以通过将任何块加密算法放入。单键CTR模式如下所示:
ciphertext = plaintext XOR cipher(key, counter)
其中计数器初始化为,并为每个块递增。解密是完全相同的操作。因此,如果您使用两个密钥对CTR加密两次,您将得到:
ciphertext = plaintext XOR cipher(key0, counter) XOR cipher(key1, counter)
由于XOR是可交换的,所以可以按任意顺序反转它
这有一个很好的特性,您不需要将所有密钥都放在同一位置。考虑:Alice、Bob和Charlie正在参与一个协议,其中Charlie将对Alice和Bob的数据进行双重加密(该协议将假定所有点对点通信都通过常见的类似SSL的通道进行保护):
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)
尽管其他一些海报对秘密共享发表了评论,但如果你不需要解密只需要密钥子集的属性,那么这就太过分了——也就是说,在秘密共享中,你可以用三个密钥加密,但只需要任意两个密钥就可以解密。如果您需要所有密钥,请使用秘密共享