arnaucube
arnaucube/darkID-prototypePublic Self-hosted repository
darkID-prototype/README.md
README.mdRaw
 1# darkID
 2Blockchain based anonymous distributed ID system
 3
 4### Main concept
 5The objective is to guarantee a decentralized login system, but making sure that registered users are real ones and there are no bots generating large amounts of accounts. Only the verified (by email or phone) users can generate an anonymous ID (the Public-Key blind signed).
 6
 7
 8![screenshot](https://raw.githubusercontent.com/arnaucode/darkID/master/documentation/screenshot01.png "screenshot")
 9
10![screenshot](https://raw.githubusercontent.com/arnaucode/darkID/master/documentation/screenshot02.png "screenshot")
11
12## How it works?
13
14
15#### Network infrastructure
16
17![network](https://raw.githubusercontent.com/arnaucode/darkID/master/documentation/darkID-network.png "network")
18
19
20#### Step by step process
211. Once all the nodes of the network are running, a new user can connect to the server-ID-signer.
222. The user registers a non anonymous user (using email, phone, password, etc), and performs the login with that user
233. The user, locally, generates a RSA key pair (private key & public key)
244. The user blinds his Public-Key with the server-ID-signer Public-Key
255. The user's Public-Key blinded, is sent to the server-ID-signer
266. The server-ID-signer Blind Signs the Public-Key blinded from the user, and returns it to the user
277. The user unblinds the Public-Key signed by the server-ID-signer, and now has the Public-Key Blind Signed by the server-ID-signer
288. The user sends the Public-Key blind signed to the p2p network
299. The peers verify that the Public-Key Blind Signed is correctly signed by the server-ID-signer, if it is, they add the Public-Key to the Ethereum Blockchain, inside a new block
3010. Then, when the user wants to login into a platform, just needs to put his Public-Key
3111. The platform goes to the Ethereum Blockchain, to check if this Public-Key is registered in the blockchain
3212. The platform sends a message encrypted with the user Public-Key, and the user returns the message decrypted with the Private-Key, to verify that is the owner of that Public-Key
33
34
35##### RSA encryption system
36https://en.wikipedia.org/wiki/RSA_cryptosystem
37- Public parameters: (e, n)
38- Private parameters: (d, p, q, phi, sigma)
39- Public-Key = (e, n)
40- Private-Key = (d, n)
41- Encryption:
42![rsa](https://wikimedia.org/api/rest_v1/media/math/render/svg/fbfc70524a1ad983e6f3aac51226b9ca92fefb10 "rsa")
43- Decryption:
44![rsa](https://wikimedia.org/api/rest_v1/media/math/render/svg/10227461ee5f4784484f082d744ba5b8c468668c "rsa")
45
46
47##### Blind signature process
48https://en.wikipedia.org/wiki/Blind_signature
49- m is the message (in our case, is the Public-Key of the user to be blinded)
50![rsa](https://wikimedia.org/api/rest_v1/media/math/render/svg/a59b57fa153c8b327605672caadb0ecf59e5795a "rsa")
51
52- server-ID-signer blind signs m'
53![rsa](https://wikimedia.org/api/rest_v1/media/math/render/svg/e726b003ff1649f9254032cffae42d80577da787 "rsa")
54
55- user can unblind m, to get m signed
56![rsa](https://wikimedia.org/api/rest_v1/media/math/render/svg/e96fad0e1d46ec4c55986d1c8fc84e8c44259ecc "rsa")
57
58- This works because RSA keys satisfy this equation
59![rsa](https://wikimedia.org/api/rest_v1/media/math/render/svg/d6bd21fb4e25c311df07b50c313a248d978c3212 "rsa") and this ![rsa](https://wikimedia.org/api/rest_v1/media/math/render/svg/c13170a26e031125b417f22644fb64384c04eea7 "rsa")