A computer program product to execute a trusted proxy client (TPC) process, in a trusted execution environment, to implement a causal total order broadcast (CTOB) protocol, in a Byzantine fault-tolerant, distributed computerized system comprising a set of nodes configured to act as servers for clients of the system, each of the nodes being further configured to provide such a trusted execution environment and execute such a TPC process in such a trusted execution environment, the computer program product comprising a computer readable storage medium having program instructions embodied therewith, the program instructions executable by processing means of each of one or more of the nodes, so as to cause the processing means to execute such a TPC process in such a trusted execution environment and thereby cause the TPC process, upon execution, to:
- sign the client request;
- invoke a total order broadcast protocol, or TOB protocol, to obtain a sequence number for the signed request, for the nodes to establish a total order in which the signed request will be processed by the nodes;
- and
- upon obtaining a proof that the signed request is assigned this sequence number as per the TOB protocol, reveal a decrypted version of the encrypted contents of the client request to said each of the nodes, for the latter to be able to further process it according to the TOB protocol;
- wherein said each client request received comprises, in addition to said encrypted contents, a one-time identifier of said each request, and
- executing the TPC process to:
- identify a cryptographic key associated with the one-time identifier, via an association;
- and
- use the identified cryptographic key to decrypt said encrypted contents and obtain said decrypted version, wherein said one-time identifier is a non-encrypted one-time identifier of said each request;
- wherein said each client request received further comprises, in addition to said encrypted contents and the non-encrypted one-time identifier of said each request, an encrypted one-time identifier of a next request;
- use the identified cryptographic key to decrypt said encrypted one-time identifier of the next request, in addition to decrypting said encrypted contents;
- and
- store a further association of the decrypted one-time identifier of the next request with a cryptographic key.