创建全局唯一的用户ID

时间:2015-02-24 10:51:22

标签: security hash public-key

我正在构建一个系统,其中每个用户都有一个带有链接公钥对的帐户。匹配的私钥用于签名消息。描述帐户的数据存储在p2p系统中,因此我们需要为每个帐户设置一个查找密钥,该密钥是全局唯一的(即全局ID(GID)。) 问题是:如何明智地选择这些全局ID?我的意思是,如果对底层p2p系统发起攻击,攻击者将很难交换密钥。

我在想:哈希公共密钥(带有盐),使用它作为GID并签署结果就行了。
这样,如果攻击者交换密钥,则GID将不再匹配(即使攻击者能够创建新的有效签名)。攻击成功的唯一方法是找到GID的冲突,然后可以将其用作公钥,同时仍然存在找到匹配的私钥以创建签名的问题。

First approach: sha256(PubKey + Salt) = GID
Second approach: sha256(PubKey + Salt) + md5(PubKey + Salt) = GID
Third approach: PBKDF2(PubKey, sha256, Salt) = GID

对此有何看法?


编辑:更多细节:

在此系统/体系结构中,用户应该能够设置具有全局唯一ID的帐户,该ID链接到与此用户关联的某种端点。与DNS非常相似。但没有域名。
出于签名目的等(此处不相关),每个用户都有一个公钥对。因此公钥需要以某种方式发布。

  

使用案例:Bob知道Alice的globalID,需要" get"她的终点。她查询一些系统并接收(签名的)响应,该响应包括关于端点的信息以及Alice的公钥。使用公钥,Bob验证签名。一切都完成了。

现在假设没有中央权限,也没有人运行(半)中央可靠系统,如Bob可以查询的DNS。解决方案可能是p2p / DHT系统。因此,我们假设我们使用Kademlia DHT来存储和分发此数据记录(globalID,公钥,端点数据,签名)。问题是:每个人都可以轻松覆盖这些系统中的任何类型的数据。

场景:假设,攻击者Charlie可以通过创建自己的新pub-key以一种简单的方式覆盖这样的记录,将globalID设置为Alice的GID并使用HIS私钥对其进行全部签名。现在Bob无法通过了解她的globalID来检测Charlie是否冒充Alice。

因此,globalID应直接链接到公钥,例如通过使用上述方法之一。因此,当查理试图以同样的方式再次攻击时,他需要在哈希函数中找到冲突并将其用作他的公钥(然后"生成"匹配的私钥以创建正确的签名)

现在的问题是如何从公钥生成GID,或者系统中是否存在重大缺陷。

希望这能澄清一些事情......

0 个答案:

没有答案