Trusted hardware component for distributed systems
First Claim
1. A method comprising:
- receiving, by a hardware component and from a first computing device, a representation of a message, the message to be sent to a second computing device, the first computing device and the second computing device participating in a byzantine fault-tolerant protocol;
incrementing, by the hardware component, a monotonically non-decreasing counter from a first value to a second value that is greater than or equal to the first value based at least in part on receiving the representation of the message;
assigning the monotonically non-decreasing counter to a particular conversation between the first computing device and a second computing device, the particular conversation including the message;
binding, by the hardware component, the message to the second value of the monotonically non-decreasing counter;
creating, by the hardware component, a statement that includes the monotonically non-decreasing counter and includes the representation of the message, the statement attesting;
that the hardware component incremented the monotonically non-decreasing counter from the first value to the second value based at least in part on receiving the representation of the message; and
that no other message is to be bound to the second value of the monotonically non-decreasing counter;
signing, by the hardware component, the statement with a cryptographic key to create a signed statement;
sending the signed statement to the first computing device; and
storing the signed statement in a recent attestation queue used to store a predetermined number of most-recently signed statements, each of the most-recently signed statements attesting to a particular increment of the monotonically non-decreasing counter by the hardware component.
3 Assignments
0 Petitions
Accused Products
Abstract
Techniques for utilizing trusted hardware components for mitigating the effects of equivocation amongst participant computing devices of a distributed system are described herein. For instance, a distributed system employing a byzantine-fault-resilient protocol—that is, a protocol intended to mitigate (e.g., tolerate, detect, isolate, etc.) the effects of byzantine faults—may employ the techniques. To do so, the techniques may utilize a trusted hardware component comprising a non-decreasing counter and a key. This hardware component may be “trusted” in that the respective participant computing device cannot modify or observe the contents of the component in any manner other than according to the prescribed procedures, as described herein. Furthermore, the trusted hardware component may couple to the participant computing device in any suitable manner, such as via a universal serial bus (USB) connection or the like.
-
Citations
20 Claims
-
1. A method comprising:
-
receiving, by a hardware component and from a first computing device, a representation of a message, the message to be sent to a second computing device, the first computing device and the second computing device participating in a byzantine fault-tolerant protocol; incrementing, by the hardware component, a monotonically non-decreasing counter from a first value to a second value that is greater than or equal to the first value based at least in part on receiving the representation of the message; assigning the monotonically non-decreasing counter to a particular conversation between the first computing device and a second computing device, the particular conversation including the message; binding, by the hardware component, the message to the second value of the monotonically non-decreasing counter; creating, by the hardware component, a statement that includes the monotonically non-decreasing counter and includes the representation of the message, the statement attesting; that the hardware component incremented the monotonically non-decreasing counter from the first value to the second value based at least in part on receiving the representation of the message; and that no other message is to be bound to the second value of the monotonically non-decreasing counter; signing, by the hardware component, the statement with a cryptographic key to create a signed statement; sending the signed statement to the first computing device; and storing the signed statement in a recent attestation queue used to store a predetermined number of most-recently signed statements, each of the most-recently signed statements attesting to a particular increment of the monotonically non-decreasing counter by the hardware component. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8)
-
-
9. A computer-readable memory device storing computer-executable instructions that, when executed, cause one or more processors to perform operations comprising:
-
sending a representation of a message, by a first computing device participating in a byzantine-fault-tolerant protocol, to a trusted hardware component associated with the first computing device; receiving, by the first computing device and from the trusted hardware component, a signed statement that is signed by the trusted hardware component using a key, the signed statement attesting that the trusted hardware component incremented a monotonically non-decreasing counter from a first value to a second value that is greater than or equal to the first value based at least in part on receiving the representation of the message, attesting that the second value is bound to the message, and attesting that no other message will be bound to the second value of the monotonically non-decreasing counter, wherein the monotonically non-decreasing counter is assigned to a particular conversation between the first computing device and a second computing device, the particular conversation including the message; determining that the signed statement includes the monotonically non-decreasing counter and includes the representation of the message; storing the signed statement in a log associated with the byzantine-fault-tolerant protocol and maintained in untrusted memory located outside of the trusted hardware component; sending the message and the signed statement to the second computing device; and storing the signed statement in a recent attestation queue in untrusted memory. - View Dependent Claims (10, 11, 12, 13, 14, 15, 16)
-
-
17. A computer-readable storage device storing computer-executable instructions that, when executed, cause one or more processors to perform operations comprising:
-
receiving, by a trusted hardware component, a key and a representation of a message from a first computing device, the representation of the message to be sent to a second computing device, the first computing device and the second computing device participating in a byzantine-fault-resilient protocol; incrementing, by the trusted hardware component, a monotonically non-decreasing counter from a first value to a second value that is greater than the first value based at least in part on receiving the representation of the message; associating the monotonically non-decreasing counter with a particular conversation, between the first computing device and the second computing device, that includes the message; binding the second value of the monotonically non-decreasing counter to the message; creating, by the trusted hardware component, a statement that includes the monotonically non-decreasing counter and includes the representation of the message, the statement attesting; that the trusted hardware component incremented the monotonically non-decreasing counter from the first value to the second value based at least in part on receiving the representation of the message; and that no other message is to be bound to the second value of the monotonically non-decreasing counter; signing, by the trusted hardware component, the statement with the key to create a signed statement; sending the signed statement to the first computing device; and storing the signed statement in a recent attestation queue. - View Dependent Claims (18, 19, 20)
-
Specification