我正在寻找一种算法,可以在每个周期更改它的密钥并仍然可以被解密。
基本上,我正在寻找一种方式来在移动客户端和固定服务器之间保持安全链接,即使你拦截了哈希或甚至是认证凭据本身,它们也会在每个周期在双方都发生变化。
这是否让任何人想起了什么?
是否有更好的方法来确保即使您以某种方式拦截了认证凭据,它只对特定用户的特定请求有效?
我正在寻找一种算法,可以在每个周期更改它的密钥并仍然可以被解密。
基本上,我正在寻找一种方式来在移动客户端和固定服务器之间保持安全链接,即使你拦截了哈希或甚至是认证凭据本身,它们也会在每个周期在双方都发生变化。
这是否让任何人想起了什么?
是否有更好的方法来确保即使您以某种方式拦截了认证凭据,它只对特定用户的特定请求有效?
我建议仅使用SSL。它被设计为相对抵御中间人攻击,这也是我认为你关心的问题。
或者也可以考虑使用Kerberos。
不要自己编写加密算法。
这是完全可能的 - 例如,在第二次世界大战期间,日本紫色密码就是这样做的。虽然这样的密码确实很难,但也可以被破解(紫色密码就被破解了)。
原因相当简单:发送方和接收方必须同步生成新密钥,以便接收方解密消息。这基本上意味着您需要像安全的随机数生成器之类的东西来生成新密钥。虽然这可能很难被破解(具有足够长的周期等),但它仍然是一种相当常见的加密技术,并且取决于具有安全随机数生成器。然而,一旦您拥有了它,通常使用生成器的输出更直接(例如作为Vernam密码的密钥)并不会带来太多好处。
我猜你说的是找到一种方法,定期更改算法中使用的加密密钥,这样即使发现了一个密钥,也只有用该密钥加密的数据才能被解码?如果我们不考虑启动过程,那么一种方法是在使用一个密钥加密的数据集中编码部分(但不是全部)后续密钥的一部分,并在切换密钥时,使用新密钥加密后续密钥的不同部分。
例如,假设您的密钥宽度为8个元素(其中一个元素可以是字节、32位字或其他),我们将标记用于加密任何给定数据块的密钥为Kn,其中“n”是使用该密钥加密的数据块。我们将通过说Kn [0]表示第一个元素来索引密钥的元素,直到Kn [7]表示第八个元素。我们还将称该数据块为Dn。然后,明文Dn将包括Kn + 1 [0],Kn + 2 [1],Kn + 3 [2],...,Kn + 8 [7]。如果您能够解密Dn-7..Dn,则完全重构Kn + 1,以便您可以解密下一个数据块,依此类推。在可靠地解密其余数据之前,您需要连续获取几个块的明文,尽管获取任何给定块的明文都会使攻击其余密钥更容易。我不是专业的密码学家,所以我不能完全确定这个算法有多安全。该算法按原样提供给您,不附带任何形式的保证。