* The specification of the 2nd stage of the project can be found here.

The specification of the 1st stage of the project can be found here.

Frequently Asked Questions

Q: How to implement the PerfectPointToPointLinks and BestEffortBroadcast abstractions ?
A: For simplicity, students can assume that the PerfectPointToPointLinks is given by a reliable transport protocol such as TCP. The BestEffortBroadcast can be implemented on top of the former.

Q: What are the requirements for the deployment of the servers ?
A: For the project, students can simplify the server deployment and assume it is not Byzantine.
For instance, a simple shell script that launches the N servers at once is sufficient.
Besides, it is not necessary to have the ability to add new replicas to a running system.

QCan clients be Byzantine?
A: Clients will not be Byzantine. Students are encouraged to reason about this distinction and briefly discuss it in the final report. 

Q: How should the register operation be implemented for the 2nd stage of the project?
A: In order to simplify the solution of the 2nd stage of the project, and keeping into account that the register operation does not modify the state of any user's triplets (which correspond to the atomic register abstraction), it is sufficient that the client library propagates the register operation to the whole set of servers' replicas (and wait for a sufficient number of replies).

Q: What is the size of the fields of the triplet <domain,user-name,password>? Can we assume that they are short enough to be encrypted using an asymmetric encryption ?
A: For simplicity, students can assume that each field of the triplet <domain,user-name,password> fits in the max size allowed  when using asymmetric encryption for a with a given key size.
However, students are encouraged to think of techniques to overcome this limitation and to discuss them in the report, or even implement them  if they are confident that this will not delay excessively the development of the rest of the project. 

Q: Can the server API be adjusted ?
A: The API can be modified to cope with restrictions of the selected communication technology and also to ensure all cryptographic services (confidentiality, integrity, etc) are provided.Regardless of the reason, all modifications need to be properly documented and justified in the report.

Q: How to generate a self-signed Certificate to store keys in the KeyStore ?
A: This can be generated with a tool such as  java keytool or similar.It can also be generated programmatically with a library such as Bouncy Castle.For convenience we provide a code sample to generate the Certificates programmatically (GenCert.java). Note that the provided sample only works on the Oracle JVM 1.8.