AnonCred is a tool which makes user actions anonymous at anytime and anywhere in server clusters, while the clusters still maintain the ability to identify user actions based on its identity. A typical use case of it is anonymous voting.
This is what you need to do to compile and run AnonCred:
-
Run
https://github.com/anonyreputation/anonCred.git
to download source code and binary file on github. -
modify
config/local.properties
to config local port.
modifyconfig/conn.properties
to config coordinator's ip and port. (for client and server only) -
Run
go run src/Coordinator.go
to start coordinator.
Rungo run src/DissentClient.go
to start client.
Rungo run src/AnonServerLauncher.go
to start server. -
Type
msg <msg_text>
to broadcast all the messages to clients orvote <msg_id> <+-1>
to vote towards a specific message. (For client only)
Note
Launch coordinator first. And then launch your server and it will be automatically registered to the coordinator based on configuration. After all the servers needed are launched, type ‘ok’ in coordinator daemon to finish the server configuration. After that, you can launch client at anytime you want, but can no longer add server into the cluster.
One coordinator, two servers and two clients.
tiger.zoo.cs.yale.edu:12345 servers: scorpion.zoo.cs.yale.edu:12345, frog.zoo.cs.yale.edu:12345
python.zoo.cs.yale.edu:12345, viper.zoo.cs.yale.edu:12345
-
Launch coordinator and servers. Type 'ok' in coordinator's terminal to finish server registration.
-
At the beginning of each round, you will get your one-time pseudo-name in this round. Type 'msg ' to send msg.
-
The reputation will be changed in the end of each round. Then, every client gets a new reputation now.
The goal of design is to make the system architecture general enough in production and improve its scalability. However, the linear model is a constraint here.
The system consists of three components: Client, coordinator and Server. The coordinator(which actually serves as a coordinator) merely serves as a coordinator and topology manager, which accepts the request from clients and deliver it to the corresponding starting server based on the phases. And it also manages to broadcast computation result to servers, verify the identity of client and periodically start each round.
The client is the program for user to send message and vote. When a new client registers, it needs to wait until next round begins to function.
The Server is the core of system. It manages to perform encryption and decryption computations and also is responsible for broadcasting data to all the clients. (Or generally speaking, achieve any functions intreated with client-side needed by this system)