Computer Systems by Mutually Suspicious Groups
Computer Systems by Mutually Suspicious Groups
By
DISSERTATION
Submitted in partial satisfaction of the requirements for the degree of
DOCTOR OF PHILOSOPHY
in
Computer Science
in the
GRADUATE DIVISION
OF THE
t2 2 S co f ( f ( (J nee c
~. . .
.· ......c , .....................................
l
;._ J( f ;.5
f I
Computer Systems
A number of organizations who do not trust one another can build and
maintain a highly-secured computer system that they can all trust (if they can
agree on a workable design). A variety of examples from both the public and
private sector illustrate the need for these systems. Cryptographic techniques
secured. Once a vault has been inspected and sealed, any attempt to open it will
cause it to destroy its own information content, rendering the attack useless. A
decision by a group of trustees can allow such a vault-or even a physically des-
Networks of vaults can allow reliable operation even in the face of communi-
cation channel and vault failures . Networks also have several security advan-
tages over single vault systems: (1) information that is no longer needed can be
by the trustees can be maintained, and (3) abuse of the trustees' power requires
Each of some mutually suspicious groups can supply part of a vault, in such
a way that each group need only trust its part in order to be able to trust the
system's component parts at random from a large store of equivalent parts. The
Table of Contents
I Introduction ..................................................................................... 1
~
§3 Partial Key Techniques ....................................................... 14
§1 Cryptologic ......................................................................... 26
Acknowledgements
The time spent discussing the material in this dissertation with Bernard
lent friendship. Similarly, the time spent with Eugene Lawler, resulting from his
participation in the thesis process was also quite enjoyable, and included many
pleasant sessions during which, among other things, I received his counsel on
the academic life in general and also on quite a range of particulars. Carlo
Se'quin and I had many stimulating discussions, mostly before and as a result of
variety of ways, including participation in the qualifying exam. Bob Fabry and I
worked together for well over a year, and his support during that time excep-
tional. Whit Diffie has contributed to the present work through numerous
with them fulfilled ones expectations about how such relationships make grad-
school: David Chin, Jim Demmel, Robert Hyrele, Peter Kessler, Keith Sklower,
and Tim Winkler. This work started one summer, during which I spent a great
Manuel Blum was also around a lot that summer, and he and I talked. He main-
tained that one should never try to predict the effects of ones actions on
society. It was the rejection of this principle which lead to the present work.
1
Chapter I
Introduction
sarily trust one another. Example applications motivate the need for
use of computers becomes more pervasive. It is not enough that the organiza-
tion maintaining a computer system trusts it; many individuals and organiza-
For example, consider a computer that maintains the checking account bal-
ances of a bank. The bank is concerned, among other things, about possible loss
of balance records. The Federal Reserve Bank must know the total of these bal-
ances, to ensure that the legally required percentage of the balances is on depo-
sit with it. The Internal Revenue Service requires the ability to check the bal-
on their behalf, may wish to ensure that disclosures are made known to those
involved, and that inquiries can never be made on information that is more than
private sector records related to consumers, such as those arising from credit,
keeping, in such areas as tax, social security, education, and military service
must be able to ensure the secrecy of the in~ormation they receive from their
Brokers and other middlemen in the mailing list industry must be able to a
ensure the confidentiality of the lists they receive from a variety of list compil-
prescreening.
All of these applications involve one group who owns or controls the com-
puter system, and who is particularly concerned with reliably maintaining the
operation of the system and with ensuring the survival of the data maintained by
the system-they will be called the "trustees." A second group or set of groups
are primarily concerned about the confidentiality of the data which relates to
them that is available to the system. There may be a third group or set of
groups, which may overlap with the first and second groups, who are concerned
organizations have a similar flavor, because such organizations are often com-
This thesis otiers a system design and feasibility argument for computer
cious groups. Such systems can be used to meet the requirements of applica-
tions like those mentioned in the previous section, if a workable design can be
basis of the approach are introduced in the next chapter, Chapter II. They make
such systems practical by reducing the mechanism upon which reliability and
be called a vault. Vaults will be constructed in a way that can be verified by all
the participants, or by any interested party, and then they will be physically
relationship of the present work to the literature, Chapter II also surveys the
varied literature which lends support to the practicality of the ideas presented:
data and cc,>mmunication. Chapter III abstracts from the techniques of Chapter
II the assumptions which form the basis of the proofs contained in a later
chapter. At the same time, Chapter II also presents some important underlying
assumptions which, although they do not enter directly into the proofs, influence
single vault. This serves the dual purpose of introducing a number of concepts
used in the proposed multiple vault systems, and pointing out a number of
shortcomings of single vault systems which are solved by the systems to be pro-
posed.
The algorithms which define the operation of the multiple vault systems to
Proofs of various security and reliability properties are presented in Chapter VII,
which make use of the assumptions of Chapter III. Analysis of the performance
niques for constructing and placing into operation a secured vault, while main-
taining the trust of potentially mutually suspicious groups. The final chapter,
Chapter X, briefly considers work remaining and the implications of the present
work.
puter systems that can be trusted by those who don't necessarily trust one
tion in its own right. In addition, the present work combines an unusually wide
appear to be new.
The detailed algorithms presented are the result of several major itera-
tions, and are believed to take into account most of the important issues. The
use of cryptography is central to many of the algorithms and is quite a bit more
5
This thesis puts forward a proposal for a new kind of highly secure com-
puter system. The technologies upon which these systems must be based are
§ 1 Cryptographic Algorithms
The various types of cryptographic algorithms used in the present
tile environment.
Conventional Cryptography
were devised to make it very difficult (in some cases impossible) to transform
secret piece of information, called a key. Two correspondents who were the sole
possessors of a key could use it to maintain the secrecy of the message content
are assumed to be public knowledge; only the key need be kept secret.
symbols into other symbols. With a Captain Midnight decoder badge, the badge
is the key, and letters are mapped into other letters. The un-breakable Vernam
cipher maps only single bits into other bits, by adding each bit modulo two with
a different key bit [Kahn 67]. On the other extreme, block cryptographic algo-
rithms map large strings of bits, called blocks, into other blocks. The National
Data Encryption Standard, for example, maps 64 bit blocks into 64 bit blocks,
using a 56 bit key [NBS 77] . Many blocks can be "chained" together during
Authentication. The present work assumes the use of block schemes, like
the Data Encryption Standard, which make it very difficult to modify part of an
as a valid block that has not been altered. In such systems, it becomes
extremely difficult for someone without a key to create a block that will contain
cants with a common key can converse using encrypted blocks of data, checking
the serial number of each received block to ensure that it has arrived in the
proper sequence, and to ensure that it has not been altered [Feistel, Notz and
Smith 75].
[76], and Merkle [78]. To use these algorithms, each participant creates a
private key, that is never revealed to anyone else. Only a suitably related public
key is made known to everyone. Here we will be concerned with public key cryp-
tographic algorithms (like that of Rivest, Shamir and Adleman [78]) where the
two keys are inverses of one another, in the sense that a block encrypted with
an operation which includes encryption with the recipient's public key. Only the
intended recipient can decrypt the received message -because the correspond-
ing private key must be used to decrypt it. A large random number is joined to
the message during sealing, to counter two potential threats: (1) if the same
message is sent more than once, such a message will be revealed as such to an
encrypting the guess with the public key and then checking if the resulting bits
needed to authenticate a message, and hence anyone, not just the holder of a
secret key, can check the authenticity of messages. Someone signs a message
by encrypting it with their own private key. If a serial number of some agreed
upon structure, such as all zeros for example, is joined to the message during
signing, then its presence after decryption with the corresponding public key
Compression Functions
The one-way function and the image of all the passwords under the function are
publicly readable, but they must be protected from alteration. Thus, the ideal
ble.
For the present work, a compression function will be a special kind of one-
way function which maps an arbitrarily large domain into a fixed range, but
which is practically impossible to invert. Such functions are quite handy since
large number of bits. Similar concepts have been described by various authors.
Key Generation
some attention in the literature {see Knuth [7] for example). Sampling the noise
of raw bits (thermal noise and radioactive decay also seem good, but more
tor are widely known. (Notice, however, that detector drift and physicl depen-
dencies in the source contribute to less than perfectly independent raw bits.)
The simplest such technique takes as input successive pairs of independent bits
and outputs say a 1 bit for pairs of the form 1 0, outputs a 0 bit for pairs of the
form 0 1, and produces no output for the other possible pairs 1 1 and 0 0 [Von
Neuman 51; Gill 72]. It is also possible to combine many random numbers of
While details are beyond the scope of the present work, it is important to
notice that many cryptographic algorithms may be quite weak for some choices
of key. Care must be taken to determine if a candidate key is such a weak key
§2 Applications of Cryptography
Discussed are some or the relatively few publications which assume
much of the open literature on cryptography owes its existence to the premise
that such secrecy may not be necessary or even desirable with cryptographic
the "enemy" and only the key is secret. Kerckhoffs [ 1883] made a similar
assumption. Baran [64] provides convincing arguments for making public the
details".
There has been much work that considers the use of encryption for com-
munications security and data security. The remainder of this section mentions
some of the more relevant work in these areas . Work with a heavy emphasis on
11
the cryptographic algorithms themselves has been omitted, however, since this
Communications security
ward and have been touched on by many authors, among them are Feistel, Notz,
and Smith [75] and Kent [76]. Public key protocols for this kind of communica-
Schroeder 78].
secrecy and authentication. Also, O(nZ) keys can be required when n partici-
Heinrich and Kaufman [76] and Branstad [75] described an approach to distri-
buting these keys that uses a central trusted device. (The techniques of the
describe both a centralized scheme and one in which the participants each use a
trusted loc·a l device, all local devices having cryptographically secured commun-
ication amongst themselves. Diffie and Hellman [76] describe a scheme (devised
The key distribution problem was at least part of the impetus for the two
independent proposals of public key cryptography (Merkel [78] and Diffie and
Hellman [76]). Only O(n) keys are required by systems of the kind proposed by
Ditiie and Hellman. The key distribution problem is further simplified because
12
with the growth of electronic mail. The problem of keeping an adversary from
munication system has been called the "traffic analysis problem." Baran [64]
has solved the traffic analysis problem for networks using conventional cryptog-
raphy, but his approach requires each participant to trust a common authority.
second, while allowing the second to respond via an untraceable return address.
selected applications. Applicants retain the exclusive ability to make digital sig-
party can verify that the ballots have been properly counted are possible if
acceptable clients.
Data Security
within operating systems, first suggested by Peterson and Turn [67], suffers
13
from the problem of key management. One might argue that whatever tech-
niques were applied to protect the keys, might have been applied to the data
itself, thus eliminating the need for encryption. But advantage can be taken of
hostile environment are relevant to the present work. There are three impor-
tant considerations for protecting stored data, each corresponding to one of the
cation. First, if the same data is stored more than once under the same key,
then some non-repeating data, such as the random serial number used in seal-
ing, must be included in the data lest the repdition be revealed. Second, it may
a page received from storage if data has been stored at that location more than
that the page can be authenticated as the last copy written. (Solutions to this
problem which also solve the first problem are presented in the work of Bayer
and Metzger [76] mentioned below.) Finally, the pattern of read and write
sary. A most general solution to this last problem, which makes no assumptions
about the application program, might be to alternately read every stored loca-
tion ever written and then to perform a fixed number of writes. Clearly this is
not an attractive solution, and much more reasonable solutions, possibly includ-
ing the introduction of some bogus requests, can be developed by careful design
which is divided into pages. A different key is used to encrypt each page. The
key used for a particular page is produced by encrypting the address of the
page using a master key. Mapped addresses (so that addresses can be changed
14
for new versions of a page) and physical addresses are considered by Bayer and
Metzger [76]. Content addresses have been dealt with by Gudes, Koch, and Stahl
Some simple systems have actually been built that encrypt data at a secure
[Notz and Smith 72; Carson, Summers and Welch 77]. The terminals or their
users are presumably the only holders of the keys so that only they can access
the data.
n parts, each part is given to a different person, and the original key can be re-
created by combining all n parts. These schemes use random bits for each part
except the last, which is chosen so that the desired key is the bit-wise modulo-
two sum of this last part and the rest of the parts. A disadvantage of such
schemes is that if just one part is lost, then the original key can not be re-
created.
The technical report on which this thesis is based (Chaum [79]) introduced
a scheme for dividing a key into parts, called prtrtial keys, in which some
selected subsets of the partial keys are sufficient to re-create the original key.
about the same time, Blakley [79] and Shamir [79] published more elegant
schemes which do not have the inherent flexibility of the multiple encryption
schemes, but can use less space and run faster for large n when the required
sets are all possible sets with cardinality greater than some fixed number.
and the Vernam cipher has even been called a degenerate case of these tech-
niques [Blakley 80]. Further work by Azmuth and Bloom [80] includes means for
determining which if any partial keys submitted for a re-creation are bogus.
§4 Computer Security
The field of computer security is divided into four areas, and each is
many more pieces in the popular press. It is far beyond the scope of the
For the purposes of this section, the field of computer security is divided
Personnel
puter security literature, particularly that aimed at the practitioner. From the
technical point of view, the major issues with respect to personnel are how to
reduce the exposure to personnel, and then how to force conspiracies of persons
for what exposure remains. Essentially two ways to force conspiracy are used.
The most desirable mechanisms are those which can force equally knowledge-
able persons to conspire. For example, the so called "two man rule," used for
control of nuclear weapons, may require that two keys located at substantial dis-
but much more widely used approach is to attempt to limit the knowledge of
individuals to such narrow aspects of a system that they must conspire with oth-
ers in order to have the knowledge and skills required to compromise the sys-
tem (see [FDIC 77] for example). Since the present proposal uses equipment
eralization and extension of the two man rule, many of the personnel issues are
Other questions raised in this literature include: How can trustworthy per-
for controlling the movements of people into and within a facility? What is the
best way to motivate compliance with security relevant rules? and How can the
blackmail, and the combination. Also, one can never be sure that a person's
behavior will remain uniform. For example, stress in personal life, breakdown,
Protection
which the present work may be particularly well suited, answers to the question
Who can make what kind of accesses to what data? may be quite obvious and
simple. In more general purpose systems, such as operating systems and data-
17
kinds of accesses allowed. There may be various design objectives, such as,
For operating systems, the proposed access control models are often
divided between the "access control matrix" approaches [Lampson 74], and the
matrix contains the type of access allowed by each of a set of subjects to each of
which was based on the British scheme, where information is allowed to fiow up
ton [81] has proposed a synthesis of the two approaches. In database manage-
ment systems, the protection structures proposed may be divided between the
access control style and the value dependent. An interesting approach called
cessed.
which allow access rights to be changed and even for the rights related to who
such as that of Harrison, Ruzzo & Ullman [76], demonstrates that it may not be
practical to determine who ultimately may access what, even with rather limited
In general, when preventive means are not available, it may still be possible
Verification
developing certainty that some formally described mechanism has some desired
properties; the term certification is used here to mean that some physical
the relevent literature on verification; little has been found in the literature on
certification (but see Weisman [69]), a topic which is covered in Chapter IX. The
defined a program to be "partially correct" (with respect to some input and out-
put assertions) if the truth of the input assertions before program execution
grams have also appeared (see Ovd.cki and Gries [76] for example). Proving pro-
perties about cryptographic protocols is also receiving attention (see Dolev and
developed and are extensively used for security work (see Cheheyl et al [81] for
tion detail as possible (see Rammamoorthy and So [81] for a survey). For exam-
ple, the HDM (Hierarchical Design Methodology) [Robinson and Levit 77; Levitt,
Robinson and Silverberg 79] uses the specification language presented by Parnas
rithms proposed here.) Global and local security properties of programs execut-
§5 Physical Security
The little open literature ~n protecting equipment from probing and
modification is considered.
specifications.
tampering to an inspector, and those systems which can detect tampering and
can respond by, for example, destroying some secret information. In some
indicating techniques and periodic inspections. (See the next chapter for more
indicating techniques [Poli 78], but almost nothing on high level tamper-
ble and inaccessible location, or to get close enough to obtain an acceptable sig-
nal to noise ratio from even moderately well shielded equipment. (Such loca-
tions may also be quite attractive because of the kinds of communication chan-
Another location which has great potential, and has actually been used for
protecting apparatus (see Sandia [81] for example), is the bottom of well holes
20
beyond the scope of the present work to discuss the various possibilities for
solving these problems in less remote locations, it may suffice to point out that
tamper safing and shielding have obvious importance in intelligence and military
systems, and one can safely assume that these problems have been adequately
solved for these applications. Thus, it appears that the physical security
§6 Survivability
This section surveys the issues in survivable systems, which include
Barriers
nuclear safeguards literature [Sandia 78]. Acceptable barriers for some applica-
tions can be provided by concrete and steel structures, but more sophisticated
and vaults. Such developments are rarely published and are only alluded to in
Reliable Equipment
and related equipment have been developed which use redundant mechanism to
achieve extremely high reliability. (See Randell et al [78] for a relatively recent
survey.) Some of these advances are already enjoying widespread use in earth-
costs and increased dependency on real-time systems. Thus, for the sorts of
applications the present work is directed at, highly reliable systems may be
rather common.
Survivability of Data
One very nice thing about safely encrypted data is that a proliferation of
copies does not pose any additional threat to security, but it has great potential
variety of sites, some of which may be hardened. Also, when broadcast style
data may not even be known to the issuer of the data, and might therefore be
provide secure data storage sites for magnetic recording media. Some of the
blast.
22
Survivability of Communication
lance for military applications. The use of redundant and alternate channels is
one standard approach to the problem [Frank & Frisch 70]. Other more
effective approaches are under development and in use, however, they receive
little coverage in the literature. One important approach is the use of crypto-
broadcast signal which is nearly impossible to jam [Haakinson 78]. Also highly
§7 Related Work
A few extended citations give credit to some relevant earlier work.
It seems appropriate to include this section to put the present work in per-
phy. His plan and motivation for non-military use of cryptography comes
through in the first part of his introduction to "Cryptographic Coding for Data-
out of work on MULTICS under Saltzer, at MIT, and also appeared as a Project
MAC technical report in 1972. The following excerpts indicate the motivation
Parker has provided the public with many amusing tales of crimes per-
instructive.
Chapter III
Assumptions
In the first two sections of this chapter, notation is presented for the cryp-
then used to describe the properties desired of the techniques. Section three
makes explicit the assumptions about certification used in the proofs of chapter
VII. (Certification of vaults is covered in Chapter IX.) The last two sections of the
§ 1 Cryptologic
Defines exactly what a crypto-system is assumed to make intractable.
lic key K is made known to the other users, or anyone else who cares to know it;
the private key J\ 1 is never divulged. The encryption of X with key K will be
denoted K(X), and is just the image of X under the mapping implemented by the
over conventional algorithms results because the two keys are inverses of each
. Forgery
e.g .) and then encrypting with its private key, denoted J\ 1(C.X) = Y. Anyone can
verify that Y has been signed by the the holder of J\ 1 , and determine the signed
key K and the ability to have some items of the forger's choice signed. A forgery
attempt is considered successful if it yields some item Y that has not been
signed using the private key but for which K( Y) = C.X. regardless of what X is .
One forgery strategy is to choose values for Y at random, until one is found
The corresponding private key can be found by using candidate private keys to
decrypt an item encrypted with the public key, until one such decryption yields
Sealbreaking
of uniform size and another set containing the items of the first set in sealed
between the elements of the two sets. One sealbreaking strategy is to guess the
random information R that was used to seal one particular item from the
unsealed set. Prepending the guess to the item and encrypting with the public
key would yield an item from the set of sealed items only if the guess were
De-com pression
roughly key-sized string of bits R. The adversary is assumed to have the func-
sufficient partial keys being able to determine anything about the original key
which was divided is so small it can safely be ignored. Also, knowledge of even
chosen partial keys never gives any clue about the seed used.
29
The entities holding partial keys in this thesis will be assumed "equally
capable". In other words, they will be a homogeneous set, any subset of cardi-
nality greater than the threshold value established for the partial keys will be
be made about other kinds of voting as well. These assumptions strongly flavor
Assume that mutually suspicious groups can know that the plan for a vault
has the desired properties and that the vault operates correctly according to
Verification was discussed in the previous chapter; some new approaches to per-
these attacks vary from total covert control of a vault by an attacker, to simple
(1) Surreptitious corruption-vault has been modified, and secret keys within
attacker, but the attack leaves no trace; attack may consist of probing, lim-
(4) Covert isolation -node kept from communicating with anyone except
§5 Organizational Structure
Defines the three tier organizational structure assumed for the most
The systems design proposed in subsequent chapters further divides this group
into three different bodies, called trustees . The analogs of these bodies in a cor-
poration might be its officers, directors, and stockholders. The following table
(1) trustee level 1-charged with day-to-day operations of the system, which
which the trustees at level 2 must define how difficult it will be for them and
also bow difficult it will be for others to defeat the system. to decide which
31
new vaults will be used; will be able to compromise some security proper-
ties without any attack, but only after giving advance notice.
(3) Trustee level 3 -charged with the ability to restore the whole system in the
some of the basic ideas of the proposed systems, and also to motivate
Chapter IX, a suitable public key and its inverse private key are chosen by a
mechanism within the vault's protected interior, using a physically random pro-
cess as discussed in Chapter II. The public key is then displayed outside the
vault, on a special device certified for this purpose. As far as the world outside
the vault i~ concerned, the possessor of the vault's private key is the vault: it
can read sealed confidential messages sent to the vault, and it can make the
vault's signature.
secret information would be revealed, and the vault would not have taken any
improper action. Other conditions might require an equally safe halt to compu-
information stored in the vault, including the vault's private key, must be
erased.
This information will be encrypted in a special way, and saved outside the
vault, so that a safe recovery can be provided. The encryption of the vault's con-
tents, which includes its private key, is called a checkpoint, and is detailed
below. At suitable intervals, checkpoints are formed, and then stored outside
the vault. In some cases, there may be time to issue un-scheduled checkpoints
checkpoints is that there exists a means to decrypt them, but only at the
appropriate time and place. The decision that some newly sealed vault can, and
Assume, for now, that the decision is to be made by unanimous consent of a set
with a special key for this purpose. Conventional as opposed to public key cryp-
tography can be used for this. This key used to encrypt checkpoints will be
Public key cryptography will be used to distribute these partial keys to the
supplied with a public key issued by each trustee. Thus, the vault can ensure
the confidentiality of the partial key it sends each trustee by sealing that partial
34
key using the trustee's public key. Each trustee now has two keys to keep
secret: a private key used to unseal messages received, and a partial key that
Restarts
A restart is the process by which a freshly sealed vault resumes the compu-
tation whose state has been saved in a checkpoint. After a replacement vault is
certified and sealed, it forms a temporary public key and its inverse private key
from a random seed, and then displays the temporary public key, as the per-
manent public key was displayed in the origi.nal start-up. Then the restarting
vault receives partial keys from the trustees. A trustee provides the secrecy of
its partial key while it is in transit to the vault by sealing it with the displayed
Having received and decrypted the partial keys , the computation within the
replacement vault merges them to form the key originally used. to encrypt
checkpoints, and uses this to decrypt the checkpoint received. The replace-
ment vault then bootstraps itself into the state saved in the checkpoint. Thus,
the original public key found in the checkpoint is reinstated, and the computa-
tion within the replacing vault becomes an exact copy of the original computa-
tion. The restarted vault can then be safely brought back up to date by re-
playing all the messages sent it since the checkpoint was made .
costs. The multiple vault systems to be presented in the following chapters may
be preferred over single vault systems for similar reasons. In addition to the
usual advantages, however, multiple vault systems offer solutions to many of the
Thus, a conspiracy of a sufficient subset of the trustees will have access to all
however, the trustees will be forced to request certain partial keys from the net-
checkpoint. The network will change the keys used to form checkpoints, and the
partial keys it maintains, in such a way that obsolete checkpoints can never be
to forge a vault's signature, since a private key used by a vault only for making
keys sufficient to allow them to decrypt checkpoints. In the multiple vault sys-
tem, the trustees will have to request partial keys from the network to accom-
plish a restart, as mentioned above, and the network will be able to maintain a
record is very useful because it can ensure that only certified vaults have
decrypted checkpoints, and that they have done so only during certified res-
tarts.
operation. For example, the new vault may give greater power of inspection or
keys of vaults to be added into the network and changes in parameters used by
Chapter V
§ 1 Introduction to Algorithms
An overview o[ the algorithms proposed is presented which includes
number of separate vaults, or nodes . Each node will perform essentially the
same algor~thms, but some of its own state may vary. The algorithms are organ-
ized as a set of a dozen and a half independently callable routines . A node will
perform any one of these routines on request, if it is provided with the appropri-
ate actual parameters. Typically, some of the actual parameters of a call will
bear digital signatures formed by other nodes in the system and also by various
trustees. 1f these signatures and the rest of the parameters prove acceptable to
the called routine within a node, then the node may alter its state and/or pro-
duce some signed and possibly sealed output as a result of performing the called
routine. Calls are handled one at a time by a node, so that once a node com-
38
pletes processing of one call, it begins waiting for the next call to be requested.
ensure that: (1) the various security properties provided by the system can not
be violated by any sequence of calls, and (2) the trustees can maintain the reli-
Chapter VII argues these points; the present chapter uses a specification
and agreement among nodes about allowing new nodes into the network, remov-
ing nodes from the network, and the status cf nodes once in the network. The
routines will be called a-functions (for Operation function) since they are an
mentioned in Chapter II. Figure 1 shows seven of the major a-functions. These
a-functions can change the membership of the network and the status of nodes
within the network. For example, the CERTIFY a-function can bring a new node
into the network, leaving the new node in the "initiate" state . Similarly,
states out of the network. These and the other a-functions will be described in
of ll-functions (for Value function), which have been extended to include types
not in the original Parnas notation. Section 5 defines the rather powerful
parameter passing mechanism used both for input and output by the a-
functions, which is an extension of the Parnas notation. Finally, as mentioned
participated
' present
~
t!Q'
c"1
(l)
.....
" REMOVE (T2)
CERTIFY (T2)
" ,"
:<
g
Ul
.......
.....
.......
0
'If v
rvpl.ac1d nod•
rvplac:ing nodlil
" RESTART
,""
~
Ul
APPLY
v v '~
A ) PARTICIPATE ·
' RECEIVE NEW PARTICIPANTS &
NEW PARTICIPANT RECEIVE J
40
language used here. The presentation of the specification language will also use
a variety of type fonts and type sizes, roughly based on those used by Parnas
[72] . Some symbols will appear in upper case, others in lower case, and a few
presented in Table 1.
tions can have arguments of any type . Some primitive functions have no argu-
ments, but those entities with fixed values are called constants.
41
Simple Types
languages. Others are the keys, seeds, and parts of keys used by the crypto-
graphic transformations. Yet others are simply enumerated types, ala Pascal,
special type is used to represent node names. Chapter Vlll contains some dis-
types, and the constructed types of the next subsection, for purposes of
A simple context free grammar will be used to illustrate the basic syntax of
the specification language. The first production of the grammar is shown here:
Constructed Types
The elementary types of the previous subsection may be combined into sets
further developed for HDM [Levi, Robinson and Silverberg 79], but resembles the
sets and maps of the SETL programming language [Dewar, Schonberg and
elements of the type. The usual set operators will be found in the next section.
A table is much like a one or two dimensional array, but it may be sparse and
have non-integer subscript types. The following gives a syntax for these
43
constructed types:
simple-t11Pe ~ elementary-t11Pe I
set of elementary-t11Pe I
table[elementa71rtype] of simple-fwe I
table[ elementary-type ][elementary-type] of simple-t11Pe 1·
this chapter.
Simple Primitives
These primitive functions take zero or more parameters, and return a value
of a simple type. Some are generic in that some parameters need not be of any
particular simple type. Such parameters will be shown as type m:ty-type. Many of
the primitives are familiar, like those needed to determine the current time and
which create seeds, create keys and partial keys from seeds , and merge partial
keys. The following identity provides an example of the use of the partial key
primitives. It simply asserts that partial-keys formed from a key using a com-
if s =create-seed() then
memerge-partials(Jor7Tirpartial(1, s, m, 2),form-partial(2, s, m, 2))
compress(a:Blly-type)-+i:integer
Returns a cryptographic compression of the argument into an
integer. Thus, given a and i = compress( a.) and the function
compress, it is infeasible, under the assumptions of Chapter III,
for an adversary to produce a.' such that i = compress(a') and
a''¢ a.
now()-+time Returns the time maintained by the clock of the instant node.
suicide (m:integer) .
A real-time counter is set to count down for an mterval of m,
and if the counter ever reaches 0, the instant vault sets all its
secret V-functions to the value erased and in effect kills itself.
ca.rdinality(s:set of Blly-type)-+integer
Returns the number of distinct members of the sets.
-, u, n _.set of any-type
The usual infix operators defined on sets, returning sets.
E: , ~ , !: -+boolean
Set membership, its negation, and subset.
Simple Constants
Besides the standard use of Arabic numerals as literal constants, there are
two major sorts of constants used in the specification language. One kind of con-
stant is used to indicate the various vacuous values, such as the empty set, un-
initialized or don't-care values, and a special value indicating that all informa-
tion about any previous value of the function is lost. The second sort of constant
is used to reference information certified into the vault initially which specifies
the keys, number and quorum sizes of the two groups of trustees and the
include mechanisms to allow some or all of the constant values related to the
may not wish to do so if the ground rules for its security can be revised in an
arbitrary way.
§3 Secret ¥-functions
The ¥-functions which record information not publicly available are
state. The Y-functions of a vault can be divided into those which the vault must
keep secret and those which are public knowledge. This section presents the
The Y-function definitions presented here usually include three parts: (1) a
heading which defines the name and type of the Y-function; (2) an initial value
47
part that includes the name and an express 1·0 n wh ose va1ue 1s · ·t·1a1 va1ue;
· th e m1
and (2) a comment part which discusses the intended use of the Y..function.
The following productions give the basic idea of the syntax, further details
Vaults must at minimum maintain the secrecy of their private keys upon
which the security of the entire system relies. There will be two different kinds
of secret keys, as mentioned in the previous chapter. Some keys need never be
known outside the vault-these are the node secret keys . Other keys are kept
secret by the vault, but they have been divided into partial keys and provided to
other vaults for use during a restart-these are the application secret keys. In
separately.
The V-functions described in this subsection never leave the vault. When
the vault destroys its own information content, the values of these Y..functions
This sub-section makes the first formal reference to the notion of sub-
partial keys. These are just partials of partial keys. In other words, some thres-
hold of sub-partial keys are sufficient to reconstruct the original partial key
from which the sub-partials were originally formed. The algorithms in this
chapter allow the trustees to decide how many, if any, sub-partial keys will be
48
used by the network. The reason for this is that while the use of sub-partials
does provide somewhat more convenience and flexibility in the operation of the
network, they also have non-trivial cost in terms of system resources (see
"quorum" of nodes to, among other things, cause any node not participating in
the last key change to become "participated" and enter a state equivalent to
that which would have been achieved had it participated in the key change, res-
tart nodes in an arbitrary order, and diminish the quorum size. The essence of
"present'' nodes to form a partial key for other nodes in the network.
with partial keys of the most-recently completed key change, and that
the next key change . Of course there is presumably much secret application
data which must be included in checkpoints, and it should also be divided into
current change period and new period -so that obsolete application data
APPLICATION_PRIVATE:private-key: V-function
=
Initial value: APPLICATION_PRIVATE create-private(create-seed())
Comment: The private application key of the instant node.
§4 Non-Secret V-functions
Those ¥-functions are pres en t e d whic h relate to node state that is
not secret.
ing other Y-functions, and they have a "derivation" part instead of an initial
value part:
The OWN_NODE Y-function is special in that its value never changes during
the life of a node, but the actual initial value of each node's OWN_NODE must be
Consensus Y-Junctions
have identical value for all nodes with the same value of CYCLE (which is defined
in the next subsection). They define the status of the network. As a notational
CONSENSUS_ V-FUNCTIONS.
52
MINIMUM_MARGIN:integer: V-function
Initial value: MINIMUM-MARGIN= 1
Comment: The small~st allowable value of MARGIN. The value of
MINIMUM-M_ARGIN 1s changed only by SET-MINIMA , and can not be set
belo': 1,. Wh1Ch ensures that MAJORITY is always a simple majority of
card'Lnal'Lty(PRESENT).
'
Comment: The current quorum.
I
SUB-PARTIALS_REMAINING:table[node-id] 0 f · t .
. . m eger: V-funcbon
Imtlal value: 'dn SUB-PARTIALS_REMAIN!NG[ J _
n -undefined
Comment: Returns the number of sub- artials ..
New entries are established by CERTjFY. remammg for the nth node.
NEW_SUB-PARTIALS_RE1J.AINING:table[node-1·d] 0 f m
· t u .
eger: r-funcbon
Initial value: 'dn NEW_SUB-PARTIALS REMAINING[ ]
- n = undefined
Comment: Returns the number of sub-partials that
node during the current k h . are needed by the nth
CREATE_KEYS. ey c ange penod as established in the last
LAST_CHANGE:integer: V-function
Derivation: LAST_CHANGE = LAST_CHANGES[i]
t'd J ~LAST_CHANGES[i] ~ LASLCHANGESIJ]n
Comment: Returns the number of the last key change the instant node has
processed, whether or not the instant node participated.
SUICIDE_INTERVAL:integcr: l'-function
Initial value: SUICIDE-INTERVAL= cooling-off-interval
Comment: Returns a time interval (i.e. an integer) during which a node must
become participated or it will commit suicide. The actual ~all to. suicide
is made on the SUICIDE-INTERVAL minus the amour:t of tu:ne smce the
earliest timestamp among the majority of s1gnator~es to . the
CHANGE-KEYS or PARTICIPATE in which the instant node 1s a subJect.
· s uch that a SET- MINIMA must occur before. .a
· ·t·1a1 va1ue lS
Th e 1n1
cooling-off-interval has elapsed since the first CHANGE_KEYS partici-
pated in.
55
Individual ¥-functions
tained by all participated nodes will ultimately include node ids from all partici-
OWN_NODE:node-icl l'-function
Comment: Returns the node-id which identifies the instant node for its entire
life. The value should be distinct from that of all other nodes, so that
CERTIFY will allow the node to be initiated into the network. Examples of
possible actual implementation values include the simple serial numbers
of a node or the initial node public key.
PHASE :1 .. 2: V-function
Initial value : PHASE = 1
Comment: Returns the current phase, either 1 or 2, which is used by all syn-
chronized a-functions. When PHASE= 1 a node will add its signature to
any announcement or action which has insufficient signatures and does
not raise an exception, then the node will change to PHASE = 2. When
PHASE= 2 a node will not add its signature to any a~nounc~~ent. _In
either phase, when a node recei:es a~ an_nouncement w1lh sutilCtent _slg-
natures and no exception is ra1sed, 1l Wlll perform the effects secllon,
which includes setting PHASE= 1 and incrementing CYCLE.
CYCLE:integer: l'-function
Initial value: CYCLE = 1
Comment: The basis of all synchronization of the_ network, this monot~nically
· · 1 that all nodes w11l process synchromzed o-
1rncret~smg_ va ue telnstuhreessame order Returns the serial number of the
unc 1ons m exac Y · d h t t f rm
next announcement or action which the present no e as ye o per o .
NEW-NODE-PUBLIC:public-key: Y-function
Initial value: NEW_NODE_PUBLIC: =undefined
Comment: Returns the instant node'
corresponds with NEW_NODE_PRIV;T;wn ~ew node public key, which
during the last CREATE-KEYS. ' an whose value was determined
NEW-APPLICATION_PUBLIC:public-key: V-function
Initial value: NEW_APPLICATION_PUBLIC: =undefined
Comment: Returns the instant node's own new r t'
corresponds with NEW APPL!C'AT app tea lDn public key, which
• - r1 ION_PRIVATE and whose val
determmed during the last CREATE_KEYS. ' ue was
data.
An unusually powerful param t .
e er mechamsm has been incorporated into
the specification language used he re, f or several
reasons. First, it allows the
underlying structure of multiply encrypted
messages to be shown clearly.
Second, it allows much of the routine c h ec k'mg and cryptographic transforma-
tions to be handled cleanly, and without c omp rlca t'mg the rest of' the
. algorithm
description unnecessarily. Third ' th e particular form used here can also provide
Templates
The basic syntax for the parameter description mechanism, called a tem-
part of a template, or an entire template, that is optional. The rules for when
the optional parts must appear in input, and when they are output are covered
describing input, the actual parameter supplied must have the identical value;
value of the formal parameter (which must be of the specified type) in an output
ing input actual parameter does not have the value of the expression. It is used
needed. The most elaborate form is expression =name :type. It serves the
same function as the previous form, except that a parameter name is associated
with the value. When only a name is supplied, name :, the type and value are
obtained from another item with the same name. When only a type is supplied,
Several items or even whole templates in an G-function may share the same
name . Items with the same name must have the same value . Templates with
the same name are just different copies of the same template. The next section
The three template types were shown in the formalism of the previous sub-
.
sec t 1on as cons t rue t OT-·:~r~
....J..rn,
· Th'1s subsection gives a detailed description of
each, but these descriptions are best ta k en t oge th e r with those of the template
Template Primitives
applied, free use can be made of the items of the construction. The omission of
structions are output if and only if their signed construction is the subject of a
with an additional signature if they are the subject of a sign primative -even
tive functions. It simply asserts that sealing and signing are inverses when keys
if s =create-seed() then
m=unseal (seal (m, create-public (s)), create-private (s))
unseal(sealed<a:any-type, 0
•k :private-key) ...
• ) ,
§6 Synchronized D-functions
Presents the remainder of the sp ifi t·
ec ca 1on language and uses it to
define the major D-functions of the proposed design.
actions performed by the network. These allow for consensus by the nodes on
ure 1 shows the D-functions which change the status of individual nodes, such as
by certifying them into the network, removing nodes from the network, and res-
tarting a disabled node. The CHANGE_KEYS D-function of the figure allows a set
of nodes to each change their public keys and receive new partial keys from the
other nodes, once the new partials have been sealed with the receiving node's
new keys. One other G-function, not shown in the figure, has an impact on the
ters.
provided by a cycle counter, CYCLE, maintained by each node . Each node can
perform the action of only one synchronized Q-function call for each successive
cycle. A majority of present nodes must each sign a template which defines
every synchronized D-function call and the numbered cycle during which it is to
be performed. No node signs more than one template during a single cycle.
This arrangement ensures that nodes perform exactly the same D-function call
are not in a position to compromise system security, but are able to perform
· t the system's reliability; trustees
the day to day operations necessary o ensure
63
the definition of the security relevant parts of the call must be included in a
trustee level 1 call to PROPOSE, which takes up one cycle. After this call has
level 2 action can be performed, by the corresponding trustee level 2 call. Any
other actions may occur during intermediate cycles, and the trustee 2 level call
the purposes of the present work, the simple input parameter list of the Parnas
notation has been extended into optional input and output parts, which use the
exception conditions, all of which are checked sequentially. If all the checks are
Some of the statements which make up the effects part are boolean expres-
sions. They have the effect of changing their constituent V-functions or formal
· t ue Other statements do not
parameters to values which make the expresston r ·
· T functions with side effects.
return values, but rather are composed of prtml lVe
t' All values of V-functions
There . is no implied sequential order of execu lon.
f the v-function after the entire a-
within the effects part represent t h e va1ue 0
64
0-function -+header
. input output comme n t excep t'tons effects
h ea d. er 'Lnput comment exceptions effects I
header output comment exceptions effects
header -+name :0-function
input -+ Input: template
output -+ Output: template
comment -+Comment: wildcard
exceptions -+ Exceptions: exception-list
exception-list -+ exception-list ,exception I exception
exception -+ name : boolean-expression
effects -+ Effects: statement
statement -+ boolean-expression I ~statement-list J I
if boolean-expression then statement I
if boolean-ex]Jression then statement else statement
with name [expression ]statement
statement-list -+ statement-list , statement I statement
boolean-expression -+ ~boolean-expression I
(boolean-expression) I
boolean-primitive-function(expressio'Tirlist) I
expression predicate expression I
if boolean-expression then boolean-expression I
if boolean-expression then boalea'Tirexpression
else boolean-expression
qua.ntifier nrune :elementary·type ~boolean- expression J I
quantifier name :elementary-type
quantifier nctme :elementan.rtype ~boolean-expression J
expression -+ name I 'name •I expression operator expession I
(expression) I name [expression] I
name [expressian][expression] I
let name = expression I
with name [expression]expression I
primitiv e-Junc tion ( expre s sian-list)
expressio'Tirlist -+ expressio'Tirlist, expression I expression
· h t
The keyword "let" is used to establis empor
ary variables within a-
functions to avoid re-writing long expressions. The keyword "with" is used,
L
much as in some programming languages • to extend the qua l'fi t·
1 ca wn of a name
expression.
Trustee 2 D-functions
There are three trustee level 2 D-functions. The CERTIFY function is used
to bring new nodes into the network, as can be seen in Figure 1. This function is
even subverted nodes (see Chapter III) are brought into the network, then many
of the security measures are useless. It can also be used to establish and
modify a set, for each non-applied node, of nodes that the node can replace dur-
ing a restart. (This might be used in an application where some nodes have data
minimum quorum of present nodes required for system operation, and the
amount of time a node will wait to participate before it erases its own secret. v-
function values. All three of these parameters determine the difficulty of the
One thing to notice about these func~ion definitions is that some of the
latter exceptions and initial effects are the same. These common mechanisms
are used to establish synchronization. When one of these functions is called and
the ANNOUNCEMENT template does not have signatures from a majority of present
nodes _(and the present node has not added its signature to an announcement of
the current cycle), then the node simply adds its signature to the announce-
uu
that cycle must first be called to obtain sufficient signatures on the desired
CERTIFY: G-function
Input:
ANNOUNCEMENT:signatured
<NODE_CERTIFIED :node-id
NODE_KEY: public-key,
APPLICATION_KEY:public-key,
NODES_RESTARTABLE :set ofnode-id,
TRUSTEES_SUPPLYING :set of node-id
TRUSTEES _PART/ALS :table[node-id] of
TR USTEE_PARTIALS : scaled
<:table[node-id] of partial-key>,
PROPOSAL-CYCLE-# :integer,
CYCLE = CYCLE-# :integer,
COMPRESSED_HJSTORY = :integer,
certify= :announcement-kind>,
PROPOSAL: signatured
<NODE_CERTIFIED:node-id
NODE_KEY: public-key,
APPL/CAT/ON_KEY:public-key,
NODES_RESTARTABLE :set of node-id
LATEST_T/MESTAMP:time,
PROPOSAL-CYCLE-# :integer,
propose-certify= :proposal-kind>
Comment: The set of nodes the NODE_CERTIFIED is allowed to restart is
changed to NODES_RESTARTABLE. If the NODE-CERTIFIED node id is not in
NODES_/N_ USE. then it becomes included in NODES_JN_ USE. and the
NODE-KEY and APPL/CAT/ON_KEY parameters input are used to establish
table entries corresponding to the new node. All nodes change the set of
nodes the NODE_CERTIFIED is allowed to restart to NODES_RESTARTABLE. If a
node's own id appears in its NODES_RESTARTABLE then it is allowed to be
67
sET-MINIMA: D-function
Input:
ANNOUNCEMENT:signatured
<NEW_M/NIMUM_QUORUM :integer,
NEW_M/N/MUM_MARGIN:integer,
NEW _s U/ C/DE_/NTERVAL :integer,
PROPOSAL-CYCLE-# :integer,
CYCLE = CYCLE_# :integer,
COMPRESSED-HISTORY= :integer,
set-minima= :announcement-kind>,
PROPOSAL :signatured
<NEW_M/NIMUM_QUORUM :integer,
NEW_M/NIMUM_MARG/N :integer,
NEW _s U/C/DE_/NTERVAL :integer,
LATEST_T/MESTAMP :time,
PROPOSAL-CYCLE-# :integer,
propose-set-minima= :proposal-kind>
Comment: The V-functions holding the minimum values are changed to the
values of the corresponding parameters. The new minima must not be
larger than a possible current actual as opposed to minimum value.
Exceptions:
NEW_M/N!MUM_MARG/N_TOO_SMALL : NEW_M/N/MUM_MARGIN <1
NEW_M/NIMUM_MARG/N_TOO_B/G ; NEW_M/N/MUM_MARG/N >MARGIN
NEW_M/NIMUM_QUORUM_TOO_B/G : NEfLMINIMUM_QUORUM > QUORUM
PROPOSALNOT_PENDING : PROPOSAL-CYCLE_# t PROPOSALS-PENDING
INSUFF/C/ENT_TRUSTEE_'LS/GNATURES: ~check-signatured
(ANNOUNCEMENT-DEFINITION, trustee-2-publics, trustee-2-quorum)
/NSTANLALREADLS/GNED-ANNOUNCEMENT: PHASE= 21\
~(let S/GNATURES_OF_MAJOR/TLOF_PRESENTS =
check-signatured(ANNOUNCEMENT, ~Vn:node-id
~ if n E: PRESENT then NODE_PUBLICS[n]jj, MAJORITY))
INSTANLNOLS/GNATORY: ~:3K : public-k:ey ~k E: ALL_OWN_NODE_PUBLICS 1\
check-signature (PROPOSAL, k)l
TOO-EARLY: now - LATEST_T/MESTAMP < cooling-nff-interual
Effects:
if ~SIGNATURES_OF_MAJOR/TLOF_PRESENTS
then
~sign(ANNOUNCEMENT, NODE-PRIVATE), PHASE= 2l
else~
PROPOSAL-CYCLE-# t PROPOSALS-PENDING,
CYCLE= 'CYCLE'+l,
PHASE= 1,
COMPRESSED-HISTORY=
compress('CONSENSUS_ V-FUNCTIONS '),
69
MINIMUM_QUORUM = NEPI_MJNIMUM_QUORUM,
MINIMUM_MARGIN = NEW_MJNIMUM_MARGIN,
SUICIDE-INTERVAL= NEPI_SUIC!DE_JNTERVAL~
REMOVE-NODES: D-function
Input:
ANNO UNCEMENT :signatured
<NODES_TO_REMOVE:set of node-id
PROPOSAL_CYCLE_fl :integer,
CYCLE = CYCLE-# :integer,
COMPRESSED_HJSTORY =:integer,
remove= :announcement-kind>,
PROPOSAL :signatured
<NODES_TO-REMOVE:set of node-id
LATESLTIMESTAMP :time,
PROPOSAL-CYCLE-# :integer,
propose-remove = :proposal-kind>
Comment: The node ids of the NODES_TO_REMOVE are removed from
NODES_fN_USE, and all secret table entries for the NODES_TO_REMOVE are
erased. The removed nodes commit suicide.
Exceptions:
NO_SUCH_NODE_JN_USE: ~NODES-REMOVED C NODES_JN_ USE
fn E: NODES-REMOVED 1\ n E: PRESENT
REMOVJNG_PRESENT: 3n:node-id
PROPOSALNOT_PENDING: PROPOSAL-CYCLE-# t PROPOSALS-PENDING
INSUFFICIENT_TR USTEE-2-SIGNATURES: ~check-signatured
(ANNOUNCEMENT-DEFINITION, trustee-2-publics, trustee-2-quorum)
INSTANT-ALREADLSIGNED-ANNOUNCEMENT: PHASE= 21\
~(let SJGNATURES_OF_MAJORITLOF_PRESENTS =
check-signatured (ANNOUNCEMENT, ~ 'v"n:node-id
~ if n E: PRESENT then NODE_PUBLICS[n]! l. MAJORITY))
INSTANLNOT_SJGNATORY: ~ 3 K:public-key ~k E: ALL_OWN_NODE_PUBLICS 1\
check-signature (PROPOSAL, kH
TOO_EARLY: now -LATEST-TIMESTAMP <cooling-off-interval
Effects:
if ~SIGNATURES_OF_MAJORITLOF-PRESENTS then
!sign(ANNOUNCEMENT, NODE-PRIVATE), PHASE= 2~
else!
PROPOSAL-CYCLE-# t PROPOSALS-PENDING.
CYCLE= 'CYCLE'+l,
PHASE= 1,
COMPRESSED-HISTORY=
compress('CONSENSUS_ V-FUNCTIONS '),
NODES_IN_USE = 'NODES_IN_USE'- NODES_TO_REMOVE,
=
USED-NODE_IDS 'USED_NODE_IDS' u NODES_TO_REMOVE,
APPLIED = 'APPLIED'- NODES_TO_REMOVE,
'v"n:nodc-id f if n E: NODES_TQ_REMOVE then
fPARTIAL_KEYS[n] =erased,
'v"i:integer f if 1 ~ i~ SUB-PARTIALS_REMAJNING[n] then
=
fSUB-PARTIALS[n][i] erasedllll
if OWN_NODE E: NODES_TO_REMOVE then suicide (O)l
Trustee 1 D-functions
they cross over the boundary between trustee level 1 and trustee level 2. The
The APPLY function takes any suitably certified node in a "veteran" state
(i.e. a node that has been present before), and makes it "applied," that is dedi-
present and participated states, and also may change the current majority. The
RESTART function was touched on in Chapter IV, and is simply a way for a
node. The PARTICIPATE function can be used to transfer a single node from
some state outside the participated state to the participated state, an effect
The remaining two functions are relate.d. First, the CREATE-KEYS function
is called and results in each node forming a new set of keys, and outputting the
appropriate public keys. These public keys are then used in conjunction with
new partial and sub-partial keys among the nodes hoping to participate in the
key change. Other synchronized a-functions may be taking place while these
71
keys are exchanged. Finally, during some later cycle, the CHANGE_KEYS a-
function is called. It defines the new set of participated nodes and causes all
Again, there are common exceptions and parts of the effects which provide
PROPOSE: D-function
Input:
ANNO UN CEMENT_DEFINITION:signatured
<PROPOSALDEFINITION:
* <NODE_CERTIFIED :node-id
NODE-KEY:public-key,
APPLICATION_KEY:public-key,
NODES_RESTARTABLE :set of node-id>,
*<NEW_MJNIMUM_QUORUM :integer,
NEW_MJNIMUM_MARGIN :integer,
NEW_SUJCJDE_JNTERVAL :integer>,
* <NODES_TQ_REMOVE:set of node-id>,
KJND_QF_PROPOSAL :proposal-kind
CYCLE = CYCLE-# :integer,
COMPRESSED-HISTORY= :integer,
propose= :action-kind> ,
Output:
PROPOSAL :signed
<PROPOSALDEFINITION:,
LATEST_T/MESTAMP :tim.e,
'CYCLE' = CYCLE_fl :integer,
KIND_QF_PROPOSAL :proposal-kind>
Comment: A Signed copy of a definition of the proposed action, PROPOSAL, is
output which includes the latest single timestamp of the quorum of nodes
signing the announcement.
Exceptions:
INS UFFICIENLTR USTEE-LSIGNATURES: ~check-signatured
(ANNOUNCEMENT , trustee-1-publics, trustee-1-quorum)
INSTANT-ALREADLSIGNED_ANNOUNCEMENT: PHASE= 21\
~(let SIGNATURES_QF_MAJORITLOF_PRESENTS =
check-signatured(ANNOUNCEMENLDEFINITION, ~'dn: node-id
f if n c PRESENT then NODE-PUBLICS[n]ll. MAJORITY))
Effects:
72
if ~SJGNATURES_OF_MAJOR!TY_OF_PRESENTS then
~sign (ANNOUNCEMENLDEFINITION) , PHASE= 2~
else~
CYCLE= 'CYCLE'+1,
PHASE= 1.
COMPRESSED_HJSTORY =
compress('CONSENSUS_ V-FUNCTIONS '),
CYCLE-# E PROPOSALS_PEND!NG,
LATEST-TIMESTAMP= latest-signature (ANNOUNCEMENT-DEFINITION),
sign(PROPOSAL, NODE_PRJVATE)~
CANCEL-PROPOSAL: G-function
Input:
ANNOUNCEMENT_DEFINITION :signatured
<PROPOSALS_TO_CANCEL :set of integer,
CYCLE = CYCLE-# :integer,
COMPRESSED_HJSTORY = :integer,
cancel= :action-kind>
Comment: The PROPOSALS_TO_CANCEL are removed from
PROPOSALS_PENDING and therefore can no longer be used.
Exceptions:
BAD-PROPOSALS: ~PROPOSALS_TO_CANCEL!: PROPOSALS_PENDJNG
INSUFFICIENT_TR USTEE_LSIGNATURES : ~check-signatured
(ANNOUNCEMENT, trustee-1-publics, trustee-1-quorum)
JNSTANT-ALREADLSIGNED-ANNOUNCEMENT : PHASE= 2/\
~(let SIGNATURES_OF_MAJORITLOF_PRESENTS =
check-signatured (ANNO UN CEMENT_DEFINITION, ~ "v'n:node-id
~ ifn E PRESENT thenNODE_PUBLJCS[n]~l. MAJORITY))
Effects:·
if ~SIGNATURES_OF_MAJORITY_OF_PRESENTS then
~sign (ANNOUNCEMENT-DEFINITION), PHASE= 2~
else ~
CYCLE= 'CYCLE'+l,
PHASE= 1,
COMPRESSED-HISTORY=
compress('CONSENSUS_ V-FUNCTIONS '),
PROPOSALS_PENDING =PROPOSALS-PENDING- PROPOSALS_TO_CANCEL~
73
APPLY: D-function
Input:
ANNOUNCEMENT-DEFINITION:signatured
<NODES_TO_APPLY:set of node-id
CYCLE =CYCLE_ff :integer,
COMPRESSED-HISTORY= :integer,
apply = :action-kind>
Comment: The identified node(s) are added to APPLIED, and all their
certifica_tion is removed. They expunge their own set of trustee partials.
The subJect nodes can now adopt an application, and can no longer be
used as the replacing node in a restart.
Exceptions:
BAD-NODES : ~NODES_TO-APPLY C: NODES_IN_USE
ALREADY-APPLIED : 3n:node-id !n E: NODES_TO-APPLY /\ n E: APPLIED~
INADEQUATE_CERTIFICATION: ~ 3n:node-id !n E: NODES_ TO-APPLY/\
n t. CERTIFICATION[n]
INS UFF!CIENLTR USTEE_LSIGNATURES : ~check-signatured
(ANNOUNCEMENT , trustee-1-publics, trustee-1-quorum)
INSTANT-ALREADY-SIGNED-ANNOUNCEMENT: PHASE= 2/\
~(let SIGNATURES_OF_MAJORITY_OF_PRESENTS =
check-signatured(ANNOUNCEMENT_DEFINITION, !'Vn:node-id
! if n E: PRESENT then NODE_PUBLICS[n]ll. MAJORITY))
Effects:
if ~SIGNA TURES_OF_MAJORITY_OF_PRESENTS then
!sign(ANNOUNCEMENT_DEFINITION) , PHASE= Zl
else!
CYCLE= 'CYCLE'+l,
PHASE= 1,
COMPRESSED-HISTORY=
compress('CONSENSUS_ V-FUNCTJONS '),
Va:node-id! if a E: NODES_TO-APPLY then CERTIFICATION[ a] =empty l,
if OWN_NODE E: NODES_TO-APPLY then "v"n:node-id
! ifn E: CERTIFICATION[OWN_NODE] then
OWN_TRUSTEE_PARTIALS[n] =erased!.
APPLIED= 'APPLIED' u NODES_TO-APPLYl
CHANGE_PRESENT: D-function
Input:
ANNOUNCEMENT_DEFINITION:signatured
<NODES_TO_BECOME-PRESENT:set of node-id
NODES_TO_BECOME-ABSENT:set of node-id
NEW_MAJORITY:integer,
74
Effects:
if ~SIGNATURES_OF_MAJORITLOF-PRESENTS then
~sign(ANNOUNCEMENLDEF!NITION), PHASE: 8J
else~
CYCLE= 'CYCLE'+l,
PHASE= 1,
COMPRESSED-HISTORY=
compress('CONSENSUS_ V-FVNCTJONS '),
PRESENT= ('PRESENT'-NODES_TO.JJECOME-ABSENT) lJ
NODES_TO_BECOME_PRESENT,
MAJORITY= NEW_MAJORITYJ
if MAJORITY< QUORUM then 'Q-'n:node-id
~if n E: NODES_JN_ USE 1\ (let NS_QUORUM =
QUORUMS[LAST_CHANGES[n]]) > NEJL!IAJORITY then
HSUB-PARTIALS_REMAINING[n] =
'SUB-PARTIALS_REMAINING'[n]-
NS_QUORUM-NEW_MAJORITYj,
f'Q-'i:integer ~if NS_QUORUM < i~ NEW-MAJORITY then
SUB-PARTIALS[n]
['SUB-PARTI ALS_REMAIN IN G '[n] -i-
NEW_MAJORITY] E: SUB -PARTIALS-RELEASED~~ J~
RESTART: D-function
Input:
ANNOUNCEMENT_f)EFJNIT/ON:signatured
<REPLACED-NODE :node-id
REPLACING_NODE :node-id
CHECKPOINT: (see ISSUE_CHECKPOINT ),
CYCLE =CYCLE-II :integer,
COMPRESSED-HISTORY= :integer,
restart= :action-kind>
Output:
*PARTJAL_FOR-.A.SSUME_APPLICATION:signed
<REPLACED_NODE:node-hl.
REPLACING_NODE :node-id
PARTJAL_SUPPLIED :sealed<partial-key>,
RESTART_to_ASSUME_APPLICATION =:transfer-kind>
Comment: The replaced node, which must be applied and not present, is in
effect REMOVE_NODESed. The replacing node must be certified to
replace the replaced node, and it becomes applied. The replacing node _is
supplied with partials for the replaced node. These are used m
ASSUME_APPLICATION to recover the replaced node's application data
and messages sent after the last checkpoint.
Exceptions:
BAD-REPLACED-NODE: REPLACED-NODE E: PRESENT V
REPLACED-NODE~ NODES_IN_ USE
APPLICATION_PUBLICS[REPLACING_NODE] =
APPLICATION_PUBLICS[REPLACED_NODE],
REPLACING_NODE E: APPLIED,
REPLACED_NODE ~ APPLIED,
PARTIAL_KEYS[REPLACED-NODE] = erased,
'Vi:integer ~if 1 ~ i~ SUB-PARTIALS_REMAINING[n] then
~SUB-PARTIALS[REPLACED_NODE][i] = era.sedj,
=
PART/AL_SUPPLIED 'PARTIAL-KEYS '[REPLACED-NODE],
seal(PARTIALSUPPLIED, NODE_PUBL!CS[REPLACING_NODE]),
sign.(PARTIAL_FOR_ASSUME_APPLICATION, NODE-PRIVATE),
if OWN_NODE = REPLACING_NODE then 'Vn:node-id
~if n E: CERTIFICATION[REPLACING_NODE] then
OWN_TRUSTEE-PARTIALS[n] = erasedn,
if 0 WN _NODE = REPLACED-NODE then suicide ( 0) l
I I
pARTICIPATE: D-function
Input:
ANNOUNCEMENT_DEFINITION:signatured
<NODE_PARTICIPATED :node-id
NODES_RECEIVED_FROM:set of node-id
PARTIALS_ALR EADLR ECEIVED :signatured
<KEY_CREATION_# = :integer,
NODES_RECEIVED.J'ROM:set of node-id
=
partials-received :transfer-kind>,
CYCLE = CYCLE-# :integer,
COM PRES SED_HIS TORY= :integer,
participate = :action-kind>
Output:
*SUB-PARTIALS._SUPPLIED:signed
<CYCLE = CYCLE_# :integer,
SUB-PART/ALS:sealed<:table[node-id] of partial-key>,
PARTICIPATE_to_NEW_PARTICIPANLRECEIVE =:
transfer-kind>
*PARTIALS-AND_SUB-PARTIALS:table[PARTICIPATED] of
PARTIAL_AND_SUB-PARTIALS :signed
<RECIPIENT:node-id
PARTIAL :sealed< partial-key>,
NUMBER_OF_SUB-PARTIALS:integer,
SUB-PARTIALS :sealed<table[integer] of partial-key>,
PARTICIPATE_to_RECEIVE_NEW_PARTICIPANT =:
transfer-kind>
Comment: Participated nodes each supply the node to be participated with
sub-partials of every node for which the node to be participated is miss-
ing partial keys . The node to be participated issues partials and sub-
partials for itself to all the participated nodes, just as in issue-partials.
Two unsynchronized a-functions are allowed:
RECEIVE_NEW_PARTICIPANT for the participated nodes to pick up their
partials and sub-partials (not as new), and NEW_PARTICIPANT_RECEIVE
for the entering node to pick up a set of sub-partials.
Exceptions:
BAD_NODE_PAJ?TICIPATED: NODE.YARTICIFATED E PARTICIPATED V
NODE-PARTICIPATED ~ NODES_IN- USE
INSUFFICIENT_SUB-PARTIALS: 3n:node-idtn E: NODES-IN_ USE 1\
LAST_CHANGES[NODE-PARTICIPATED] < LAST_CHANGES[n] 1\
SUB-PARTIALS_REMAINING[n] < lj
BAD-ALREADY-RECEIVED-FROM_S/GNATURES: ~check-signatured
(PARTIALS-ALREADLRECEIVED.
NODE_PUBLICS[NODES_RECEIVED-FROM] V
NODE_PUBLICS[OWN_NODE].
cardinality (NODES-RECEIVED-FROM+ 1))
78
JNSUFFICIENT_TRUSTEE_LSIGNATURES: ~check-signatured
(ANNOUNCEMENT, trustee-1-publics, trustee-1-quorum)
INSTANT......ALREADLSIGNED-ANNOUNCEMENT: PHASE= 21\
~(let SIGNATURES_OF_MAJORITLOF_PRESENTS =
check-si~na.tured(ANNOUNCEMENLDEF!NITION, ~'<>~n: node-id
~ 1f n E: PRESENT then NODE_PUBLICS[n]!j. MAJORITY))
Effects:
if ~SIGNATURES_OF-MAJORITLOF_PRESENTS then
~sign (ANNOUNCEMENT_DEF!NITION), PHASE= 2j
else ~
CYCLE= 'CYCLE'+1,
PHASE= 1.
COMPRESSED-HISTORY=
compress('CONSENS US_ V-FUNCTJONS '),
SUB -PARTIALS_REMAJNING[NODE-PARTICIPATED] =
NUMBER_OF_SUB-PARTIALS,
if 3n:node-i~n E NODES_IN_ USE 1\
LAST_CHANGES[NODE_PARTICIPATED] < LAST_CHANGES[n] then
SUB-PARTIALS_REMAINING[n] =
'SUB -PARTIALS_REMAINING'[n]-1j
if NODE-PARTICIPATED~ OWN_NODE then
~~
p :node-id ~ if p E PARTICIPATED 1\p ~ NODES_RECEIVED_FROM then
~SUB-PARTIALS[p] =
SUB-PARTIALS[p]['SUB-PARTIALS_REMAINING'[p]],
sea.l(SUB-PARTIALS[p]. NODE_PUBLICS[NODE-PARTICIPATED])!,
sign(SUB-PARTIALS_SUPPL!ED, NODE-PRIVATE)!,
else
~~
p:node-id l if p PARTICIPATED 1\p ~ NODES-RECEIVED-FROM then
E
~with PARTIALS-AND_SUBPARTIALS[p]
~RECIPIENT =p,
PARTIAL = forrrLJfla.rtia.l (p, PARTJAL_SEED,
APPLICATION_PRIVATE,
QUORUM),
sea.l(PARTIAL, NODE_PUBLICS[p]),
'<>~i:integer ~if 1 ~ i~ NUMBER_OF_SUBPARTIALS then
=
~SUB-PARTIALS[i] formrpa.rtia.l(
p, PARTIAL-SEED,
form-pa.rtia.l(i, PARTIAL-SEED,
APPLICATION-PRIVATE,
QUORUM) ,
QUORUM)
sea.l(SUB-PARTIALS, NODE_PUBLJCS[p]])ll
sign(PARTIALAND-SUB-PARTIALS, NODE-PRIVATE)!, .
79
CREATE-KEYS: ~function
Input:
ANNO UN CEMENT-DEFINITION :signatured
<NEFY-QUORUM :integer,
NEW_SUB-PARTIALS-NEEDED :table[NODES_IN_USE] of integer,
CYCLE =
CYCLE-II :integer,
COMPRESSED-HISTORY= :integer.
create-keys= :action-kind>
Output:
NEW-KEYS: signed
<KEY-CREATION_#= :integer,
NEW-APPLICATION_PUBL!C :public-key,
NEW_NODE_PUBLIC :public-key,
CREATE_KEYS_ta_ISSUE_NEW_PARTIALS&CHANGE_KEYS = :
transfer-kind>
EXTENDERS :table[integer] of
EXTENDER:signed
<KEY-CREATION_#= :integer.
INDEX :integer,
EXTENS/ON:sealed<table[integer] of partial-key>.
CREATE-KEYS_ta_NEW_PARTICIPANT_RECEIVE =:
transfer-kind>
Comment: New node and application keys are created. Also a new seed for
the new partial keys, which will use the new quorum, is created. The ini-
tial number of sub-partials needed for each node is recorded. New pub-
lics are output. The issue new partials and receive new partials unsyn-
chronized actions are allowed. This action may occur more than once to
change the new quorum, even though no change to new keys has
occurred. The set of nodes the instant node would allow to become parti-
cipated in a CHANGE_KEYS is emptied. If a node is to become partici-
pated but lacks partials for some other node which is not going to be par-
ticipated, then the first node must be the subject of a PARTICIPATE
before a CHANGE_KEYS.
Exceptions:
NEW_QUORUM_TOO_SMALL : NEW_QUORUM <MINIMUM_ QUORUM
INS UFF!CIENT-TR USTEE_LSIGNATURES: ~check-signatured
(ANNOUNCEMENT, trustee-1-publics, trustee-1-quorum)
INSTANT-ALREADY-SIGNED_ANNOUNCEMENT: PHASE= 21\
~(let SIGNATURES_OF_MAJORITLOF_PRESENTS =
check-signatured(ANNOUNCEMENT_DEFINIT!ON, l"v'n:node-id
~if n E: PRESENT then NODE-PUBLICS[n]ll. MAJORITY))
80
Effects:
if ~SIGNATURES_OF_MAJORITY_Qp_pRESENTS then
~sign (ANNOUNCEMENLDEFINITION), PHASE= 2f
else l
CYCLE= 'CYCLE'+l,
PHASE= 1,
COMPRESSED_HJSTORY =
compress('CONSENSUS_ V-FUNCTIONS '),
KEY_ CREATION_# = 'KEy_ CREATION_# '+1,
QUORUMS[LAST_CHANGE + 1] = NEW_QUORUM,
PARTIALS_RECEIVED_FROM =empty,
APPLICATJON_SEED =create-seed(),
NEW_APPLICATION_PRIVATE =create-private (APPLICATION_SEED),
NEW_APPLICATION_PUBLIC =create-public (APPL!CATION_SEED),
NODE-SEED= create-seed(),
NEW_NODE_PRIVATE = create-private(NODE_SEED),
NEW_NODE_PUBLIC = create-public(NODE_SEED),
=
PARTJAL_SEED create-seed()f,
NEW_SUB-PARTIALS_REMAJNING =NE'rLSUB-PARTIALS_NEEDED,
~i:integer
CHANGE-KEYS: D-function
Input:
ANNOUNCEMENT_DEFINITION:signatured
<NODES_PARTICIPATING:set of node-id,
EVERy_pARTICIFANTS_NE W_KEYS :table [node-id] of
NEW_KEYs:JiioM_CREATE_KEYS :signed
81
§7 Un-Synchronizcd 0-functions
Presented are the remaining a-functions, which support the o-
functions of the previous section and allow release of information.
are designed in such a way that every node will accept only the same sequence
of calls and in the same order. The present section is concerned with the other
D-functions: those which can be invoked in many possible orders. The fact that
they can be used in a less structured way than those previously discussed does
not mean that these Q-functions are an invitation to chaos. On the contrary,
network even in spite of the trustees. Others of these D-functions have no effect
on a node's state, and are mer.e ly used to obtain signed and possibly sealed data
about the node's state. Yet others are tied directly into the synchronized D-
83
This subsection defines five un-synchronized D-functions. The first two are
takes as input the new public keys of a node released during CREATE_KEYS and
outputs partial keys and sub-partial keys sealed with the new public key
output of this first D-function created by another node and simply records the
partials and sub-partials after unsealing with its new private key.
used by all but the node to be participated, and simply records the public, par-
tial, and sub-partial keys released by the subject node during the PARTICIPATE.
subject node to collect the sub-partials and extenders provided it by the non-
JSSUE-NEW-PARTIALS:D-function
Input:
SUPPLIER :node-id
NEW_pUBLICS :signed
<KEY_CREATION_# = :integer,
SUPPLIER_NEW_NODE-PUBLIC:public-key,
SUPPLIER_NEW_APPLICATION-PUBLIC:public-key,
CREATE_KEYS_to_JSSUE_NEW_PARTIALS&CHANGE_KEYS = :
transfer-kind>
Output:
PARTIAL-AND-SUB -PARTIALS :signed
<KEY_ GREAT! ON_# =:integer,
SUPPLIER:node-id
PARTIAL: sealed< :partial-key>,
SUB -PARTIALS :sealed< :table[integer] of partial-key>,
ISSUE_NEW_PARTIALS_ta_RECE!VE_NEW_PARTIALS =:
transfer-kind>
Comment: The supplied new public application key is used to seal the partial
and the number of sub-partials for each node established in
CREATE_KEYS.
Exceptions:
INVALJD_SUPPLIER : SUPPLIER ~ NODES_/N_ USE,
INVALJD_SUPPLIER_SIGNATURE : ~check -signature (NEW-PUBLICS,
NODE_PUBL!CS(SUPPLIER)),
Effects:
PARTIAL= form-partial(SUPPLIER, PARTJAL_SEED,
NEW_APPL!CAT!ON_PRJVATE, QUORUMS[LAST_CHANGE + 1]),
seal(PARTIAL, SUPPLIER_NEW_NODE_PUBLIC),
\:ti:integer
~if 1 ~ i~ NEW_SUB-PARTIALS-REMAINJNG[OWN_NODE] then
~SUB-PARTIALS[i] =form-partial
(SUPPLIER, PARTJAL_SEED ,
farmrpartial (i, PARTJAL_SEED,
NEW_APPLICATJON_PRIVATE,
QUORUMS[LASLCHANGE + 1]) ,
QUORUM$[LAST_CHANGE + l])l.
seal(SUB-PARTIALS, SUPPLIER-NEW_NODE_PUBLIC),
sign(PARTIAL-AND_$UB-PARTIALS, NODE-PRIVATE)
85
RECEIVE-NEW_PARTIALS: D-function
Input:
SUPPLIER :node-id
PARTIAL-AND-SUB-PART!ALS :signed
<KEY_CREATION_# = :integer,
OWN_NODE:node-id
PARTIAL: sealed< :partial-key>,
SUB-PARTIALS :sealed<:table[integer] of partial-key>.
JSSUE_NEW_PARTIALS_to_RECE!VE_NEW_PARTIALS =:
transfer-kind>
Comment: The new partials and sub-partials output by
JSSUE_NEW_PARTIALS are recorded.
Exceptions:
INVAL/D_SUPPLIER :SUPPLIER t NODES_fN_USE
JNVALJD_SUPPLIER_SJGNATURE : check-signature
(PARTIAL-AND_SUB-PARTIALS, NODE_PUBL!CS[SUPPLIER]}
Effects:
unseal (PARTIAL, NEW_APPLJCATJON_PRJVATE),
NEW_PARTIAL-KEYS[SUPPLIER] =PARTIAL,
unseal(SUB-PARTIALS, NEW_APPLICATION_PRIVATE)
~i: integer ~if
1 ~ i~ NEW_SUB-PARTJALS_REMAJNJNG[SUPPUER] then
=
NEW_SUB-PARTJALS[SUPPLIER][i] SUB-PARTIALS[i]l,
SUPPLIER e: PARTJALS_RECEJVED_FROM,
RECE!VE_NEW_PARTICIPANT:D-function
Input:
NODE-BECOM!NG-PARTICIPATED:node-id
PARTIAL-AND-SUB -PARTIALS :signed
<OWN_NODE = RECIPIENT:node-id
PARTIAL:sealed<:partial-key>.
NUMBER_OF_SUB-PARTIALS :integer,
SUB-PART/ALS :sealed<:table[integer] of partial-key>,
PARTICJPATE_to_RECEIVE_NEW_PARTICIPANT =:
transfer-kind>
Comment: The participated nodes making an addition~! node participa_ted
are allowed to use this a-function to record the partials and sub-partials
issued to them by the entering node during the BECOME_JJARTICIPATED.
Exceptions:
BAD_SJGNATURE: check-signature
(PARTIAL-AND-SUB-PARTIALS I
NODE_PUBL!CS[NODE-BECOM!NG_PARTICIPATED])
86
Effects:
unseal (PARTIAL, APPLICATION_PRIVATE),
pARTI AL_KEYS [NODE_BECOM!NG_PARTICIPATED] = PARTIAL I
NEW_PARTICIPANT_RECEIVE: D-function
Input:
SUB-PART/AL_SUPPLIERS:set of node-id
ALLSUB-PARTIALS_SUPPLIED :table[SUB-PARTIALSUPPLIERS] of
SUB-PARTIALS_SUPPLIED :signed
<CYCLE = CYCLE_# :integer,
SUB-PART/ALS:sealed<:table[node-id] of partial-key>,
PARTICIPATE_to_NEW_PARTICIPANT_RECEIVE = :
transfer-kind.>
EXTENDERS :table[node-id] of
EXTENDER: signed
<KEY_ CREATION_# =:integer,
INDEX :integer,
EXTENS/ON:sealed< :table[integer] of partial-key>.
CREATE_KEYS_to_NEW_PARTICIPANLRECEIVE = :
transfer-kind>
Comment: The node which has become participated is allowed to use this a-
function to obtain the sub-partials issued it by the quorum of participated
nodes during a PARTICIPATE, and thereby obtain a full set of partials and
also · sub-partials. It is then able to list itself in its
PARTIALS_RECEIVED_FROM, indicating it has received sufficient partials
and allowing it to become present.
Exceptions:
NOT_ENOUGlLSUPPLIERS : cardinality(SUB-PARTIAL-SUPPLIERS) <
QUORUM .
BAD.....SUPPLIERS : ~SUB-PART/AL_SUPPLIERS c PARTICIPATED
BAD.....SUPPLIER_SJGNATURE: 3n:node-id in E: SUB-PARTIAL-SUPPLIERS 1\ .
~check-signature (SUB-PARTIALS-SUPPLIED[n], NODE_PUBLICS[nB
BAD-EXTENDER.....SIGNATURE : 3n:node-id
~LAST_CHANGES[OWN_NODE] < LAST_CHANGES[n] 1\
~check-signature (EXTENDERS[n], NODE-PUBLICS[n]) l
. WRONG-EXTENDER: 3n:node-id
~LAST_CHANGES[OWN_NODE] < LAST-CHANGES[n] A
~with EXTENDERS[n]
87
fiNDEX ¢. SUB-PARTIALS_REMAIN!NG[n]B
Effects:
'v"s:node-td ~if s E: SUB-PARTIAL-SUPPLIERS then
with ALL_SUB-PARTIALS_SUPPL/ED[s]
unseal (SUB-PARTIALS, APPLICATION_PR!VATE) j,
'v"p:node-i.d
~if LAST_CHANGES[OWN_NQDE] < LAST_CHANGES[p] then
PARTJAL_KEYS[p] = merge-partials('v"s:node-id
~if s E: SUB-PARTIAL-SUPPUERS then
with SUB-PARTIAL_SUPPLIERS[s] !SUB-PARTIALS[p] jj ),
'Q/p:node-id
! if LAST_CHANGES[OWN_NODE] < LAST_CHANGES[:p] then
~with EXTENDERS[p]
ASSUME_APPLICATJON: a-function
Input:
PARTIAL_SUPPLIERS :set of node-id
PARTIALS_SUPPLIED :table[node-id] of
PARTIAL :signed
<REPLACED-NODE :node-id
OWN_NODE = REPLACING_NODE:node-id..
PARTIAL-BUPPLIED :sealed<:partial-key>,
RESTART_to_ASSUME_APPLJCATJON = :transfer-kind>
CHECKPOINT: (see JSSUE_CHECKPOJNT)
Comment: The replacing node of a restart is enabled to perform this opera-
tion, which involves receiving partials for the replaced node, and using
them to obtain the saved application data from the checkpoint formed by
the replaced node, and messages sent after the checkpoint was formed.
Exceptions:
BAD-SUPPLIERS: ~PART/AL_SUPPLIERS C NODES_JN_ USE
BAD-BUPPLIER_S/GNATURES : 3n:node-id !n E: PARTIAL-SUPPLIERS 1\
~with PARTIALS_SUPPLIED[n]
~check-signature (PARTIAL , NODE_PUBL!CS[n]) l
Effects:
'v"n:node-id ~if n E: PARTIAL-SUPPLIERS then
with PARTIALS_SUPPUED[n]
unseal (PARTIAL-SUPPLIED, APPL!CATJQN_PRIVATE)j,
88
The last two D-functions are given in this subsection. Unlike the previous
~functions, they are not closely tied to any particular synchronized D-functions.
They release information about the node's state, but do not alter its state. The
about those nodes it has received current partial keys from. The
which means it does not check any signatures of input parameters, and thus can
public state, which Chapter VII will show to be useful to those seeking to trust
the network. Another use of checkpoints, that of saving enough of a node's state
to make restart possible, was mentioned in Chapter IV. A further practical use
of this D-function is to allow verification of the. state certified into a node, which
can allow new nodes to skip over a possibly long prefix of synchronized o-
function calls.
PARTIALS_RECEIVED: D-function
Input:
MINIMUM_PARTIALS_RECEIVED:signatured
<KEY_CREATION-# =:integer,
NODES-RECEIVED_FROM :set of node-id.
partials..JT"eceived = :transfer-kind> . . .
Comment: The instant node adds its signature to the set of node lds mput lff
this set is a subset of the instant node's PARTIALS-RECEIVED-FROM.
89
Exceptions:
NOT_ALL-PARTIALS_RECEIVED : 3n:node-id
~n E: NODES-RECEIVED-FROM 1\
n ~ PARTIALS_RECEIVED_FROM 1\
n OWN_NODEjl\
¢:
KEY_CREATION_# ¢: 0
Effects:
sign (MINIM UM_PARTIALS-RECEIVED, N ODE_PR!VATE)
some of the basic ideas of the proposed systems, and also to motivate
Chapter IX, a suitable public key and its inverse private key are chosen by a
mechanism within the vault's protected interior, using a physically random pro-
cess as discussed in Chapter II. The public key is then displayed outside the
vault, on a special device certified for this purpose. As far as the world outside
the vault i~ concerned, the possessor of the vault's private key is the vault: it
can read sealed confidential messages sent to the vault, and it can make the
vault's signature.