Let's say we have a decentralized service
S distributed on a network of 1000 nodes/servers. Is it possible to have a registration/sign up scheme using email address as login?
I see two problems:
(Ignored for this question) Probable low deliverability rate for emails sent from nodes of a decentralized network to major email providers (Gmail, Yahoo, etc.); this is not a cryptographic problem, let's ignore this problem here.
Another real problem described in the following example workflow:
UserA, owner of userA@example.com, signs up to the service
S(e.g. with a registration form on one of the website mirrors provided by the network)
A signup token
f9x372d2aff0is stored in
PendingRegistrationsdatabase of the network by one of the node, and a confirmation email is sent by one of the nodes to
UserA opens his mailbox and sees a new email "Please confirm you want to signup to service S by clicking on http://203.0.113.2/register/userA@example.com/f9x372d2aff0"
UserA clicks on the link, the token is compared to the one in the
PendingRegistrationsdatabase of the network, if it matches, he can finish the registration process since he has proved he's the legit owner of userA@example.com
Malicious UserB (who doesn't run a node himself) cannot create an account named userA@example.com, because he will have no access to the token that will be sent to userA@example.com's mailbox
Malicious UserC, who runs a node himself, CAN create an account named userA@example.com: he can go on the website, fill the registration form, and then observe the
PendingRegistrationsdatabase and get the token and register the account himself. Or alternatively: he could observe the outgoing emails of the server, and see the link which will be sent to userA@example.com, and get the confirmation link.
Is it impossible to have a decentralized service using email addresses as login, or can asymmetric encryption (public key / private key) help here?
Note: Any email going out from a node, sent to a user, has to be "cooked" by a node of the network. So I would say: "Any string that will be viewed by an email recipient who will open the email received in his mailbox, can also be viewed by the node owner/email-sending-server owner", thus making the problem difficult. It seems obvious, but maybe is there a clever solution?