2010-02-25 42 views
4

我正在寻找一种算法来改变它的每个时期的密钥,仍然可以破译。
基本上我正在寻找一种方法来维护移动客户端和固定服务器之间的安全链接,即使您截获哈希或者甚至是身份验证凭证本身,他们也会在每个时期双方发生更改。
它会向任何人敲响钟声吗?
有没有更好的方法来确保即使您将以某种方式拦截身份验证凭据,它也只会对来自特定用户的某个请求有效?自修改哈希加密算法

+0

认证cardinals?当然你的意思是凭据? – Seth

+0

固定...诵读困难吮吸:( –

+0

这听起来像你听过一些太多的技术犯人,只需使用SSL - 它已经解决了你可能遇到的所有问题 –

回答

3

我推荐使用SSL,而不是自己实施一些加密算法(如果您试图保护的数据足够重要,它会被破坏!)。 SSL已经过很好的测试。使用SSL,您可以使用证书而不是登录名/密码。 SSL防止重放和中间人攻击(它在开始时使用握手来确保每个连接都使用新的会话密钥,并且双方都声称自己是谁)。

想到另一个有趣的事情是RSA的SecurID。它提供了一个每60秒更换一次的硬件密钥:http://www.rsa.com/node.aspx?id=1156

+0

我想说RSA的SecurID正是我正在寻找的,但是你是什么意思的“硬件密钥?” –

+0

如果你按照上面的链接有一个这样的硬件密钥图片(显示当前密钥的设备),我刚刚看到他们也提供软件解决方案(用于个人电脑,手机......),但我喜欢这些硬件密钥,因为它们不能被黑客窃取。 – stmax

1

这当然是可能的 - 例如,第二次世界大战期间的日本紫色密码就是这样做的。虽然这样的密码当然可能很难,但它也可能被破坏(紫色)。

原因很简单:您的发送者和接收者必须生成新的密钥,以便接收者能够同步解密消息。这基本上意味着你需要安全的随机数生成器来生成新的密钥。虽然这可能很难打破(有足够长的时间等等),但它仍然是一种非常普通的加密技术,并且依赖于拥有安全的随机数生成器。但是,一旦你拥有了这个功能,你通常不会更直接地使用发生器的输出(例如,作为Vernam密码的关键)。

10

我建议使用SSL。它被设计为对中间人攻击有合理的抵抗力,这是我认为是你的担心。

或者可能Kerberos。

不要自己编码加密算法。

+0

+1最后一行,最重要的(也是最常破的)密码学原理 –

1

我猜你在说什么是找到某种方式来定期更改算法中使用的加密密钥,以便即使发现密钥,用这个密钥加密的数据可能被解码?如果我们避免担心启动过程,那么做到这一点的一种方法就是将部分(但不是全部)后续密钥编码到用一个密钥加密的数据集中,并且当您切换密钥时,加密一个不同的密钥使用新密钥的后续密钥的一部分。例如,假设您的密钥有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,以便您可以解密下一个数据块,依此类推。您需要依次获取几个块的明文,然后才能可靠地解密其余数据,但是获取任何给定块的明文将会使其余部分的密钥更容易受到攻击。

初始设置是一个更难的问题。 SSL将是一种分配K0,K1 [1..7],K2 [2..7],...,K7 [7]的好方法。

我不是一个专业的密码学家,所以我不完全确定这是多么安全。此算法按原样提供给您,不提供任何形式的保证。