I've been slowly building a p2p networking library and I'm mostly happy with the technical decisions I've made. But one aspect I'm struggling with is providing a feature similar to DNS. I'd like for users to be able to share simple names that can be used to fetch a value.
So far I've built everything in a way where the core design can be run with public infrastructure using standard protocols. E.g. STUN to lookup external addresses and MQQT for routing signalling messages. The desired properties I'd like for the naming service would include something like:
1. There should be pre-existing servers on the Internet that can be used to store the key-values and they shouldn't be a one-off thing. E.g. a single, one-off service wouldn't be decentralized or ubiquitous enough; It should ideally be based on a pre-existing, open protocol.
2. It should be 'federated' and mostly reliable. Running this as random peers that go up and down introduces too many problems. I believe using a DHT for this is the wrong solution and would be unnecessarily complex.
3. It should be possible for peers to own keys. Otherwise, anyone can hijack the values and set values to anything they like. The mechanism this is done by doesn't matter. But since this should be programmatically possible -- requiring email registration or captchas isn't viable.
4. If the data expires eventually this isn't a problem for the design. So long as data persists for some kind of reasonable time-frame.
I know that on the Internet there are many protocols that anyone can use. Like ICMP, for example. But I haven't been able to think of a protocol or service that could be repurposed as a key-value store. I think that such a service (for example - say if it were part of home routers - and designed well) would be a very useful addition to the Internet. I'm okay with designing this around an unintended use for an existing system so long as it wouldn't degrade the service.
I do respect the technical minds of HN users so if you read my massive post, thanks a lot.
Why not DNS? Seems to check all the boxes you're looking for.