Encryption 自修改散列加密算法

Encryption 自修改散列加密算法,encryption,cryptography,distributed,client-server,Encryption,Cryptography,Distributed,Client Server,我正在寻找一种算法,可以在每个周期更改其密钥,并且仍然可以解密。 基本上,我正在寻找一种方法来维护移动客户端和固定服务器之间的安全链接,这样即使您拦截了散列,甚至身份验证凭据本身,它们也会在每个周期的两侧都发生变化。 这对任何人都有影响吗? 有没有更好的方法来确保即使您以某种方式拦截身份验证凭据,它也只对来自某个用户的某个请求有效?这当然是可能的——例如,二战期间的日本紫色密码就是这样做的。虽然这样的密码肯定很难,但它也可能被破解(紫色是) 原因很简单:发送者和接收者必须同步生成新密钥,以便接收

我正在寻找一种算法,可以在每个周期更改其密钥,并且仍然可以解密。
基本上,我正在寻找一种方法来维护移动客户端和固定服务器之间的安全链接,这样即使您拦截了散列,甚至身份验证凭据本身,它们也会在每个周期的两侧都发生变化。
这对任何人都有影响吗?

有没有更好的方法来确保即使您以某种方式拦截身份验证凭据,它也只对来自某个用户的某个请求有效?

这当然是可能的——例如,二战期间的日本紫色密码就是这样做的。虽然这样的密码肯定很难,但它也可能被破解(紫色是)


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

我建议只使用SSL。它被设计成合理地抵抗中间人攻击,我想这就是你所关心的

或者可能是Kerberos


不要自己编写加密算法。

我建议使用SSL,而不是自己实现一些加密算法(如果您试图保护的数据足够重要,它将被破坏!)。SSL经过了很好的测试。使用SSL,您可以使用证书而不是登录/密码。SSL防止重放和中间人攻击(在开始时使用握手来确保每个会话都使用新的会话密钥,并且双方都是他们声称的)。
我想到的另一件有趣的事情是RSA的SecurID。它提供了一个每60秒更改一次的硬件密钥:

我想您所说的是找到某种方法定期更改算法中使用的加密密钥,这样即使发现了密钥,也只有使用该密钥加密的数据才能解码?如果我们不担心启动过程,那么一种方法是对使用一个密钥加密的数据集中的部分(但不是全部)后续密钥进行编码,并且在切换密钥时,使用新密钥加密后续密钥的不同部分

例如,假设您的密钥有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]的好方法


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

身份验证基数?你肯定是指资历?听起来你听过太多科技惊悚片了。只需使用SSL—它已经解决了您可能遇到的所有问题。我想说RSA的SecurID正是我想要的,但是“硬件密钥”是什么意思呢?如果您按照上面的链接,就会看到这样一个硬件密钥的图片(显示当前密钥的设备)。我刚刚看到他们也提供软件解决方案(个人电脑、手机等)。不过我喜欢硬件密钥,因为它们不会被黑客窃取。最后一行是+1,这是密码学最重要(也是最常被破坏的)原则