Final Project

Theme Song: Redo

In the final project, you'll use what you learned throughout the semester to implement a final project of your choice! We've provided some ideas below and left the specifications open for you to decide and discover.

Project Specification

In this project, wou will get to implement one of two project types: an extension or a new project. An extension project takes a prior project and implements one or more classic extensions or optimizations on top of it. A new project implements a protocol that we discussed in class but did not get to implement in our prior projects. Both types will culminate in a codebase, report, and presentation.

You are allowed to change partners for the final project.



The timeline for this project is very simple. Project proposals are due at noon on Tuesday April 25th. We will review them promptly and assign each project a mentor TA. Final reports and presentations are then due on Tuesday May 16th.


Students taking CSCI 1515 as a capstone must implement a more substantial project than those that aren't. Suitable capstone projects, or extensions that would make a project into a suitable capstone project, are denoted below.

It would be best if you could find a partner who also takes the course as a capstone. In case of a capstone/non-capstone pair, you should work on a capstone project, with the expectation that the capstone student should contribute more (at least 60%). The evaluation criteria will be the same for all capstone projects, irrespective of whether it is a capstone/capstone or capstone/non-capstone pair.

Project Proposal

To match you with an appropriate mentor TA and to ensure that the scope of your final project is suitable, please write a one-page project proposal by noon on Tuesday April 25th. Late submissions will not be accepted. (If you submit late, you will lose the points for the proposal, be assigned a TA at random and without proposal feedback.)

Your proposal should include an outline of the project you're interested in implementing, stretch goals that your group might deem difficult but worthwhile, a list of any libraries that you'd like to use, and any open questions about your project that you'd like a TA to help you answer.

If you're not sure about all of the details of your project, that's fine! Let us know what you'd like to learn about so we can pair you with a suitable TA. Your TA will be a resource for you to learn more about your project domain and get coding help when appropriate.

Final Report

In addition to your project's codebase, please write a final report of no more than 5 pages long (including the bibliography), detailing the findings of your final project. Late submissions will not be accepted.

Your final report should include any prerequisite knowledge necessary to understand the project, an overview of the project itself, difficulties your group faced in implementation and design, and any experiments or benchmarks you may have conducted. Note that this report does not have to be incredibly formal. However, it should explain the project in detail.

Recorded Presentation

Finally, in addition to a final report, please prepare a recorded presentation of at most 5 minutes long. Your presentation should include an overview of your project and a demonstration of it working. You may also choose to walk through your codebase and any notable design decisions. You may have some overlap between your presentation and report; this is perfectly fine and expected.

PDF Format

The project proposal and final report must be PDF files in double-column ACM format: see ACM Proceedings Template, using the sigconf style.

Extension Project Ideas

Post-Quantum Secure Communication

Extend the Signal project to use post-quantum cryptography using the SEAL library (or other equivalent).

Double Ratchet

Extend the Signal project to support double ratchet by adding the symmetric-key ratchet. Use the symmetric-key ratchet to handle lost or out-of-order messages in the communication.

Group Chat

Implement a messaging protocol that supports group chats, ideally hiding the group structure from the server.

Voting for Multiple Candidates

Extend the Vote project to support voting for multiple candidates. You may choose to enforce each voter to vote for exactly \(k\) candidates or at most \(k\) candidates, or both.

Blind Signatures

Extend the Vote project to support blind signatures (see MOV Ch. 11.8.1), eliminating the need for a Tallyer. Read more here.

Yao's Optimizations

Implement point-and-permute, free XOR, and row reduction (GRR3) in the Yao's project. Read more about all of these optimizations here.

An extension that would be suitable for a capstone would be to implement Half Gates or slicing and dicing.

OT Extension

Extend the Yao's project to support semi-honest OT extension, which extends a small number of OTs to a large number of OTs via symmetric-key operations. This project idea is suitable for a capstone.

PIR Optimization

Implement the ciphertext compression in the PIR project. Read more about this optimization here. This project idea is suitable for a capstone.

New Project Ideas

Secure Shell

Implement a secure shell (SSH) protocol between a client and a server. You may find the RFC useful.

KZG Commitments

Implement KZG polynomial commitments (see HW4). You may use open source libraries that support bilinear pairings.

Private Set Intersection

Implement the DDH-based private set intersection (PSI) and PSI-CA.

Multi-Party Computation

Implement the GMW or BMR protocol for semi-honest MPC among any number of parties to compute any function. This project idea is suitable for a capstone.

PIR from Additive Homomorphism

Implement PIR from additively homomorphic encryption (e.g., Regev encryption). Reed more here.

GSW Construction

Implement the GSW somewhat homomorphic encryption (SWHE) scheme. This project idea is suitable for a capstone.

Proposing your own project

We strongly encourage you to look outside of what we have brainstormed and seek out a project idea of your own! We are currently living in a cryptographic renaissance, and there are countless ideas that would be interesting to explore. Check out some project ideas from a similar course here or here (note that not all of these project ideas are suitable).

If you choose to go down this route, be sure to have scoped out the project so that you have a good idea of the amount of work that this will be. Too much or too little and it may not be a suitable project.

Getting Started

To get started, get your stencil repository here and clone it into the devenv/home folder. From here you can access the code from both your computer and from the Docker container. The project is empty to allow you to build what you'd like!