如何保护分布式哈希-table 中的密钥,以便只有拥有私钥的人才能编写它?
How to secure a key in a distributed-hash-table so that only people with the private-key can write it?
我正在尝试将分布式哈希 table (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)
DHT 中负责 key
的对等点仅在签名确实是 (key, value)
对的签名时才会接受对 (public_key, key)
对的更新。
这个签名方案安全吗?
我至少看到两个问题:
A) 让存储节点负责验证是不够的。可能是恶意节点,请读者自行验证
B) 如果有许多 (key, pubkey) 元组具有相同的密钥但不同的公钥,即一些密钥非常受欢迎,这会给就它们必须花费的 CPU 个周期(如果频繁写入)、它们必须服务的存储和流量而言,只有一小部分节点。
最好通过散列函数从 (key, pubkey) 派生出最终的查找键,这样这些元组就会分散在整个键空间中。这实际上是 bittorrent DHT 指定的 generic value signed storage
我正在尝试将分布式哈希 table (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)
DHT 中负责 key
的对等点仅在签名确实是 (key, value)
对的签名时才会接受对 (public_key, key)
对的更新。
这个签名方案安全吗?
我至少看到两个问题:
A) 让存储节点负责验证是不够的。可能是恶意节点,请读者自行验证
B) 如果有许多 (key, pubkey) 元组具有相同的密钥但不同的公钥,即一些密钥非常受欢迎,这会给就它们必须花费的 CPU 个周期(如果频繁写入)、它们必须服务的存储和流量而言,只有一小部分节点。
最好通过散列函数从 (key, pubkey) 派生出最终的查找键,这样这些元组就会分散在整个键空间中。这实际上是 bittorrent DHT 指定的 generic value signed storage