我正在开发一个端到端的加密消息应用程序,作为一种教育活动,并有一些额外的时间。我已经选择用利伯钠作为潜在的密码。在如何正确实现Alice和Bob之间的安全相互身份验证时,我遇到了麻烦。
假设Alice和Bob事先认识对方的公钥。我目前(基本的)实现已经让Alice和Bob通过nacl.public.Box ( Curve25519 +Poly1305的实现)构造了一个公共密码盒,并将其用于协议中的初始交换。
以下通信都是通过nacl的密码箱公钥加密/MAC(随机非key )进行的:
Alice --> Bob: Hello
Bob: Decrypts Hello message and checks message authentication code to ensure it came from Alice
Bob --> Alice: Hello
Alice: Decrypts Hello message and checks message authentication code to ensure it came from Bob
Alice <--> Bob: Agree on a symmetric key to use for the rest of this communication (they can recompute this periodically for forward secrecy)在默认情况下,密码箱实现使用随机的非uses,我知道理论上可以使用它来防止重放攻击。然而,这正是我困惑的地方。鲍勃是否需要记录爱丽丝曾经用过的每一次,以确保夏娃不会重播爱丽丝的“你好”来说服鲍勃她是爱丽丝?让Alice和Bob各自用一条随机的问候语而不是"Hello“来交流,这能克服这个限制吗?他们希望对方会向他们重复。是否有一种标准的方法来做这种我错过的事情(我到处看都没成功)?
发布于 2020-06-06 11:37:02
鲍勃需要记录每一次吗(.)
不是的。
你说得对,现在不能再用两次了。然而,记账并不是一条出路。通常的方法是在其值中包含一个时间戳和/或产生具有足够随机位的随机非its。这不是加兰图双重使用,但这是非常不可能的。
对于有关加密协议实现的问题,我可以推荐crypto.SE吗?
发布于 2020-06-06 16:17:22
现在只需要不再重复。他们不必是不可预测的。
与其使用随机的非can,您可以商定一个初始的“现在”,并在每条消息之后简单地增加它。
这种方法的第一个好处是,您不再需要发送非any了。发送者和接收者在发送或接收消息后都会增加非them,因此它们的计数器总是同步的,而不必发送它们。
另一个好处是,如果接收到一个具有错误当前的消息,则解密将失败。所以你得到了防止重播攻击的保护。
https://security.stackexchange.com/questions/232785
复制相似问题