我有一只小臂M0 SoC和一部智能手机作为演员。使用的加密密钥是椭圆曲线。
我目前的安全性是这样实现的:
我们希望具有128位散列的SoC应该足够安全,可以尝试强行猜测公钥/私钥对。我们假设手机很容易被破坏,攻击者将获得手机的完整密钥和SoC的公钥。
所以现在我想出了一个我希望更好的解决方案,但不确定它是否真的是:
有什么变化:
因此,基本上,在其最简单的形式,SoC现在有最左边的128位的512位电话的公开密钥。手机发送最右边的416位,为重叠区域留下32位,如下所示:
这个系统在任何方面是否比我们之前设计的系统更安全?不那么安全?
发布于 2023-02-14 10:44:24
我不清楚您的确切安全模型,但我认为在这两种方案中,敌手断绝参与事务都是可行的。
假设在256位素数域(如secp256k1 )上使用标准椭圆曲线,所以点是256位值的对,然后存储为512位序列,其中前半部分是x-coordinate,下半部分是y-coordinate。在第一种方案中,服务器存储这512位的128位散列(例如,使用使用128位块大小的Davies结构)。通过生成大致的2^{64},候选公钥和对手可以使用生日攻击生成具有相同哈希值的对。这是一个痛苦的计算量,但并不超出目前的能力范围。然后,对手可以注册其中一个公钥,然后与另一个公钥建立连接。如果面对使用非注册密钥的通信记录,他们可以通过说与他们的注册密钥不匹配来否认。
同样的攻击也适用于第二种情况,但我们也应该注意到,如果最右边的256位对应于椭圆曲线点的y-value,那么仅这些信息就足以恢复其余的公钥。这是因为x-coordinate满足椭圆曲线方程,这可能类似于
其中a、b、y和p都是已知的。我们预计只有少数可能的解决方案。类似的想法允许从y-coordinate的256位x-coordinate和压缩位中恢复。
发布于 2023-02-14 13:37:24
你说的是公钥,所以我假设这些是公开的。
我认为这不能用于身份验证。攻击者只需找到具有32 (BBBB)匹配位的密钥才能参与该协议,如果他发现一个具有128匹配位的密钥(HHHHHHHHHHHHBBBB),则该密钥已完全失效。
乍一看(我并不是这方面的专家),这看起来是不可行的,但我肯定会建议坚持第一种方法。该方法验证整个公钥,并且是相当标准的。
顺便说一句,我们不鼓励在这里张贴关于土生土长的密码的帖子。这并不总是容易弄虚作假,这通常是个坏主意。;)
https://crypto.stackexchange.com/questions/104215
复制相似问题