The "dht" in the mmmv_dht_t1 stands for a "distributed hashtable"(hereafter
also as: DHT).
Currently this specification lacks any code.
Node IDs are rational numbers. There is a set of central nodes that keep their states synchronized. The URLs or IP-addresses or IP-address analogues(hereafter: node_address) of the central nodes are pre-determined, fixed, stored with the dht software. Storage nodes generate their IDs themselves, preferably randomly, and contact at least one of the central nodes every time they, the storage nodes, boot up and join the network. The central nodes assign each storage node a set of rational number ranges that include the IDs of the nodes that act as mailboxes for storing the "letters"/messages that are sent to the storage node. The central nodes can change the announced ranges any time, preferably as seldom as possible. The central nodes answer queries about which storage node ID resides at which node_address. The central nodes answer queries about which node ID ranges contain storage nodes that act as the mailboxes for a storage node with a given node ID. All data acquired by querying the central nodes can be shared between storage nodes directly.
Files are saved to the DHT by uploading them to any of the storage nodes, which may keep a local copy of the file, but which will also pass the file on to at least one of the storage nodes that will be found by the parties that want to search and download the files from the DHT. Files are searched by using their secure hash and file size. The downloading party looks up the storage node that MIGHT contain the file by first downloading a set of constants from the central nodes and then executing a function that takes in the file size, the file hash, the constants and outputs a rational number. The rational number is a node ID of a storage node that MIGHT have the file. Most likely a storage node with the given node ID does not even exist, but the central nodes answer a query about that node's mailbox storage node ID ranges anyway and the file MIGHT be available at at least one of the storage nodes within that storage node ID range.
Countermeasures to Lying Nodes
Each storage node maintains its own trust list. A lying node gets minus points, a truthful node gets plus points.
- Chord Distributed Hashtable Algorithm
- Kademlia Distributed Hashtable Algorithm
- The Byzantine Generals Problem