Formal Specification and Verification of the BFT Protocol Prime

Huzaifah Nadeem [webpage]

Project Overview

Problem: Protocol bugs are very hard to identify in implementation. An alternative is to identify them at design stage. Formal specification also allows precise documentation of the design and therefore, any ambiguities that can occur in a natural language description are avoided.

Approach: My goal was to write a part of the formal spec of Prime. I was focused on 4 of its subprotocols. Further, I wanted to model-check the specs to verify that they work as expected. My approach for this was to write invariants to prove the key properties of the subprotocols and model-check those to confirm that they are not violated.

Results: I was only able to complete writing the formal spec for the 'Preordering' subprotocol for Prime. I was also able to do a partial model-check for this subprotocol. However, it seems that for some parts, the model-checker is not giving me the expected results which can indicate a few problems. Moreover, my approach for the model-checker is not completely exhaustive and I need to figure out how to make broad statements about the subprotocol's verification. Furthermore, as a future work, I would like to write the complete formal specification of Prime, including the two subprotocols, 'Proactive Recovery' and 'Reconfiguration', which are not described in the original Prime paper.

Project Materials