我正在开发一个嵌入式设备,它通过不可信的通道连接到计算机上。根据我的威胁模型,我需要在有线上进行认证和加密,具有完全的前向保密。两个端点都有一个预先共享的密钥和/或彼此的真实公钥,以及安全的随机数生成器(尽管设备上不需要安全的RNG是一个加号)。线路上的所有消息都是固定长度的(16字节,即128位).
我正在寻找一个满足这些特性的现有密码协议,实现起来相当简单。
到目前为止,我提出的“玩具”协议是执行椭圆曲线Diffie-Hellman密钥交换(封装在AES-CCM中的预共享密钥进行身份验证),然后在ECDH共享秘密上运行密钥派生函数,并将结果用作AES-CCM的会话密钥,用于加密和验证数据。由于设备上的空间代码数量有限,所以使用AES-CCM来验证ECDH,所以我必须使用尽可能少的原语。
但我不想使用我刚刚组成的协议(出于明显的原因),而像TLS、OTR和SSH这样的协议对于嵌入式设备来说太复杂了。是否有一种更简单的协议,可以提供身份验证和加密以及我可以使用的前向保密?
更新:为了澄清,建立一个连接不一定是快速的,所以我可以负担大量的计算。非对称密码的唯一要求是保持密钥短,因此椭圆曲线密码学代替了离散对数。
发布于 2015-10-02 11:29:07
我终于找到了一个解决方案--一些密钥棘轮的变体,例如在SCIMP中使用的那种,在没有任何非对称密码的情况下建立了初始共享秘密,并且它们甚至不需要任何端点上的安全随机数生成器,就可以提供完美的前向保密!
在这种情况下,我们所需要的是具有完全前向保密的认证和加密协议--对称密码、所述密码的认证加密模式(例如EAX)和哈希。我们甚至可以在嵌入式设备上丢弃RNG。
这不是一个完整的协议,但它使我们获得了大部分的方法,而且它在实现和所需的原语数量方面都比TLS简单得多。
困难的部分是正确处理线路上的消息丢失,而不打开降级攻击,但它比正确的非对称密码的自定义实现更容易。
具有讽刺意味的是,我问过的任何人都不能告诉我如何使用如此关键的棘轮来实现完美的向前保密。我们的团队自己想出了这个计划,之后我才在文献中找到了这个计划。
https://crypto.stackexchange.com/questions/27716
复制相似问题