A method comprising: performing, by each node in a plurality of nodes, an identity set generation process, the identity set generation process comprising: generating, by the node a public key/ private key pair, and a random challenge string; transmitting, by the node, the random challenge string to the plurality of nodes; receiving, by the node, a plurality of random challenge strings from the plurality of nodes; generating, by the node, a challenge set comprising the received plurality of random challenge strings and the generated random challenge string; determining, by the node, a nonce that solves a proof of work, wherein inputs to the proof of work include the public key, the challenge set and the nonce and wherein determining the nonce comprises determining a hash value that results from computing a hash function, such that if the node determines that the hash value is less than a predetermined difficulty parameter then the node has determined an acceptable nonce and if the node determines a hash value that is greater than the predetermined difficulty parameter then the node can compute the hash function with a different nonce; transmitting, by the node, a tuple comprising the public key, the determined nonce, a hash value from the proof of work, and the challenge set to the plurality of nodes; receiving, by the node, a plurality of tuples from the plurality of nodes; and verifying, by the node, the plurality of tuples, wherein the node verifies each tuple of the plurality of tuples by determining if the public key, nonce and challenge set associated with that tuple solve the hash function such that the resulting hash value, associated with the tuple, is less than the predetermined difficulty parameter, wherein if the node verifies the tuple the public key associated with, the tuple is stored in the identity set; determining, by the node, a leader node; diffusing, by the node, the identity set to the plurality of nodes; and determining, by the node, a majority set including identities occurring in at least one half of the identity sets received from the other nodes of the plurality of nodes, wherein the leader node diffuses the majority set of the leader node to the plurality of nodes. transmitting, by the node, the random challenge string to the plurality of nodes; receiving, by the node, a plurality of random challenge strings from the plurality of nodes; generating, by the node, a challenge set comprising the received plurality of random challenge strings and the generated random challenge string; determining, by the node, a nonce that solves a proof of work, wherein inputs to the proof of work include the public key, the challenge set and the nonce and wherein determining the nonce comprises determining a hash value that results from computing a hash function, such that if the node determines that the hash value is less than a predetermined difficulty parameter then the node has determined an acceptable nonce and if the node determines a hash value that is greater than the predetermined difficulty parameter then the node can compute the hash function with a different nonce; transmitting, by the node, a tuple comprising the public key, the determined nonce, a hash value from the proof of work, and the challenge set to the plurality of nodes; receiving, by the node, a plurality of tuples from the plurality of nodes; and verifying, by the node, the plurality of tuples, wherein the node verifies each tuple of the plurality of tuples by determining if the public key, nonce and challenge set associated with that tuple solve the hash function such that the resulting hash value, associated with the tuple, is less than the predetermined difficulty parameter, wherein if the node verifies the tuple the public key associated with, the tuple is stored in the identity set; determining, by the node, a leader node; diffusing, by the node, the identity set to the plurality of nodes; and determining, by the node, a majority set including identities occurring in at least one half of the identity sets received from the other nodes of the plurality of nodes, wherein the leader node diffuses the majority set of the leader node to the plurality of nodes.