我正在寻找一种算法来在每个时期更改它的密钥,并且仍然可以被破译
基本上我正在寻找一种方法来维护移动客户端和固定服务器之间的安全链接,即使您截获哈希甚至身份验证凭据本身,它们也会在每个时段都在双方都发生变化。
它对任何人都响了吗?
是否有更好的方法来确保即使您将以某种方式拦截身份验证凭据,它只对某个用户的某个请求有效?
答案 0 :(得分:10)
我建议只使用SSL。它被设计为对中间人攻击有合理的抵抗力,这是我认为你关心的问题。
或者也许是Kerberos。
请勿自行编码加密算法。
答案 1 :(得分:3)
我建议使用SSL,而不是自己实施一些加密算法(如果您要保护的数据足够重要,它将被破坏!)。 SSL经过了充分测试。使用SSL,您可以使用证书而不是登录/密码。 SSL防止重放和中间人攻击(它在开始时使用握手来确保每个连接都使用新的会话密钥,并且双方都是他们声称的那些人。)
另一个有趣的事情是RSA的SecurID。它提供了一个每60秒更改一次的硬件密钥:http://www.rsa.com/node.aspx?id=1156答案 2 :(得分:1)
这当然是可能的 - 例如,第二次世界大战期间的日本紫色密码就是这样做的。虽然这样的密码当然很难,但它也可以被打破(紫色是)。
原因很简单:您的发送方和接收方必须相互同步生成新密钥,以便接收方解密消息。这基本上意味着你需要像安全随机数生成器这样的东西来生成新的密钥。虽然这可能很难打破(足够长的时间段等),但它仍然是一种非常普通的加密技术,并且取决于拥有一个安全的随机数生成器。但是,一旦你有了这个,你通常不会直接使用生成器的输出(例如作为Vernam密码的密钥)。
答案 3 :(得分:1)
我猜你正在谈论的是找到一些方法来定期更改你算法中使用的加密密钥,这样即使发现密钥,那么只有用该密钥加密的数据才能解码?如果我们避免担心启动过程,那么一种方法是对用一个密钥加密的数据集中的部分(但不是全部)后续密钥进行编码,并在切换密钥时加密不同的密钥。使用新密钥的后续密钥的一部分。
例如,假设您的密钥是8个元素宽(其中元素可以是字节,或32位字,或其他),我们将标记用于加密任何给定数据块的密钥,如Kn,其中'n'是用该密钥加密的数据块。我们将对第一个元素的Kn [0]进行索引,对第8个元素说Kn [7]。我们也称这个数据块为Dn。然后,明文Dn将包括Kn + 1 [0],Kn + 2 [1],Kn + 3 [2],......,Kn + 8 [7]。如果你能够解密Dn-7 .. Dn,那么你将完全重建Kn + 1,这样你就可以解密下一个数据块,依此类推。在可以可靠地解密其余数据之前,您需要按顺序获取几个块的明文,但是获取任何给定块的明文将更容易攻击其余块的密钥。
初始设置是一个更难的问题。 SSL将是分发K0,K1 [1..7],K2 [2..7],...,K7 [7]的好方法。
我不是专业的密码学家,所以我不能完全确定这是多么安全。此算法按原样提供给您,没有任何形式的担保。