自修改哈希加密算法

4

我正在寻找一种算法,可以在每个周期更改它的密钥并仍然可以被解密。
基本上,我正在寻找一种方式来在移动客户端和固定服务器之间保持安全链接,即使你拦截了哈希或甚至是认证凭据本身,它们也会在每个周期在双方都发生变化。
这是否让任何人想起了什么?
是否有更好的方法来确保即使您以某种方式拦截了认证凭据,它只对特定用户的特定请求有效?


认证卡?你肯定是指凭据吧? - Seth
听起来你看了太多科技惊悚小说了。只需要使用SSL - 它已经解决了你可能会遇到的所有问题。 - Nick Johnson
4个回答

10

我建议仅使用SSL。它被设计为相对抵御中间人攻击,这也是我认为你关心的问题。

或者也可以考虑使用Kerberos。

不要自己编写加密算法。


+1 是密码学中最重要(并且最容易被破坏)的原则。 - BlueRaja - Danny Pflughoeft

3
我建议使用SSL代替自己实现加密算法(如果您要保护的数据足够重要,自己实现的加密算法很可能会被破解!) SSL经过充分测试,并且可以使用证书而不是登录/密码。 SSL可以防止重放和中间人攻击(它在开始时使用握手来确保为每个连接使用新的会话密钥,并且双方都是其所声称的身份)。
另一个有趣的事情是RSA的SecurID。它提供一个硬件密钥,每60秒更改一次:http://www.rsa.com/node.aspx?id=1156

我想说RSA的SecurID正是我所需要的,但你所说的“硬件密钥”是什么意思? - the_drow
如果您点击上面的链接,就可以看到这样一个硬件密钥的图片(显示当前密钥的设备)。我刚刚看到他们也提供软件解决方案(适用于个人电脑、手机等)。不过我更喜欢硬件密钥,因为它们无法被黑客窃取。 - stmax

1

这是完全可能的 - 例如,在第二次世界大战期间,日本紫色密码就是这样做的。虽然这样的密码确实很难,但也可以被破解(紫色密码就被破解了)。

原因相当简单:发送方和接收方必须同步生成新密钥,以便接收方解密消息。这基本上意味着您需要像安全的随机数生成器之类的东西来生成新密钥。虽然这可能很难被破解(具有足够长的周期等),但它仍然是一种相当常见的加密技术,并且取决于具有安全随机数生成器。然而,一旦您拥有了它,通常使用生成器的输出更直接(例如作为Vernam密码的密钥)并不会带来太多好处。


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]的好方法。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接