我正在尝试将分布式哈希表(DHT)与名称系统放在一起,其中一个人可以声明任何密钥的所有权。
我想到的是以下界面
dht.secure_set(public_key, signature, key, value)
哪里
signature == sign(private_key, public_key, key, value)`
这是由signature
签署的键值对。
然后,其他人将能够检索value
,因为他们知道public_key
和key
:
dht.secure_get(public_key, key)
只有当签名确实是key
对的签名时,DHT中负责(public_key, key)
的同行才会接受对(key, value)
对的更新。
这个签名方案是否安全?
我至少看到两个问题:
A)让存储对等体负责验证是不够的。它可能是一个恶意节点,所以读者也必须验证
B)如果有许多(key,pubkey)元组具有相同的密钥但不同的pubkeys,即某些密钥真的很受欢迎,这可能会给它们必须花费的CPU周期的一小部分节点带来不适当的负担(如果有频繁的写入),他们必须服务的存储和流量。 最好通过哈希函数从(key,pubkey)派生最终查找键,以便这些元组分散在整个键空间中。这实际上是DHT为其generic value signed storage指定的bittorrent