Lecture Notes On Cryptography: With Full Explanation
Lecture Notes On Cryptography: With Full Explanation
on
Cryptography
aspirantdreams123@fmail.com
Foreword
This is a set of lecture notes on cryptography compiled for 6.87s, a one week long course on cryptography
taught at MIT by Shafi Goldwasser and Mihir Bellare in the summers of 1996–2001. The notes were
formed by merging notes written for Shafi Goldwasser’s Cryptography and Cryptanalysis course at MIT with
notes written for Mihir Bellare’s Cryptography and network security course at UCSD. In addition, Rosario
Gennaro (as Teaching Assistant for the course in 1996) contributed Section 9.6, Section 11.4, Section 11.5,
and Appendix D to the notes, and also compiled, from various sources, some of the problems in Appendix E.
Cryptography is of course a vast subject. The thread followed by these notes is to develop and explain the
notion of provable security and its usage for the design of secure protocols.
Much of the material in Chapters 2, 3 and 7 is a result of scribe notes, originally taken by MIT graduate
students who attended Professor Goldwasser’s Cryptography and Cryptanalysis course over the years, and
later edited by Frank D’Ippolito who was a teaching assistant for the course in 1991. Frank also contributed
much of the advanced number theoretic material in the Appendix. Some of the material in Chapter 3 is
from the chapter on Cryptography, by R. Rivest, in the Handbook of Theoretical Computer Science.
Chapters 4, 5, 6, 8 and 10, and Sections 9.5 and 7.4.6, were written by Professor Bellare for his Cryptography
and network security course at UCSD.
2
Table of Contents
3
4 Goldwasser and Bellare
5 Pseudo-random functions 58
5.1 Function families..........................................................................................................................................58
5.2 Random functions and permutations........................................................................................................59
5.3 Pseudorandom functions............................................................................................................................61
5.4 Pseudorandom permutations.....................................................................................................................63
5.4.1 PRP under CPA.........................................................................................................................64
5.4.2 PRP under CCA........................................................................................................................65
5.4.3 Relations between the notions......................................................................................................65
5.5 Sequences of families of PRFs and PRPs................................................................................................66
5.6 Usage of PRFs and PRPs......................................................................................................................66
5.6.1 The shared random function model.............................................................................................66
5.6.2 Modeling block ciphers...................................................................................................................67
5.7 Example Attacks....................................................................................................................................68
5.8 Security against key-recovery....................................................................................................................70
5.9 The birthday attack....................................................................................................................................75
5.10 PRFs versus PRPs.................................................................................................................................76
5.11 Constructions of PRF families...................................................................................................................77
5.11.1 Extending the domain size............................................................................................................78
5.12 Some applications of PRFs........................................................................................................................79
5.12.1 Cryptographically Strong Hashing...............................................................................................79
5.12.2 Prediction.........................................................................................................................................79
5.12.3 Learning............................................................................................................................................80
5.12.4 Identify Friend or Foe....................................................................................................................80
5.12.5 Private-Key Encryption............................................................................................................80
Cryptography: Lecture Notes 5
6 Private-key encryption 82
6.1 Symmetric encryption schemes.................................................................................................................82
6.2 Some encryption schemes..........................................................................................................................83
6.3 Issues in security.........................................................................................................................................86
6.4 Information-theoretic security...................................................................................................................87
6.5 Indistinguishability under chosen-plaintext attack.................................................................................91
6.5.1 Definition.........................................................................................................................................91
6.5.2 Alternative interpretation of advantage......................................................................................93
6.6 Example chosen-plaintext attacks.............................................................................................................95
6.6.1 Attack on ECB...........................................................................................................................95
6.6.2 Deterministic, stateless schemes are insecure............................................................................96
6.7 Security against plaintext recovery...........................................................................................................97
6.8 Security of CTR against chosen-plaintext attack..................................................................................100
6.8.1 Proof of Theorem 6.17................................................................................................................101
6.8.2 Proof of Theorem 6.18................................................................................................................106
6.9 Security of CBC against chosen-plaintext attack...................................................................................110
6.10 Indistinguishability under chosen-ciphertext attack............................................................................111
6.11 Example chosen-ciphertext attacks........................................................................................................112
6.11.1 Attack on CTR.........................................................................................................................112
6.11.2 Attack on CBC.........................................................................................................................114
6.12 Other methods for symmetric encryption.............................................................................................116
6.12.1 Generic encryption with pseudorandom functions..................................................................116
6.12.2 Encryption with pseudorandom bit generators.......................................................................116
6.12.3 Encryption with one-way functions...........................................................................................117
6.13 Historical Notes.........................................................................................................................................117
6.14 Exercises and Problems...........................................................................................................................117
11 Protocols 211
11.1 Some two party protocols........................................................................................................................211
11.1.1 Oblivious transfer.........................................................................................................................211
11.1.2 Simultaneous contract signing....................................................................................................212
11.1.3 Bit Commitment.....................................................................................................................213
11.1.4 Coin flipping in a well..................................................................................................................213
11.1.5 Oblivious circuit evaluation........................................................................................................213
11.1.6 Simultaneous Secret Exchange Protocol...................................................................................214
11.2 Zero-Knowledge Protocols.......................................................................................................................215
11.2.1 Interactive Proof-Systems(IP).....................................................................................................215
8 Goldwasser and Bellare
C.3.3 Exponentiation..............................................................................................................................250
C.4 Chinese remainders..................................................................................................................................251
C.5 Primitive elements and Zp∗ ................................................................................................................................................................. 253
C.5.1 Definitions.....................................................................................................................................253
C.5.2 The group Zp∗ ............................................................................................................................................................................... 254
C.5.3 Finding generators.......................................................................................................................254
C.6 Quadratic residues....................................................................................................................................255
C.7 Jacobi Symbol.............................................................................................................................................255
C.8 RSA.......................................................................................................................................................256
C.9 Primality Testing.......................................................................................................................................256
C.9.1 PRIMES ∈ NP...............................................................................................................................257
C.9.2 Pratt’s Primality Test.............................................................................................................257
C.9.3 Probabilistic Primality Tests.......................................................................................................258
C.9.4 Solovay-Strassen Primality Test.................................................................................................258
C.9.5 Miller-Rabin Primality Test.........................................................................................................259
C.9.6 Polynomial Time Proofs Of Primality........................................................................................260
C.9.7 An Algorithm Which Works For Some Primes.........................................................................260
C.9.8 Goldwasser-Kilian Primality Test...............................................................................................261
C.9.9 Correctness Of The Goldwasser-Kilian Algorithm...................................................................261
C.9.10 Expected Running Time Of Goldwasser-Kilian.........................................................................262
C.9.11 Expected Running Time On Nearly All Primes........................................................................263
C.10 Factoring Algorithms................................................................................................................................263
C.11 Elliptic Curves............................................................................................................................................264
C.11.1 Elliptic Curves Over Zn.......................................................................................... 265
C.11.2 Factoring Using Elliptic Curves............................................................................................266
C.11.3 Correctness of Lenstra’s Algorithm............................................................................................267
C.11.4 Running Time Analysis................................................................................................................267
E Problems 272
E.1 Secret Key Encryption..............................................................................................................................272
E.1.1 DES...........................................................................................................................................272
E.1.2 Error Correction in DES ciphertexts..........................................................................................272
E.1.3 Brute force search in CBC mode..........................................................................................272
E.1.4 E-mail.............................................................................................................................................273
E.2 Passwords..................................................................................................................................................273
E.3 Number Theory.........................................................................................................................................274
E.3.1 Number Theory Facts..................................................................................................................274
E.3.2 Relationship between problems.................................................................................................274
E.3.3 Probabilistic Primality Test.........................................................................................................274
10 Goldwasser and Bellare
11
12 Goldwasser and Bellare
that secure (properly defined) encryption system can exist only if the size of the secret information S that
A and B agree on prior to remote transmission is as large as the number of secret bits to be ever exchanged
remotely using the encryption system.
An example of a private key encryption method which is secure even in presence of a computationally
unbounded adversary is the one time pad. A and B agree on a secret bit string pad = b1b2 . . . bn, where
bi ∈R {0, 1} (i.e pad is chosen in {0, 1}n with uniform probability). This is the common secret key.
To encrypt a message m = m1m2 . . . mn where mi ∈ {0, 1}, A computes E(pad, m) = m ⊕ pad (bitwise
exclusive or). To decrypt ciphertext c ∈ {0, 1}n, B computes D(pad, c) = pad ⊕ c = pad ⊕ (m ⊕ pad) =
m. It is
easy to verify that ∀m, c the P pa [E(pad, m) = c] = 1 . From this, it can be argued that seeing c gives
d
2
“no information” about what has been sent. (In the sense
n that the adversary’s a posteriori probability of
predicting m given c is no better than her a priori probability of predicting m without being given c.)
Now, suppose A wants to send B an additional message m′. If A were to simply send c = E (pad, m′), then the
sum of the lengths of messages m and m′ will exceed the length of the secret key pad, and thus by Shannon’s
theory the system cannot be secure. Indeed, the adversary can compute E (pad, m) ⊕ E (pad, m′) = m ⊕ m′
which gives information about m and m′ (e.g. can tell which bits of m and m‘ are equal and which are
different). To fix this, the length of the pad agreed upon a-priori should be the sum total of the length of all
messages ever to be exchanged over the insecure communication line.
exist, and there are several conjectured candidate one-way functions which are widely used, we currently do
not know how to mathematically prove that they actually exist. We shall thus design cryptographic schemes
assuming we are given a one-way function. We will use the conjectured candidate one-way functions for our
working examples, throughout our notes. We will be explicit about what exactly can and cannot be proved
and is thus assumed, attempting to keep the latter to a bare minimum.
We shall elaborate on various constructions of private-key encryption algorithms later in the course.
The development of public key cryptography in the seventies enables one to drop the requirement that A
and B must share a key in order to encrypt. The receiver B can publish authenticated2 information (called
the public-key) for anyone including the adversary, the sender A, and any other sender to read at their
convenience (e.g in a phone book). We will show encryption algorithms in which whoever can read the
public key can send encrypted messages to B without ever having met B in person. The encryption system
is no longer intended to be used by a pair of prespecified users, but by many senders wishing to send secret
messages to a single recipient. The receiver keeps secret (to himself alone!) information (called the receiver’s
private key) about the public-key, which enables him to decrypt the cyphertexts he receives. We call such
an encryption method public key encryption.
We will show that secure public key encryption is possible given a trapdoor function. Informally, a trapdoor
function is a one-way function for which there exists some trapdoor information known to the receiver alone,
with which the receiver can invert the function. The idea of public-key cryptosystems and trapdoor functions
was introduced in the seminal work of Diffie and Hellman in 1976 [67, 68]. Soon after the first
implementations of their idea were proposed in [170], [164], [137].
A simple construction of public key encryption from trapdoor functions goes as follows. Recipient B can
choose at random a trapdoor function f and its associated trapdoor information t, and set its public key
to be a description of f and its private key to be t. If A wants to send message m to B, A computes
−1 −1
(f,
E m) = f (m). To decrypt c = f (m), B computes f (c) = f (f (m)) = m. We will show that this
construction is not secure enough in general, but construct probabilistic variants of it which are secure.
1. Factoring. The function f : (x, y) ›→ xy is conjectured to be a one way function. The asymptotically
proven fastest factoring algorithms to date are variations on Dixon’s random squares algorithm [126].
√ √
It is a randomized algorithm with running time L(n) 2 where L(n) = e log n log log n. The number field
sieve by Lenstra, Lenstra, Manasee, and Pollard with modifications by Adlemann and Pomerance is a
factoring algorithm proved under a certain set of assumptions to factor integers in expected time
1 2
((c+o(1))(log n) 3 (log log n) 3 )
e
[128, 3].
2. The discrete log problem. Let p be a prime. The multiplicative group Zp∗ = ({x < p|(x, p) = 1}, · mod
p) is cyclic, so that Zp∗ = {g i mod p|1 ≤ i ≤ p−1} for some generator g ∈ Zp∗ . The function f : (p, g,
x) ›→
2
Saying that the information is “authenticated” means that the sender is given a guarantee that the information was
published by the legal receiver. How this can be done is discussed in a later chapter.
14 Goldwasser and Bellare
can be checked if (g, p−1) = 1, ∀qi , g qi mod p /= 1, and gp−1 mod p = 1, in which case order(g) = p−1
(order(g) = |{ g i mod p| 1 ≤ ≤i − p }| 1 ). It can be shown that the densityZof p∗ generators is
high so that few guesses are required. The problem of efficiently finding a generator for aZspecific
∗
p is an intriguing open research problem.
3. Subset sum. Let ai ∈ {0, 1}n , →a = (a1 , . . . , an ), si ∈ {0, 1}, →s = (s1 , . . . , sn ), and let f : (→a, →s) ›→
Σn Σn Σn Σn
(→a, i=1 si ai ). An inverse of (→a, i=1 si ai ) under f is any (→a, i→s′ ) so that i=1 si ai = i=1 s′iai . This
function f is a candidate for a one way function. The associated decision problem (given (→a, y),
does Σn
there exists →s so that i=1 si ai = y?) is NP-complete. Of course, the fact that the subset-sum problem
is NP-complete cannot serve as evidence to the one-wayness of fss. On the other hand, the fact that
the subset-sum problem is easy for special cases (such as “hidden structure” and low density) can not
serve as evidence for the weakness of this proposal. The conjecture that f is one-way is based on the
failure of known algorithm to handle random high density instances. Yet, one has to admit that the
evidence in favor of this candidate is much weaker than the evidence in favor of the two previous ones.
4. DES with fixed message. Fix a 64 bit message M and define the function f (K) = DESK(M ) which
takes a 56 bit key K to a 64 bit output f (K). This appears to be a one-way function. Indeed, this
construction can even be proven to be one-way assuming DES is a family of pseudorandom functions,
as shown by Luby and Rackoff [134].
5. RSA. This is a candidate one-way trapdoor function. Let N = pq be a product of two primes. It
is believed that such an N is hard to factor. The function is f (x) = xe mod N where e is relatively
prime to (p — 1)(q 1).− The trapdoor is the primes p, q, knowledge of which allows one to invert f
efficiently. The function f seems to be one-way. To date the best attack is to try to factor N , which
seems computationally infeasible.
In Chapter 2 we discuss formal definitions of one-way functions and are more precise about the above
constructions.
1. It should be hard to recover the messages from the ciphertext when the messages are drawn from
arbitrary probability distributions defined on the set of all strings (i.e arbitrary message spaces). A
few examples of message spaces are: the English language, the set 0,{ 1 ).} We must assume that the
message space is known to the adversary.
2. It should be hard to compute partial information about messages from the ciphertext.
3. It should be hard to detect simple but useful facts about traffic of messages, such as when the same
message is sent twice.
Cryptography: Lecture Notes 15
In short, it would be desirable for the encryption scheme to be the mathematical analogy of opaque envelopes
containing a piece of paper on which the message is written. The envelopes should be such that all legal
senders can fill it, but only the legal recipient can open it.
We must answer a few questions:
• How can “opaque envelopes” be captured in a precise mathematical definition? Much of Chapters 6
and 7 is dedicated to discussing the precise definition of security in presence of a computationally
bounded adversary.
• Are “opaque envelopes” achievable mathematically? The answer is positive . We will describe the the
proposals of private (and public) encryption schemes which we prove secure under various
assumptions.
We note that the simple example of a public-key encryptions system based on trapdoor function, described
in the previous section, does not satisfy the above properties. We will show later, however, probabilistic
variants of the simple system which do satisfy the new security requirements under the assumption that
trapdoor functions exist. More specifically, we will show probabilistic variants of RSA which satisfy the new
security requirement under, the assumption that the original RSA function is a trapdoor function, and are
similar in efficiency to the original RSA public-key encryption proposal.
• Discuss current proposals of encryption systems and evaluate them respect to the security definition
chosen.
• Describe how to design encryption systems which we can prove secure under explicit assumptions such
as the existence of one-way functions, trapdoor functions, or pseudo random functions.
16 Goldwasser and Bellare
• Discuss efficiency aspects of encryption proposals, pointing out to possible ways to improve efficiency
by performing some computations off-line, in batch mode, or in a incremental fashion.
We will also overview some advanced topics connected to encryption such chosen-ciphertext security, non-
malleability, key-escrow proposals, and the idea of shared decryption among many users of a network.
C H A P T E R 2
One Way functions, namely functions that are “easy” to compute and “hard” to invert, are an extremely
important cryptographic primitive. Probably the best known and simplest use of one-way functions, is for
passwords. Namely, in a time-shared computer system, instead of storing a table of login passwords, one can
store, for each password w, the value f (w). Passwords can easily be checked for correctness at login, but
even the system administrator can not deduce any user’s password by examining the stored table.
In Section 1.3 we had provided a short list of some candidate one-way functions. We now develop a theoretical
treatment of the subject of one-way and trapdoor functions, and carefully examine the candidate one-way
functions proposed in the literature. We will occasionaly refer to facts about number theory discussed in
Chapter C.
We begin by explaining why one-way functions are of fundamental importance to cryptography.
17
18 Goldwasser and Bellare
However, the above mentioned necessary condition (e.g., P = / NP ) is not a sufficient one. P =/ only
implies that the encryption scheme is hard to break in the NPworst case. It does not rule-out the possibility
that the encryption scheme is easy to break in almost all cases. In fact, one can easily construct “encryption
schemes” for which the breaking problem is NP-complete and yet there exist an efficient breaking algorithm
that succeeds on 99% of the cases. Hence, worst-case hardness is a poor measure of security. Security
requires hardness on most cases or at least average-case hardness. Hence, a necessary condition for the
existence of secure encryption schemes is the existence of languages in NP which are hard on the average.
Furthermore, P /= NP is not known to imply the existence of languages in NP which are hard on the
average.
The mere existence of problems (in NP) which are hard on the average does not suffice. In order to be able to
use such problems we must be able to generate such hard instances together with auxiliary information
which enable to solve these instances fast. Otherwise, the hard instances will be hard also for the legitimate
users and they gain no computational advantage over the adversary. Hence, the existence of secure
encryption schemes implies the existence of an efficient way (i.e. probabilistic polynomial-time algorithm) of
generating instances with corresponding auxiliary input so that
(1) it is easy to solve these instances given the auxiliary input; and
(2) it is hard on the average to solve these instances (when not given the auxiliary input).
We avoid formulating the above “definition”. We only remark that the coin tosses used in order to generate
the instance provide sufficient information to allow to efficiently solve the instance (as in item (1) above).
Hence, without loss of generality one can replace condition (2) by requiring that these coin tosses are hard to
retrieve from the instance. The last simplification of the above conditions essentially leads to the definition
of a one-way function.
Definition 2.1 ν is negligible if for every constant c ≥ 0 there exists an integer kc such that ν(k) < k−c for
all k ≥ kc.
is repeated for polynomially (in k) many times. Hence, defining negligible success as “occurring with proba-
bility smaller than any polynomial fraction” is naturally coupled with defining feasible as “computed within
polynomial time”. A “strong negation” of the notion of a negligible fraction/probability is the notion of a
non-negligible fraction/probability. we say that a function ν is non-negligible if there exists a polynomial p
1
such that for all sufficiently large k’s it holds that ν(k) > p(k)
. Note that functions may be neither negligible
nor non-negligible.
Remark 2.3 The guarantee is probabilistic. The adversary is not unable to invert the function, but has
a low probability of doing so where the probability distribution is taken over the input x to the one-way
function where x if of length k, and the possible coin tosses of the adversary. Namely, x is chosen at
random and y is set to f (x).
Remark 2.4 The advsersary is not asked to find x; that would be pretty near impossible. It is asked to
find some inverse of y. Naturally, if the function is 1-1 then the only inverse is x.
Remark 2.5 Note that the adversary algorithm takes as input f (x) and the security parameter 1k (expressed
in unary notatin) which corresponds to the binary length of x. This represents the fact the adversary can
work in time polynomial in |x |, even if f (x) happends to be much shorter. This rules out the possibility that
a function is considered one-way merely because the inverting algorithm does not have enough time to print
the output. Consider for example the function defined as f (x) = y where y is the log k least significant bits
of x where |x| = k. Since the |f (x)| = log |x| no algorithm can invert f in time polynomial in |f (x)|,
yet there exists an obvious algorithm which finds an inverse of f (x) in time polynomial in |x|. Note that
in the special case of length preserving functions f (i.e., |f (x)| = |x| for all x’s), the auxiliary input is
redundant.
Remark 2.6 By this definition it trivially follows that the size of the output of f is bounded by a polynomial
in k, since f (x) is a poly-time computable.
Remark 2.7 The definition which is typical to definitions from computational complexity theory, works
with asymptotic complexity—what happens as the size of the problem becomes large. Security is only asked
to hold for large enough input lengths, namely as k goes to infinity. Per this definition, it may be entirely
feasible to invert f on, say, 512 bit inputs. Thus such definitions are less directly relevant to practice, but
useful for studying things on a basic level. To apply this definition to practice in cryptography we must
typically envisage not a single one-way function but a family of them, parameterized by a security
parameter
k. That is, for each value of the security parameter k there is be a specific function f : {0, 1} k → {0, 1} ∗.
Or, there may be a family of functions (or cryptosystems) for each value of k. We shall define such
familes in subsequent section.
The next two sections discuss variants of the strong one-way function definition. The first time reader is
encouraged to directly go to Section 2.2.4.
20 Goldwasser and Bellare
Definition 2.8 A function f : {0, 1}∗ → {0, 1}∗ is weak one-way if:
(1) there exists a PPT that on input x output f (x);
(2) There is a polynomial functions Q such that for every PPT algorithm A, and for sufficiently large k,
h i
R k 1
P f (z) /= y : x ← k
{0, 1} ; y ← f (x) ; z ← A(1 , y) ≥
Q(k)
The difference between the two definitions is that whereas we only require some non-negligible fraction of
the inputs on which it is hard to invert a weak one-way function, a strong one-way function must be hard to
invert on all but a negligible fraction of the inputs. Clearly, the latter is preferable, but what if only weak one-
way functions exist ? Our first theorem is that the existence of a weak one way function implies the existence
of a strong one way function. Moreover, we show how to construct a strong one-way function from a weak
one. This is important in practice as illustarted by the following example.
Example 2.9 Consider for example the function f : Z × Z›→ Z where f (x, y) = x · y. This function can be
easily inverted on at least half of its outputs (namely, on the even integers) and thus is not a strong one way
function. Still, we said in the first lecture that f is hard to invert when x and y are primes of roughly the
same length which is the case for a polynomial fraction of the k-bit composite integers. This motivated the
definition of a weak one way function. Since the probability that an k-bit integer x is prime is approximately
1/k, we get the probability that both x and y such that | | x| |= y = k are prime is approximately 1/k2.
Thus, for all k, about 1
− k2 1 of the inputs to f of length 2k are prime pairs of equal length. It is believed that
no adversary can invert f when x and y are primes of the same length with non-negligible success probability,
and under this belief, f is a weak one way function (as condition 2 in the above definition is satisfied for
Q(k) = O(k2)).
Theorem 2.10 Weak one way functions exist if and only if strong one way functions exist.
Proof Sketch: By definition, a strong one way function is a weak one way function. Now assume that f is
a weak one way function such that Q is the polynomial in condition 2 in the definition of a weak one way
function. Define the function
f1(x1 . . . xN ) = f (x1) . . . f (xN )
where N = 2kQ(k) and each xi is of length k.
We claim that f1 is a strong one way function. Since f1 is a concatenation of N copies of the function f ,
to correctly invert f1, we need to invert f (xi) correctly for each i. We know that every adversary has a
1
probability of at least Q(k) to fail to invert f (x) (where the probability is taken over x ∈ {0, 1}k and the
coin tosses of the adversary), and so intuitively, to invert f1 we need to invert O(kQ(k)) instances of f . The
probability that the adversary will fail for at least one of these instances is extremely high.
The formal proof (which is omitted here and will be given in appendix) will take the form of a reduction;
that is, we will assume for contradiction that f1 is not a strong one way function and that there exists
some adversary A1 that violates condition 2 in the definition of a strong one way function. We will then show
that A1 can be used as a subroutine by a new adversary A that will be able to invert the original function f
with
Cryptography: Lecture Notes 21
1
probability better than 1 − (where the probability is taken over the inputs x ∈ {0, 1}k and the coin
| |
Q( x )
tosses of
A). But this will mean that is not a weak one way function and we have derived a contradiction.
f
This proof technique is quite typical of proofs presented in this course. Whenever such a proof is presented
it is important to examine the cost of the reduction. For example, the construction we have just outlined is
not length preserving, but expands the size of the input to the function quadratically.
Definition 2.11 A function f is called non-uniformly strong one-way if the following two conditions hold
(1) easy to compute: as before There exists a PPT algorithm to compute for f .
(2) hard to invert: For every (even non-uniform) family of polynomial-size algorithms A =
{ Mk}k∈N, there
exists a negligble νA such that for all sufficiently large k’s
h i
P f (z) /= y : x ← {0, 1}k ; y ← f (x) ; z ← M (y) ≤ ν (k)
R
k A
Instead of talking about a single function f : {0, 1} ∗ → {0, 1}∗, it is often convenient to talk about collections
of functions, each defined over some finite domain and finite ranges. We remark, however, that the single
function format makes it easier to prove properties about one way functions.
Definition 2.12 Let I be a set of indices and for i ∈ I let Di and Ri be finite. A collection of strong one
way functions is a set F = {fi : Di → Ri }i∈I satisfying the following conditions.
(1) There exists a PPT S1 which on input 1k outputs an i ∈ {0, 1}k ∩ I
(2) There exists a PPT S2 which on input i ∈ I outputs x ∈ Di
(3) There exists a PPT A1 such that for i ∈ I and x ∈ Di, A1(i, x) = fi(x).
22 Goldwasser and Bellare
(4) For every PPT A there exists a negligible νA such that ∀ k large enough
h i
R R
P f (z)i =y : i← I ; x← D i ; y ←i f (x) ; z ← A(i, y) ≤ Aν (k)
(here the probability is taken over choices of i and x, and the coin tosses of A).
In general, we can show that the existence of a single one way function is equivalent to the existence of a
collection of one way functions. We prove this next.
Theorem 2.13 A collection of one way functions exists if and only if one way functions exist.
Set F = {fi : Di R →i i∈I }where I = 0, {1 ∗ }and for i I, ∈take Di = Ri = 0,{1 |i|} and fi(x) = f (x).
Furthermore, S1 uniformly chooses on input 1k, i ∈ { 0, 1 } k, S2 uniformly chooses on input i, x ∈ Di =
{ 1 } and A1(i, x) = fi(x) = f (x). (Note that f is polynomial time computable.) Condition 4 in the
0, |i|
definition of a collection of one way functions clearly follows from the similar condition for f to be a one way
function.
Now suppose that F ={ fi : Di R →i i∈I }is a collection of one way functions. Define fF (1k, r1, r2) =
A1(S1(1k, r1), S2(S1(1k, r1), r2)) where A1, S1, and S2 are the functions associated with F as defined in
Definition 2.12. In other words, fF takes as input a string 1k◦ r◦1 r2 where r1 and r2 will be the coin tosses
of S1 and S2, respectively, and then
• Runs S1 on input 1k using the coin tosses r1 to get the index i = S1(1k, r1) of a function fi ∈ F .
• Runs S2 on the output i of S1 using the coin tosses r2 to find an input x = S2(i, r2).
Note that randomization has been restricted to the input of fF and since A1 is computable in polynomial
time, the conditions of a one way function are clearly met.
Example 2.14 The hardness of computing discrete logarithms yields the following collection of functions.
Define EXP = {EXPp,g (i) = g i mod p, EXP p, g : Zp → Zp∗ }<p,g>∈I for I = {< p, g > p prime, g
generator for Zp∗ }.
Definition 2.15 A trapdoor function is a one-way function f : {0, 1}∗ → {0, 1}∗ such that there exists a
polynomial p and a probabilistic polynomial time algorithm I such that for every k there exists an tk ∈ {0, 1}∗
such that |tk | ≤ p(k) and for all x ∈ {0, 1}∗ , I(f (x), tk ) = y such that f (y) = f (x).
Cryptography: Lecture Notes 23
An example of a function which may be trapdoor if factoring integers is hard was proposed by Rabin[164].
Let f (x, n) = x2 mod n where n = pq a product of two primes and ∈x Zn∗ . Rabin[164] has shown
that inverting f is easy iff factoring composite numbers product of two primes is easy. The most famous
candidate trapdoor function is the RSA[170] function f (x, n, l) = xl mod n where (l, φ(n)) = 1.
Again it will be more convenient to speak of families of trapdoor functions parameterized by security pa-
rameter k.
Definition 2.16 Let I be a set of indices and for i ∈ I let Di be finite. A collection of strong one way
trapdoor functions is a set F = {fi : Di → Di }i∈I satisfying the following conditions.
(1) There exists a polynomial p and a PTM S1 which on input 1k outputs pairs (i, ti) where i ∈ I ∩ {0,
1}k and |ti | < p(k) The information ti is referred to as the trapdoor of i.
(2) There exists a PTM S2 which on input i ∈ I outputs x ∈ Di
(3) There exists a PTM A1 such that for i ∈ I, x ∈ Di A1(i, x) = fi(x).
(4) There exists a PTM A2 such that A2(i, ti, fi(x)) = x for all x ∈ Di and for all i ∈ I (that is, fi is easy
to invert when ti is known).
(5) For every PPT A there exists a negligble νA such that ∀ k large enough
h i
R R
P f (z)i =y : i← I ; x← D i ; y ←i f (x) ; z ← A(i, y) ≤ Aν (k)
Example 2.17 [The RSA collections of possible trapdoor functions ] Let p, q denote primes, n = pq, Zn∗ =
{1 ≤ x ≤ n, (x, n) = 1} the multiplicative group whose cardinality is ϕ(n) = (p − 1)(q − 1), and e ∈ Zp−1
relatively prime to ϕ(n). Our set of indices will be I = {< n, e > such that n = pq |p| = |q|} and the trapdoor
associated with the particular index < n, e > be d such that ed = 1 mod φ(n). Let RSA = {RSA<n,e> :
Zn∗ → Zn∗ }<n,e>∈I where RSA<n,e> (x) = xe mod n
∗
Calculating Inverses in Zp
Consider the set Z∗p = { x≤: 1 x < p and gcd(x,} p) = 1 where p is prime. Z∗p is a group under
multiplicaton modulo p. Note that to find the ∈ inverse of x Z∗p ; that is,∈ an element y ≡Zp∗ such that
yx 1 mod p, we can use the Euclidean algorithm to find integers y and z such that yx + zp = 1 = gcd(x,
p). Then, it follows that yx ≡ 1 mod p and so y mod p is the desired inverse.
k
Y
= ϕ(piαi )
i=1
k
Y −1
= piαi (pi − 1)
i=1
∗
Zp Is Cyclic
A group G is cyclic if and only if there is an element g ∈ G such that for every a∈ G, there is an integer i
such that g i = a. We call g a generator of the group G and we denote the index i by indg (a).
Theorem 2.18 (Gauss) If p is prime then Zp∗ is a cyclic group of order p − 1. That is, there is an element
g ∈ Zp∗ such that g p−1 ≡ 1 mod p and g i /≡ 1 mod p for i < p − 1.
Fact 2.19 Given a prime p, a generator g for Z∗p , and an element∈a ≤ Z≤∗p ,−
there is a unique 1 i p 1
such that a = g i .
¿From this fact it follows that there is an homomorphism f : Zp∗ → Zp−1 such that f (ab) = f (a) + f (b).
As a result we can work with Zp−1 rather than Z∗p which sometimes simplifies matters. For example,
suppose we wish to determine how many elements in Z∗p are perfect squares (these elements will be
referred to as quadratic residues modulo p). The following lemma tells us that the number of quadratic
residues
2
modulo p is 1 |Z∗p |.
Lemma 2.21 a ∈ Zp∗ is a quadratic residue modulo p if and only if a = g x mod p where x satisfies 1 ≤ x ≤
p − 1 and is even.
Consequently, the number of quadratic residues modulo p is the number of elements in Z∗p which are an
even power of some given generator g. This number is clearly
2
1
|Z∗p |.
Cryptography: Lecture Notes 25
The Legendre Symbol Jp (x) specifies whether x is a perfect square in Z∗p where p is a prime.
Jp(x) =
1 if x is a square in
0 if gcd(x, p) = 1
Z∗p /
−1 if x is not a square in Z∗p
The Legendre Symbol can be calculated in polynomial time due to the following theorem.
p− 1
Theorem 2.22 [Euler’s Criterion] Jp (x) ≡ x 2 mod p.
p− 1
Using repeated doubling to compute exponentials, one can calculate x 2 in O(|p|3 ) steps. Though this
Jp(x) can be calculated when p is a prime, it is not known how to determine for general x and n, whether
x is a square in Z∗n .
faster running time of e(k log k) . It interesting to note that working over the finite field GF (2k) rather than
3
working modulo p seems to make the problem substantially easier (see Coppersmith [57] and Odlyzko [152]).
Curiously, computing discrete logarithms and factoring integers seem to have essentially the same difficulty
at least as indicated by the current state of the art algorithms.
With all this in mind, we consider EXP a good candidate for a one way function. We make the following
explicit assumption in this direction. The assumption basically says that there exists no polynomial time
algorithm that can solvethe discrete log problem with prime modulos.
Strong Discrete Logarithm Assumption (DLA): 1 For every polynomial Q and every PPT A, for all
sufficiently large k,
1
Pr[A(p, g, y) = x such that y ≡ gx mod p where 1 ≤ x ≤ p − 1] <
Q(k)
Theorem 2.23 Under the strong discrete logarithm assumption there exists a strong one way function;
namely, exponentiation modulo a prime p.
1
We note that a weaker assumption can be made concerning the discrete logarithm problem, and by the standard construction
one can still construct a strong one-way function. We will assume for the purpose of the course the first stronger
assumption. Weak Discrete Logarithm Assumption: There is a polynomial Q such that for every PTM A there exists
an integer k0
1
such that ∀k > k0 Pr[A(p, g, y) = x such that y ≡ gx mod p where 1 ≤ x ≤ p − 1] < 1 − Q(k)(where the probability is taken
over all primes p such that |p| ≤ k, the generators g of Z∗p , x ∈ Z∗p and the coin tosses of A).
26 Goldwasser and Bellare
Remark 2.24 If DL(p, g1 , y) is easy to calculate for some generator g1 ∈ Z∗p then it is also easy to
calculate DL(p, g2 , y) for any other generator g2 ∈ Zp∗ . (The group Z∗p has ϕ(p − 1) generators.) To
see this suppose that x1 = DL(p, g1, y) and x2 = DL(p, g2, y). If g2 ≡ g1z mod p where gcd(z, p − 1) then y ≡
g1x2z mod p and consequently, x2 ≡ z−1x1 mod p − 1.
The following result shows that to efficiently calculate DL(p, g, y) for (p, g)∈ I it will suffice to find a
polynomial time algorithm which can calculate DL(p, g, y) on at least a 1 fraction of the possible inputs
Q(|p|)
y ∈ Z∗p for some polynomial
Q.
Proposition 2.25 Let ϵ, δ ∈ (0, 1) and let S be a subset of the prime integers. Suppose there is a proba-
bilistic algorithm A such that for all primes p ∈ S and for all generators g of Z∗p
Pr[A(p, g, y) = x such that gx ≡ y mod p] > ϵ
(where the probability is taken over y ∈ Zp∗ and the coin tosses of A) and A runs in time polynomial
in |p|. Then there is a probabilistic algorithm A ′ running in time polynomial in ϵ−1, δ−1, and |p| such that for
all primes p ∈ S, generators g of Z∗p , and y ∈ Z∗p
Pr[A′(p, g, y) = x such that gx ≡ y mod p] > 1 − δ
Note that since N = O(log(δ−1)) = O(δ−1), A′ is a probabilistic algorithm which runs in time polynomial
in ϵ−1 , δ −1 , and |p|.
The discrete logarithm problem also yields the following collection of functions.
Let I = {(p, g) : p is prime and g is a generator of Z∗p } and define
∗
EXP = {EXPp,g : Zp−1 → Zp where EXPp,g (x) = g x mod p}(p,g)∈I .
Then, under the strong discrete logarithm assumption, EXP is a collection of strong one way functions. This
claim will be shown to be true next.
Cryptography: Lecture Notes 27
Theorem 2.26 Under the strong discrete logarithm assumption there exists a collection of strong one way
functions.
Proof: We shall show that under the DLA EXP is indeed a collection of one way functions. For this we
must show that it satisfies each of the conditions in the definition of a collection of one way functions.
(1) Run Bach’s algorithm (given in [8]) to get a random integer n such that|n| = k along with its factor-
ization.
(2) Test whether n + 1 is prime. See primality testing in section C.9.
(3) If so, let p = n + 1. Given the prime factorization of p − 1 we look for generators g of Z∗p as follows.
(1) Choose g ∈ Z∗p at random.
Y p−1
(2) If p − 1 = q αi isi the prime factorization of p − 1 then for each q icheck that g qi /≡ 1 mod p.
i
If so, then g is a generator of Z∗p . Output p and g.
Otherwise, repeat from step 1.
p−1
Claim 2.27 g is a generator of Z∗ if for each prime divisor q of p − 1, g /≡ 1 mod p.
q
p
Proof: The element g is a generator of Zp∗ if g p−1 ≡ 1 mod p and g j /≡ 1 mod p for all j such that 1 ≤ j < p−1;
that is, g has order p − 1 in Z∗p .
Now, suppose that g satisfies the condition of Claim 2.27 and let m be the order of g in Z∗p . Then m | p −
p−1
1. If m < p − 1 then there exists a prime q such that m q| ; that is, there is an integer d such that md =q
p−1
.
p−1
Therefore g q = (gm)d ≡ 1 mod n contradicting the hypothesis. Hence, m = p − 1 and g is a generator of
Z∗p .
Also, note that the number of generators in Zp∗ is ϕ(p − 1) and in [172] it is shown that
k
ϕ(k) > .
6 log log k
Thus we expect to have to choose O(log log p) candidates for g before we obtain a generator. Hence, S1 runs
in expected polynomial time.
For condition 2 in the definition of a collection of one way functions, we can define S2 to simply output
x ∈ Zp−1 at random given i = (p, g).
Condition 3 is true since the computation of gx mod p can be performed in polynomial time and condition
4 follows from the strong discrete logarithm assumption.
proposed is RSA(n, e, x) = xe mod n where the case of interest is that n is the product of two large primes
p and q and gcd(e, φ(n)) = 1. The corresponding trapdoor information is d such that d · e ≡ 1 mod φ(n).
Viewd as a collection, let RSA = {RSAn,e : → Zn∗ where RSAn,e (x) = xe mod n}(n,e)∈I . for I = {<
Z∗n
n, e > s.t. n = pq |p| = |q|, (e, φ(n)) = 1} .
RSA is easy to compute. How hard is it to invert? We know that if we can factor n we can invert RSA
via the Chinese Remainder Theorem, however we don’t know if the converse is true. Thus far, the best way
known to invert RSA is to first factor n. There are a variety of algorithms for this task. The√best running
time for a fully proved algorithm is Dixon’s random squares algorithms which runs in time log n log log n
).
O(e
In practice we may consider others.√Let l = |p| where p is the smallest prime divisor of n. The Elliptic
√ Curve
2A log A ln n ln ln n
algorithm takes expected time O(e ). The Quadratic Sieve algorithm runs in expected O(e ).
Notice the difference in the argument of the superpolynomial component of the running time. This means
that when we suspect that one prime factor is substantially smaller than the other, we should use the Elliptic
Curve method, otherwise one should use the Quadratic sieve. The new number field sieve algorithm seems to
1/3 2/3
achieve a O(e1.9(ln n) (ln ln n) ) running time which is a substantial improvement asymptotically although
in practice it still does not seem to run faster than the Quadratic Sieve algorithm for the size of integers
which people currently attempt to factor. The recommended size for n these days is 1024 bits.
With all this in mind, we make an explicit assumption under which one can prove that RSA provides a
collection of trapdoor functions.
Strong RSA Assumption:2 Let Hk = {n = pq : p q are primes and |p| = |q| = k}. Then for every
polynomial Q and every PTM A, there exists an integer k0 such that ∀k > k0
1
Pr[A(n, e, RSAn,e (x)) = x] <
Q(k)
(where the probability is taken over all n Hk , e such that gcd(e, ϕ(n)) = 1, x Z∗n , and the coin tosses
of A). ∈ ∈
We need to prove some auxilary claims.
Proof: Since gcd(e, ϕ(n)) = 1 there exists an integer d such that ed ≡ 1 mod ϕ(n). Given x ∈ Z∗n ,
consider the element xd ∈ Z∗n . Then RSAn,e (xd ) ≡ (xd )e ≡ xed ≡ x mod n. Thus, the function RSAn,e :
Z∗n −→ Z∗n is onto and since |Z∗n | is finite it follows that RSAn,e is a permutation over Z∗n .
Remark 2.29 Note that the above is a constructive proof that RSA has an unique inverse. Since gcd(e, ϕ(n)) =
1 if we run the extended Euclidean algorithm we can find d ∈ Z∗n such that
Theorem 2.30 Under the strong RSA assumption, RSA is a collection of strong one way trapdoor permu-
tations.
2
A weaker assumption can be made which under standard constructions is equivalent to the stronger one which is made
in this class. Weak RSA Assumption: Let Hk = {n = pq : p q are prime and |p| = |q| = k}. There is a polynomial Q
1
such that for every PTM A, there exists an integer k0 such that ∀k > k0 Pr[A(n, e, RSAn,e(x)) = x] < 1 − Q(k) (where the
∗
probability is taken over all n ∈ Hk , e such that gcd(e, ϕ(n)) = 1, x ∈ Zn , and the coin tosses of A).
Cryptography: Lecture Notes 29
Proof: First note that by Claim 2.28, RSAn,e is a permutation of Z∗n . We must also show that
RSA satisfies each of the conditions in Definition 2.16. For condition 1, define S1 to compute, on input 1k,
a pair
(n, e) ∈ I ∩ { 0, 1} k and corresponding d such that ed ≡ 1 mod ϕ(n). The algorithm picks two random primes
of equal size by choosing random numbers and testing them for primality and setting n to be their procuct,
then e ∈Zφ(n) is chosen at random, and finally d is computed in polynomial time by first computing
ϕ(n) = (p — 1)(q 1)− and then using the extended Euclidean algorithm. For condition 2, define S2 to
randomly generate x ∈ Zn∗ on input (n, e). Let A1 ((n, e), x) = RSAn,e (x). Note that exponentiation
modulo n is a polynomial time computation and therefore condition 3 holds. Condition 4 follows from the
Strong RSA assumption. For condition 5, let A2((n, e), d, RSA≡n,e(x)) RSAn,e(x)≡ d xed≡ x mod n and this is a
polynomial time computation.
One of the properties of the RSA function is that if we have a polynomial time algorithm that inverts
RSAn,e on at least a polynomial proportion of the possible ∈ inputs x Zn∗ then a subsequent
probabilistic expected polynomial time algorithm can be found which inverts RSA∈n,e on almost all
inputs x Zn∗ . This can be taken to mean that for a given n, e if the function is hard to invert then it is
almost everywhere hard to
invert.
Proposition 2.31 Let ϵ, δ ∈ (0, 1) and let S ⊆ I. Suppose there is a probabilistic algorithm A such that
for all (n, e) ∈ S
Pr[A(n, e, RSAn,e(x)) = x] > ϵ
(where the probability is taken over x ∈ Zn∗ and the coin tosses of A) and A runs in time polynomial in |
n|. Then there is a probabilistic algorithm A′ running in time polynomial in ϵ−1 , δ −1 , and |n| such that
for all (n, e) ∈ S, and x ∈ Z∗n
Pr[A′(n, e, RSAn,e(x)) = x] > 1 − δ
Pr[A′(n, e, −1
n, (x)) /= x] = Pr[A single iteration of the loop of A′ fails]є N
RSA e
−1
N
< (1 − ϵ)є
−N
< (e )
<δ
Note that since N = O(log(δ−1)) = O(δ−1), A′ is a probabilistic algorithm which runs in time polynomial
in ϵ−1 , δ −1 , and |n|.
30 Goldwasser and Bellare
Open Problem 2.32 It remains to determine whether a similar result holds if the probability is also
taken over the indices (n, e) ∈ I. Specifically, if ϵ, δ ∈ (0, 1) and A is a PTM such that
(where the probability is taken over (n, e) ∈ I, x ∈ Z∗n and the coin tosses of A), does there exist a PTM A′
running in time polynomial in ϵ−1 and δ−1 such that
(where the probability is taken over (n, e) ∈ I and the coin tosses of A′)?
Fact 2.34 If there exists a PTM B which on input ⟨n, e ⟩ finds d such that ed ≡ 1 mod φ(n) then there exists
a PTM, B′ that can factor n.
Open Problem 2.35 It remains to determine whether inverting RSA and factoring are equivalent. Namely,
if there is a PTM C which, on input⟨ n, e⟩ , can invert RSA ( n,e ⟩, does there exist a PTM C′ that can factor
n? The answer to this question is unknown. Note that Fact 2.34 does not imply that the answer is yes, as
there may be other methods to invert RSA which do not necessarily find d.
Definition 2.36 Let I = {n = pq : p and q are distinct odd primes.}. For n ∈ I, the squaring function
SQU AREn : Z∗n −→ Zn∗ is defined by SQU AREn (x) ≡ x2 mod n. The trapdoor information of n = pq
∈ I is tn = (p, q). We will denote the entire collection of Rabin’s functions by RABIN = {SQU AREn :
∗
Z∗n −→ Z n }n∈I .
Remark 2.37 Observe that while Rabin’s function squares its input, the RSA function uses a varying
exponent; namely, e where gcd(e, φ(n)) = 1. The requirement that gcd(e, φ(n)) = 1 guarentees that the
RSA function is a permutation. On the other hand, Rabin’s function is 1 to 4 and thus it does not have
a uniquely defined inverse. Specifically, let n = pq∈ I and let ∈a Zp∗ . As discussed in section
C.4, ≡if a x mod p then x and
2 − x are the distinct square roots of a modulo p and≡if a y2 mod q
then y −and y are the distinct square roots of a modulo q. Then, there are four solutions to the
≡
congruence ∈ c, d Zn be the Chinese Remainder Theorem coefficients as
a z2 mod n, constructed as follows. Let
discussed in Appendix C.4. Then
1 mod p
c=
0 mod q
and
0 mod p
d=
1 mod q
and the four solutions are cx + dy, cx − dy, −cx + dy, and −cx − dy.
Cryptography: Lecture Notes 31
The main result is that RABIN is a collection of strong one way trapdoor functions and the proof relies on
an assumption concerning the difficulty of factoring. We state this assumption now.
Factoring Assumption: Let Hk = {pq : p and q are prime and |p| = |q| = k}. Then for every polynomial
Q and every PTM A, ∃k0 such that ∀k > k0
Pr[A(n) = p : p | n and 1
p 1, n] <
Q(k)
(where the probability is taken over all n ∈ Hk and the coin tosses of A).
Theorem 2.38 Under the factoring assumption, RABIN is a collection of one way trapdoor functions.
Before proving this, we consider two auxiliary lemmas. Lemma 2.39 constructs a polynomial-time machine
A which computes square roots modulo a prime. Lemma 2.42 constructs another polynomial-time machine,
SQRT, that inverts Rabin’s function using the trapdoor information; specifically, it computes a square root
modulo composites given the factorization. SQRT makes calls to A.
Lemma 2.39 Let p be an odd prime and let a be a square modulo p. There exists a probabilistic algorithm
A running in expected polynomial time such that A(p, a) = x where x2 ≡ a mod p.
Proof: Let p be an odd prime and let a be a quadratic residue in Z∗p . There are two cases to consider;
p ≡ 1 mod 4 and p ≡ 3 mod 4.
However, at this point we are not done as in Case 1 because the exponent on a in the above congruence is
even. But notice that a2m ≡ 1 mod p = ⇒ am ≡ ±1 mod p. If am ≡1 mod p with m odd, then we proceed
as in Case 1.
l−i
This suggests that we write 2m = 2lr where r is an odd integer and compute a2 r mod p for i = 1, . . . , l
with the intention of reaching the congruence ar ≡ 1 mod p and then proceeding as in Case 1. However, this
'
is not guarenteed as there may exist an integer l′ satisfying 0 ≤ l′ < l such that a2 r ≡l −1 mod p. If this
congruence is encountered, we can recover as follows. Choose a quadratic nonresidue b ∈ Z∗p . Then
p− 1 l' l l' p− 1
r
−1 = J p(b) ≡ b 2 mod p and therefore a2 · b2 r = a2 '
r
· b 2 ≡ 1 mod p. Thus, by multiplying by
' 2l
l l−l
b2 r ≡ −1 mod p, we obtain a new congruence (ar b2 r
) ≡ 1 mod p. We proceed by taking square roots
32 Goldwasser and Bellare
in this congruence. Since l′ < l, we will, after l steps, arrive at arb2s ≡ 1 mod p where s is integral. At this
r+1
point we have ar+1b2s ≡ a mod p =⇒ a 2 bs is a square root of a mod p.
From the above discussion (Cases 1 and 2) we obtain a probabilistic algorithm A for taking square roots.
The algorithm A runs as follows on input a, p where Jp(a) = 1.
(1) If p = 4m + 3 for some integer m then output am+1 as a square root of a mod p.
(2) If p = 4m + 1 for some integer m then randomly choose b ∈ Z∗p until a value is found satisfying
Jp (b) = −1.
(1) Initialize i = 2m and j = 0.
(2) Repeat until i is odd.
i j
i← 2 and j ← 2 .
If ai bj = −1 then j ← j + 2m.
i+1 j
Output a 2 b 2 as a square root of a mod p.
This algorithm terminates after O(l) iterations because in step 2 (ii) the exponent on a is divided by 2. Note
also, that since exactly half of the elements in Z∗p are quadratic nonresidues, it is expected that 2
iterations will be required to find an appropriate value for b at the beginning of step 2. Thus, A runs in
expected polynomial time and this completes the proof of Lemma 2.39.
Remark 2.40 There is a deterministic algorithm due to Ren´e Schoof (see [179]) which computes the
square root of a quadratic residue a modulo a prime p in time polynomial
| in p and a (specifically, the
1
algorithm requires
2 | However, it is unknown whether
O((a +є log p)9) elementary operations for any ϵ > 0).
there exists a deterministic algorithm running in time polynomial in |p|.
Open Problem 2.41 Does there exist a deterministic algorithm that computes square roots modulo a
prime p in time polynomial in |p|?
The next result requires knowledge of the Chinese Remainder Theorem. The statement of this theorem
as well as a constructive proof is given in Appendix C.4. In addition, a more general form of the Chinese
Remainder Theorem is presented there.
Lemma 2.42 Let p and q be primes, n = pq and a a square modulo p. There exists a probabilistic algorithm
SQRT running in expected polynomial time such that SQRT (p, q, n, a) = x where x2 ≡ a mod n.
Proof: The algorithm SQRT will first make calls to A, the algorithm of Lemma 2.39, to obtain square roots
of a modulo each of the primes p and q. It then combines these square roots, using the Chinese Remainder
Theorem, to obtain the required square root.
x ≡ a mod p
Algorithm SQRT runs correctly because y ≡ 2
2 1
=⇒ ≡ a mod n.
2
x 2 ≡ a mod q
y2
Cryptography: Lecture Notes 33
On the other hand, if the factors of n are unknown then the computation of square roots modulo n is as
hard as factoring n. We prove this result next.
Proof: Suppose that I is an algorithm which on input n ∈ Hk and a a square modulo n outputs y such that
a ≡ y2 mod n and consider the following algorithm B which on input n outputs a nontrivial factor of n.
Algorithm B runs correctly because x2 ≡ y 2 mod n =⇒ (x + y)(x − y) ≡ 0 mod n and so n|[(x + y)(x −
y)]. But n / | (x − y) because x /≡ y mod n and n / | (x + y) because x /≡ −y mod n. Therefore, gcd(x − y, n)
is a nontrivial divisor of n. Note also that the congruence a ≡ x2 mod n has either 0 or 4 solutions (a proof
of this result is presented in Appendix C.4). Therefore, if I(n, x2) = y then x ≡ ±y mod n with probability 1
2
and hence the above algorithm is expected to terminate in 2 iterations.
Proof: For condition 1, define S1 to find on input 1k an integer n = pq where p and q are primes of equal
length and |n| = k. The trapdoor information is the pair of factors (p, q).
For condition 2 in the definition of a collection of one way trapdoor functions, define S2 to simply output
x ∈ Zn∗ at random given n.
Condition 3 is true since the computation of x2 mod n can be performed in polynomial time and condition
4 follows from the factoring assumption and Lemma 2.43.
Lemma 2.43 can even be made stronger as we can also prove that if the algorithm I in the proof of Lemma
2.43 works only on a small portion of its inputs then we are still able to factor in polynomial time.
Proposition 2.44 Let ϵ, δ ∈ (0, 1) and let S ⊆ Hk. Suppose there is a probabilistic algorithm I such that
for all n ∈ S
Pr[I(n, a) = x such that a ≡ x2 mod n] > ϵ
2
(where the probability is taken over n ∈ S, a ∈ Z∗n , and the coin tosses of I). Then there exists a
probabilistic algorithm FACTOR running in time polynomial in ϵ−1 , δ −1 , and |n| such that for all n ∈
S,
(where the probability is taken over n and over the coins tosses of FACTOR).
We can estimate the probability that FACTOR fails. Note that even when I(n, x2 mod n) produces a square
root of x2 mod n, FACTOR(n) will be successful exactly half of the time.
−1
Pr[FACTOR(n) fails to factor n] = Pr[A single iteration of the loop of FACTOR fails]є N
−1
1 2є N
< (1 − 2
ϵ)
−N
< (e )
<δ
Since N = O(log(δ−1)) = O(δ−1), FACTOR is a probabilistic algorithm which runs in time polynomial in
ϵ−1 , δ −1 , and |n|.
Definition 2.45 Let J = {pq : p q are odd primes, |p| = |q|, and p ≡ q ≡ 3 mod 4}. For n ∈ J let the
function gn : Qn −→ Qn be defined by gn (x) ≡ x2 mod n and let BLUM-WILLIAMS = {gn }n∈J .
Lemma 2.46 Each function gn ∈ BLUM-WILLIAMS is a permutation. That is, for every element y ∈ Qn
there is a unique element x ∈ Qn such that x2 = y mod n.
Proof: Let n = p1p2 ∈J. Note that by the Chinese Remainder Theorem, y∈ Qn if and only if y ∈ Qn and
y ∈Qp1 and y Q∈p2 . Let ai and ai −be the square roots of y mod pi for i = 1, 2. Then, as is done in the
proof of the Chinese Remainder Theorem, we can construct Chinese Remainder Theorem coefficients c1, c2
and consequently, the four square
such that c1 = mod pp12
10mod
and c2 =
01mod
mod pp12
Since p1 ≡ p2 ≡ 3 mod 4, there are integers m1 and m2 such that p1 = 4m1 + 3 and p2 = 4m2 + 3. Thus,
p1−1
−1
Jp1 (w3 ) = Jp1 (−w 1) = J p1(−1)J p(w1 )1 = (−1) 2 Jp1 (w1 ) = −J p1(w 1) because p1 2 is odd and similarly,
Jp1 (w4 ) = −Jp1 (w2 ), Jp2 (w3 ) = −Jp2 (w1 ), and Jp2 (w4 ) = −Jp2 (w2 ). Therefore, without loss of generality,
we can assume that Jp1 (w1) = Jp1 (w2) = 1 (and so Jp1 (w3) = Jp1 (w4) = −1).
Cryptography: Lecture Notes 35
Since only w1 and w2 are squares modulo p1 it remains to show that only one of w1 and w2 is a square
modulo n or equivalently modulo p2.
p2−1
First observe that J p2(w 1) ≡ (w )1 2 ≡ (c 1a 1 + c 2a 2)2m2+1 ≡ (a )22m2+1 mod p
Proof: This follows immediately from Lemma 2.46 because each function gn ∈ J is a permutation. The
trapdoor information of n = pq is tn = (p, q).
Historical Note: The idea of a hard-core predicate for one-way functions was introduced by Blum, Goldwasser
and Micali. It first appears in a paper by Blum and Micali [40] on pseduo random number generation. They
showed that a if the EXP function (fp,g(x) = gx (mod p)) is hard to invert then it is hard to even guess
better than guessing at random the most significant bit of x. Under the assumption that quadratic residues
are hard to distinguish from quadratic non-residues modulo composite moduli, Goldwasser and Micali in
[98] showed that the squaring function has a hard core perdicate as well. Subsequently, Yao [201] showed
a general result that given any one way function, there is a predicate B(x) which is as hard to guess from
f (x) as to invert f for any function f . Goldreich and Levin’s result is a significantly simpler construction
than Yao’s earlier construction.
Note: Unless otherwise mentioned, the probabilities during this section are calculated uniformly over all
coin tosses made by the algorithm in question.
Definition 2.48 A hard-core predicate of a function f : {0, 1}∗ → {0, 1}∗ is a boolean predicate B :
{0, 1}∗ → {0, 1}, such that
36 Goldwasser and Bellare
Intuitively, the definition guarantees that given x, B(x) is efficiently computable, but given only f (x), it is
hard to even “guess” B(x); that is, to guess B(x) with a probability significantly better than 1 .2
Yao, in [201], showed that the existence of any trapdoor length-preserving permutation implies the existence
of a trapdoor predicate. Goldreich and Levin greatly simplified Yao’s construction and show that any one-
way function can be modified to have a trapdoor predicate as follows (we state a simple version of their
general result).
Theorem 2.49 [94] Let f be a (strong) length preserving one-way function. Define f ′(x ◦ r) = f (x) ◦ r, where |
x| = |r| = k, and ◦ is the concatenation function. Then
Note: v ◦ w denotes concatenation of strings v and w. Computing B from f ′ is trivial as f (x) and r are
easily recoveravle from f ′(x, r). Finaly notice that if f is one-way then so is f ′.
Definition 2.50 A hard-core predicate of a one-way function collection F = {fi : Di → Ri }i∈I is a collection
of boolean predicates B = {Bi : Di → Ri }i∈I such that
(1) ∃P P T A, such that ∀i, x A(i, x) = Bi (x)
(2) ∀ PPT G, ∀ constants c, ∃ , k0 , s.t. ∀k>k0
1 1
Pr[G(i, f (x)) = B (x)] < + .
i i
2 kc
The probability is taken over the random coin tosses of G, random choices of i ∈ I ∩{0, 1}k and random
x ∈ Di .
We want to show that if for p a prime and g a generator of Zp∗ , EXPp,g (x)
≡ g x mod p is hard to invert,
then given y = EXPp,g(x), Bp,g(y) is hard to compute in a very strong sense; that is, in attempting to
compute Bp,g(y) we can do no better than essentially guessing its value randomly. The proof will be by
way of a reduction. It will show that if we can compute Bp,g(y) in polynomial time with probability
greater than
1
2
+ ϵ for some non-negligible ϵ > 0 then we can invert EXPp,g(x) in time polynomial in | p| , | g| , and ϵ−1.
The following is a formal statement of this fact.
Theorem 2.51 Let S be a subset of the prime integers. Suppose there is a polynomial Q and a PTM G
such that for all primes p ∈ S and for all generators g of Z∗p
1 1
Pr[G(p, g, y) = B (y)] > +
p,g
2 Q(|p|)
(where the probability is taken over y ∈ Zp∗ and the coin tosses of G). Then for every polynomial P , there
is a PTM I such that for all primes p ∈ S, generators g of Z∗p , and y ∈ Z∗p
1
Pr[I(p, g, y) = x such that y ≡ gx mod p] > 1 −
P (|p|)
{M SBp,g (x) : Zp−1 → {0, 1}}(p,g)∈I . for I = {(p, g) : p is prime and g is a generator of Zp∗ }.
Corollary 2.53 Under the strong DLA, MSB is a collection of hard-core predicates for EXP.
It can be shown that actually O(log log p) of the most significant bits of x ∈ Zp−1 are hidden by the function
EXPp,g(x). We state this result here without proof.
α = Pr[A(p, g, gx, xlog log pxlog log p−1 . . . x0) = 0 | x = x|p| . . . x0]
(where the probability is taken over x ∈ Z∗n and the coin tosses of A) and let
(where the probability is taken over x ∈ Zn∗ , the coin tosses of A, and the bits ri ). Then under the
Discrete Logarithm Assumption, we have that for every polynomial Q and every PTM A, ∃k0 such that
∀k > k0 , 1
|α − β| < Q(k) .
Corollary 2.55 Under the Discrete Logarithm Assumption we have that for every polynomial Q and
every PTM A, ∃k0 such that ∀k > k0 and ∀kp < log log p
1 1
Pr[A(p, g, gx, x . . . x ) = ]< +
x
kp kp+1
2 Q(k)
0
(where the probability is taken over the primes p such that p = k, the generators g of Z∗p , x
| | ∈ Z ∗ , and
p
the coin tosses of A).
For further information on the simultaneous or individual security of the bits associated with the discrete
logarithm see [131, 108].
38 Goldwasser and Bellare
Theorem 2.56 [6] Let S ⊂ I. Let c > 0. If there exists a probabilistic polynomial-time algorithm O such
that for (n, e) ∈ S,
1 1
prob(O(n, e, xe mod n) = least significant bit of x mod n) ≥ +
2 kc
(taken over coin tosses of O and random choices of x ∈ Zn∗ ) Then there exists a probabilistic
expected polynomial time algorithm A such that for all n, e ∈ S, for all x ∈ Zn∗ , A(n, e, xe mod n) = x
mod n.
Now define LSB = {LSB<n,e> : Zn∗ → Zn∗ }<n,e>∈I where LSB<n,e> (x) =least significant bit of
x. A direct corollary to the above theorem is.
Corollary 2.57 Under the (strong) RSA assumption, LSB is a collection of hard core predicates for RSA.
A similar result can be shown for the most signifant bit of x and in fact for the log log n least (and most)
significant bits of x simultaneously. Moreover, similar results can be shown for the RABIN and BLUM-
WILLIAMS collections. We refer to [6], [199] for the detailed results and proofs. Also see [80] for reductions
of improved security.
Definition 2.58 Let I be a set of indices and for i ∈ I let Di be finite. A collection of one-way predicates
is a set B = {Bi : Di → {0, 1}}i∈I satisfying the following conditions. Let D i
v
= {x ∈ Di , Bi (x) = v.
(1) There exists a polynomial p and a PTM S1 which on input 1k finds i ∈ I ∩ {0, 1}k.
(2) There exists a PTM S2 which on input i ∈ I and v ∈ {0, 1} finds x ∈ Di such that Bi(x) = v.
Cryptography: Lecture Notes 39
(3) For every PPT A there exists a negligble νA such that ∀ k large enough
h i
1
P z = v : i ← I ∩ {0, 1}k ; v ← {0, 1} ; x ← iDv ; z ← A(i, x) ≤ A+ ν (k)
R R R R
Definition 2.59 Let I be a set of indices and for i ∈ I let Di be finite. A collection of trapdoor predicates
is a set B = {Bi : Di → {0, 1}}i∈I satisfying the following conditions. Let D i
v
= {x ∈ Di , Bi (x) = v.
(1) There exists a polynomial p and a PTM S1 which on input 1k finds pairs (i, ti) where i ∈ I ∩ {0, 1}k
and |ti | < p(k) The information ti is referred to as the trapdoor of i.
(2) There exists a PTM S2 which on input i ∈ I and v ∈ {0, 1} finds x ∈ Di such that Bi(x) = v.
(3) There exists a PTM A1 such that for i ∈ I and trapdoor ti, x ∈ Di A1(i, ti, x) = Bi(x).
(4) For every PPT A there exists a negligble νA such that ∀ k large enough
h i
1
P z = v : i ← I ∩ {0, 1}k ; v ← {0, 1} ; x ← i Dv ; z ← A(i, x) ≤ +
R R R
A ν (k)
2
Note that this definition implies that D0 is roughly the same size as D1.
i i
Let Qn denote the set of all quadratic residues (or squares) modulo n; that is, x ∈ Qn iff there exists a y
such that x ≡ y2 mod n.
Recall that the Jacobi symbol (Jn (x)) is defined for any ∈x Zn∗ and has a value
{− in } 1, 1 ; this
value is easily computed by using the law of quadratic reciprocity, even if the factorization of n is
unknown. If n∈is prime
⇔ then x Qn (Jn(x)) = 1; and if∈ n is composite,
⇒ x Qn (Jn(x))
n = 1. We let
J+1 denote the set
{x | x∈
which
∗
doZnot
n ∧belong
(Jn (x))to= 1}. ,Ifandiswe
the Q˜ n denote
letproduct theprimes
of two set of pseudo-squares
then = ˜ modulo n: those elements ofn J
+1
Theorem 2.60 [97, 98]: Let S ⊂ {ns.t.n = pq, p, q, primes} If there exists a probabilistic polynomial-time
algorithm O such that for n ∈ S,
1
prob(O(n, x) decides correctly whether x ∈ nJ+1) > +ϵ , (2.1)
2
where this probability is taken over the choice of x ∈ nJ+1 and O’s random choices, then there exists a
probabilistic algorithm B with running time polynomial in ϵ−1 , δ −1 and |n| such that for all n ∈ S, for
all x ∈
n
J+1,
prob(B(x, n) decides correctly whether x ∈ Qn |x ∈ nJ +1 ) > 1 − δ , (2.2)
where this probability is taken over the random coin tosses of B.
40 Goldwasser and Bellare
Namely, a probabilistic polynomial-time bounded adversary can not do better (except by a smaller than any
polynomial advantage) than guess at random whether ∈ x Jn is a square mod n, if quadratic residuosity
problem is not in polynomial time.
This suggests immediately the following set of predicates: Let
0 if x is a square mod n
QR (x)
1 if x is a non-square mod n
=n,z
where QRn,z : J+1 n→ {0, 1} and Ik = {n#z | n = pq, |p| = |q| = k2, p and q primes, (Jn(z)) = +1, z
a non-square mod n} . It is clear that QR = QR{ n,z is }a set of trapdoor predicates where the trapdoor
information associated with every index < n, z > is the factorization < p, q >. Lets check this explicitly.
(1) To select pairs (i, ti) at random, first pick two primes, p and q, of size . k2. at random, determining n.
Next, search until we find a non-square z in Zn∗ with Jacobi symbol +1. The pair we have found is
then (< n, z >, < p, q >). We already know how to do all of these operations in expected polynomial
time .
Dv :
(2) Follows from the existence of the following algorithm to select elements out of n,
z
• To select x ∈ D0
, let x = y 2 mod n where y is an element of Zn∗ chosen at random.
• To select x ∈ Dn,
1
z
n,
z , let x = zy 2 mod n where y is an element of Zn∗ chosen at random.
(3) To compute QRn,z(x) given < p, q >, we compute (Jp(x)) and ( x ). If both are +1 then QRn,z(x) is 0,
otherwise it is 1. q
(4) This follows from the Quadaratic Residuosity Assumption and the above theorem.
Define Bn,e (x) = the least significant bit of xd mod n for ∈x Zn∗ where ed = 1 mod φ(n). Then, to
∗
select uniformly ∈an x Zn such that Bn,e (x) = v simply select∈ a y Zn∗ whose least significant bit is
v and set x = y mod n. Given d it is easy to compute Bn,e(x) = least significant bit of xd mod n.
e
The security of this construction follows trivially from the definition of collection of hard core predicates for
the RSA collection of functions.
C H A P T E R 3
Cryptography:
In the case of private key encryption, Shannon showed (see lecture 1) that the length of the clear text
should not exceed the length of the secret key, that is, the two parties have to agree on a very long
string to be used as the secret
L key. Using a PSRG G, they need to agree only on a short seed r, and
exchange the message G(r) m.
Algorithms Design:
An algorithm that uses a source of random bits, can manage with a shorter string, used as a seed to a
PSRG.
Complexity Theory:
Given a probabilistic algorithm, an important question is whether we can make it deterministic. Us-
ing the notion of a PSRG we can prove, assuming the existence of one-way function that BPP ⊆
е
∩є DT IM E(2n )
In this chapter we will define good pseudo random number generators and give constructions of them under
the assumption that one way functions exist.
1
We first ask where do can we actually find truly random bit sequences.
41
42 Goldwasser and Bellare
each other. Fortunately, one can remedy these defects by suitably processing the output sequences produced
by the natural sources.
To turn a source which supplies biased but uncorrelated bits into one which supplies unbiased uncorrelated
bits, von Neumann proposed grouping the bits into pairs, and then turning 01 pairs into 0’s, 10 pairs into
1’s, and discarding pairs of the form 00 and 11 [200]. The result is an unbiased uncorrelated source, since
the 01 and 10 pairs will have an identical probability of occurring. Elias [75] generalizes this idea to achieve
an output rate near the source entropy.
Handling a correlated bit source is more difficult. Blum [38] shows how to produce unbiased uncorrelated
bits from a biased correlated source which produces output bits according to a known finite Markov chain.
For a source whose correlation is more complicated, Santha and Vazirani [176] propose modeling it as a
slightly random source, where each output bit is produced by a coin flip, but where an adversary is allowed
to choose which coin will be flipped, from among all coins whose probability of yielding “Heads” is between
δ and 1 −δ. (Here δ is a small fixed positive quantity.) This is an extremely pessimistic view of the possible
correlation; nonetheless U. Vazirani [197] shows that if one has two, independent, slightly-random sources
X and Y then one can produce “almost independent” ϵ-biased bits by breaking the outputs of X and Y
into blocks x, y of length k = Ω(1/δ2 log(1/δ) log(1/ϵ)) bits each, and for each pair of blocks x, y producing
as output the bit x · y (the inner product of x and y over GF (2)). This is a rather practical and elegant
solution. Chor and Goldreich [54] generalize these results, showing how to produce independent ϵ-biased bits
from even worse sources, where some output bits can even be completely determined.
These results provide effective means for generating truly random sequences of bits—an essential
requirement for cryptography—from somewhat defective natural sources of random bits.
Classical techniques for pseudo-random number generation [120, Chapter 3] which are quite useful and
effective for Monte Carlo simulations are typically unsuitable for cryptographic applications. For example,
linear feedback shift registers [104] are well-known to be cryptographically insecure; one can solve for the
Cryptography: Lecture Notes 43
to generate an output sequence{ X0, X1, } from secret parameters a, b, and m, and starting point X0. It
is possible to infer the secret parameters given just a few of the Xi [157]. Even if only a fraction of the
bits of each Xi are revealed, but a, b, and m are known, Frieze, H˚astad, Kannan, Lagarias, and
Shamir show how to determine the seed X0 (and thus the entire sequence) using the marvelous lattice basis
reduction (or “L3 ”) algorithm of Lenstra, Lenstra, and Lov´asz [83, 127].
As a final example of the cryptographic unsuitability of classical methods, Kannan, Lenstra, and L√ovasz
[118] use the L3 algorithm to show that the binary expansion of any algebraic number y (such as 5 =
10.001111000110111 . . .) is insecure, since an adversary can identify y exactly from a sufficient number of
bits, and then extrapolate y’s expansion.
This section provides a brief overview of the history of the modern history of pseudo random bit generators.
Subsequent section define these concepts formally and give constructions.
The first pseudo-random sequence generator proposed for which one can prove that it is impossible to
predict the next number in the sequence from the previous numbers assuming that it is infeasible to invert
the RSA function is due to Shamir [183]. However, this scheme generates a sequence of numbers rather than a
sequence of bits, and the security proof shows that an adversary is unable to predict the next number, given
the previous numbers output. This is not strong enough to prove that, when used in a one-time pad scheme,
each bit of the message will be well-protected.
Blum and Micali [40] introduced the first method for designing provably secure pseudo-random bit sequence
generators, based on the use of one-way predicates. They call a pseudo-random bit generator secure if an
adversary cannot guess the next bit in the sequence from the prefix of the sequence, better than guessing at
random. Blum and Micali then proposed a particular generator based on the difficulty of computing discrete
logarithms. Blum, Blum, and Shub [35] propose another generator, called the squaring generator , which is
simpler to implement and is provably secure assuming that the quadratic residuosity problem is hard. Alexi,
Chor, Goldreich, and Schnorr [6] show that the assumption that the quadratic residuosity problem is hard
can be replaced by the weaker assumption that factoring is hard. A related generator is obtained by using the
RSA function. Kaliski shows how to extend these methods so that the security of the generator depends on
the difficulty of computing elliptic logarithms; his techniques also generalize to other groups [116, 117]. Yao
[201] shows that the pseudo-random generators defined above are perfect in the sense that no probabilistic
polynomial-time algorithm can guess with probability greater by a non-negligible amount than 1/2 whether
an input string of length k was randomly selected from 0,{ 1 k} or whether it was produced by one of the
above generators. One can rephrase this to say that a generator that passes the next-bit test is perfect
in the sense that it will pass all polynomial-time statistical tests. The Blum-Micali and Blum-Blum-Shub
generators, together with the proof of Yao, represent a major achievement in the development of provably
secure cryptosystems. Impagliazzo, Luby, Levin and H˚astad show that actually the existence of a one-
way function is equivalent to the existence of a pseudo random bit generator which passes all polynomial
time statistical tests.
3.1 Definitions
Definition 3.1 Let Xn, Yn be probability distributions on {0, 1}n (That is, by t ∈ Xn we mean that
t ∈ {0, 1}n and it is selected according to the distribution Xn). We say that {Xn} is poly-time indistin-
44 Goldwasser and Bellare
i.e., for sufficiently long strings, no PTM can tell whether the string was sampled according to Xn or
according to Yn.
Intuitively, Pseudo random distribution would be a indistinguishable from the uniform distribution. We
denote the uniform probability distribution on {0, 1}n by Un. That is, for every α ∈ {0, 1}n, Prx∈U n [x =
α 1
]
2n
= .
Definition 3.2 We say that {Xn} is pseudo random if it is poly-time indistinguishable from {Un}. That
is, ∀P T M A, ∀ polynomial Q, ∃n0 , such that ∀n > n0 ,
1
| Pr [A(t) = 1] − Pr [A(t) = 1]| <
∈X
t n t∈Un Q(n)
Comments:
The algorithm A used in the above definition is called a polynomial time statistical test. (Knuth, vol. 2,
suggests various examples of statistical tests). It is important to note that such a definition cannot make
sense for a single string, as it can be drawn from either distribution.
If ∃A and Q such that the condition in definition 2 is violated, we say that Xn fails the test A.
kˆ
Definition 3.3 A polynomial time deterministic program G :{ 0, }1 k→ {0, 1} is a pseudo-random
gener- ator (PSRG) if the following conditions are satisfied.
1. kˆ > k
ˆ
2. {Gkˆ }ˆk is pseudo-random where Gkˆ is the distribution on {0, 1}k obtained as follows: to get t ∈k Gˆ :
pick x ∈ Uk
set t = G(x)
Theorem 3.4 Let f : {0, 1}∗ → {0, 1}∗ be a length preserving one-way permutation. Then
Cryptography: Lecture Notes 45
Proof:
Proof of 1: Let f be as above. Let B be the hard core bit of f . (that is, B is a boolean predicate,
B : {0, 1} ∗ → {0, 1}, s.t it is efficient to compute B(x) given x, but given only f (x), it is hard to compute
B(x) with probability greater than 12 + ϵ for non-negligible ϵ. ) Recall that we showed last class that
Σ|x|
every OWF f (x) can be converted into f1(x, r) for which B′(x, r) = 1 xiri mod 2 is a hard core bit. For
notational ease, assume that B is already a hard-core bit for f .
Define
G1(x) = f (x) ◦ B(x)
(◦ denotes the string concatenation operation). We will prove that G1 (x) has the required properties. Clearly,
G1 is computed in poly-time, and for |x| = k, |G1 (x)| = k + 1. It remains to show that the distribution
{ 1k+1 } is pseudo random.
G
Intuition : Indeed, knowing f (x) should not help us to predict B(x). As f is a permutation, f (Uk) is
uniform on 0, 1 k, and any separation between Uk+1 and Gk+1 must caused by the hard core bit. We
would like to{ show
} that any such separation would enable us to predict B(x) given only f (x) and obtain a
contradiction to B being a hard core bit for f .
We proceed by contradiction: Assume that (G is not good) ∃ statistical test A, polynomial Q s.t
1
Pr (A(t) = 1) — Pr (A(t) = 1) >
t∈Gk+1 t
∈Uk+1 Q(k + 1)
(Note that we have dropped the absolute value from the inequality 3.2. This can be done wlog. We will
later see what would change if the the other direction of the inequality were true).
Intuitively, we may thus interpret that if A answers 1 on a string t it is more likely that t is drawn from
distribution Gk+1, and if A answers 0 on string t that it is more likely that t is drawn from distribution
Uk+1.
Formally, we have
1
Prx∈U k[A(f (x) ◦ B(x)) = 1] − Prx∈U k[A(f (x) ◦ b) = 1] = α − 2(α + β)
46 Goldwasser and Bellare
= 1 (α − β)
1
2
> Q(k)
.
We now exhibit a polynomial time algorithm A′ that on input f (x) computes B(x) with success probability
significantly better than 1/2.
A′ takes as input f (x) and outputs either a 0 or 1.
1. choose b ∈ {0, 1}
2. run A(f (x) ◦ b)
Notice that, when dropping the absolute value from the inequality 3.2, if we take the second direction we
just need to replace b by b in the definition of A′.
Proof:
This contradicts the hardness of computing B(x). It follows that G1 is indeed a PSRG.
Proof of 2: Given a PSRG G that expands random strings of length k to pseudo-random strings of length
k + 1, we need to show that,∀ polynomial Q,∃ PSRG GQ : {0, 1} → {0, 1} Q(k). We define GQ by first using
G Q(k) times as follows:
x → G → f (x) ◦ B(x)
f (x) ◦ B(x) → G → f (f (x)) ◦ B(f (x))
f 2(x) ◦ B(f (x)) → G → f 3(x) ◦ B(f 2(x))
•
•
•
f Q(k)−2(x) ◦ B(f Q(k)−1(x)) → G → f Q(k)(x) ◦ B(f Q(k)−1(x))
The output of GQ(x) is the concatenation of the last bit from each string i.e.,
Clearly, GQ is poly-time and it satisfies the length requirements. We need to prove that the distribution
generated by GQ, GQ(Uk), is poly-time indistinguishable from UQ(k). We proceed by contradiction, (and
Cryptography: Lecture Notes 47
Pr
t∈GQ(k 1
) (A(t) = 1) — Pr (A(t) = 1) >
UQ(k) P (k)
t∈
(As before we omit the absolute value). We now define a sequence D1, D2, ..., DQ(k) of distributions on
{ 1} Q(k), s.t. D1 is uniform (i.e. strings are random), DQ(k) = GQ(k), and the intermediate Di’s are
0,
distributions composed of concatenation of random followed by pseudorandom distributions. Specifically,
We now present a poly-time algorithm A′ that distinguishes between Uk+1 and Gk+1, with success proba-
bility significantly better than
2
1
, contradicting the fact that G is a PSRG.
2. Let
t = γ1 ◦ ... ◦ γQ(k)−i−1 ◦ b ◦ bG(α′) ◦ bG(α′) ◦ ... ◦ bG(α′)
1 2 i
It is immediate that:
′
1
Pr (A′(α) = 1) — Pr (A (α) = 1) >
α∈Uk+1 α
∈Gk+1 P (k)Q2(k)
The extra 1 factor comes form the random choice of i. This violates the fact that G was a pseudo random
generator as we proved in part 1. This is a contradiction
Q(k)
48 Goldwasser and Bellare
Definition 3.6 A next bit test is a special kind of statistical test which takes as input a prefix of a sequence
and outputs a prediction of the next bit.
Definition
Σ 3.7 A (discrete) probability distribution on a set S is a function D : S → [0, 1] ⊂ R so that
k
s S D(s) = 1. For brevity, probability distributions on {0, 1} will be subscripted with a k. The notation
n
∈ x ∈ Xn means that x is chosen so that ∀z ∈ {0, 1} P r[x = z] = Xn (z). In what follows, Un is the
uniform
distribution.
Definition 3.8 A pseudo-random number generator (PSRG) is a polynomial time deterministic algorithm
so that:
2. kˆ > k,
ˆ
3. Gkˆ is pseudo-random2 , where Gkˆ is the probability distribution induced by G on {0, 1}k .
Definition 3.9 We say that a pseudo-random generator passes the next bit test A if for every polynomial
Q there exists ,an integer k0 such that for all kˆ > k0 and p < kˆ
1 1
Pr [A(t1t2 . . . tp) = p+1 ] < +
t
t∈Gkˆ 2 Q(k)
Theorem 3.10 G passes all next bit tests ⇔ G passes all statistical tests.
Proof:
(⇐) Trivial.
(⇒) Suppose, for contradiction, that G passes all next bit test but fails some statistical test A. We will
use A to construct a next bit test A′ which G fails. Define an operator Ⓢ on probability distributions
so that [Xn Ⓢ Ym ](z) = Xn (zn ) · Ym (zm ) where z = zn ◦ zm , |zn | = n, |zm | = m (◦ is concatenation).
For j ≤ kˆ let Gj,kˆ be the probability distribution induced by Gkˆ on {0, 1}j by taking prefixes.
Σ
(That (is G
)=
j,kˆ
x ( ˆ ).) G z
z∈{0,1}k ,z extends x kˆ
that we may drop the absolute value markers on the left hand side. Then ∃i, 0 ≤ i ≤
kˆ − 1 so that
Prt∈H [A(t)
i = 1] − Prt∈H i+1 [A(t) = 1] > kˆ Q(
1
.
k)
The next bit test A′ takes t1t2 . . . ti and outputs a guess for ti+1. A′ first constructs
s0 = t1 t2 . . . ti 0ri+2 ri+3 . . .
rkˆ s1 = t1 t2 . . . ti 1rˆi+2 rˆi+3
. . . rˆkˆ
where rj and rˆj are random bits for i + 2 ≤ j ≤ kˆ. A′ then computes A(s0 ) and A(s1 ).
1
Claim 3.11 By analysis similar to that done in the previous lecture, P r[A′ (t1 t2 . . . ti ) = ti+1 ] > 1
+ ˆ .
2 kQ(k)
Thus we reach a contradiction: A′ is a next bit test that G fails, which contradicts our assumption that G
passes all next bit tests.
Claim 3.12 The least significant bit of x is a hard bit for the one way function gn.
The jth bit of the Blum/Blum/Shub generator may be computed in the following way:
j
B(x2 mod n) = B(xα mod m)
50 Goldwasser and Bellare
where α ≡ 2j mod φ(n). If the factors of n are known, then φ(n) = (p − 1)(q − 1) may be computed so that
α may be computed prior to the exponentiation. α = 2j mod φ(n) may be computed in O(k 2 log j) time and
j
xα may be be computed in k3 time so that the computation of B(x2 ) takes O(max(k3, k2 log j)) time. √
An interesting feature of the Blum/Blum/Shub generator is that if the factorization of n is known, the 2 n th
bit can
√ be generated in√time polynomial in |n|. The following question can be raised: let GBBS (x, p, q) =
n n
B(f 2 (x)) ◦ . . . ◦ B(f 2 +2k (x)) for n = pq and |x| = k. Let G
2
BBS
be the distribution induced by GBBS
2k
on {0, 1} . k
Open Problem 3.14 Pseudo-random generators, given seed x, implicitly define an infinite string gxgx . . ..
1 2
Find a pseudo-random generator so that the distribution created by restricting to any polynomially selected
subset of bits of gx is pseudo-random. By polynomially selected we mean examined by a polynomial time
machine which can see gix upon request for a polynomial number of i’s (the machine must write down the
i’s, restricting |i| to be polynomial in |x|).
C H A P T E R 4
Block ciphers are the central tool in the design of protocols for shared-key cryptography. They are the main
available “technology” we have at our disposal. This chapter will take a look at these objects and describe
the state of the art in their construction.
It is important to stress that block ciphers are just tools; they don’t, by themselves, do something that an end-
user would care about. As with any powerful tool, one has to learn to use this one. Even a wonderful block
cipher won’t give you security if you use don’t use it right. But used well, these are powerful tools indeed.
Accordingly, an important theme in several upcoming chapters will be on how to use block ciphers well. We
won’t be emphasizing how to design or analyze block ciphers, as this remains very much an art. The main
purpose of this chapter is just to get you acquainted with what typical block ciphers look like. We’ll look
at two examples, DES, and AES. DES is the “old standby.” It is currently (year 2001) the most widely- used
block cipher in existence, and it is of sufficient historical significance that every trained cryptographer needs
to have seen its description. AES is a more modern block cipher. It is a possible replacement for DES.
51
52 Goldwasser and Bellare
some input-output examples of EK. The block cipher should be designed to make this task computationally
difficult. Later we will refine this view, but it is the classical one, so let’s go with it for now.
How do block ciphers work? Lets take a look at some of them to get a sense of this.
In 1972 the NBS (National Bureau of Standards, now NIST, the National Institute of Science and Technology)
initiated a program for data protection and wanted as part of it an encryption algorithm that could be
standardized. They put out a request for such an algorithm. In 1974, IBM responded with a design based
on their “Lucifer” algorithm. This design would eventually evolve into the DES.
DES has a key-length of k = 56 and a block-length of l = 64. It consists of 16 rounds of what is called a
“Feistel network.” We will describe the details shortly.
After NBS, several other bodies adopted DES as a standard, including ANSI (the American National Stan-
dards Institute) and the American Bankers Association.
The standard was to be reviewed every five years to see whether or not it should be re-adopted. Although
there were claims that it would not be re-certified, the algorithm was re-certified again and again. Only
recently did the work for finding a replacement begin in earnest, in the form of the AES (Advanced Encryption
Standard) effort.
DES proved remarkably secure. There has, since the beginning, been concerns, especially about exhaustive
key-search. But for a fair length of time, the key size of 56 bits was good enough against all but very well-
funded organizations. Interesting attacks significantly different from key search emerged only in the nineties,
and even then don’t break DES in a sense significant in practice. But with today’s technology, 56 bits is
too small a key size for many security applications.
4.2.2 Construction
The construction is described in FIPS 46 [147]. The following discussion is a quick guide that you can follow
if you have the FIPS document at your side.
Begin at page 87 where you see a big picture. The input is 64 bits and in addition there is a 56 bit key K.
(They say 64, but actually every eighth bit is ignored. It can be set to the parity of the previous seven.)
Notice the algorithm is public. You operate with a hidden key, but nothing about the algorithm is hidden.
The first thing the input is hit with is something called the initial permutation, or IP. This just shuffles bit
positions. That is, each bit is moved to some other position. How? In a fixed and specified way: see page
88. Similarly, right at the end, notice they apply the inverse of the same permutation. From now on, ignore
these. They do not affect security. (As far as anyone can tell, they are there to make loading the chips
easier.)
The essence of DES is in the round structure. There are 16 rounds. Each round i has an associated
subkey Ki which is 48 bits long. The subkeys K1, . . . , K16 are derived from the main key K, in a manner
explained on page 95 of the FIPS document.
Cryptography: Lecture Notes 53
In each round, the input is viewed as a pair (Li, Ri) of 32 bit blocks, and these are transformed into the new
pair (Li+1, Ri+1), via a certain function f that depends on a subkey Ki pertaining to round i. The structure
of this transformation is important: it is called the Feistel transformation.
The Feistel transformation, in general, is like this. For some function g known to the party computing
the transformation, it takes input (L, R) and returns (L′, R′) where L′ = R and R′ = g(R) ⊕ L. A central
property of this transformation is that it is a permutation, and moreover if you can compute g then you
can also invert the transform. Indeed, given (L′, R′) we can recover (L, R) via R = L′ and L = g(R)⊕R′.
For DES, the role of g in round i is played by f (Ki , ·), the round function specified by the subkey Ki .
Since DESK (·) is a sequence of Feistel transforms, each of which is a permutation, the whole algorithm
is a permutation, and knowledge of the key K permits computation of DES−1 (·).
K
Up to now the structure has been quite generic, and indeed many block-ciphers use this high level design:
a sequence of Feistel rounds. For a closer look we need to see how the function f (Ki, · ) works. See the
picture on page 90 of the FIPS document. Here Ki is a 48 bit subkey, derived from the 56 bit key in a way
depending on the round number. The 32 bit Ri is first expanded into 48 bits. How? In a precise, fixed way,
indicated by the table on the same page, saying E-bit selection table. It has 48 entries. Read it as which
inputs bits are output. Namely, output bits 32, 1, 2, 3, 4, 5, then 4, 5 again, and so on. It is NOT random
looking! In fact barring that 1 and 32 have been swapped (see top left and bottom right) it looks almost
sequential. Why did they do this? Who knows. That’s the answer to most things about DES.
Now Ki is XORed with the output of the E-box and this 48 bit input enters the famous S-boxes. There are
eight S-boxes. Each takes 8 bits to 6 bits. Thus we get out 32 bits. Finally, there is a P-box, a permutation
applied to these 32 bits to get another 32 bits. You can see it on page 91.
What are the S-boxes? Each is a fixed, tabulated function, which the algorithm stores as tables in the code
or hardware. You can see them on page 93. How to read them? Take the 6 bit input b1, b2, b3, b4, b5, b6.
Interpret the first two bits as a row number, between 1 and 4. Interpret the rest as a column number, 1
through 16. Now index into the table.
Well, without going into details, the main objective of the above was to give you some idea of the kind of
structure DES has. Of course, the main questions about the design are: why, why and why? What motivated
these design choices? We don’t know too much about this, although we can guess a little.
4.2.3 Speed
How fast can you compute DES? Let’s begin by looking at hardware implementations since DES was in
fact designed to be fast in hardware. We will be pretty rough; you can find precise estimates, for different
architectures, in various places.
You can get over a Gbit/sec throughput using VLSI. Specifically at least 1.6 Gbits/sec, maybe more. That’s
pretty fast.
Some software figures I found quoted are: 12 Mbits/sec on a HP 9000/887; 9.8 Mbits/sec on a DEC Alpha
4000/610. The performance of DES in software is not as good as one would like, and is one reason people
seek alternatives.
A new standard was chosen to replace the DES in February 2001. The AES (Advanced Encryption Standard)
is a block cipher called Rijndael. It is described in [62]. It has a block length of 128 bits, and the key size is
variable: it could be 128, 192 or 256 bits.
54 Goldwasser and Bellare
Unlike ECB encryption, this operation is not length preserving: the output is l-bits longer than the input.
The initial vector is used for encryption, but is then part of the ciphertext, so that the receiver need not be
assumed to know it a priori.
Different specific modes result from different ways of choosing the initial vector. Unless otherwise stated,
it is assumed that before applying the above encryption operation, the encryptor chooses the initial vector
at random, anew for each message M to be encrypted. Other choices however can also be considered, such
as letting IV be a counter that is incremented by one each time the algorithm is applied. The security
attributed of these different choices are discussed later.
CBC is the most popular mode, used pervasively in practice.
CTR mode also uses an auxiliary value, an “initial value” IV which is an integer in the range 0, 1, . . . , 2−l 1.
In the following, addition is done modulo 2 l, and NtSl(j) denotes the binary representation of integer j as
an l-bit string.
Cryptography: Lecture Notes 55
Notice that in this case, decryption did not require computation of EK−1, and in fact did not even require
that EK be a permutation. Also notice the efficiency advantage over CBC: the encryption is parallelizable.
Again, there are several choices regarding the initial vector. It could be a counter maintained by the sender
and incremented by n = |M /l| after message M has been encrypted. Or, it could be chosen anew at random
each time the algorithm is invoked.
where Ci = EK(Mi) for i = 1, . . . , q and M1, . . . , Mq are all distinct l-bit strings.
KNOWN-MESSAGE ATTACK:
M1, . . . , Mq are any distinct points; the adversary has no control over them,
and must work with whatever it gets.
CHOSEN-MESSAGE ATTACK:
M1, . . . , Mq are chosen by the adversary, perhaps even adaptively. That is,
imagine it has access to an “oracle” for the function EK. It can feed the oracle M1 and get back C1 =
EK(M1). It can then decide on a value M2, feed the oracle this, and get back C2, and so on.
Clearly a chosen-message attack gives the adversary much more power, but is also less realistic in practice.
The most obvious attack is exhaustive key search.
EXHAUSTIVE KEY SEARCH: Go through all possible keys K′ ∈0,{1 k }until you find the right one, namely
K. How do you know when you hit K? If EK' (M1) = C1, you bet that K′ = K. Of course, you could be
wrong. But the “chance” of being wrong is small, and gets much smaller if you do more such tests. For
DES, two tests is quite enough. That is, the attack in this case only needs q = 2, a very small number of
input-output examples.
Let us now describe the attack in more detail. For i = 1, . . . , 2k let Ki denote the i-th k-bit string (in
lexicographic order). The following algorithm implements the attack.
For i = 1, . . . , 2k do
If E(Ki, M1) = C1
then if E(Ki, M2) = C2 then return Ki
How long does this take? In the worst case, 2k computations of the block cipher. For the case of DES, even
if you use the above mentioned 1.6 Gbits/sec chip to do these computations, the search takes about 6,000
years. So key search appears to be infeasible.
56 Goldwasser and Bellare
Yet, this conclusion is actually too hasty. We will return to key search and see why later.
DIFFERENTIAL AND LINEAR CRYPTANALYSIS: The discovery of a less trivial attack waited until 1990. Dif-
ferential cryptanalysis is capable of finding a DES key using 2 47 input-output examples (that is, it
requires q = 247). However, differential cryptanalysis required a chosen-message attack.
Linear cryptanalysis improved differential in two ways. The number of input-output examples required is
reduced to 243, but also only a known-message attack is required.
These were major breakthroughs in cryptanalysis. Yet, their practical impact is small. Why? It difficult
to obtain 243 input-output examples. Furthermore, simply storing all these examples requires about 140
terabytes of data.
Linear and differential cryptanalysis were however more devastating when applied to other ciphers, some of
which succumbed completely to the attack.
So what’s the best possible attack against DES? The answer is exhaustive key search. What we ignored
above is parallelism.
Thus DES is feeling its age. Yet, it would be a mistake to take away from this discussion the impression
that DES is weak. Rather, what the above says is that it is an impressively strong algorithm. After all these
years, the best practical attack known is still exhaustive key search. That says a lot for its design and its
designers.
Later we will see that that we would like security properties from a block cipher that go beyond resistance
to key-recovery attacks. It turns out that from that point of view, a limitation of DES is its block size.
Birthday attacks “break” DES with about q = 232 input output examples. (The meaning of “break” here is
very different from above.) Here 2 32 is the square root of 2 64, meaning to resist these attacks we must have
bigger block size. The next generation of ciphers has taken this into account.
FK(C + 3). Let us call this property SP1, for “security property one”.
Of course, anyone who knows the key K can easily compute FK(C + 3) given C, FK(C + 1), FK(C + 2).
And it is hard to think how one can do it without knowing the key. But there is no guarantee that
someone cannot do this without knowing the key. That is, confidence in the security of F against key
recovery does not imply that SP1 is true.
This phenomenon continues. As we see more usages of ciphers, we build up a longer and longer list of
security properties SP1, SP2, SP3, that are necessary for the security of some block cipher based
application.
Furthermore, even if SP1 is true, CTR mode encryption may still be weak. SP1 is not sufficient to guarantee
the security of CTR mode encryption. Similarly with other security properties that one might naively come
up with.
This long list of necessary but not sufficient properties is no way to treat security. What we need is one
single “MASTER” property of a block cipher which, if met, guarantees security of lots of natural usages
of the cipher.
A good example to convince oneself that security against key recovery is not enough is to consider the
block cipher E: {0, 1} k × { 0, 1} l → {0, 1} l defined for all keys K ∈ {0, 1} k and plaintexts x ∈ {0, 1} l by
F (K, x) = x. That is, each instance FK of the block cipher is the identity function. Is this a “good” block
cipher? Surely not. Yet, it is exceedingly secure against key-recovery. Indeed, given any number of input
output examples of FK, an adversary cannot even test whether a given key is the one in use.
This might seem like an artificial example. Many people, on seeing this, respond by saying: “But, clearly,
DES and AES are not designed like this.” True. But that is missing the point. The point is that security
against key-recovery alone does not make a “good” block cipher. We must seek a better notion of security.
Chapter 5 on pseudorandom functions does this.
Exercise 4.2 Show how to use the key-complementation property of DES to speed up exhaustive key search
by a factor of two. Explain any assumptions that you make.
Exercise 4.3 Find a key K such that DESK( ·) = DES−1K( ).· Such a key is sometimes called a “weak” key.
How many weak keys can you find? Why do you think they are called “weak?”
C H A P T E R 5
Pseudo-random functions
Pseudorandom functions (PRFs) and their cousins, pseudorandom permutations (PRPs), figure as central
tools in the design of protocols, especially those for shared-key cryptography. At one level, PRFs and PRPs
can be used to model block ciphers, and they thereby enable the security analysis of protocols based on
block ciphers. But PRFs and PRPs are also a wonderful conceptual starting points in other contexts. In
this chapter we will introduce PRFs and PRPs and try to understand their basic properties.
R
the operation ofR selecting a random string from Keys(F ) and naming it K. Then f ← F denotes the
operation: K ← Keys(F ) ; f ←KF . In other words, let f be the functionKF where K is a randomly chosen
key. We are interested in the input-output behavior of this randomly chosen instance of the family.
A permutation is a map whose domain and range are the same set, and the map is a length-preserving
bijection on this set. That is, a map π: D → D is a permutation if π(x)
| = |x for| all
| x D and∈also π is one-to-
one and onto. We say that F is a family of permutations if Dom(F ) = Range(F ) and each FK is a permutation
on this common set.
Example 5.1 A block cipher is a family of permutations. For example, DES is a family of permutations with
Keys(DES) = {0, 1}56 and Dom(DES) = {0, 1}64 and Range(DES) = {0, 1}64. Here k = 56 and l = L = 64.
Similarly AES is a family of permutations with Keys(AES) = {0, 1}128 and Dom(AES) = {0, 1}128 and
Range(AES) = {0, 1}128. Here k = 128 and l = L = 128.
58
Cryptography: Lecture Notes 59
is the set of all sequences of length 2l in which each entry of a sequence is an L-bit string. For any x ∈ {0, 1}l
we interpret x as an integer in the range {1, , 2l} and set
For any x ∈ {0, 1}l we interpret x as an integer in the range {1, . . . , 2l} and set
Perml((y1, . . . , y2l ), x) = yx .
R
The key space is again equipped with the uniform distribution, so that f ← Perml is the operation of picking
a random permutation on {0, 1}l. In other words, all the possible permutations on {0, 1}l are equally likely.
Example 5.2 We exemplify Rand3→2, meaning l = 3 and L = 2. The domain is {0, 1}3 and the range is
{0, 1}2. An example instance f of the family is illustrated below via its input-output table:
The key-space of Rand3→2 is the set of all such sequences, meaning the set of all 8-tuples each component of
which is a two bit string. There are
3
22·2 = 216 = 65, 536
such tuples, so this is the size of the key-space.
60 Goldwasser and Bellare
We will hardly ever actually think about these families in terms of this formalism. Indeed, it is worth pausing
here to see how to think about them more intuitively, because they are important objects.
We will consider settings in which you have black-box access to a function g. This means that there is a box
to which you can give any value x of your choice (provided x is in the domain of g), and box gives you back
g(x). But you can’t “look inside” the box; your only interface to it is the one we have specified. A random
function g: {0, 1 } l → {0, 1}L being placed in this box corresponds to the following. Each time you give the
box an input, you get back a random L-bit string, with the sole constraint that if you twice give the box the
same input x, it will be consistent, returning both times the same output g(x). In other words, a random
function of l-bits to L-bits can be thought of as a box which given any input x ∈ 0, { 1 }l returns a random
number, except that if you give it an input you already gave it before, it returns the same thing as last time.
It is this “dynamic” view that we suggest the reader have in mind in thinking about random functions.
The dynamic view can be thought of as following program. The program maintains the function in the form
of a table T where T [x] holds the value of the function at x. Initially, the table is empty. The program
processes an input x ∈ {0, 1}l as follows:
The answer on any point is random and independent of the answers on other points.
Another way to think about a random function is as a large, pre-determined random table. The entries are
of the form (x, y). For each x someone has flipped coins to determine y and put it into the table.
We are more used to the idea of picking points at random. Here we are picking a function at random.
One must remember that the term “random function” is misleading. It might lead one to think that certain
functions are “random” and others are not. (For example, maybe the constant function which always
returns 0L is not random, but a function with many different range values is random.) This is not
right. The randomness of the function refers to the way it was chosen, not to an attribute of the selected
function itself. When you choose a function at random, the constant function is just as likely to appear as any
other function. It makes no sense to talk of the randomness of an individual function; the term “random
function” just means a function chosen at random.
Example 5.3 Let’s do some simple probabilistic computations to understand random functions. Fix x ∈
{0, 1}l and y ∈ {0, 1}L . Then:
h i
R
P f (x) = y : f ← Randl→L = 2−L .
h
i −L =/
P f (x ) ⊕ f (x ) = y : f 2 if x2
Randl→L = and y /= 0L
R 1 2 x1 =
← 0 if x 1 x2
1 if x1 = x2 and y = 0L
Similar things hold for the sum of more than two things.
Cryptography: Lecture Notes 61
You are not told which of the two worlds was chosen. The choice of world, and of the corresponding function
g, is made before you enter the room, meaning before you start typing questions. Once made, however, these
choices are fixed until your “session” is over. Your job is to discover which world you are in. To do this, the
only resource available to you is your link enabling you to provide values x and get back g(x). After trying
some number of values of your choice, you must make a decision regarding which world you are in. The
quality of pseudorandom family F can be thought of as measured by the difficulty of telling, in the above
game, whether you are in World 0 or in World 1.
Intuitively, the game just models some way of “using” the function g in an application like an encryption
scheme. If it is not possible to distinguish the input-output behavior of a random instance of F from a truly
random function, the application should behave in roughly the same way whether it uses a function from F
or a random function. Later we will see exactly how this works out; for now let us continue to develop the
notion. But we warn that pseudorandom functions can’t be substituted for random functions in all usages
of random functions. To make sure it is OK in a particular application, you have to make sure that it falls
within the realm of applications for which the formal definition below can be applied.
The act of trying to tell which world you are in is formalized via the notion of a distinguisher. This is an
algorithm which is provided oracle access to a function g and tries to decide if g is random or pseudorandom.
(Ie. whether it is in world 0 or world 1.) A distinguisher can only interact with the function by giving it
inputs and examining the outputs for those inputs; it cannot examine the function directly in any way.
We write Ag to mean that distinguisher A is being given oracle access to function g. Intuitively, a family is
pseudorandom if the probability that the distinguisher says 1 is roughly the same regardless of which world
it is in. We capture this mathematically below. Further explanations follow the definition.
Definition 5.4 Let F : Keys(F ) × D → R be a family of functions, and let A be an algorithm that takes an
oracle for a function g: D → R, and returns a bit. We consider two experiments:
-1 -0
Experiment ExpF,prf Experiment ExpF,prf
K ←R
Keys(F )A R
g ← RandD→R
A
d ← AFK d ← Ag
Return d Return d
62 Goldwasser and Bellare
The algorithm A models the person we were imagining in our room, trying to determine which world he
or she was in by typing queries to the function g via a computer. In the formalization, the person is an
algorithm, meaning a piece of code. We formalize the ability to query g as giving A an oracle which takes
input any string x ∈D and returns g(x). Algorithm A can decide which queries to make, perhaps based on
answers received to previous queries. Eventually, it outputs a bit d which is its decision as to which world
it is in.
It should be noted that the family F is public. The adversary A, and anyone else, knows the description of
the family, and have code to implement it, meaning are capable, given values K, x, of computing F (K, x).
The worlds are captured by what we call “experiments.” The first experiment picks a random instance
FK of family F and then runs adversary A with oracle g = FK. Adversary A interacts with its oracle,
querying it and getting back answers, and eventually outputs a “guess” bit. The experiment returns the
same bit. The second experiment picks a random function
→ g: D R and runs A with this as oracle, again
returning A’s guess bit. Each experiment has a certain probability of returning 1. The probability is taken
over the random choices made in the experiment. Thus, for the first experiment, the probability is over
the choice of K and any random choices that A might make, for A is allowed to be a randomized
algorithm. In the second experiment, the probability is over the random choice of g and any random
choices that A makes. These two probabilities should be evaluated separately; the two experiments are
completely different.
To see how well A does at determining which world it is in, we look at the difference in the probabilities
that the two experiments return 1. If A is doing a good job at telling which world it is in, it would return
1 more often in the first experiment than in the second. So the difference is a measure of how well A is doing.
We call this measure the prf-advantage of A. Think of it as the probability that A “breaks” the scheme F ,
with “break” interpreted in a specific, technical way based on the definition.
Different distinguishers will have different advantages. There are two reasons why one distinguisher may
achieve a greater advantage than another. One is that it is more “clever” in the questions it asks and the
way it processes the replies to determine its output. The other is simply that it asks more questions, or
spends more time processing the replies. Indeed, we expect that as you see more and more input-output
examples of g, your ability to tell which world you are in will go up. The “security” of family F must thus
be measured as a function of the resources allowed to the attacker. We want to know, for any given resource
limitation, what is the prf-advantage achieved by the most “clever” distinguisher amongst all those who are
restricted to the given resource limitations. We associate to the family F a prf-advantage function which on
input any values of the resource parameters returns the maximim prf-advantage that an adversary restricted
to those resources could obtain. Think of it as the maximum possible achievable probability of “breaking”
the scheme F if an attacker is restricted to the given resources.
The choice of resources to consider can vary. In this case we have chosen to measure the time-complexity
of A, the number of queries q it makes, and the total length µ of these queries. We associate to the
family F an advantage function which on input a particular choice of these resource parameters returns the
maximum possible advantage that could be obtained by a distinguisher restricted in resource usage by the
given parameters. Put another way, it is the advantage of the “cleverest” or “best” distinguisher restricted
to the given resources. The advantage function of F captures the security of F as a PRF.
Let us now explain the resources, and some important conventions underlying their measurement, in more
detail. The first resource is the time-complexity of A. To make sense of this we first need to fix a model of
Cryptography: Lecture Notes 63
computation. We fix some RAM model. Think of it as the model used in Algorithms courses, so that you
measure the running time of an algorithm just as you did there. However, we adopt the convention that the
time-complexity of A refers not just to the running time of A, but to the maximum of the running times of
the two experiments in the definition, plus the size of the code of A. In measuring the running time of the
first experiment, we must count the time to choose the key K at random, and the time to compute the value
FK(x) for any query x made by A to its oracle. In measuring the running time of the second experiment, we
count the time to choose the random function g in a dynamic way, meaning we count the cost of maintaining
a table of values of the form (x, g(x)). Entries are added to the table as g makes queries. A new entry is
made by picking the output value at random.
The number of queries made by A captures the number of input-output examples it sees. In general, not all
strings in the domain must have the same length, and hence we also measure the sum of the lengths of all
queries made.
There is one feature of the above parameterization about which everyone asks. Suppose that F has key-length
k. Obviously, the key length is a fundamental determinant of security: larger key length will typically mean
more security. Yet, the key length k does not appear explicitly in the advantage function AdvFprf(t, q, µ).
Why is this? The advantage function is in fact a function of k, but without knowing more about F it is
difficult to know what kind of function. The truth is that the key length itself does not matter: what matters
is just the advantage a distinguisher can obtain. In a well-designed block cipher, AdvFprf(t, q, µ) should be
about t/2k. But that is really an ideal; in practice we should not assume ciphers are this good.
The strength of this definition lies in the fact that it does not specify anything about the kinds of strategies
that can be used by a distinguisher; it only limits its resources. A distinguisher can use whatever means
desired to distinguish the function as long as it stays within the specified resource bounds.
What do we mean by a “secure” PRF? Definition 5.4 does not have any explicit condition or statement
regarding when F should be considered “secure.” It only associates to F a prf-advantage function. Intuitively,
F is “secure” if the value of the advantage function is “low” for “practical” values of the input parameters.
This is, of course, not formal. It is possible to formalize the notion of a secure PRF using a complexity
theoretic framework; one would say that the advantage of any adversary whose resources are polynomially-
bounded is negligible. This requires an extension of the model to consider a security parameter in terms of
which asymptotic estimates can be made. We will discuss this in more depth later, but for now we stick to a
framework where the notion of what exactly is a secure PRF remains fuzzy. The reason is that this reflects
real life. In real life, security is not some absolute or boolean attribute; security is a function of the resources
invested by an attacker. All modern cryptographic systems are breakable in principle; it is just a question
of how long it takes.
This is our first example of a cryptographic definition, and it is worth spending time to study and understand
it. We will encounter many more as we go along. Towards this end let us summarize the main features
of the definitional framework as we will see them arise later. First, there are experiments, involving an
adversary. Then, there is some advantage function associated to an adversary which returns the probability
that the adversary in question “breaks’ the scheme. Finally, there is an advantage function associated to
the cryptographic protocol itself, taking input resource parameters and returning the maximum possible
probability of “breaking” the scheme if the attacker is restricted to the given resource parameters. These
three components will be present in all definitions. The important component is the experiments; this is
where we chose and pin down a model of security.
case where the adversary gets, in addition, and oracle for g−1. We consider these settings in turn. The first
is the setting of chosen-plaintext attacks while the second is the setting of chosen-ciphertext attacks.
We fix a family of functions F : Keys(F ×) D→ D. (You may want to think Keys(F ) = {0, 1} k and D = {0, 1} l,
since this is the most common case. We do not mandate that F be a family of permutations although
again this is the most common case.) As before, we consider an adversary A that is placed in a room where it
has oracle access to a function g chosen in one of two ways.
R
World 0: The function g is drawn at random from PermD, namely via g PermD. (So g is just a random
←
permutation on D.)
Definition 5.5 Let F : Keys(F ) × D → D be a family of functions, and let A be an algorithm that takes an
oracle for a function g: D → D, and returns a bit. We consider two experiments:
-cpa-1 -cpa-0
Experiment ExpF,prp Experiment ExpF,prp
K ←R
Keys(F )A R
g ← PermD
A
d ← AFK d ← Ag
Return d Return d
where the maximum is over all A having time-complexity t and making at most q oracle queries, the sum of
the lengths of these queries being at must µ bits.
The intuition is similar to that for Definition 5.4. The difference is that here the “ideal” object with which F
is being compared is no longer the family of random functions, but rather the family of random permutations.
-cpa-1 -1
Experiment Expprp is actually identical to Expprf . The probability is over the random choice of
F,A F,A
key K and also over the coin tosses of A if the latter happens to be randomized. The experiment returns
-cpa-0
the same bit that A returns. In Experiment Expprp F, , a permutation g: {0, 1 }l → {0, 1} l is chosen at
random, and the result bit of A’s computation with oracle g is returned. The probability is over the choice
A
of g and the coins of A if any. As before, the measure of how well A did at telling the two worlds apart,
which we call the prp-cpa-advantage of A, is the difference between the probabilities that the experiments
return 1.
Conventions regarding resource measures also remain the same as before. Informally, a family F is a secure
-cpa
PRP under CPA if AdvprpF (t, q, µ) is “small” for “practical” values of the resource parameters.
Cryptography: Lecture Notes 65
Definition 5.6 Let F : Keys(F ) × D →D be a family of permutations, and let A be an algorithm that takes
an oracle for a function g: D→D, and also an oracle for the function g−1: D →D, and returns a bit. We
consider two experiments:
-cca-1 -cca-0
Experiment ExpF,prp Experiment ExpF,prp
A A
K ←R
Keys(F−1) R
g ← Perm D
FK ,F g,g−1
d← A K d←A
Return d Return d
The intuition is similar to that for Definition 5.4. The difference is that here the adversary has more power:
not only can it query g, but it can directly query g−1. Conventions regarding resource measures also remain
the same as before. However, we add some resource parameters. Specifically, since there are now two oracles,
we count separately the number of queries, and total length of these queries, for each. Informally, a family
-cca
F is a secure PRP under CCA if Advprp F
(t, qe, µe, qd, µd) is “small” for “practical” values of the resource
parameters.
for any t, q, µ.
66 Goldwasser and Bellare
Definition 5.8 Let F = {Fn}n≥1 be a sequence of function families and let D = {Dn}n≥1 be a sequence
of distinguishers. The prf-advantage of D is the function Advprf (·), defined for every n by
F,D
prf
AdvF,D
(n) = Advprf .
Fn,Dn
We say that F is a PRF if it is polynomial-time computable and also the function Advprf (·) is negligible
F,D
for every polynomial-time distinguisher sequence D.
Notice that this time the definition insists that the functions themselves can be efficiently computed.
function f . (Assume l = L). In that case, the mode of operation turns into the one-time pad cryptosystem.
The shared random key is just the random function f . As we have discussed, this is well known to meet a
strong and well-defined security. So, in the shared random function model, CTR mode is easily seen to be
“good”.
But now what? We have schemes which are secure but a priori can’t be efficiently realized, since they rely
on random functions. That’s where pseudorandom function or permutation families come in. A PRF family
is a family F of functions indexed by small keys (eg. 56 or 128 bits). However, it has the property that if
K is shared between Alice and Bob, and we use FK in place of a random function f in some scheme designed in
the shared random function model, the resulting scheme is still secure as long as the adversary is restricted
in resource usage.
In other words, instances of PRFs can be used in place of random functions in shared key schemes. The
definition of a PRF is crafted to make this possible for as wide a range of applications as possible. An
instance of a pseudorandom function is specified by a short key K, and the parties need only store this key.
Then, they use this function in place of the random function in the scheme. And things should work out, in
the sense that if the scheme was secure when a random function was used, it should still be secure.
This is a very rough idea. Technically, it is not always true: this is the intuition. Pseudorandom functions
don’t always work. That is, you can’t substitute them for random functions in any usage of the latter and
expect things to work out. But if used right, it works out in a large number of cases. How do we identify
these cases? We have to resort to the formal definition of a pseudorandom function family and prove the
security of our construct based on it. We will see how to do this later.
In this context we stress one important point. The security of a PRF relies on the key K being secret.
The adversary is not given K and cannot directly compute the function. (Of course it might gain some
information about values of FK on various points via the usage of FK by the legitimate parties, but that
will be OK.) In other words, you can substitute shared, secret random functions by PRFs, but not public
ones.
Pseudorandom functions are an intriguing notion and a powerful tool that enable the following design
paradism. When you want to design a scheme for encryption, authentication, or some other purpose, design
it in the shared random function model. Then simply substitute the random function with a pseudorandom
one, and your scheme should still be secure.
where K is a random, unknown key, how hard is it to find K? The block cipher is taken as “secure” if the
resources required to recover the key are prohibitive. Yet, as we saw, even a cursory glance at common block
cipher usages shows that hardness of key recovery is not sufficient for security. We had discussed wanting a
“MASTER” security property of block ciphers under which natural usages of block ciphers could be proven
secure. We suggest that this “MASTER” property is that the block cipher be a secure PRP, under either
CPA or CCA.
We cannot prove that specific block ciphers have this property. The best we can do is assume they do, and
then go on to use them. For quantitative security assessements, we would make specific conjectures about
the advantage functions of various block ciphers. For example we might conjecture something like:
-cpa
Advprp (t, q, 64q) = t/TDES q
c DES 1 · + c 1·
255 240
68 Goldwasser and Bellare
Here TDES is the time to do one DES computation on our fixed RAM model of computation, and c1 is some
constant. In other words, we are conjecturing that the best attacks are either exhaustive key search or linear
cryptanalysis. We might be bolder with regard to AES and conjecture something like
-cpa
Advprp (t, q, 128q) = t/TAES q
c AES 1 · + c1 · .
2128 2128
We could also make similar conjectures regarding the strength of block ciphers as PRPs under CCA rather
than CPA.
More interesting is Advprf
DES (t, q). Here we cannot do better than assume that
Advprf ( 64 ) = t/TDES q2
c1 · +
t, q, q
DES 255 264
Advprf ( 128 ) = t/TAES q2
c1 · + .
AES t, q, q
2128 2128
This is due to the birthday attack discussed later. It is possible because a block cipher is a family of
permutations, and is a general phenomenon.
We stress that these are all conjectures, and barring the birthday attack, they are based on the assumption
that the best possible attacks against the pseudorandomness of the cipher stem from the known key-recovery
attacks. Yet, there could exist better attacks that break the cipher as a PRF without recovering the key.
So far, we do not know of any such attacks, but the amount of cryptanalytic effort that has focused on this
goal is small. Certainly, to assume that a block cipher is a PRF is a much stronger assumption than that it
is secure against key recovery. Nonetheless, the motivation and arguments we have outlined in favor of the
PRF assumption stay, and our view is that if a block cipher is broken as a PRF then it should be considered
insecure, and a replacement should be sought.
Example 5.9 We define a family of functions F : {0, 1} k × { 0, 1} l → {0, 1} L as follows. We let k = Ll and
view a k-bit key K as specifying an L row by l column matrix of bits. (To be concrete, assume the first
L bits of K specify the first column of the matrix, the next L bits of K specify the second column of the
matrix, and so on.) The input string x = x[1] . . . x[l] is viewed as a sequence of bits, and the value of F (K, x)
is the corresponding matrix vector product. That is
K[1, 1] K[1, 2] · · · K[1, l] x[1] y[1]
F (x) = K[2, 1] K[2, 2] · · · K[2, l] · x[2] y[2]
=
K
. . . .
. . . .
K[L, 1] K[L, 2] · · · K[L, x[l] y[L]
where l]
y[1] = K[1, 1] · x[1] ⊕ K[1, 2] · x[2] ⊕ . . . ⊕ K[1, l] · x[l]
y[2] = K[2, 1] · x[1] ⊕ K[2, 2] · x[2] ⊕ . . . ⊕ K[2, l] · x[l]
. = .
y[L] = K[L, 1] · x[1] ⊕ K[L, 2] · x[2] ⊕ . . . ⊕ K[L, l] · x[l] .
Here the bits in the matrix are the bits in the key, and arithmatic is modulo two. The question we ask
is whether F is a “secure” PRF. We claim that the answer is no. The reason is that one can design an
adversary algorithm A that achieves a high advantage (close to 1) in distinguishing between the two worlds.
We observe that for any key K we have FK (0l ) = 0L . This is a weakness since a random function of l-
bits to L-bits is very unlikely to return 0L on input 0l , and thus this fact can be the basis of a
distinguishing
Cryptography: Lecture Notes 69
adversary. Let us now show how the adversary works. Remember that as per our model it is given an oracle
g: {0, 1}l → {0, 1}L and will output a bit. Our adversary D works as follows:
Adversary Dg
Let y ← g(0l)
If y = 0L then return 1 else return 0
This adversary queries its oracle at the point 0l , and denotes by y the l-bit string that is returned. If y = 0L
it bets that g was an instance of the family F , and if / y = 0L it bets that g was a random function.
Let us now see how well this adversary does. We claim that
h i
prf-1
P ExpF, =1 = 1
D
h i
-0
prf
P ExpF, =1 = 2−L .
D
prf-1
Why? Look at Experiment ExpF, as defined in Definition 5.4. Here g = FK for some K. In that case
it is certainly true that g(0l ) =D 0L so by the code we wrote for D the latter will return 1. On the
-0
other hand look at ExperimentF, Expprf as defined in Definition 5.4. Here g is a random function. As
we saw D
in Example 5.3, the probability that g(0l ) = 0L will be 2−L , and hence this is the probability that D
will return 1. Now as per Definition 5.4 we subtract to get
h i h i
prf-1 prf-0
prf
= P Exp = 1 − P Exp = 1
AdvF,D F,D F,D
= 1 − 2−L .
Now let t be the time complexity of D. This is O(l + L) plus the time for one computation of F , coming to
O(l2L). The number of queries made by D is just one, and the total length of all queries is l. Thus we have
Advprf
F
(t, 1, l) = max { AdvF,prf }
A A
≥ Advprf
F,D
= 1 − 2−L .
The first inequality is true because the adversary D is one member of the set of adversaries A over which
the maximum is taken, and hence the maximum advantage is at least that attained by D. Our conclusion
is that the advantage function of F as a PRF is very high even for very low values of its resource
parameter inputs, meaning F is very insecure as a PRF.
Example 5.10 Suppose we are given a secure PRF F : {0, 1} k × { 0, 1} l → {0, 1} L. We want to use F to
design a PRF G: {0, 1} k × { 0, 1} l → {0, 1} 2L. The input length of G is the same as that of F but the output
length of G is twice that of F . We suggest the following candidate construction: for every k-bit key K and
every l-bit input x
GK (x) = FK (x)ǁFK (x) .
Here “ ǁ ” denotes concatenation of strings, and x denotes the bitwise complement of the string x. We ask
whether this is a “good” construction. “Good” means that under the assumption that F is a secure PRF,
G should be too. However, this is not true. Regardless of the quality of F , the construct G is insecure. Let
us demonstrate this.
We want to specify an adversary attacking G. Since an instance of G maps l bits to 2L bits, the
adversary D will get an oracle for a function g that maps l bits to 2L bits. In World 0, g will be chosen as
a random function of l bits to 2L bits, while in World 1, g will be set to GK where K is a random k-bit
key. The adversary must tell determine in which world it is placed. Our adversary works as follows:
70 Goldwasser and Bellare
Adversary Dg
Let y1 ← g(1l)
Let y2 ← g(0l)
Parse y1 as y1 = y1,1 yǁ1,2 with y1,1| = y|1,2 =| L Parse
|ǁ y2,1 = |y2,2 | = L| If y1,1 =
y2 as y2 = y2,1 y2,2 with
y2,2 then return 1 else | return 0
This adversary queries its oracle at the point 1 l to get back y1 and then queries its oracle at the point 0 l to
get back y2. Notice that 1l is the bitwise complement of 0l. The adversary checks whether the first half of
y1 equals the second half of y2, and if so bets that it is in World 1. Let us now see how well this adversary
does. We claim that
h i
prf-1
P ExpG, =1 = 1
D
h i
-0
prf
P ExpG, =1 = 2−L .
D
prf-1
Why? Look at Experiment ExpG, as defined in Definition 5.4. Here g = GK for some K. In that case we
have D
= 1 − 2−L .
Now let t be the time complexity of D. This is O(l + L) plus the time for two computations of G, coming to
O(l + L) plus the time for four computations of F . The number of queries made by D is two, and the total
length of all queries is 2l. Thus we have
Advprf
G
(t, 2, 2l) = prf
max { AdvG, }
A A
≥ Advprf
G,D
= 1 − 2−L .
Our conclusion is that the advantage function of G as a PRF is very high even for very low values of its
resource parameter inputs, meaning G is very insecure as a PRF.
Exercise 5.11 Present a secure construction for the problem of the previous example. That is, suppose we
are given a secure PRF F : {0, 1} k × { 0, 1} l → {0, 1} L. Design a PRF G: {0, 1} k × { 0, 1} l → {0, 1} 2L which
is a secure PRF as long as F is secure. For simplicity you may assume k = l = L.
insecure. We have indicated that we want to adopt as notion of security for a block cipher the notion of a
PRF or a PRP. If this is to be viable, it should be the case that any function family that is insecure under key-
recovery is also insecure as a PRF or PRP. In this section we verify this fact. Doing so will enable us to exercise
the method of reductions.
We begin by formalizing security against key-recovery. We consider an adversary that, based on input-output
examples of an instance FK of family F , tries to find K. Its advantage is defined as the probability that
it succeeds in finding K. The probability is over the random choice of K, and any random choices of the
adversary itself.
We give the adversary oracle access to FK so that it can obtain input-output examples of its choice. We do
not constrain the adversary with regard to the method it uses. This leads to the following definition.
Definition 5.12 Let F : Keys(F ) × D → R be a family of functions, and let B be an algorithm that takes
an oracle for a function g: D → R, and outputs a string. We consider the experiment:
Experiment ExpF, kr
K ← Keys(F )B
R
K′ ← BFK
If K = K′ then return 1 else return 0
This definition has been made general enough to capture all types of key-recovery attacks. Any of the
classical attacks such as exhaustive key search, differential cryptanalysis or linear cryptanalysis correspond
to different, specific choices of adversary B. They fall in this framework because all have the goal of finding
the key K based on some number of input-output examples of an instance FK of the cipher. To illustrate let
us see what are the implications of the classical key-recovery attacks on DES for the value of the key-recovery
advantage function of DES. Assuming the exhaustive search attack is always successful based on testing two
examples leads to the fact that
Adv kr
DES (t, 2, 2 · 64) = 1
for t being about 255 times the time TDES for one computation of DES. On the other hand, linear crypt-
analysis implies that
Adv kr 43 43
DES (t, 2 , 2 · 64) = 1
for t being about 243 · TDES. This gives us a couple of data points on the curve Advkr (t, q, ql). For a more
DES
concrete example, let us look at the key recovery advantage of the family of Example 5.9.
Example 5.13 Let F : {0, 1} k× { 0, 1} l → {0, 1} L be the family of functions from Example 5.9. We saw that
its prf-advantage was very high. Let us now compute is kr-advantage. The following adversary B recovers
the key. We let ej be the l-bit binary string having a 1 in position j and zeros everywhere else. We
assume that the manner in which the key K defines the matrix is that the first L bits of K form the first
column of the matrix, the next L bits of K form the second column of the matrix, and so on.
Adversary BFK
72 Goldwasser and Bellare
The adversary B invokes its oracle to compute the output of the function on input ej . The result, yj ,
is exactly the j-th column of the matrix associated to the key K. The matrix entries are concatenated to
yield K′, which is returned as the key. Since the adversary always finds the key we have
kr
Adv F, = 1.
B
The time-complexity of this adversary is t = O(l2L) since it makes q = l calls to its oracle and each
computation of FK takes O(lL) time. Thus
AdvFkr(t, l, l2) = 1 .
The parameters here should still be considered small: l is 64 or 128, which is small for the number of queries.
So F is insecure against key-recovery. Note however that F is less secure as a PRF than against key-recovery:
its advantage function as a PRF had a value close to 1 for parameter values much smaller than those
above. This leads into our next claim, which says that for any given parameter values, the kr-advantage of
a family cannot be significantly more than its prf or prp-cpa advantage.
Now we claim that if a block cipher is a secure PRF or PRP then it is also secure against all key-recovery
attacks. Put another way, the advantage of F with respect to key recovery cannot be much larger than its
advantage as a PRF.
Proposition 5.14 Let F : {0, 1}k × {0, 1}l → {0, 1}L be a family of functions. Then for any t, q with q < 2l
we have
1
Advkr(t, q, ql) ≤ Advprf(t′, q + 1, (q + 1)l) + , (5.1)
F F
2L
and furthermore, if L = l, then also
-cpa 1
Advkr(t, q, ql) ≤ Advprp (t′, q + 1, (q + 1)l) + , (5.2)
F F
2L − q
The proof introduces the central idea of reductions. We will show a transformation B ›→ AB of any kr-
adversary B into a prf-adversary AB such that
Adv kr prf
≤ AdvF,A 1
F, + L
B
B
2
and also, if the resources used by B are t, q, ql, then those used by AB are t′, q + 1, (q + 1)l. We claim that
barring manipulation, this proves the first equation of the claim. Indeed, by taking maximums on both sides,
we will be able to get the equation in question, as we will see later.
The problem that adversary AB is trying to solve is to determine whether its given oracle g is a random
instance of F or a random function of l bits to L-bits. The idea behind a reduction is that AB will run B
as a subroutine and use B’s output to solve its own problem.
B is an algorithm that expects to be in a world where it gets an oracle FK, and it tries to find K via queries
to its oracle. For simplicity, first assume that B makes no oracle queries. Now, when AB runs B, it
produces
Cryptography: Lecture Notes 73
some key K′. AB can test K′ by checking whether F (K′, x) agrees with g(x) for some value x. If so, it bets
that g was an instance of F , and if not it bets that g was random.
If B does make oracle queries, we must ask how AB can run B at all. The oracle that B wants is not
available. However, B is a piece of code, communicating with its oracle via a prescribed interface. If you
start running B, at some point it will output an oracle query, say by writing this to some prescribed memory
location, and stop. It awaits an answer, to be provided in another prescribed memory location. When that
appears, it continues its execution. When it is done making oracle queries, it will return its output. Now
when AB runs B, it will itself supply the answers to B’s oracle queries. When B stops, having made some
query, A will fill in the reply in the prescribed memory location, and let B continue its execution. B does
not know the difference between this “simulated” oracle and the real oracle except in so far as it can glean
this from the values returned.
The value that B expects in reply to query x is FK(x). That is not what AB gives it. Instead, it returns
g(x), where g is AB’s oracle. When AB is in World 1, g(x) = FK(x), and so B is functioning as it would
in its usual environment, and will return the key K with a probability equal to its kr-advantage. However
when AB is in World 0, g is a random function, and B is getting back values that bear little relation to the
ones it is expecting. That does not matter. B is a piece of code that will run to completion and produce
some output. When we are in World 0, we have no idea what properties this output will have. But it is
some k-bit string, and AB will test it as indicated above. It will fail the test with high probability as long
as the test point x was not one that B queried, and AB will make sure the latter is true via its choice of x.
Let us now proceed to the actual proof.
Proof of Proposition 5.14: We prove the first equation and then briefly indicate how to alter the proof
to prove the second equation.
We will show that given any adversary B whose resources are restricted to t, q, ql we can construct an
adversary AB, using resources t′, q + 1, (q + 1)l, such that
1
Adv kr ≤ prf
AdvF,A + . (5.3)
F, B
B 2L
≤ max { Advprf
F, + 2
−L
}
A A
= AdvF (t, q + 1, (q + 1)l) + 2−L .
prf
The maximum, in the case of B, is taken over all adversaries whose resources are t, q, ql. In the second line,
we apply Equation (5.3). In the third line, we maximize over all A whose resources are t, q + 1, (q + 1)l. The
inequality on the third line is true because this set includes all adversaries of the form AB. The last line is
simply by definition. So it remains to show how to design AB so that Equation (5.3) holds. (This is the
core of the argument, namely what is called the “reduction.”)
As per Definition 5.4, adversary AB will be provided an oracle for a function g: {0, 1} l → {0, 1} L, and will
try to determine in which World it is. To do so, it will run adversary B as a subroutine. We provide the
description followed by an explanation and analysis.
g
Adversary AB
i←0
Run adversary B, replying to its oracle queries as follows
When B makes an oracle query x do
74 Goldwasser and Bellare
i ← i + 1 ; xi ←
←x yi
g(xi )
Return yi to B as the answer
Until B stops and outputs a key K′
Let x be an l bit string not in the set{ x1, . . . , }
xq ←
y g(x)
If F (K′, x) = y then return 1 else return 0
As indicated in the discussion preceding the proof, AB is running B and itself providing answers to B’s
oracle queries via the oracle g. When B has run to completion it returns some k-bit string K′, which AB
tests by checking whether F (K′x) agrees with g(x). Here x is a value different from any that B queried, and
it is to ensure that such a value can be found that we require q < 2l in the statement of the Proposition.
Now we claim that
h i
prf-1
P Exp F,A
= 1 ≥ AdvkrF,
B
B
h i
prf -0
P ExpF,AB = 1 = 2−L .
We will justify these claims shortly, but first let us use them to conclude. Subtracting, as per Definition 5.4,
we get h i h i
prf-1 prf-0
prf
= P Exp = 1 − P Exp = 1
AdvF,AB F,AB F,AB
≥ Adv kr — 2−L
.
F,B
Re-arranging terms gives us Equation (5.3). It remains to justify Equations (5.4) and (5.4).
prf-1
Equation (5.4) is true because in ExpF,A B
the oracle g is FK for some K, which is the oracle that B expects,
and thus B functions as it does in Exp F,
kr
. If B is successful, meaning the key K′ it outputs equals K, then
certainly AB returns 1. (It is possible that A B might return 1 even though B was not successful. This would
B h i
′ ′ prf-1
happen if K K but F (K , x) = F (K, x). It is for this reason that P Exp F,A = 1 is greater than or
B
equal to Advkr -0
rather than merely equal to it.) Equation (5.4) is true because in Expprf B the function g
F, F,
is random, and
since x was never queried by B, the value g(x) is unpredictable to B. Imagine
B A that g(x) is
chosen only when x is queried to g. At that point, K′, and thus F (K′, x), is already defined. So g(x) has a
2−L chance of hitting this fixed point. Note this is true regardless of how hard B tries to make F (K ′ , x)
be the same as g(x).
For the proof of Equation (5.2) we seek a reduction B ›→ AB with the property that
Advkr prp-cpa
1
≤ Adv + . (5.4)
F,B F,AB L
2 − q
The reduction is identical to the one given above, meaning the adversary AB is the same. For the analysis
we see that
h i
prp-cpa-1 kr
P ExpF,AB = 1 = AdvF,
B
h i
prp-cpa-0 1
P ExpF,AB =1 ≤ 2L − q .
Subtracting yields
prp-cpa h i h i
Adv prp-cpa-1 prp-cpa-0
F,AB = P ExpF,AB = 1 − P ExpF,AB =1
kr 1
≥ AdvF,B −
2L − q
Cryptography: Lecture Notes 75
and re-arranging terms gives us Equation (5.4). The first equation above is true for the same reason as
before. The second equation is true because in World 0 the map g is now a random permutation of l-bits to l-
bits. So g(x) assumes any random value except the values y1 , . . . , yq , meaning there are 2L
− q things
it could be. (Remember L = l in this case.)
The following example illustrates that the converse of the above claim is far from true. The kr-advantage of
a family can be significantly smaller than its prf or prp-cpa advantage, meaning that a family might be very
secure against key recovery yet very insecure as a prf or prp, and thus not useful for protocol design.
Example 5.15 Define the block cipher E: {0, 1 }k × {0, 1} l → {0, 1} l by EK(x) = x for all k-bit keys K and
all l-bit inputs x. We claim that it is very secure against key-recovery but very insecure as a PRP under
CPA. More precisely, we claim that for all values of t, q, however high,
Proposition 5.16 Let E: {0, 1}k × {0, 1}l → {0, 1}l be a family of permutations. Suppose q satisfies 2
≤ q ≤ 2(l+1)/2. Then
q(q − 1)
Advprf(t, q, ql) ≥ 0.3 · ,
E
2l
where and t is the time for q computations of E, plus O(ql).
Proof of Proposition 5.16: The birthday attack is implemented by an adversary D who, given an oracle
g: {0, 1}l → {0, 1}l, works like this:
76 Goldwasser and Bellare
Adversary Dg
For i = 1, . . . , q do
Let xi be the i-th l-bit string in lexicographic order
yi ← g(xi )
End For
If y1, . . . , yq are all distinct then return 1, else return 0
We claim that
q(q − 1)
Adv prf
E,
≥ 0.3 · ,
D
2
from which the Proposition follows. Let us now justify this lower bound. Letting N = 2l, we claim that
h i
-1
P Expprf = 1 = 1 (5.5)
E,
D
h i
-0
prf
P ExpE, =1 = 1 − C(N, q) . (5.6)
D
Here C(N, q), as defined in Section A.1, is the probability that some bin gets two or more balls in the
experiment of randomly throwing q balls into N bins. We will justify these claims shortly, but first let us
use them to conclude. Subtracting, we get h i h i
prf-1 prf-0
prf = P Exp = 1 − P Exp =1
AdvE,D E,D E,D
= 1 − [1 − C(N, q)]
= C(N, q)
q(q − 1)
≥ 0.3 · .
2
The last line is by Proposition A.1. It remains to justify Equations (5.5) and (5.6).
Equation (5.5) is clear because in World 1, g = EK, and since E is a family of permutations, g is a
permutation, and thus y1, . . . , y q are all distinct. Now, suppose D is in World 0, so that g is a random
function of l bits to l bits. What is the probability that y1, . . . , yq are all distinct? Since g is a random
function and x1, . . . , xq are distinct, y1, . . . , y q are random, independently distributed values in {0, 1} l. Thus
we are looking at the birthday problem. We are throwing q balls into N = 2l bins and asking what is the
probability of there being no collisions, meaning no bin contains two or more balls. This is −1 C(N, q),
justifying Equation (5.6).
Proposition 5.17 Suppose E: {0, 1}k × {0, 1}l → {0, 1}l is a family of permutations. Then
-cpa
Advprf(t, q, ql) ≤ q(q − 1) + Advprp (t, q, ql)
E E
2l+1
for any t, q.
Cryptography: Lecture Notes 77
The proof is again by reduction, but a very simple one. A given prf-adversary A is mapped to prp-adversary
A, meaning the adversary is unchanged. Accordingly, the following does not explicitly talk of reductions.
Proof: Let A be an adversary that takes an oracle for a function g: {0, 1}l → {0, 1}l. Then we claim that
prf
Adv -cpa q(q − 1)
≤ Advprp + , (5.7)
E, E,
where q is the number of oracle queries
A made by A. AThe 2l+1 follows by taking maximums, so it
Proposition
remains to prove Equation (5.7).
Let B denote the adversary that first runs A to obtain an output bit b and then returns ¯b, the
complement of b. Then
h i h i
prf
AdvE, prf-1 prf-0
= P ExpE, = 1 − P ExpE, =1
A hA i A h i
-1 -0
= 1 − P Expprf = 1 − 1 − P Expprf = 1
E,B E,B
h i h i
prf-0 prf-1
= P ExpE,B = 1 − P ExpE,B =1
h i h i
prf-0 prp-cpa-1
= P ExpE,B = 1 − P ExpE,B =1
h i h i
prf-0 prp-cpa-0
= P ExpE,B = 1 − P ExpE,B =1
h i h i
prp-cpa-0 prp-cpa-1
+ P Exp E,B = 1 − P ExpE,B =1
h i h i
prf-0 prp-cpa-0 prp-cpa
= P ExpE,B = 1 − P ExpE,B = 1 + AdvE,A
So it suffices to show that .
h i h i q(q − 1)
-0 -cpa-0
P ExpprfE,B = 1 − P Expprp E,B = 1 ≤ . (5.8)
2l+1
-0
Let P [· ] denote the probability in Experiment Expprf
E,B
, and let g denote the oracle in that experiment.
Assume without loss of generality that all oracle queries of A —they are the same as those of B— are
distinct. Let D denote the event that all the answers are distinct, and let D denote the complement of
event
D. Then
h i
prf-0
P Exp E,B
= 1 = P [Bg = 1]
= P [Bg = 1 | D] · P [D] + P Bg = 1 | D · P D
≤ P [Bg = 1 | D] + P D
h i
prp-cpa-0
= P ExpE,B =1 +PD
h i
prp-cpa-0 q(q − 1)
≤ P Exp E,B =1 + .
2l+1
In the last step we used Proposition A.1. Re-arranging terms gives us Equation (5.8) and concludes the
proof.
whose security is based on the presumed hardness of specific number-theoretic problems. Finally in practice
we might be willing to assume that block ciphers like the AES have the property, as discussed above.
The notion of a pseudorandom bit generator (PRBG) was discussed in Chapter 3. Recall it is a polynomial
time computable function G which takes a k bit seed and produces a p(k) > k bit sequence of bits that
look random to any efficient test.
The first construction of PRF families was from PRBGs which are length doubling: the output length is
twice the input length.
Theorem 5.18 [92] Given a length-doubling pseudorandom bit generator we can construct a sequence of
families F which is a PRF.
The construction, called the binary tree construction, is like this. The function G induces a tree of functions
Gz in the following way:
Then fi (x) is defined in terms of the binary tree induced by G as follows: ∀xfi (x) = Gx (i). We now let
F = {F k }k≥1 where F k is {fi : {0, 1}k → {0, 1}k ||i| = k}. It is shown in [92] that this is secure.
Another construction based on a primitive called synthesizers was given by Naor and Reingold [143]. This
yields a PRBG based construction which is more parallelizable than the binary tree based one.
We saw before that we can construct PRBGs from one-way functions [111, 107]. It follows from the above
that we can build (infinite) PRF families from one-way functions. Furthermore, one can see that given any
pseudorandom function family one can construct a one-way function [110]. Thus we have the following.
Theorem 5.19 There exists a sequence of families which is a PRF if and only if there exist one-way
functions.
This is quite a strong statement. One-way functions are a seemingly weak primitive, a priori quite unrelated
to PRFs. Yet the one can be transformed into the other. Unfortunately the construction is not efficient
enough to be practical.
Naor and Reingold have suggested a construction of a sequence of families F ={ F n n≥1 which they prove
is a PRF assuming that the DDH (Decisional Diffie-Hellman) problem is hard} [144]. In this construct,
evaluation of particular function from Fn on an l(n)-bit input requires l(n) modular multiplications and
one modular exponentiation, over an underlying group.
Set Y0 = 0l
Set Y1 = f (M1⊕Y0)
Cryptography: Lecture Notes 79
Set Y2 = f (M2⊕Y1)
.
Set Ym = f (Mm⊕Ym−1)
Output Ym.
Let F (m) denote the family of functions in which the function indexed by K maps 0,{ 1 ml} to 0, 1{l and
} is
given by the CBC using f = FK.
Theorem 5.20 [12] Let l, m ≥ 1 and q, t ≥ 0 be integers. Let F : KeysF × { 0, 1} l → {0, 1}l be a family of
functions. Then
′ ′
Advprf ( ) Advprf( 5) + 1 q2m2 (5.9)
q, t ≤ q, . ·
F (m)
tF 2l
prp-cpa ′ ′
q2m2 (5.10)
≤ AdvF (q , t ) + 2l−1
We stress that the input must be of exactly nl bits, not at most nl bits. Else the construction is not secure.
There are also other constructions. For example, the cascade construction of [19]. Also, based on the ideas of
XOR MACs [11], a construction called the Protected Counter Sum was given in [30]. Different constructions
have different properties in terms of security and efficiency.
Similarly (or simultaneously) we may want to extend the output length. It turns out this is easier, so we
won’t discuss it in detail.
Let P1, P2 be polynomials so that ∀ x, P1(x) > P2(x). Define FP1,P2 = {f : {0, 1 }P1(k) → {0, 1} P1(k)} .
Then we wish to hash names into address where | Name| = P1(k) and| Address = P2(k). We may use
pseudo-random functions to hash these names so| that Address = fi(Name).
Claim 5.21 If there exist one way functions, then for all polynomials P , and for all integers k sufficiently
large, the previous hashing algorithm admits no more than O( √ 1 ) + 1 collisions even if, after fixing
2 Address P (k)
the scheme, the names are chosen by an adversary with access to previous (Name, Address) pairs.
5.12.2 Prediction
The above pseudo-random functions then pass all prediction tests (assuming there exist one way functions).
5.12.3 Learning
Define a concept space S and a concept C ⊆ S. A learner is exposed to a number of pairs (ei , ±i ) where
ei ∈ S and ±i = + ⇔ ei ∈ C. The learner is then requested to determine if a given e ∈ S is an element of
C.
The above pseudo-random function show that if there exist one way functions, then there exist concepts not
learnable in polynomial time. (The concept in this case would be {x, f (x)} ⊆ {x, y}.)
Then, even though the enemy planes see many pairs of the form (x, f (x)), they cannot compute f (y) for y
they have not yet seen.
A family of functions F : {0, 1}k × {0, 1}l → {0, 1}L is said to be inner-product preserving if for every
K ∈ {0, 1}k and every distinct x1, x2 ∈ {0, 1}l − {0l} we have
Problem 5.23 Let E: {0, 1}k × {0, 1}l → {0, 1}l be a block cipher. The two-fold cascade of E is the block
cipher E(2): {0, 1}2k × {0, 1}l → {0, 1}l defined by
for all K1 , K2 ∈ {0, 1}k and all x ∈ {0, 1}l . (Here “ǁ” stands for concatenation of strings.) Prove that
-cpa -cpa
AdvEprp
(2)
(t, q, lq) ≤ Advprp
E (t, q, lq)
for all t, q. Explain in a sentence why this shows that if E is a secure PRP then so is E(2).
C H A P T E R 6
Private-key encryption
The private-key setting, also called the symmetric setting, considers two parties who share a key and will
use this key to imbue communicated data with various security attributes. (How they came into possession
of a shared key is not part of the problem considered here, and will be addressed later.) The main security
goals are privacy and authenticity of the communicated data. A symmetric encryption scheme (also called
a private-key encryption scheme) enables parties in possession of a shared secret key to achieve the goal of
data privacy. This is the canonical goal of cryptography.
Definition 6.1 A symmetric encryption scheme SE = (K, E, D) consists of three algorithms, as follows:
• The key generation algorithm K is a randomized algorithm that returns a string K. We let Keys(SE)
denote the set of all strings that have non-zero probability of being output by K. The members of
this
set are called keys. We write K ← K for the operation of executing K and letting K denote the key
R
returned.
• The encryption algorithm E takes the key K ∈ Keys(SE) and a plaintext M ∈ {0, 1}∗ to return a
ciphertext C ∈ {0, 1}∗ ∪ {⊥}. This algorithm might be randomized or stateful. We write C ← E (M ).
R
• The deterministic decryption algorithm D takes a key K ∈ Keys(SE) and a ciphertext C ∈ {0, 1}∗
to return some M ∈ {0, 1}∗ ∪ {⊥}. We write M ← DK(C).
We require that for any key K ∈ Keys(SE) and any message M ∈ {0, 1}∗, if EK(M ) returns a ciphertext
C /= ⊥ then DK(C) = M .
The key generation algorithm, as the definition indicates, is randomized. It takes no inputs. When it is run,
it flips coins internally and uses these to select a key K. Typically, the key is just a random string of some
length, in which case this length is called the key length of the scheme. When two parties want to use the
82
Cryptography: Lecture Notes 83
scheme, it is assumed they are in possession of K generated via K. How they came into joint possession
of this key K in such a way that the adversary did not get to know K is not our concern here; it is an
assumption we make.
Once in possession of a shared key, the parties can encrypt data for transmission. To encrypt plaintext M ,
the sender (or encrypter) runs the encryption algorithm with key K and input M to get back a string we
call the ciphertext.
The encryption algorithm may be either randomized or stateful. If randomized, it flips coins and uses those
to compute its output on a given input K, M . Each time the algorithm is invoked, it flips coins anew,
and in particular invoking it twice on the same inpupts may not yield the same response both times. If
the encryption algorithm is stateful, its operation depends on a global variable such as a counter, which is
updated upon each invocation of the encryption algorithm. Thus, the encrypter maintains a counter that is
initialized in some pre-specified way. When the encryption algorithm is invoked on inputs K, M , it
computes a ciphertext based on K, M and the current counter value. It then updates the counter, and the new
counter value is stored. (The receiver does not need to maintain a counter, and in particular decryption does
not require access to any global variable or call for any synchronization between parties.)
When there is no such counter or global variable, the scheme is stateless. In stateful schemes the encryption
algorithm typically does not flip coins internally. (It is still OK to call it a randomized algorithm. It just
happens to not make use of its given random number generator.) In stateless schemes, randomization is
essential to security, as we will see.
Once a ciphertext C is computed, it is transmitted to the receiver. The latter can recover the message by
running the decryption algorithm with the same key used to create the ciphertext, namely via M ← K(C).
The decryption algorithm is neither randomized nor stateful. D
Many encryption schemes restrict the set of strings that they are willing to encrypt. (For example, perhaps
the algorithm can only encrypt plaintexts of length a positive multiple of some block length l, and can only
encrypt plaintext of length up to so maximum length.) These kinds of restrictions are captured by having the
encryption algorithm return the special symbol ⊥when fed a message not meeting the required restriction.
In a stateless scheme, there is typically a set of strings, called the plaintext space, such thatE K(M )/= for
all K and all M in the plaintext space. In a stateful scheme, whether or not KE(M ) returns ⊥⊥ depends not
only on M but also possibly on the value of the state variable. For example, when a counter is being used,
it is typical that there is a limit to the number of encryptions performed, and when the counter reaches a
certain value the encryption algorithm returns ⊥ no matter what message it is fed.
Scheme 6.2 The one-time-pad encryption scheme (also called the Vernam cipher) SE = (K , E, ) is stateful
and deterministic. The key generation algorithm simply returns a random k-bit D string K, where the key-
length k is a parameter of the scheme, so that the key space is Keys(SE ) = { 0, 1 k. The encryptor maintains
}
a counter ctr which is initially zero. The encryption and decryption algorithms operate as follows:
Algorithm K(M )
E Algorithm DK((C, ctr))
Let n = M
| | Let n ← |M
If ctr + n > k then return ⊥
For i =| 1 to n do
For i = 1 to n do
M [i] ← K[ctr + i] ⊕
C[i] ← K[ctr + i] ⊕ M
C[i] EndFor
[i]
M ← M [1] . . . M [n]
EndFor
Return M
ctr ← ctr + n
C ← C[1] . . . C[n]
Return (ctr, C)
84 Goldwasser and Bellare
Here X[i] dennotes the i-th bit of a binary string X. The encryption algorithm XORs the message bits with
key bits, starting with the key bit indicated by the current counter value. The counter is then incremented by
the length of the message. Key bits are not reused, and thus if not enough key bits are available to encrypt
a message, the encryption algorithm returns⊥. Note that the ciphertext returned includes the value of the
counter. This is in order to enable decryption. (Recall that the decryption algorithm, as per Definition 6.1,
must be stateless and deterministic, so we do not want it to have to maintain a counter as well.)
The following schemes rely either on a family of permutations (ie. a block cipher) or a family of functions. It
is convenient if the length of the message to be encrypted is a positive multiple of a block length associated to
the family. Accordingly, the encryption algorithm returns ⊥if this is not the case. In practice, however, one
would first pad the message appropriately so that the padded message always had length a positive multiple
of the block length, and apply the encryption algorithm to the padded message. The padding function should
be injective and easily invertible.
Scheme 6.3 Let E: {0, 1} k × { 0, 1} l → {0, 1} l be a block cipher. Operating it in ECB (Electronic Code
Book) mode yields a stateless symmetric encryption scheme, SE = K( , E, ). The key generation algorithm
simply returns a random key for the block cipher, meaning itDpicks a random k-bit string key and returns
it, so that the key space is {0, 1}k. The encryption and decryption algorithms are as follows:
Parsing M means that we divide it into l-bit blocks and let M [i] denote the i-th such block, and similarly
for C. Notice that here the encryption algorithm did not make any random choices. That does not mean
we are not allowed to call it a randomized algorithm; it is simply a randomized algorithm that happened to
choose to not make random choices.
Cipher-block chaining (CBC) is the most popular mode, used pervasively in practice.
Scheme 6.4 Let E: {0, 1} k × { 0, 1} l → {0, 1} l be a block cipher. Operating it in CBC mode with random
IV yields a stateless symmetric encryption scheme, SE= ( K, ,E ). The key generation algorithm simply
returns a random key for the block cipher, meaning itDpicks a random k-bit string key and returns it, so that
the key space is {0, 1}k. The encryption and decryption algorithms are as follows:
Algorithm EK(M )
Algorithm DK(C)
If |M | < l then return If |C| < 2l then return ⊥
⊥
If |M | mod l 0 then return ⊥ If |C| mod l 0 then return ⊥
Parse M as M [1] . . . M [n] Parse C as C[0]C[1] . . . C[n]
R
C[0] ← {0, 1}l For i = 1, . . . , n do
For i = 1, . . . , n do M [i] ← E−1 K(C[i]) ⊕C[i − 1]
C[i] ← FK (C[i − 1] ⊕ M EndFor
[i]) M ← M [1] . . . M [n]
EndFor Return M
C ← C[0]C[1] . . . C[n]
Return C
Parsing M means that we divide it into l-bit blocks and let M [i] denote the i-th such block. In parsing C we
also divide it into l-bit blocks, but this time the blocks are numbered starting at 0. The IV is C[0], which is
Cryptography: Lecture Notes 85
chosen at random by the encryption algorithm. This choice is made independently each time the algorithm
is invoked.
For the following schemes it is useful to introduce some notation. If l≥ 1 and i are integers with 0≤ ≤i −2l 1
then we let NtSl(i) (read “number to string”) denote the l-bit string which is the binary representation of
integer i. If s is a string we let StN(s) (read “string to number”) denote the non-negative integer whose
binary representation is s.
The CTR (counter) modes that follow are not much used, to the best of our knowledge, but perhaps wrongly
so. We will see later that they have good security properties. In contrast to CBC, the encryption and
decryption procedures are parallelizable, which can be exploited to speed up these processes in the presence
of hardware support. There are two variants of the mode, one random and the other stateful, and, as we
will see later, their security properties are different.
Scheme 6.5 Let F : {0, 1} k × { 0, 1} l → {0, 1} L be a family of functions. (Not necessarily a family of
permutations.) Operating it in CTR mode with starting point chosen at random anew for each message
yields a stateless symmetric encryption scheme, SE = K ( , E, ), which we call R-CTR mode or the R-CTR
symmetric encryption scheme. The key generation D algorithm simply returns a random key for F , meaning
it picks a random k-bit string key and returns it, so that the key space is {0, 1}k. The encryption and
decryption algorithms are as follows:
Algorithm K(M )
E Algorithm DK(C)
If M
| |< L then return ⊥
If |C |< l + L then return ⊥
If M
| mod
| L = /0 then return ⊥
If (|C | − l) mod L = / 0 then return ⊥
Parse M as M [1] . . . M [n]
Let C[0] be the first l bits of C
R ← {0, 1, . . . , 2l− 1
R
} Parse the rest of C as C[1] . . .
For i = 1, . . . , n do C[n]←R StN(C[0])
C[i] ← FK (NtSl (R + i)) ⊕ M For i = 1, . . . , n do
[i] M [i] ← FK (NtSl (R + i)) ⊕ C[i]
EndFor EndFor
C[0] ← NtSl(R) M ← M [1] . . . M [n]
C ← C[0]C[1] . . . C[n] Return M
Return C
Parsing M means that we divide it into L-bit (not l-bit!) blocks and let M [i] denote the i-th such block. For
C the decryption algorithm first chops off the first l bits, and then divides the rest of the string into L-bit
blocks. The random value chosen by the encryption algorithm is an integer in the range 0, . . . , 2−l 1. It is
used to define a sequence of values on which FK is applied to produce a “pseudo one-time pad” to which
the data is XORed. The random value is included in the ciphertext in order to enable decryption.
Scheme 6.6 Let F : {0, 1} k × { 0, 1} l → {0, 1} L be a family of functions. (Not necessarily a family of
permutations.) Operating it in CTR mode with counter yields a stateful symmetric encryption scheme,
SE = ( K, , E), which we call C-CTR mode or C-CTR symmetric encryption scheme. The key generation
D
algorithm simply returns a random key for F , meaning it picks a random k-bit string key and returns it, so
that the key space is { 0, 1} k. The encryptor maintains a counter ctr which is initially zero. The encryption
and decryption algorithms are as follows:
86 Goldwasser and Bellare
Algorithm EK(M )
If |M | < L then return Algorithm DK(C)
⊥ If |C| < l + L then return ⊥
If |M | mod L 0 then return If (|C| − l) mod L /= 0 then return ⊥
⊥
Parse M as M [1] . . . M [n] Let C[0] be the first l bits of C
If ctr + n ≥ 2l then return ⊥ Parse the rest of C as C[1] . . .
For i = 1, . . . , n do C[n]←ctr StN(C[0])
C[i] ← FK (NtSl (ctr + i)) ⊕ M For i = 1, . . . , n do
[i] EndFor M [i] ← FK (NtSl (ctr + i)) ⊕ C[i]
C[0] ← NtSl(ctr) EndFor
C ← C[0]C[1] . . . C[n] M ← M [1] . . . M [n]
ctr ← ctr + n Return M
Return C
Parsing M means that we divide it into L-bit (not l-bit!) blocks and let M [i] denote the i-th such block.
For C the decryption algorithm first chops off the first l bits, and then divides the rest of the string into L-
bit blocks. The counter is not allowed to wrap around: the encryption algorithm returns⊥ if this would
happen. The counter is included in the ciphertext in order to enable decryption. The encryption algorithm
updates the counter upon each invocation, and begins with this updated value the next time it is invoked.
We will return to the security of these schemes after we have developed the appropriate notions.
I definitely don’t want to reveal. If the sum of the bits leaks, the adversary knows how many stocks I am
buying.
Granted, this might not be a problem at all if the data was in a different format. However, making assump-
tions, or requirements, on how users format data, or how they use it, is a bad and dangerous approach to
secure protocol design. It is an important principle of our approach that the encryption scheme should yield
security no matter what is the format of the data. That is, we don’t want people to have to worry about
how they format their data: it should be secure regardless.
In other words, as designers of security protocols, we cannot make assumptions about data content or
formats. Our protocols must protect any data, no matter how formatted. We view it as the job of the
protocol designer to ensure this is true. And we want schemes that are secure in the strongest possible
natural sense.
So what is the best we could hope for? It is useful to make a thought experiment. What would an “ideal”
encryption be like? Well, it would be as though some angel took the message M from the sender and
delivered it to the receiver, in some magic way. The adversary would see nothing at all. Intuitively, our
goal is to “approximate” this as best as possible. We would like encryption to have the properties of ideal
encryption. In particular, no partial information would leak.
As an example, consider the ECB encryption scheme of Example 6.3. Given the ciphertext, can an eaves-
dropping adversary figure out the message? Hard to see how, since it does not know K, and if F is a
“good” block cipher, then it ought to have a hard time inverting FK without knowledge of the underlying
key. Nonetheless this is not a good scheme. Consider just the case n = 1 of a single block message.
Suppose I have just two messages, 0l for “buy” and 1l for “sell.” I keep sending data, but always one of
these two. What happens? The adversary sees which are the same. That is, it might see that the first two
are the same and equal to the third, etc.
In a secure encryption scheme, it should not be possible to co-relate ciphertexts of different messages in such
a way that information is leaked.
This has a somewhat dramatic implication. Namely, encryption must be probabilistic or depend on state
information. If not, you can always tell if the same message was sent twice. Each encryption must use
fresh coin tosses, or, say, a counter, and an encryption of a particular message may be different each time.
In terms of our setup it meansEis a probabilistic or stateful algorithm. That’s why we defined symmetric
encryption schemes, above, to allow these types of algorithms.
The reason this is dramatic is that it goes in many ways against the historical or popular notion of encryption.
Encryption is thought of as a code, a fixed mapping of plaintexts to ciphertexts. This is no longer true.
A single plaintext will have many possible ciphertexts. (Depending on the random choices or state of the
encryption algorithm.) Yet, it should be possible to decrypt. How is this possible? We have seen several
examples above.
Let us now start looking at privacy more formally. We will begin with the information-theoretic notion of
perfect privacy introduced by Shannon, and analyze the one-time pad scheme in this light. Perfect security,
however, requires a key as long as the total amount of data encrypted, and is not practical. So we then look
at a notion of “computational security.” The security will only hold with respect to adversaries of limited
computing power. If the adversary works harder, she can figure out more, but a “feasible” amount of effort
yields no noticeable information. This is the important notion for us and will be used to analyze the security
of schemes such as those presented above.
flows on the channel between the two parties. Having captured a ciphertext, it attempts to glean information
about the corresponding plaintext message.
Take for example the one-time-pad scheme, and assume a single k-bit message is encrypted and transmitted,
where k is the length of the key. Due to the random choice of the key (pad), this certainly seems very
“secure.” We would like to say that the adversray, given the ciphertext, has “no idea” what the message
was. But it is not clear how to say this, or if it is even really true. The adversary could always guess the
message. Or, it could have a pretty good idea what the message was from some context surrounding the
encryption. For example, it may know that the first few bytes of the message is a packet header containing
the sender’s (known) ip address.
So we can’t really say the adversary has no idea what the message is given the ciphertext. Instead, we adopt
a comparitive measure of security. We are interested in how much more the adversary knows about the
message given the ciphertext as opposed to what it knew before it saw the ciphertext. Perfect security holds
if “the adversary’s best guess as to the message after having seen the ciphertext is the same as before it saw
the ciphertext.” In other words, the ciphertext was no help in figuring out anything new about the message.
This is captured this as follows. We assume a single message will be encrypted, and are interested only
in the security of this encryption. There is some plaintext space Plaintexts ⊆0,{ 1 ∗} of messages that the
encryptor is willing to encrypt. (For example, with the one-time pad scheme, if the key length is k bits then
Plaintexts = {0, 1}k.) Notice that this effectively makes the scheme stateless.
We model the a priori information (the information the adversary already possesses about the message) as
a probability distribution on the set of possible messages. Formally, a message distribution on Plaintexts is
a function D: Plaintexts → [0, 1] such that Σ
D(M ) = 1 ,
M ∈P laintexts
and also D(M ) > 0 for all M ∈ Plaintexts. For example, there might be four messages, 00, 01, 10, 11, with
D(00) = 1/6, D(01) = 1/3, D(10) = 1/4, and D(11) = 1/4 .
We imagine that the sender chooses a message at random according to D, meaning that a specific message
M Plaintexts
∈ has probability D(M ) of being chosen. In our example, the sender would choose 00 with
probability 1/6, and so on.
The message distribution, and the fact that the sender chooses according to it, are known to the adversary.
Before any ciphertext is transmitted, the adversary’s state of knowledge about the message chosen by the
sender is given by D. That is, it knows that the message was 00 with probability 1/6, and so on.
We say that the encryption scheme is perfectly secure if the possession of the ciphertext does not impart any
additional information about the message than was known a priori via the fact that it was chosen according
to D. The setup is like this. After the sender has chosen the message according to D, a key K is also
chosen, according to the key generation algorithm, meaning K ← , and the message is encrypted to get a
ciphertext, via C ←K(M ). The adversary is given C. We askKthe adversary: given that you know C is
E
the ciphertext produced, for each possible value of the message, what is the probability that that particular
value was actually the message chosen? If the adversary can do no better than say that the probability that
M was chosen was D(M ), it means that the possession of the ciphertext is not adding any new information
to what is already known. This is perfect security.
To state this more formally, we first let
S = Keys(SE) × Plaintexts × {0, 1}r
denote the sample space underlying our experiment. Here r is the number of coins the encryption algorithm
tosses. (This is zero if the encryption algorithm is deterministic, as is the case for the one-time pad.) We let
introduce the following random variables:
K: S → Keys(SE) defined by (K, M, R) ›→ K
M: S → Plaintexts defined by (K, M, R) ›→ M
C: S → {0, 1}∗ defined by (K, M, R) ›→ EK(M ; R)
Cryptography: Lecture Notes 89
Thus K simply returns the value of the chosen key while M returns the value of the chosen message. The last
random variable returns the encryption of the message using key K and coins R. The probability distribution
underlying this sample space is denoted PD,SE [· ] and is given by a choice of K as per K , a choice of M as
per D, and a random choice of R, all these being made independently.
Definition 6.7 Let SE = (K, E, D) be a symmetric encryption scheme with associated message space
Plaintexts. Let D: Plaintexts → [0, 1] be a message distribution on Plaintexts. We say that SE is perfectly
secure with respect to D if for every M ∈ Plaintexts and every possible ciphertext C it is the case that
We say that SE = ( K, E, ) is perfectly secure if it is perfectly secure with respect to every message distri-
D
bution on Plaintexts.
Here “M = M ” is the event that the message chosen by the sender was M , and “C = C” is the event
that the ciphertext computed by the sender and received by the adversary was C. The definition considers the
conditional probability that the message was M given that the ciphertext was C. It says that this probability
is exactly the a priori probability of the message M , namely D(M ).
In considering the one-time pad encryption scheme (cf. Scheme 6.2) we omit the counter as part of the
ciphertext since only a single message is being encrypted. Thus, the ciphertext is a k-bit string where k is
the length of the key and also of the message. Also note that in this scheme r = 0 since the encryption
algorithm is not randomized.
Example 6.8 Let = SE( , ,K )E be the one-time-pad encryption scheme with the key length (and thus also
message length andDciphertext length) set to k = 2 bits and the message space set to Plaintexts = {0, 1} k.
Let D be the message distribution on Plaintexts defined by D(00) = 1/6, D(01) = 1/3, D(10) = 1/4 and
D(11) = 1/4. For each possible ciphertext C ∈ {0, 1}k, the first table of Figure 6.1 shows the value of
PD,SE [C = C M| = M ], the probability of obtaining this particular ciphertext if you encrypt M with the one-
time pad scheme. As the table indicates, this probability is always 0.25. Why? Having fixed M , the possible
ciphertexts are M K as K⊕ ranges over 0, 1 k.{ So,} regardless of the value of M , all different k bit
strings are equally likely as ciphertexts. The corresponding general statement is stated and proved in
Lemma 6.9 below. The second table shows the value of PD,SE [M = M C |= C], the probability that the
message was M given that an adversary sees ciphertext C. Notice that this always equals the a priori
probability D(M ).
The following lemma captures the basic security property of the one-time-pad scheme: no matter what is
the message, each possible k-bit ciphertext is produced with probability 2 −k, due to the random choice of
the key. .
Lemma 6.9 Let k ≥ 1 be an integer and let SE = ( K, ,E ) be the one-time-pad encryption scheme of
Scheme 6.2 with theDkey length set to k bits and the message space set to Plaintexts =
{ 0, }1 k. Let D be a
message distribution on Plaintexts. Then
PD,SE [C = Y | M = X] = 2−k .
Proof of Lemma 6.9: If X is fixed and known, what’s the probability that we see Y ? Since Y = K⊕ X
for the one-time-pad scheme, it only happens if K = Y⊕ X. The probability that K is this particular string
is exactly 2−k since K is a randomly chosen k-bit string.
This enables us to show that the one-time-pad scheme meets the notion of perfect security we considered
above.
90 Goldwasser and Bellare
C 00 01 10 11
D(M ) M
1/6 00 0.25 0.25 0.25 0.25
1/3 01 0.25 0.25 0.25 0.25
1/4 10 0.25 0.25 0.25 0.25
1/4 01 0.25 0.25 0.25 0.25
C 00 01 10 11
D(M ) M
1/6 00 1/6 1/6 1/6 1/6
1/3 01 1/3 1/3 1/3 1/3
1/4 10 1/4 1/4 1/4 1/4
1/4 01 1/4 1/4 1/4 1/4
Figure 6.1: In the first table, the entry corresponding to row M and column C shows the value of
PD,SE [C = C M|= M ], for the one-time-pad scheme of Example 6.8. Here the key and message length
are both k = 2. In the second table, the entry corresponding to row M and column C shows the value of
PD,SE [M = M | C = C], for the same scheme.
Theorem 6.10 Let k ≥ 1 be an integer and let SE = (K, E, D) be the one-time-pad encryption scheme of
Scheme 6.2 with the key length set to k bits and the message space set to Plaintexts = {0, 1}k. Let D be a
message distribution on Plaintexts. Then SE is perfectly secure with respect to D.
{ 1 }k be a possible ciphertext.
Proof of Theorem 6.10: Let M ∈Plaintexts be a message and let C ∈ 0,
We need to show that Equation (6.1) is true. We have
PD,SE
PD,SE [M = M ]
[M = M | C = C] = D,SE [C = C | M = M ]· PD,SE [C = C]
P
PD,SE [M = M ]
= 2−k
· PD,SE [C = C]
.
The first equality was by Bayes’ rule. The second equality was obtained by applying Lemma 6.9 with X = M
and Y = C. By definition
PD,SE [M = M ] = D(M )
is the a priori probability of M . Now for the last term:
Σ
PD,SE [C = C] = PD,SE [M = X] · PD,SE [C = C | M = X]
X
Σ
= D(X) · 2−k
X
Σ
= 2−k · D(X)
X
= 2−k · 1 .
The sum here was over all possible messages X ∈ Plaintexts, and we used Lemma 6.9. Plugging all this into
the above we get
PD,SE [M = M | C = C] = 2−k · D(M )
2 − = D(M )
k
Cryptography: Lecture Notes 91
as desired.
The one-time-pad scheme is not the only scheme possessing perfect security, but it seems to be the simplest
and most natural one.
6.5.1 Definition
We discussed above the case where the sender is encrypting one of two known messages. It turns out that
this is the “worst” case for security. We consider an adversary (not in possession of the secret key) who
knows (in fact, is allowed to choose) two messages of the same length. Then, one is encrypted and the
ciphertext given to the adversary. The scheme is secure if the adversary has a hard time telling which
message was encrypted.
We actually want to consider encryption not of one message, but a whole sequence of them, so this idea must
be extended. There is a sequence of pairs of messages, (M1,0, M1,1), , (Mq,0, Mq,1), where, in each pair,
the two messages have the same length. This sequence is known to the adversary. Now, a “challenge” bit
b is chosen at random, and a sequence of ciphertexts C1, . . . , Cq is produced, where←Ci K(Mi,b). Note
that in these encryptions, the encryption algorithm uses fresh coins, or an updated state, E each time. The
adversary gets the sequence of ciphertexts and must guess the bit b to win. In other words, the adversary is
trying to determine whether the sender sent M1,0, . . . , Mq,0 or M1,1, , Mq,1.
To further empower the adversary, it is allowed to choose the sequence of message pairs via a chosen
plaintext attack. This means that it chooses the first pair, then receives C1, then chooses the second pair,
and so on.
Let us now formalize this. We fix a specific encryption scheme SE = (K, E, ). (It could be either stateless or
D access to an oracle to which it can provide
stateful). We consider an adversary A. It is a program which has
as input any pair (M0, M1) of equal-length messages. The oracle will return a ciphertext. We will consider
two possible ways in which this ciphertext is computed by the oracle, corresponding to two possible “worlds”
in which the adversary “lives”. To do this, first define the left-or-right encryption oracle EK(LR( ,· ·, b)), as
follows:
∗
Oracle E K(LR(M0, M1, b)) // b ∈ {0, 1} and M0, M1 ∈ {0, 1}
C ← K(Mb)
E
Return C
The oracle encrypts one of the messages, the choice of which being made according to the bit b. Now the
two worlds are as follows:
World 0: The oracle provided to the adversary is EK (LR(·, ·, 0)). So, whenever the adversary makes a query
R
(M0 , M1 ) to its oracle, the latter computes C ←K E 0 (M ), and returns C as the answer.
World 1: The oracle provided to the adversary is EK (LR(·, ·, 1)). So, whenever the adversary makes a query
R
(M0 , M1 ) to its oracle, the latter computes C ←K E 1 (M ), and returns C as the answer.
92 Goldwasser and Bellare
We call the first world, or oracle, the “left” world or oracle, and the second the “right” world or oracle. The
problem for the adversary is, after talking to its oracle for some time, to tell which of the two oracles it was
given. Before we pin this down, let us further clarify exactly how the oracles operate.
Think of an oracle as a subroutine to which A has access. A can make an oracle query (M0, M1) by writing
(M0, M1) in some special, specified location in memory, and, in one step, the answer is returned. A has no
control on how the answer is computed, nor can A even see the working of the oracle, which will typically
depend on secret information that A is not given. A just has an interface to this subroutine; the ability to
call it as a black-box, and get back an answer.
First assume the given symmetric encryption schemeSEis stateless. The oracle, in either world, is proba-
bilistic, because it calls the encryption algorithm. Recall that this algorithm is probabilistic. Above, when
we say C ← EK(Mb), it is implicit that E picks its own random coins implicitly and uses them to compute
R
C.
The random choices of the encryption function are somewhat “under the rug” here, but should not be
forgotten; they are central to the meaningfulness of the notion, as also the security of the schemes.
If the given symmetric encryption schemeSEwas stateful, the oracles, in either world, become stateful too.
(Think of a subroutine that maintains a global variable across calls to the subroutine.) In world b the oracle
begins with a state value initialized according to the specification of the scheme. For example, for CTR
mode with a counter, it is a counter ctr set to 0. Now, each time the oracle is invoked, it computes E K(Mb)
according to the specification of algorithmE. This algorithm will, as a side-effect, update the counter, and
upon the next invocation of the oracle, the new counter value will be used.
We clarify that the choice of which world we are in is made once, a priori, and then the adversary executes.
In world 0, all message pairs sent to the oracle are answered by the oracle encrypting the left message in the
pair, while in world 1, all message pairs are answered by the oracle encrypting the right message in the pair.
The choice of which does not flip-flop from oracle query to oracle query; it is made once and then remains
the same for all messages.
We consider an encryption scheme to be “secure against chosen-plaintext attack” if a “reasonable” adversary
cannot obtain “significant” advantage in distinguishing the cases b = 0 and b = 1 given access to the oracle,
where reasonable reflects its resource usage. The technical notion is called indistinguishability under chosen-
plaintext attack, denoted IND-CPA.
Before presenting it we need to discuss a subtle point. There are certain queries that an adversary can make
to its lr-encryption oracle which will definately enable it to learn the value of the hidden bit b (meaning
figure out in which world it is) but which we consider illegitimate. One is to query the oracle with messages
M0, M1 of different lengths. We do not ask that encryption hide the length of the plaintext, and indeed
common schemes reveal this because the length of the ciphertext depends on the length of the plaintext,
so an adversary making such a query could easily win. Another, less obvious attack is for the adversary to
make a query M0, M1 of equal-length messages such thatE K(M0) /= ⊥and E K(M1) = ⊥. (If the scheme
is stateless, this means M0 is in the plaintext space and M1 is not.) For some schemes, it is easy for the
adversary to find such messages. However, the response of the lr-encryption oracle then gives away the bit
b. We have chosen to deal with these issues by simply disallowing the adversary from making such queries.
That is, let us say that an adversary is illegitimate if it either makes a lr-encryption query consisting of two
messages of different lengths, or makes an lr-encryption query M0, M1 for which E K(Mc) =⊥ with positive
probability for some value of c. The adversary is legitimate if it is not illegitimate.
The issue of legitimacy can, once discussed, be forgotten, since in all our reductions and results we will have
only legitimate adversaries, but we do have to deal with it in the definition.
Definition 6.11 Let SE = ( , K, E) Dbe a symmetric encryption scheme, let b ∈ 0, { 1 , and let A be an
algorithm that has access to an} oracle that takes input a pair of strings and returns a string. We consider
the following experiment:
Cryptography: Lecture Notes 93
-cpa-b
Experiment Expind
SE,A
R
K←
d←K AEK (LR(·,·,b))
Return d
where the maximum is over all legitimate A having time-complexity t, making to the oracle at most q queries
the sum of whose lengths is at most µ bits.
We discuss some important conventions. The time-complexity mentioned above is the worst case total
execution time of the experiment, plus the size of the code of the adversary, in some fixed RAM model of
computation. We stress that the the total execution time of the experiment is more than the running time of
the adversary. It includes the time of all operations in the experiment, including the time for key generation
and the computation of answers to oracle queries. This convention for measuring time complexity is the
same as used in other parts of these notes.
Another convention is that the length of a query M0, M1 to a left-or-right encryption oracle is defined as
M
| 0 .|(We can assume this equals M | 1 since the adversary is assumed to be legitimate.) This convention is
|
used in measuring the parameter µ.
-cpa
If AdvindSE , is small, it means that A is outputting 1 just about as often in world 0 as in world 1, meaning
it is not doing
A a good job of telling which world it is in. If this quantity is large (meaning close to one)
then the adversary A is doing well, meaning our scheme SE is not secure.
For symmetric encryption scheme SE to be secure against chosen plaintext attack, the ind-cpa-advantage
of an adversary must be small, no matter what strategy the adversary tries. However, we expect that the
advantage grows as the adversary invests more effort in the process. To capture this we have defined the
-cpa
advantage function AdvindS E ( ·,)·,as
· above. This is a function associated to any symmetric encryption
scheme SE , which becom e s fixed once we fix the scheme. The resources of the adversary we have
chosen
to use in the parameterization are three. First, its time-complexity, measured according to the convention
above. Second, the number of oracle queries, or the number of message pairs the adversary asks of its
oracle. These messages may have different lengths, and our third parameter is the sum of all these lengths,
denoted µ, again measured according to the convention above. The ind-cpa-advantage function of the scheme
measures the maximum probability that the security of the scheme SEcan be compromised by an adversary
using the indicated resources.
it has probability 1/2 of being right. Clearly, it has not done anything damaging in this case. The advantage
of the adversary measures how much better than this it does at guessing which world it is in, namely the
excess over 1/2 of the adversary’s probability of guessing correctly. In this subsection we will see how the
above definition corresponds to this alternative view, a view that lends some extra intuition to the definition
and is also useful in later usages of the definition.
As usual we fix a symmetric encryption schemeSE= ( K, ,E ). We now consider the following game, or
experiment. D
94 Goldwasser and Bellare
-cpa-cg
Experiment Expind
SE
,A
Pick a bit
b at random
R
Let K ← K
g ← AEK (LR(·,·,b))
If b = g return 1 else return 0
Here, A is run with an oracle for world b, where the bit b is chosen at random. A eventually outputs a bit
g, its guess as to the value of b. The experiment returns 1 if A’s guess is correct. Thus
h i
ind-cpa-cg
P Exp SE,A =1
is the probability that A correctly guesses which world it is in. (The probability is over the initial choice
of world as given by the bit b, the choice of K, the random choices ofE K (· ) if any, and the coins of A if
any.) The following proposition says that one-half of the advantage is exactly the excess above one-half of
the chance that A correctly guesses which world it is in.
ind-cpa-cg
Proof of Proposition 6.12: We let P [· ] be the probability of event ·“ ′′ in the experiment Exp SE , ,
and refer below to quantities in this experiment. The claim of the Proposition follows by a straightforward
A
calculation:
h i
ind-cpa-cg
P Exp SE,A =1
= P [b = g]
= P [b = g | b = 1] · P [b = 1] + P [b = g | b = 0] · P [b = 0]
1 1
= P [b = g | b = 1] · + P [b = g | b = 0] ·
2 2
1 1
= P [g = 1 | b = 1] · + P [g = 0 | b = 0] ·
2 2
1 1
= P [g = 1 | b = 1] · + (1 − P [g = 1 | b = 0]) ·
2 2
1 1
= + · (P [g = 1 | b = 1] − P [g = 1 | b = 0])
2 2
h i h i
1 1 ind-cpa-1 ind-cpa-0
= + · P ExpSE,A =1 − P Exp SE,A =1
2 2
1 1 ind-cpa
= + · Adv SE,A .
2 2
We began by expanding the quantity of interest via standard conditioning. The term of 1/2 in the third
line emerged because the choice of b is made at random. In the fourth line we noted that if we are asking
whether b = g given that we know b = 1, it is the same as asking whether g = 1 given b = 1, and analogously
for b = 0. In the fifth line and sixth lines we just manipulated the probabilities and simplified. The next
line is important; here we observed that the conditional probabilities in question are exactly the success
probabilities in the real and random games respectively. That meant we had recovered the advantage, as
desired.
Cryptography: Lecture Notes 95
for t = O(l) plus the time for two applications of the block cipher.
The advantage of this adversary is 1 even though it uses hardly any resources: just one query, and not a
long one at that. That is clearly an indication that the scheme is insecure.
Proof of Proposition 6.13: We will present an adversary algorithm A, having time-complexity t, making
1 query to its oracle, this query being of length 2l, and having
ind-cpa
Adv SE,A = 1.
Remember the adversary A is given a lr-encryption oracleE K(LR( , · , · b)) which takes input a pair of messages,
and returns an encryption of either the left or the right message in the pair, depending on the value of b.
The goal of A is to determine the value of b. Our adversary works like this:
The adversary’s single oracle query is the pair of messages M0, M1. Since each of them is two blocks long,
so is the ciphertext computed according to the ECB scheme. Now, we claim that
h i
ind-cpa-1
P Exp SE,A =1 = 1
h i
ind-cpa-0
P Exp SE,A =1 = 0
.
96 Goldwasser and Bellare
ind-cpa
Hence AdvSE,A = 1 0—= 1. And achieved
A this advantage by making just one oracle query, whose
-cpa
length, which as per our conventions is just the length of M0, is 2l bits. So Advind
SE
(t, 1, 2l) = 1.
Why are the two equations claimed above true? You have to return to the definitions of the quantities in
question, and trace through the experiments defined there. In World 1, meaning when b = 1, the oracle
returns C[1]C[2] = EK (0l )ǁEK (0l ), so C[1] = C[2] and A returns 1. In World 0, meaning when b = 0,
the
oracle returns C[1]C[2] = EK (0l )EK (1l ). Since EK is a permutation, C[1] C[2]. So A returns 0 in
this case.
As an exercise, try to analyze the same adversary as an adversary against CBC or CTR modes, and
convince yourself that the adversary will not get a high advantage.
There is an important feature of this attack that must be emphasized. Namely, ECB is an insecure encryption
scheme even if the underlying block cipher E is highly secure. The weakness is not in the tool being used,
but in the manner we are using it. It is the ECB mechanism that is at fault. Even a good tool is useless if
you don’t use it well.
This is the kind of design flaw that we want to be able to spot and eradicate. Our goal is to find symmetric
encryption schemes that are secure as long as the underlying block cipher is secure. In other words, the
scheme has no inherent flaw. As long as you use good ingredients, the recipe produces a good meal. If you
don’t use good ingredients? Well, that is your problem.
The requirement being made on the message space is minimal; typical schemes have messages spaces
contain- ing all strings of lengths between some minimum and maximum length. Note that this
Proposition applies to ECB and is enough to show the latter is insecure, but Proposition 6.13 shows
something a little stronger because there there is only one query rather than two.
Proof of Proposition 6.14: We will present an adversary algorithm A, having time-complexity t, making
2 queries to its oracle, each query being of length m, and having
ind-cpa
Adv SE,A = 1.
The Proposition follows.
Remember the adversary A is given a lr-encryption oracleE K(LR( , · , · b)) which takes input a pair of messages,
and returns an encryption of either the left or the right message in the pair, depending on the value of b.
The goal of A is to determine the value of b. Our adversary works like this:
Why are the two equations claimed above true? In World 1, meaning when b = 1, the oracle returns
C1 = EK(Y ) and C2 = EK(Y ), and since the encryption function is deterministic and stateless, C1 = C2, so
A returns 1. In World 0, meaning when b = 0, the oracle returns C1 = EK(X) and C2 = EK(Y ), and since
it is required that decryption be able to recover the message, it must be that C1 /= C2. So A returns 0.
function, it is implicit that they respect the randomized nature of the encryption function, meaning the
latter tosses coins anew upon each invocation of the oracle.
Definition 6.15 Let SE = ( , K, E) be a stateless symmetric encryption scheme whose plaintext space
D B be an algorithm that has access to two oracles. We consider the following
includes {0, 1}m, and let
experiment:
Experiment Exppr
SE,B
R
K← K
m
M ← BEK (·),EK ($ )
If D K(C) = M , where C was the response to B’s query to K($m)
then return 1
else return 0
where the maximum is over all B having time-complexity t, making to the encryption oracle at most q
queries the sum of whose lengths is at most µ bits.
In the experiment above, B is executed with its two oracles. Recall that it is allowed exactly one query to
its challenge oracle. We denote the ciphertext returned as response to this query by C. (Recall the challenge
oracle takes no inputs.) The adversary B wins if it can correctly decrypt C, and in that case the experiment
returns 1. In the process, the adversary can make encryption oracle queries as it pleases.
The following Proposition says that the probability that an adversary successfully recovers a plaintext from
a challenge ciphertext cannot exceed the ind-cpa-advantage of the scheme (with resource parameters those of
the plaintext recovery adversary) plus the chance of simply guessing the plaintext. In other words, security
in the IND-CPA sense implies security against plaintext recovery.
Proposition 6.16 Let SE = (K, E, D) be a stateless symmetric encryption scheme whose plaintext space
includes {0, 1}m. Then
-cpa 1
Advpr (t, q, µ) ≤ Advind (t, q + 1, µ + m) +
SE SE
2m
for any t, q, µ.
The reason this is true is quite simple. If an adversary B were capable of decrpting a challenge ciphertext,
we could easily build an adversary AB that, using B as a subroutine, would be able to tell whether it is in
World 0 or World 1. In other words, it is a reduction.
Proof of Proposition 6.16: We will show that given any adversary B whose resources are restricted to
t, q, µ we can construct an adversary AB, using resources t, q + 1, µ + m, such that
ind-cpa
1
pr
AdvSE,B ≤ Adv SE,AB + . (6.2)
2
The Proposition follows by the usual maximization process.
As per Definition 6.1, adversary AB will be provided a lr-encryption oracle, and will try to determine in
which World it is. To do so, it will run adversary B as a subroutine. We provide the description followed by
an explanation and analysis.
Cryptography: Lecture Notes 99
E (LR(·,·,b))
Adversary B A K
Run adversary B, replying to its oracle queries as follows
When B makes an encryption oracle query X do
Y ← K(LR(X, X, b))
E
Return Y to B as the answer
When B makes its challenge oracle query do
M0 ← {0, 1}m ; M1 ← {0, 1}m
R R
Here AB is running B and itself providing answers to B’s oracle queries. When B makes an encryption
oracle query X, adversary AB needs to returnEK(X). It does this by invoking its lr-encryption oracle with
both messages in the pair set to X, so that regardless of the value of the bit b, the ciphertext returned is
an encryption of X, just as B wants. When B makes its (one and only) query to the challenge oracle, AB
picks two random messages, each of length m, and invokes its lr-encryption oracle on them to get back a
ciphertext C. Now B returns a message M which is supposed to be the decryption of C. Adversary AB
tests whether M = M1 and if so bets that it is in World 1. Else it bets that it is in World 0. Now we claim
that
h i
ind-cpa-= pr
P ExpSE,AB,1 1 ≥ Adv SE,B
h -cpa-= i
P Expind SE,AB,0 1 ≤ 2
−m
.
We will justify these claims shortly, but first let us use them to conclude. Subtracting, as per Definition 6.1,
we get h i h i
ind-cpa ind-cpa-= ind-cpa-=
Adv SE,AB = P ExpSE,AB,1 1 − P ExpSE,AB,0 1
≥ Adv pr — 2−m
.
SE,B
Re-arranging terms gives us Equation (6.2). It remains to justify Equations (6.3) and (6.3).
Adversary B will return the M = DK(C) with probability at least Advpr
. In World 1, ciphertext C is an
pr
encryption of M1, so this means that M = M1 with probability at least Adv
SE,B , and thus Equation (6.3) is
SE,B
true. Now assume AB is in World 0. In that case, AB will return 1 only if B returns M = M1. But B is given
no information about M1, since C is an encryption of M0 and M1 is chosen randomly and independently of
M0. It is simply impossible for B to output M1 with probability greater than 2 −m. Thus Equation (6.3) is
true.
Similar arguments can be made to show that other desired security properties of a symmetric encryption
scheme follow from this definition. For example, is it possible that some adversary B, given some plaintext-
ciphertext pairs and then a challenge ciphertext C, can compute the XOR of the bits of M D= K(C)? Or
the sum of these bits? Or the last bit of M ? Its probability of doing any of these cannot be more than
marginally above 1/2 because were it so, we could design an adversary A that won the left-or-right game
using resources comparable to those used by B. We leave as an exercise the formulation and working out of
other such examples along the lines of Proposition 6.16.
Of course one cannot exhaustively enumerate all desirable security properties. But you should be moving
towards being convinced that our notion of left-or-right security covers all the natural desirable properties of
security under chosen plaintext attack. Indeed, we err, if anything, on the conservative side. There are some
attacks that might in real life be viewed as hardly damaging, yet our definition declares the scheme insecure
if it succumbs to one of these. That is all right; there is no harm in being a little conservative. What is more
important is that if there is any attack that in real life would be viewed as damaging, then the scheme will
fail the left-or-right test, so that our formal notion too declares it insecure.
100 Goldwasser and Bellare
Let F : {0, 1} k × { 0, 1} l → {0, 1} L be a family of functions. The CTR symmetric encryption scheme comes
in two variants: the randomized (stateless) one of Scheme 6.5 and the counter-based (stateful) one of
Scheme 6.6. Both are secure against chosen-plaintext attack, but, interestingly, the counter version is more
secure than the randomized version. We will first state the main theorems about the schemes, discuss them,
and then prove them. For the counter version we have:
where q′ = µ/L.
This kind of result is what this whole approach is about. Namely, we are able to provide provable guarantees
of security of some higher level cryptographic construct (in this case, a symmetric encryption scheme) based
on the assumption that some building block (in this case an underlying block cipher treated as a PRF) is
secure. They are the first example of the “punch-line” we have been building towards. So it is worth pausing
at this point and trying to make sure we really understand what these theorems are saying and what are
their implications.
If we want to entrust our data to some encryption mechanism, we want to know that this encryption
mechanism really provides privacy. If it is ill-designed, it may not. We saw this happen with ECB. Even if
we used a secure block cipher, the design flaws of ECB mode made it an insecure encryption scheme.
Flaws are not apparent in CTR at first glance. But maybe they exist. It is very hard to see how one can be
convinced they do not exist, when one cannot possible exhaust the space of all possible attacks that could
be tried. Yet this is exactly the difficulty that the above theorems circumvent. They are saying that CTR
mode does not have design flaws. They are saying that as long as you use a good block cipher, you are
assured that nobody will break your encryption scheme. One cannot ask for more, since if one does not use
a good block cipher, there is no reason to expect security anyway. We are thus getting a conviction that all
attacks fail even though we do not even know exactly how these attacks operate. That is the power of the
approach.
Now, one might appreciate that the ability to make such a powerful statement takes work. It is for this that
we have put so much work and time into developing the definitions: the formal notions of security that make
such results meaningful. For readers who have less experience with definitions, it is worth knowing, at least,
that the effort is worth it. It takes time and work to understand the notions, but the payoffs are big: you
actually have the ability to get guarantees of security.
How, exactly, are the theorems saying this? The above discussion has pushed under the rug the quantitative
aspect that is an important part of the results. It may help to look at a concrete example.
Cryptography: Lecture Notes 101
Example 6.19 Let us suppose that F is AES. So the key size is k = 128 and the block size is l = L = 128.
Suppose I want to encrypt q = 240 messages, each 128 ∗ 23 bits long, so that I am encrypting a total of µ =
250 bits of data. Can I do this securely using counter-mode CTR? What is the chance that an adversary
figures
out something about my data? Well, if the adversary has t = 260 computing cycles, then by definition
ind-cpa
its chance is not more than Adv S E(t, q, µ). That has nothing to do with the theorem: it is just our
definitions, which say that this is t he maximum probability of being able to break the encryption
scheme
in these given resources. So the question ofind-whether
cpa the scheme is secure for my chosen parameters boils
down to asking what is the value of AdvSE (t, q, µ). A priori, we have no idea. But now, we appeal
prf ′ ′ ′
to Theorem 6.17, which says that this chance is at most 2 · AdvF (t, q , 128q ), where q is as given in the
theorem. Namely q′ = µ/L = 250/128 = 243. So the question is, what is the value of AdvFprf(t, q′, 128q′)
with these values of t′, q′?
Thus, what the theorem has done is reduce the question of estimating the probability of loss of privacy from
the encryption scheme to the question of estimating the pseudorandomness of AES. As per Section 5.6.2,
one might conjecture that
Advprf ( ′ 128 ′) =
t/TAES (q′)2
c1 · +
AES t, q , q 128
,
2 2128
where TAES is the time to do one AES computation on our fixed RAM model of computation. Now plug in
t = 260 and q′ = 243 and take into account what we computed above. We get
-cpa
Advind (t, q, µ) ≤ 2 · Advprf (t, q′, 128q′)
SE AES
′ 2
t/TAES 2(q )
≤ 2c1 ·
2128 + 2128
c1
261 243∗2+1
= · +
2128 T AES 2128
1 c1 1
= 67 · T + 41
2 AES 2
1
≤ .
241
In the last step, we made the (very reasonable) assumption that c1/TAES is at most 226. Thus, the chance the
adversary gets any information about our encrypted data is about 2 −41, even though we allow this adversary
computing time up to 260, and are encrypting 250 bits of data. This is a very small chance, and we can
certainly live with it. It is in this sense that we say the scheme is secure.
Example 6.20 You are encouraged to work out another example along the following lines. Don’t assume
F is AES, but rather assume it is an even better PRF. It still has k = l = L = 128, but assume it is not a
permutation, so that there are no birthday attacks; specifically, assume
These examples illustrate how to use the theorems to figure out how much security you will get from the
CTR encryption scheme in some application.
Algorithm Eg(M )
If |M | < L then return Algorithm Df (C)
⊥ If |C| < l + L then return ⊥
If |M | mod L 0 then return If (|C| − l) mod L 0 then return ⊥
⊥
Parse M as M [1] . . . M [n] Let C[0] be the first l bits of C
If ctr + n ≥ 2l then return ⊥ Parse the rest of C as C[1] . . .
For i = 1, . . . , n do C[n]←ctr StN(C[0])
C[i] ← g(NtSl(ctr + i)) M⊕ [i] For i = 1, . . . , n do
EndFor M [i] ← g(NtSl(ctr + i))⊕C[i]
C[0] ← NtSl(ctr) EndFor
C ← C[0]C[1] . . . C[n] M ← M [1] . . . M [n]
ctr ← ctr + n Return M
Return C
Figure 6.2: Version SE[G] = (K, E, D) of the C-CTR scheme parameterized by a family of functions G.
An important observation regarding the CTR scheme is that the encryption and decryption operations do
not need direct access to the key K, but only access to a subroutine, or oracle, that implements the
function FK. This is important because one can consider what happens when FK is replaced by some
other function. To consider such replacements, we reformulate the scheme. We introduce a scheme that
l L
takes as a parameter any given family of functions { G having
} domain{ 0, 1} and range 0, 1 . As we will see
l→L
later the cases of interest are G = F and G = Rand . Let us first however describe this
parameterized scheme. In the rest of this proof, SE[G] = (K, E, D) denotes the symmetric encryption
scheme defined as follows. The key
R
generation algorithm simply returns a random instance of G, meaning picks a function g ← G from family
G at random, and views g as the key. The encryptor maintains a counter ctr which is initially zero. The
encryption and decryption algorithms are shown in Figure 6.2. In the figure, parsing M means that we divide
it into L-bit (not l-bit!) blocks and let M [i] denote the i-th such block. For C the decryption algorithm first
chops off the first l bits, and then divides the rest of the string into L-bit blocks. The encryption algorithm
updates the counter upon each invocation, and begins with this updated value the next time it is invoked.
As the description indicates, the scheme is exactly C-CTR, except that function g is used in place of FK.
This seemingly cosmetic change of viewpoint is quite useful, as we will see.
We observe that the scheme in which we are interested, and which the theorem is about, is simply SE [F ]
where F is our given family of functions as per the theorem. Now, the proof breaks into two parts. The
first step removes F from the picture, and looks instead at an “idealized” version of the scheme. Namely
we consider the schemeSE [Randl→L ]. Here, a random function g of l-bits to L-bits is being used where
the original scheme would use FK. We then assess an adversary’s chance of breaking this idealized scheme. We
argue that this chance is actually zero. This is the main lemma in the analysis.
This step is definitely a thought experiment. No real implementation can use a random function in place
of FK because even storing such a function takes an exorbitant amount of memory. But this analysis of
the idealized scheme enables us to focus on any possible weaknesses of the CTR mode itself, as opposed to
weaknesses arising from properties of the underlying block cipher. We can show that this idealized scheme
is secure, and that means that the mode itself is good.
It then remains to see how this “lifts” to a real world, in which we have no ideal random functions, but rather
want to assess the security of the schemeSE[F ] that uses the given family F . Here we exploit the notion of
pseudorandomness to say that the chance of an adversary breaking the [F SE] can differ from its chance of
breaking the ideal-world schemeSE [Randl→L ] by an amount not exceeding the probability of breaking
the pseudorandomness of F .
ind-cpa
AdvSE[Randl→L],A = 0
Cryptography: Lecture Notes 103
The lemma considers an aribtrary adversary. Let us say this adversary has time-complexity t, makes q
queries to its lr-encryption oracle, these totalling µ bits. The lemma does not care about the values of t
and q, but insists that µ be at most L2l. Under this restriction, it makes a strong statement. It says that
adversary has zero advantage, meaning no chance at all of breaking the scheme. The strength of this claim
is enhanced when one considers that the only restriction, that µ be at most L2l, is hardly a restriction in
practice, where l is typically at least 64. The fact that no restriction is made on t indicates that the result
is information-theoretic: it holds regardless of how much computing time the adversary invests.
Of course, this lemma refers to the idealized scheme, namely the one where the function g being used by the
encryption algorithm is random. But remember that ECB was insecure even in this setting. (The attacks
we provided for ECB work even if the underlying cipher E is Perml, the family of all permutations.) So the
statement is not content-free; it is saying something quite meaningful and important about the CTR mode.
It is not true of all modes.
We postpone the proof of the lemma. Instead we will first see how to use it to conclude the proof of the
theorem. The argument here is quite simple and generic.
The lemma tells us that the C-CTR encryption scheme is (very!) secure when g is a random function. But
we are interested in the case where g is is an instance of our given family F . So our worry is that the actual
scheme SE [F ] is insecure even though the idealized scheme SE [Randl→L ] is secure. In other words, we worry
that there might be an adversary having large ind-cpa-advantage in attacking SE[F ], even though we know
that its advantage in attackingSE [Randl→L ] is zero. But we claim that this is not possible if F is a
secure PRF. Intuitively, the existence of such an adversary indicates that F is not approximating
Randl→L , since there is some detectable event, namely the success probability of some adversary in a certain
experiment, that happens with high probability when F is used and with low probability when Randl→L
is used. To concretize this intuition, let A be a ind-cpa-adversary SE attacking [F ]. We associate to A a
l
distinguisher DA that is given oracle access to a{ function
} → {g: 0,
} 1 0, 1 L and is trying to determine
which world it is in, where in World 0 g is a random instance of Randl→L and in World 1 g is a
random instance of F . We suggest the following strategy to the distinguisher. It runs A, and replies to A’s
oracle queries in such
SEa way that A is attacking [Randl→L ] in DSE
A ’s World 0, and A is attacking
l→L
[Rand ] in DA ’s World 1. The reason it is possible for DA to do this is that it E can
· execute the
encryption algorithm g( ) of Figure 6.2, which simply requires access to the function g. If the adversary A
wins, meaning breaks the encryption scheme, DA bets that g is an instance of F , and otherwise DA
bets that g is an instance of Randl→L .
We stress the key point that makes this argument work. It is that the encryption function of the C-CTR
scheme invokes the function FK purely as an oracle. If it had, instead, made direct some direct use of the
key K, the paradigm above would not work. The full proof follows.
Proof of Theorem 6.17: Let A be any ind-cpa-adversary attacking SE = (K, E, ). Assume A makes q
D a distinguisher DA such that
oracle queries totalling µ bits, and has time-complexity t. We will design
ind-cpa
Adv SE,A ≤ 2 · AdvF,D
prf . (6.3)
A
Furthermore, DA will make µ/L oracle queries and have time-complexity t. Now, the statement of Theorem 6.17
follows as usual, by taking maximums. So the main thing is to provide the distinguisher for which Equation (6.3)
is true. This distinguisher uses A as a subroutine.
Remember that DA takes an oracle g: {0, 1 }l → {0, 1} L. This oracle is either drawn at random from F or
from Randl→L and DA does not know a priori which. To find out, DA will use A. But remember that A too
gets an oracle, namely a lr-encryption oracle. From A’s point of view, this oracle is simply a subroutine: A
can write, at some location, a pair of messages, and is returned a response by some entity it calls its oracle.
When DA runs A as a subroutine, it is DA that will “simulate” the lr-encryption oracle for A, meaning
DA will provide the responses to any oracle queries that A makes. Here is the description of DA:
g
Distinguisher DA
104 Goldwasser and Bellare
R
b ← {0,
Run
1} adversary A, replying to its oracle queries as follows
When A makes an oracle query (M0, M1) do
R
C ← Eg (Mb
Return
) C to A as the answer
Until A stops and outputs a bit d
If d = b then return 1 else return
0
Here Eg( )· denotes the encryption function of the generalized C-CTR scheme that we defined in Figure 6.2.
The crucial fact we are exploiting here is that this function can be implemented given an oracle for g.
Distinguisher DA itself picks the challenge bit b representing the choice of worlds for A, and then sees
whether or not A succeeds in guessing the value of this bit. If it does, it bets that g is an instance of F , and
otherwise it bets that g is an instance of Randl→L . For the analysis, we claim that
h i
prf-1 1 1 -cpa
P ExpF,DA = 1 = + · Advind (6.4)
2 2 SE[F ],
h A
prf-0 i
P Exp 1 1 -cpa
F,DA = 1 = + · Advind . (6.5)
2 2 SE[Randl→L],A
We will justify these claims shortly, but first let us use them to conclude. Subtracting, as per Definition 5.4,
we get
h i h i
prf - prf-0
Adv F,DA = P Exp prf 1 = 1 − P Exp =1
F,DA F,DA
1 1
= · Advind-cpa Adv
ind-cpa
(6.6)
SE[F ],A − · SE[Randl→L],A
2 2
1
= · Advind-cpa .
SE[F ],A
2
ind-cpa
The last inequality was obtained by applying Lemma 6.21, which told us that the term AdvSE l→L
[Rand
was simply zero. Re-arranging terms gives us Equation (6.3). Now let us check the resource usage.],AEach
computation Eg(Mb) requires M| b /L applications of g, and hence the total number of queries made by
| g is µ/L. The time-complexity of DA equals that of A once one takes into account the
DA to its oracle
convention that time-complexity refers to the time of the entire underlying experiment. It remains to justify
Equations (6.4) and (6.5).
Distinguisher DA returns 1 when b = d, meaning that ind-cpa-adversary A correctly identified the world b
in which it was placed, or, in the language of Section 6.5.2, made the “correct guess.” The role played by
DA’s world is simply to alter the encryption scheme for which this is true. When DA is in World 1, the
encryption scheme, from the point of view of A, is SE[F ], and when DA is in World 0, the encryption scheme,
from the point of view of A, is SE[Randl→L ]. Thus, using the notation from Section 6.5.2, we have
h i h i
prf-1 ind-cpa-cg
P ExpF,DA = 1 = P Exp SE[F ],A = 1
h i i
prf-0 ind-cpa-cg
P ExpF,DA = 1 = P Exp SE[Randl→L],A = 1 .
h
To obtain Equations (6.4) and (6.5) we can now apply Proposition 6.12.
For someone unused to PRF based proofs of security the above may seem complex, but the underlying idea
is actually very simple, and will be seen over and over again. It is simply that one can view the
experiment of the ind-cpa-adversary attacking the encryption scheme as information about the underlying
function g being used, and if the adversary has more success in the case that g is an instance of F than
that g is an instance of Randl→L , then we have a distinguishing test between F and Randl→L . Let us
now prove the lemma about the security of the idealized C-CTR scheme.
Cryptography: Lecture Notes 105
Proof of Lemma 6.21: The intuition is simple. When g is a random function, its value on successive
counter values yields a one-time pad, a truly random and unpredictable sequence of bits. As long as the
number of data bits encrypted does not exceed L2l, we invoke g only on distinct values in the entire
encryption process. The outputs of g are thus random. Since the data is XORed to this sequence, the
adversary gets no information whatsoever about it.
Now, we must make sure that this intuition carries through in our setting. Our lemma statement makes
reference to our notions of security, so we must use the setup in Section 6.5.1. The adversary A has access
to a lr-encryption oracle. Since the scheme we are considering is SE[Randl→L ], the oracle is Eg (LR(·, ·,
b)), where the function
E g was defined in Figure 6.2, and g is a random instance of Rand
l→L
, meaning a
random function.
The adversary makes some number q of oracle queries. Let (Mi,0, Mi,1) be the i-th query, and let ni be the
number of blocks in Mi,0 . (This is the same as the number of blocks in Mi,1 .) Let Mi,c [j] be the value of the
j-th L-bit block of Mi,c for c ∈ 0, { 1 }. Let Ci be the response returned by the oracle to query (Mi,0, Mi,1).
It consists of ni + 1 blocks, the first block being the l-bit binary representation of the counter at the start
of the encryption E g(Mi,b), where b is the challenge bit underlying the E g(LR( ·, · , b)) oracle, and the other
blocks are denoted Ci [1] . . . Ci [ni ]. Pictorially:
. . .
What kind of distribution do the outputs received by A have? We claim that the n· ·1· + + nq values
Ci [j] (i = 1, . . . , q and j = 1, . . . , ni) are randomly and independently distributed, not only of each other,
but of the queried messages and the bit b, and moreover this is true in both worlds. Why? Here is where we
use a crucial property of the CTR mode, namely that it XORs data with the value of g on a counter. We
observe that according to the scheme
This tells us that any given output sequence from the oracle is equally likely in both worlds. Since the
adversary determines its output bit based on this output sequence, its probability of its returning 1 must be
the same in both worlds,
ind-cpa-1
P hExp SE[Randl→L],A i i
ind-cpa-0
=1 = P Exp SE[Randl→L],A = 1 .
h
Hence A’s ind-cpa-advantage is zero.
106 Goldwasser and Bellare
Algorithm Eg(M )
If |M | < L then return Algorithm Df (C)
⊥ If |C| < l + L then return ⊥
If |M | mod L 0 then return If (|C| − l) mod L /= 0 then return ⊥
⊥
Parse M as M [1] . . . M [n] Let C[0] be the first l bits of C
R ← {0, 1, . . . , 2l− 1
R
} Parse the rest of C as C[1] . . .
For i = 1, . . . , n do C[n]
←R StN(C[0])
C[i] ← g(NtSl(R + i)) ⊕M [i] For i = 1, . . . , n do
EndFor M [i] ← g(NtSl(R + i)) ⊕ C[i]
C[0] ← NtSl(R) EndFor
C ← C[0]C[1] . . . C[n] M ← M [1] . . . M [n]
Return C Return M
Figure 6.3: Version SE[G] = (K, E, D) of the R-CTR scheme parameterized by a family of functions G.
ind-cpa
AdvSE[Randl→L],A µ(q − 1)
≤ L2l
,
where q is the number of oracle queries made by A and µ < L2l is the total length of these queries.
The proof of Theorem 6.18 given this lemma is easy at this point because it is almost identical to the above
proof of Theorem 6.17. So let us finish that first, and then go on to prove Lemma 6.22.
ind-cpa prf
Adv SE,A
≤ 2 · AdvF,DA µ(q − 1)
+ L2l .
Furthermore, DA will make µ/L oracle queries and have time-complexity t. Now, the statement of Theorem 6.18
follows as usual, by taking maximums.
The code for DA is the same as in the proof of Theorem 6.17. However note that the underlying algorithm
E( )· has changed, now being the one of Figure 6.3 rather than that of Figure 6.2. For the analysis, the only
g
change is that the term
ind-cpa
AdvSE[Randl→L],A
in Equation (6.6), rather than being zero, is upper bounded as per Lemma 6.22, and thus
1 ind-cpa 1 µ(q − 1)
Adv
prf ≥ · . (6.7)
F,DA Adv − · l
2 SE[F ],A 2 L2
The rest is as before.
Cryptography: Lecture Notes 107
The above illustrates how general and generic was the “simulation” argument of the proof of Theorem 6.17.
Indeed, it adapts easily not only to the randomized version of the scheme, but to the use of pseudorandom
functions in many other schemes, even for different tasks like message authentication. The key point that
makes it work is that the scheme itself invokes g as an oracle.
Before we prove Lemma 6.22, we will analyze a certain probabilistic game. The problem we isolate here is
purely probabilistic; it has nothing to do with encryption or even cryptography.
Lemma 6.23 Let n, q, l be positive integers, and let n1, . . . , nq < 2l also be positive integers. Suppose we
pick q integers r1, . . . , rq from the range {0, 1, . . . , 2l − 1}, uniformly and independently at random. We
consider the following n1 + · · · + nq numbers:
r1 + 1, r1 + 2, · · · , r1 + n1
r2 + 1, r2 + 2, · · · , r2 + n2
. .
rq + 1, rq + 2, · · · , r q + nq ,
where the addition is performed modulo 2l. We say that a collision occurs if some two (or more) numbers
in the above table are equal. Then
(q − 1)(n1 + · · · + nq)
P [Col] ≤ ,
2
where Col denotes the event that a collision occurs.
Proof of Lemma 6.23: As with many of the probabilistic settings that arise in this area, this is a question
about some kind of “balls thrown in bills” setting, related to the birthday problem studied in Section A.1,
and indeed a reader may find it helpful to have studied that appendix first.
Think of having 2l bins, numbered 0, 1, . . . , 2l − 1. We have q balls, numbered 1, . . . , q. For each ball we
choose a random bin which we call ri. We choose the bins one by one, so that we first choose r1, then r2,
and so on. When we have thrown in the first ball, we have defined the first row of the above table,
namely the values r1 + 1, . . . , r1 + n1. Then we pick the assignment r2 of the bin for the second ball. This
defines the second row of the table, namely the values r2 + 1, . . . , r2 + n2. A collision occurs if any value in
the second row equals some value in the first row. We continue, up to the q-th ball, each time defining a
row of the table, and are finally interested in the probability that a collision occurred somewhere in the
process. To upper bound this, we want to write this probability in such a way that we can do the analysis
step by step, meaning view it in terms of having thrown, and fixed, some number of balls, and seeing
whether there is a collision when we throw in one more ball. To this end let Coli denote the event that
there is a collision somewhere in the first i rows of the table, for i = 1, . . . , q. Let NoColi denote the
event that there is no collision in the first i rows of the table, for i = 1, . . . , q. Then by conditioning we
have
P [Col] = P [Colq]
= P [Colq−1] + P [Colq | NoColq−1] · P [NoColq−1]
≤ P [Colq−1] + P [Colq | NoColq−1]
≤ .
q
Σ
≤ P [Col1 ] + P [Coli | NoColi−1 ]
i=2
q
Σ
= P [Coli | NoColi−1 ] .
i=2
108 Goldwasser and Bellare
Thus we need to upper bound the chance of a collision upon throwing the i-th ball, given that there was no
collision created by the first i − 1 balls. Then we can sum up the quantities obtained and obtain our bound.
P [Coli | NoCol
≤ (i − 1)ni + ni−1 + · · · + n1
i−1 ] (6.8)
. 2l
Let us first see why this proves the lemma and then return to justify it. From the above and Equation (6.8)
we have
P [Col] ≤ q
Σ
P [Coli | NoColi−1 ]
i=2
q
≤ Σ ( i −1) ni+ ni−1 + · · · +n1
2
l i=2
(q − 1)(n1 + · · · + nq)
= .
2l
How did we do the last sum? The term ni occurs with weight i − 1 in the i-th term of the sum, and then with
weight 1 in the j-th term of the sum for j = i + 1, . . . , q. So its total weight is (i − 1) + (q − i) = q − 1.
It remains to prove Equation (6.8). To get some intuition about it, begin with the cases i = 1, 2. When we
throw in the first ball, the chance of a collision is zero, since there is no previous row with which to collide,
so that is simple. When we throw in the second, what is the chance of a collision? The question is, what is
the probability that one of the numbers r2 + 1, . . . , r2 + n2 defined by the second ball is equal to one of the
numbers r1 + 1, . . . , r1 + n1 already in the table? View r1 as fixed. Observe that a collision occurs if and
only if r1 − n2 + 1 ≤ r2 ≤ r1 + n1 − 1. So there are (r1 + n1 − 1) − (r1 − n2 + 1) + 1 = n1 + n2 − 1 choices of r2
that could yield a collision. This means that P [Col2 | NoCol1] ≤ (n2 + n1 − 1)/2l.
We need to extend this argument as we throw in more balls. So now suppose i− 1 balls have been thrown
in, where 2 ≤ i ≤ q, and suppose there is no collision in the first i −1 rows of the table. We throw in the i-
th ball, and want to know what is the probability that a collision occurs. We are viewing the first i 1 rows
−
of the table as fixed, so the question is just what is the probability that one of the numbers defined by ri
equals one of the numbers in the first i 1 − rows of the table. A little thought shows that the worst case
(meaning the case where the probability is the largest) is when the existing i− 1 rows are well spread-out.
We can upper bound the collision probability by reasoning just as above, except that there are −i 1 different
intervals to worry about rather than just one. The i-th row can intersect with the first row, or the second
row, or the third, and so on, up to the (i − 1)-th row. So we get
P [Coli |
NoCol ≤ (ni + n1 − 1) + (ni + n2 − 1) + · · · + (ni + ni−1 − 1)
i−1 ]
2l
(i − 1)ni + ni−1 + · · · + n1 − (i − 1)
= ,
2l
and Equation (6.8) follows by just dropping the negative term in the above.
Let us now extend the proof of Lemma 6.21 to prove Lemma 6.22.
Proof of Lemma 6.22: Recall that the idea of the proof of Lemma 6.21 was that when g is a random
function, its value on successive counter values yields a one-time pad. This holds whenever g is applied on
some set of distinct values. In the counter case, the inputs to g are always distinct. In the randomized case
they may not be distinct. The approach is to consider the event that they are distinct, and say that in that
case the adversary has no advantage; and on the other hand, while it may have a large advantage in the
other case, that case does not happen often. We now flush all this out in more detail.
Cryptography: Lecture Notes 109
The adversary makes some number q of oracle queries. Let (Mi,0, Mi,1) be the i-th query, and let ni be
the number of blocks in Mi,0 . (This is the same as the number of blocks in Mi,1 .) Let Mi,c [j] be the
value of the j-th L-bit block of Mi,c for c ∈0, {1 . }Let Ci be the response returned by the oracle to query
(Mi,0, Mi,1). It consists of ni + 1 blocks, the first block being the l-bit binary representation of the random
integer ri ∈ 0,{ 1, . . . , 2l − 1} chosen byE g(Mi,b), where b is the challenge bit underlying the E g(LR( ·, · , b))
oracle, and the other blocks are denoted Ci [1] . . . Ci [ni ]. Pictorially:
.. .
Let NoCol be the event that the following n1 + · · · + nq values are all distinct:
r1 + 1, r1 + 2, · · · , r1 + n1 r2
+ 1, r2 + 2, · · · , r2 + n2
. .
rq + 1, rq + 2, ···, rq + nq
Let Col be the complement of the event NoCol, meaning the event that the above table contains at least two
values that are the same. It is useful for the analysis to introduce the following shorthand:
We will use the following three claims, which are proved later. The first claim says that the probability of a
collision in the above table does not depend on which world we are in.
The second claim says that A has zero advantage in winning the left-or-right game in the case that no
collisions occur in the table. Namely, its probability of outputting one is identical in these two world under
the assumption that no collisions have occurred in the values in the table.
We can say nothing about the advantage of A if a collision does occur in the table. That is, it might be big.
However, it will suffice to know that the probability of a collision is small. Since we already know that this
probability is the same in both worlds (Claim 1) we bound it just in world 0:
µ(q − 1)
Claim 3: P0 [Col] ≤ .Q
L2
l
Let us see how these put together complete the proof of the lemma, and then go back and prove them.
= P1 [A = 1] − P0 [A = 1]
= P1 [A = 1 | Col] · P1 [Col] + P1 [A = 1 | NoCol] · P1 [NoCol]
— P0 [A = 1 | Col] · P0 [Col] − P0 [A = 1 | NoCol] · P0 [NoCol]
Using Claim 1 and Claim 2, the above equals
Proof of Claim 1: The event NoCol depends only on the random values r1, . . . , r q chosen by the encryption
algorithm Eg( ·). These choices, however, are made in exactly the same way in both worlds. The difference
in the two worlds is what message is encrypted, not how the random values are chosen. Q
Proof of Claim 2: Given the event NoCol, we have that, in either game, the function g is evaluated at
a new point each time it is invoked. (Here we use the assumption that µ < L2l, since otherwise there
may be wraparound in even a single query.) Thus the output is randomly and uniformly distributed over
{ 1 }L, independently of anything else. That means the reasoning from the counter-based scheme as given
0,
in Lemma 6.21 applies. Namely we observe that according to the scheme
Thus each cipher block is a message block XORed with a random value. A consequence of this is that each
cipher block has a distribution that is independent of any previous cipher blocks and of the messages. Q
Proof of Claim 3: This follows from Lemma 6.23. We simply note that n1 + · · · + nq = µ/L. Q
Theorem 6.24 [20] Suppose Let F : {0, 1} k × { 0, 1} l → {0, 1} L be a family of functions and let SE =
(K, , E) be the corresponding CBC symmetric encryption scheme as described in Scheme 6.4. Then for any
t,Dq, µ we have
ind-cpa
Adv ( 2 Advprf( ′ ′ 2µ2
) ) +
t, q, µ ≤ · ,
lq t, q ,
SE
F l22l
where q′ = µ/L.
Notice that if all messages are of n blocks then µ = nql so the additive term above is O(n2q2/2l).
So what about we try to improve this using counters? We can do counters with CBC too! But this is no
good. It is a nice exercise to try to find the attack. Note this is true even for variations in which the counter
is incremented by the number of message blocks rather than by just one per message.
Cryptography: Lecture Notes 111
How about if the counter is encrypted? Then these attacks appear to vanish, but birthdays are back. So
we don’t really win out over the random IV scheme. In fact the two become very similar identical: f (c)
where c is a counter is exactly a random number. (They are not identical because c may also arise
somewhere in the plaintext.)
In analyzing this, see how to think about these schemes via the modelling we have been doing. Ie think of
f as a random function. In that world the random CBC and encrypted counter modes are similar.
World 0: The adversary is provided the oracle EK (LR(·, ·, 0)) as well as the oracle DK (·).
World 1: The adversary is provided the oracle EK (LR(·, ·, 1)) as well as the oracle DK (·).
The adversary’s goal is the same as in the case of chosen-plaintext attacks: it wants to figure out which
world it is in. There is one easy way to do this. Namely, query the lr-encryption oracle on two distinct, equal
length messages M0, M1 to get back a ciphertext C, and now call the decryption oracle on C. If the message
returned by the decryption oracle is M0 then the adversary is in World 0, and if the message returned by the
decryption oracle is M1 then the adversary is in World 1. The restriction we impose is simply that this
call to the decryption oracle is not allowed. More generally, call a query C to the decryption oracle
illegitimate if C was previously been returned by the lr-encryption oracle. Then, only legitimate queries are
allowed. In the formalization below, the experiment simply returns 0 if the adversary makes an illegitimate
query. (We clarify that a query C is legitimate if C is returned by the lr-encryption oracle after C was
queried to the decryption oracle. It is only when C was previously output by the lr-encryption oracle that it
is illegitimate.)
This restriction still leaves the adversary with a lot of power. Typically, a successful chosen-ciphertext
attack proceeds by taking a ciphertext C returned by the lr-encryption oracle, modifying it into a related
ciphertext C′, and querying the decryption oracle with C′. The attacker seeks to create C′ in such a way
that its decryption tells the attacker what was the message underlying M . We will see this illustrated in
Section 6.11 below.
The model we are considering here might seem quite artificial. If an adversary has access to a decryption
oracle, how can we prevent it from calling the decryption oracle on certain messages? The restriction might
arise due to the adversary’s having access to the decryption equipment for a limited period of time. We
imagine that after it has lost access to the decryption equipment, it sees some ciphertexts, and we are
capturing the security of these ciphertexts in the face of previous access to the decryption oracle. Further
motivation for the model will emerge when we see how encryption schemes are used in protocols. We will
see that when an encryption scheme is used in an authenticated key exchange protocol, the adversary
effectively has the ability to mount chosen-ciphertext attacks of the type we are discussing. For now let us just
provide the definition and exercise it.
112 Goldwasser and Bellare
where the maximum is over all A having time-complexity t, making to the lr-encryption oracle at most qe
queries the sum of whose lengths is at most µe bits, and making to the decryption oracle at most qd queries
the sum of whose lengths is at most µd bits.
The conventions with regard to resource measures are the same as those used in the case of chosen-plaintext
attacks. In particular, the length of a query M0, M1 to the lr-encryption oracle is the length is defined as
the length of M0, and the time-complexity is the execution time of the entire experiment plus the size of the
code of the adversary.
We consider an encryption scheme to be “secure against chosen-ciphertext attack” if a “reasonable” adversary
cannot obtain “significant” advantage in distinguishing the cases b = 0 and b = 1 given access to the oracles,
where reasonable reflects its resource usage. The technical notion is called indistinguishability under chosen-
ciphertext attack, denoted IND-CCA.
The advantage of this adversary is 1 even though it uses hardly any resources: just one query to each oracle.
That is clearly an indication that the scheme is insecure.
Proof of Proposition 6.26: We will present an adversary algorithm A, having time-complexity t, making
1 query to its lr-encryption oracle, this query being of length L, making 1 query to its decryption oracle,
this query being of length l + L, and having
Remember the the lr-encryption oracle K(LR( , , b)) takes input a pair of messages, and returns an encryp-
E
tion of either the left or the right message in· the
· pair, depending on the value of b. The goal of A is to
determine the value of b. Our adversary works like this:
The adversary’s single lr-encryption oracle query is the pair of distinct messages M0, M1, each one block
long. It is returned a ciphertext C[0]C[1]. It flips the bits of C[1] to get C′[1] and then feeds the ciphertext C[0]C
′
[1] to the decryption oracle. It bets on World 1 if it gets back M0, and otherwise on World 0. It is important
that C[0]C ′ [1] =/ C[0]C[1], so the decryption oracle query is legitimate. Now, we claim that
h i
P Expind -cca-1 = 1 = 1
SE,A
h i
P Expind -cca-0 = 1 = 0
SE,A
.
ind-cca
Hence Adv SE , = 1 — 0 = 1. And achieved
A this advantage by making just one lr-encryption oracle
query, whoseAlength, which as per our conventions is just the length of M0, is L bits, and just one
-cca
decryption oracle query, whose length is l + LSEbits. So Advind (t, 1, L, 1, l + L) = 1.
Why are the two equations claimed above true? You have to return to the definitions of the quantities in
question, as well as the description of the scheme itself, and walk it through. In World 1, meaning when
b = 1, let C[0]C[1] denote the ciphertext returned by the lr-encryption oracle, and let R = StN(C[0]). Then
M = DK (C[0]C ′ [1])
= FK (NtSl (R + 1))⊕C ′ [1]
= FK (NtSl (R + 1))⊕C[1]⊕1L
= FK (NtSl (R + 1))⊕(FK (NtSl (R + 1))⊕1L )⊕1L
= 0L
= M0 .
114 Goldwasser and Bellare
Thus, the decryption oracle will return M0, and thus A will return 1. In World 0, meaning when b = 0, let
C[0]C[1] denote the ciphertext returned by the lr-encryption oracle, and let R = StN(C[0]). Then
M = DK (C[0]C ′ [1])
= FK (NtSl (R + 1))⊕C ′ [1]
= FK (NtSl (R + 1))⊕C[1]⊕1L
= FK (NtSl (R + 1))⊕(FK (NtSl (R + 1))⊕0L )⊕1L
= 1L
= M1 .
Thus, the decryption oracle will return M1, and thus A will return 0, meaning will return 1 with
probability zero.
An attack on C-CTR (cf. Scheme 6.6) is similar, and is left to the reader.
The advantage of this adversary is 1 even though it uses hardly any resources: just one query to each oracle.
That is clearly an indication that the scheme is insecure.
Proof of Proposition 6.27: We will present an adversary algorithm A, having time-complexity t, making
1 query to its lr-encryption oracle, this query being of length l, making 1 query to its decryption oracle, this
query being of length 2l, and having
Advind-cca = 1.
SE,A
Remember the the lr-encryption oracle EK(LR( , · , · b)) takes input a pair of messages, and returns an encryp-
tion of either the left or the right message in the pair, depending on the value of b. The goal of A is to
determine the value of b. Our adversary works like this:
Cryptography: Lecture Notes 115
The adversary’s single lr-encryption oracle query is the pair of distinct messages M0, M1, each one block
long. It is returned a ciphertext C[0]C[1]. It flips the bits of the IV C[0] to get a new IV C′[0] and then
feeds the ciphertext C′[0]C[1] to the decryption oracle. It bets on World 1 if it gets back M0, and otherwise
on World 0. It is important that C′[0]C[1] =/C[0]C[1], so the decryption oracle query is legitimate. Now,
we claim that
h i
P Expind -cca-1 = 1 = 1
SE,A
h i
P Expind -cca-0 = 1 = 0
SE,A
.
ind-cca
Hence Adv SE , = 1 — 0 = 1. And achieved
A this advantage by making just one lr-encryption oracle
query, whoseAlength, which as per our conventions is just the length of M0, is l bits, and just one
-cca
decryption oracle query, whose length is 2lSEbits. So Advind (t, 1, l, 1, 2l) = 1.
Why are the two equations claimed above true? You have to return to the definitions of the quantities in
question, as well as the description of the scheme itself, and walk it through. In World 1, meaning when
b = 1, the lr-encryption oracle returns C[0]C[1] with
M = DK (C ′ [0]C[1])
= E−1 ′
K(C[1])⊕C [0]
−1
= EK (EK (C[0]⊕1l ))⊕C ′ [0]
= (C[0]⊕1l )⊕C ′ [0]
= (C[0]⊕1l )⊕(C[0]⊕1l )
= 0l
= M0 .
Thus, the decryption oracle will return M0, and thus A will return 1. In World 0, meaning when b = 0, the
lr-encryption oracle returns C[0]C[1] with
M = DK (C ′ [0]C[1])
= E−1 ′
K(C[1])⊕C [0]
−1
= EK (EK (C[0]⊕0l ))⊕C ′ [0]
= (C[0]⊕0l )⊕C ′ [0]
= (C[0]⊕0l )⊕(C[0]⊕1l )
116 Goldwasser and Bellare
= 1l
= M1 .
Thus, the decryption oracle will return M1, and thus A will return 0, meaning will return 1 with
probability zero.
Theorem 6.28 [92] Suppose F is a pseudorandom function family with output length m. Then the
scheme (E, D) define above is a secure private key encryption scheme for m-bit messages.
The difference between this and the CBC and XOR methods is that in the latter, we only needed a PRF
mapping l bits to l bits for some fixed l independent of the message length. One way to get such a PRF
is to use DES or some other block cipher. Thus the CBC and XOR methods result in efficient encryption.
To use the general scheme we have just defined we need to constructing PRFs that map l bits to m bits
for large m.
There are several approaches to constructing “large” PRFs, depending on the efficiency one wants and what
assumptions one wants to make. We have seen in Chapter 5 that pseudorandom function families can be
built given one-way functions. Thus we could go this way, but it is quite inefficient. Alternatively, we could
try to build these length extending PRFs out of given fixed length PRFs. See Section 5.11.
Theorem 6.29 If G is a secure pseudorandom bit generator then the above is a secure encryption scheme.
Cryptography: Lecture Notes 117
One seeming disadvantage of using a PRBG is that the parties must maintain a common, synchronized
counter, since both need to know where they are in the sequence G(K). (Note that the schemes we have
discussed above avoid this. Although some of the schemes above may optionally use a counter instead of a
random value, this counter is not a synchronized one: the sender maintains a counter, but the receiver does
not, and doesn’t care that the sender thinks of counters.) To get around this, we might have the sender send
the current counter value N (in the clear) with each message. If authentication is being used, the value N
should be authenticated.
The more major disadvantage is that the pseudorandom sequence G(K) may not have random access. To
produce the i-th bit one may have to start from the beginning and produce all bits up to the i-th one. (This
means the time to encrypt M depends on the number and length of message encrypted in the past, not a
desirable feature.) Alternatively the sequence G(K) may be pre-computed and stored, but this uses a lot of
storage. Whether this drawback exists or not depends of course on the choice of PRBG G.
So how do we get pseudorandom bit generators? We saw some number theoretic constructions in Chapter 3.
These are less efficient than block cipher based methods, but are based on different kinds of assumptions
which might be preferable. More importantly, though, these constructions have the drawback that random
access is not possible. Alternatively, one could build pseudorandom bit generators out of finite PRFs. This
can be done so that random access is possible. However the resulting encryption scheme ends up being not
too different from the XOR scheme with a counter so it isn’t clear it is worth a separate discussion.
Theorem 6.30 There exists a secure private key encryption scheme if and only if there exists a one-way
function.
We will see later that the existence of secure public key encryption schemes requires different kinds of
assumptions, namely the existence of primitives with “trapdoors.”
Problem 6.32 Let l ≥ 1 and m ≥ 2 be integers, and let SE= ( K , ,E ) be a given symmetric encryption
scheme whose associated { 1 l,}meaning one can safely encrypt only messages of length
D plaintext space is 0,
l. In order to be able to encrypt longer messages, we define a new symmetric encryption scheme SE (m) =
(K, E , D) having the same key generation algorithm as that of SE
(m) (m)
, plaintext space {0, 1 lm, and
encryption } and decryption algorithms as follows:
118 Goldwasser and Bellare
(m) (m)
Algorithm EK (M Algorithm DK (C)
) Parse M as M [1] . . . M Parse C as (C[1], . . . , C[m])
[m] For i = 1 to m do
For i = 1 to m do M [i] ← K (C[i])
C[i] ← K(M [i]) D = ⊥ then return ⊥
If M [i]
EndFor E EndFor
C ← (C[1], . . . , C[m]) M ← M [1] . . . M [m]
Return C Return M
Here M is lm bits long. For encryption, M is broken into a sequence of blocks M = M [1] . . . M [m], each
block being l-bits long. For decryption, C is parsed as a sequence of m strings, each c bits long, where c
denotes the length of a ciphertext in scheme SE. If any component ciphertexts C[i] is invalid (meaning DK
returns ⊥ for it) then the entire ciphertext (C[1], . . . , C[m]) is declared invalid.
for any t, q.
(m)
Part (a) says that SE is insecure against chosen-ciphertext attack. Note this is true regardless of the
security properties of SE, which may itself be secure against chosen-ciphertext attack. Part (b) says that
(m)
if SE is secure against chosen-plaintext attack, then so is SE .
Problem 6.33 Let E: {0, 1} k × { 0, 1} l → {0, 1} l be a block cipher. Operating it in CBC mode with IV
a counter yields a stateful symmetric encryption scheme,SE = ( K, E , ). The key generation algorithm
simply returns a random key for the block cipher, meaningDit picks a random k-bit string key and returns
it, so that the key space is {0, 1}k. The encryption and decryption algorithms are as follows:
Algorithm K(M )
E AlgorithmD K(C)
If M
| |< l then return ⊥
If C
| |< 2l then return ⊥
If M
| mod| l=0 / then return ⊥
If C
| mod
| l =/ 0 then return ⊥
Parse M as M [1] . . . M [n]
R Parse C as C[0]C[1] . . . C[n]
C[0] ← NtSl For i = 1, . . . , n do
For
(ctr) i = 1, . . . , n do M [i] ← E−1 K(C[i]) ⊕
C[i − 1]
C[i] ← FK (C[i − 1] ⊕ M EndFor
[i]) M ← M [1] . . . M [n]
EndFor Return M
C ← C[0]C[1] . . . C[n]
ctr ← ctr + n
Return C
Parsing M means that we divide it into l-bit blocks and let M [i] denote the i-th such block. In parsing
C we also divide it into l-bit blocks, but this time the blocks are numbered starting at 0. The encrypter
maintains a counter ctr, initially zero. The IV is C[0], which is chosen to be the l-bit binary representation
of the integer ctr. The counter is updated by the encryption algorithm as indicated.
-cpa
Show that SE is insecure against chosen-plaintext attack. Namely, present a lower bound on Advind S (Et, q, )
for certainµspecific, small values of t, q, µ that you will specify, along with a certain large (ie. c l ose to
one)
Cryptography: Lecture Notes 119
value of the lower bound itself. Prove your claim correct by presenting and analyzing the corresponding
adversary.
Your attack can assume that the initial value of the counter used by the LR-encryption oracle is is zero.
(This corresponds to a setting in which the attacker is present right from the moment the encrypter starts
using the scheme.) Once you have solved the problem in this setting, however, try to also find an attack in
which the initial value of the counter used by the LR-encryption oracle is not known to the attacker. (This
corresponds to the more realistic setting in which the attacker enters the picture after the scheme has been
in use for some time.)
Show that this scheme is secure against chosen-plaintext attack as long as P is a secure PRP. More precisely
show that
Advind-cpa( ) 2 Advprp-cpa( ′ 2 2
SE t, q, lnq ≤ · P tq , ′) + n q ,
2l
where you must specify the values of t′, q′ as functions of t, q, l, n.
Hint: Proceed in analogy to the analysis of CTR mode encryption done above. First analyze the scheme
which uses in place of P the family Perm2l of random permutations on 2l bits. Then turn to the scheme
using the given PRP P .
Problem 6.35 Let l ≥ 64 be an integer, and let P : {0, 1} k × { 0, 1} l → {0, 1} l be a pseudorandom permu-
tation. We define a symmetric encryption schemeS as follows. The key is a randomly chosen k-bit string
K, meaning a key for the PRP. The encryption and decryption algorithms are as follows:
Here the encryption algorithm takes as input a message x of length a multiple of l, which it views as
divided into l bit blocks, x = x1 . . . xn. It returns a string y of length l(n + 1), computed as shown. The
decryption algorithm takes y to return x. Here “+” denotes addition modulo 2l, and⟨ j⟩ denotes the binary
representation of integer j as an l-bit string.
Show that this scheme is insecure. More precisely, show that
-cpa 1
Advind
SE (t, q, µ) ≥ ,
3
where t, q, µ are values that you will specify, and should be as small as possible.
C H A P T E R 7
Public-key encryption
The idea of a public-key cryptosystem (PKC) was proposed by Diffie and Hellman in their pioneering paper
[68] in 1976. Their revolutionary idea was to enable secure message exchange between sender and receiver
without ever having to meet in advance to agree on a common secret key. They proposed the concept
of a trapdoor function and how it can be used to achieve a public-key cryptosystem. Shortly there after
Rivest, Shamir and Adelman proposed the first candidate trapdoor function, the RSA. The story of modern
cryptography followed.
The setup for a public-key cryptosystem is of a network of users u· · 1· un rather than an single pair of users.
Each user u in the network has a pair of keys < Pu, Su > associated with him, the public key Pu which is
published under the users name in a “public directory” accessible for everyone to read, and the private-key
Su which is known only to u. The pairs of keys are generated by running a key-generation algorithm. To
send a secret message m to u everyone in the network uses the same exact method, which involves looking up
Pu, computing E(Pu, m) where E is a public encryption algorithm, and sending the resulting ciphertext c to
u. Upon receiving ciphertext c, user u can decrypt by looking up his private key Su and computing D(Su, c)
where D is a public decryption algorithm. Clearly, for this to work we need that D(Su, E(Pu, m)) = m.
A particular PKC is thus defined by a triplet of public algorithms (G, E, D), the key generation, encryption,
and decryption algorithms.
Definition 7.1 A public-key encryption scheme is a triple, (G, E, D), of probabilistic polynomial-time al-
gorithms satisfying the following conditions
(1) key generation algorithm : a probabilistic expected polynomial-time algorithm G, which, on input
1k (the security parameter) produces a pair (e, d) where e is called the public key , and d is the
corresponding private key. (Notation: (e, d) ∈G(1k)). We will also refer to the pair (e, d) a pair of
encryption/decryption keys.
(2) An encryption algorithm: a probabilistic polynomial time algorithm E which takes as input a security
parameter 1k, a public-key e from the range of G(1k) and string m ∈ {0, 1}k called the message, and
produces as output string c ∈ {0, 1}∗ called the ciphertext. (We use the notation c ∈ E(1k, e, m) to
120
Cryptography: Lecture Notes 121
denote c being an encryption of message m using key e with security parameter k. When clear, we use
shorthand c ∈ Ee(m), or c ∈ E(m). )
(3) A decryption algorithm: a probabilistic polynomial time algorithm D that takes as inputs a security
parameter 1k, a private-key d from the range of G(1k), and a ciphertext c from the range of E(1k, e, m),
and produces as output a string m′ ∈ {0, 1}∗, such that for every pair (e, d) in the range of G(1k), for
every m, for every c ∈ D(1k, e, m), the prob(D(1k, d, c) /= m′) is negligible.
(4) Furthermore, this system is “secure” (see Definition 7.3).
How to use this definition. To use a public-key encryption scheme (G, E, D) with security parameter
1k, user A runs G(1k) to obtain a pair (e, d) of encryption/decryption keys. User A then ”publishes” e in a
public file, and keeps private d. If anyone wants to send A a message, then need to lookup e and compute
E(1k, e, m). Upon receipt of c ∈ E(1k, e, m), A computes message m = D(1k, d, c).
where |α1 | = · · · = |αl | = k, |αl+1 | ≤ k, and p is some standard padding of length k − |αl+1 |.
The above convention may be interpreted in two ways. First, it waves the extremely restricting convention
by which the encryption scheme can be used only to encrypt messages of length equal to the length of the
122 Goldwasser and Bellare
key. Second, it allows to reduce the security of encrypting many messages using the same key to the security
of encrypting a single message.
The next convention regarding encryption schemes introduces a breach of security: namely, the length of the
cleartext is always revealed by encryption schemes which follow this convention. However, as we show in a
latter section some information about the length of the cleartext must be leaked by any encryption scheme.
The encryption algorithm maps messages of the same length to cryptograms of the same length.
A collection of trapdoor functions, discussed at length in the chapter on one-way functions and trapdoor
functions, has been defined as F ={ fi : Di→ Di }i∈I where Di ⊆0,{ 1 |i|}, and I is a set of indices. Recall
∀ fi was easy to compute, but hard to invert; and i,∀ there existed ti such that given ti and fi(x),
that i,
fi(x) could be inverted in polynomial time.
Diffie and Hellman suggested using the supposed existence of trapdoor functions to implement Public Key
Cryptosystems as follows.
(1) The generator G on security parameter 1k outputs pairs (f, tf ) where f is a trapdoor function and tf
its associated trapdoor information.
(2) For every message m ∈ M , E(f, m) = f (m).
(3) Given c ∈ E(f, m) and tf , D(tf , c) = f −1(c) = f −1(f (m)) = m.
There are several immediate problems which come up in using the trapdoor function model for public key
encryption.
We summarize briefly the main problems which will be elaborated on in the next few sections.
(1) Special Message Spaces. The fact that f is a trapdoor function doesn’t imply that inverting f (x) when
x is special is hard. Namely, suppose that the set of messages that we would like to send is drawn from
a highly structured message space such as the English language, or more simply M = {0, 1} , it may be
easy to invert f (m). In fact, it is always easy to distinguish between f (0) and f (1)).
(2) Partial Information. The fact that f is a one-way or trapdoor function doesn’t necessarily imply that
f (x) hide all information about x. Even a bit of leakage many be too much for some applications. For
example, for candidate one-way function f (p, g, x) = gx mod p where p is prime and g is a generator, the
least significant bit of x is always easily computable from f (x). For RSA function f (n, l, x) = xl mod n,
the Jacobi symbol Jn(x) = Jn(xl mod n). Namely, the Jacobi symbol of x is easy to compute from
f (n, l, x) – this was observed by Lipton[130] who used this fast to crack a protocol for Mental poker by
Shamir Rivest and Adleman[185]. See below. Moreover, In fact, for any one-way function f , information
such as “the parity of f (m)” about m is always easy to compute from f (m). See below.
(3) Relationship between Encrypted Messages Clearly, we may be sending messages which are related to
each other in the course of a communication. Some examples are: sending the same secret message to
several recipients, or sending the same message (or slight variants) many times. It is thus desirable and
sometimes essential that such dependencies remain secret. In the trapdoor function model, it is trivial
to see that sending the same message twice is always detectable. More serious problems were noted by
several researchers, most notably by H˚astad who shows [106] that if RSA with an exponent l is
used, and the same message (or known linear combinations of the same message) is send to l recipients,
then the message can be computed by an adversary.
Cryptography: Lecture Notes 123
It is clear that we can easily compute this predicate since all we have to do is take the low bit of E(x).
Unless E(x) is always even or always odd for all the x’s in the message space, we have obtained partial
information about x. If E(x) is always even or odd, the low bit of E(x) contains no information. But, some
other bit of E(x) must contain some information otherwise the message space is composed of only one
message in which case we have total information. Then, simply use that bit instead of the lowest bit and
we have a partial information obtaining predicate.
We showed that the RSA function has some nice properties that seem especially good for use as a PKC. For
example, we showed for a given pair < n, e >, it is either hard to invert RSA<n,e> for all but a negligible
fraction of x’s in Zn∗ , or easy to invert RSA<n,e>∀(x) ∈ x, x Z∗ . Does this mean that the RSA
cryptosystem is difficult to break for almost all messages if factoring integers is hard? The answer is
negative.
Suppose that the message space M we are interested in is the English language. Then, let Mk = {0, 1}k
where m ∈ Mk is an |MEnglish
| sentence. Compared to the entire space, the set of English sentences is quite
small. For example, k ≤ 1 . Thus it is possible that fn,e(x) is easy to invert for all x ∈ Mk, even if
|Z∗n | √
n
2
the factorization problem is hard. In other words, English sentences are highly structured; it might well be
the case that our function can be easily inverted on all such inputs. Clearly, we would ultimately like our
encryption schemes to be secure for all types of message spaces, including English text.
Unfortunately, in some cases very subtle leakage of partial information can defeat the whole purpose of
encryption. We present a “cute” example of this shown by Lipton shortly after RSA was invented.
An Example: Mental Poker (SRA ’76): Mental Poker is a protocol by which two parties each of whom
distrusts the other can deal each other cards from a deck without either being able to cheat. The protocol
for A to deal B a card goes like this:
(1) A and B agree on a set X = xi Zn∗ , of random numbers where n = pq, p and q
{ x1 , . . . , x}52 , ∈
prime and known to both A and B. These numbers represent the deck of cards, xi representing the
ith card in the deck.
(2) A picks s such that (s, ϕ(n)) = 1, and t such that st ≡ 1 (mod ϕ(n)) secretly. B does the same for e
and f . (I.e., ef ≡ 1 (mod ϕ(n)))
(3) A calculates xsi mod n for i = 1 . . . 52, shuffles the numbers, and sends them to B.
(4) B calculates (xsi mod n)e mod n for i = 1 . . . 52, shuffles the numbers, and sends them to A.
(5) A calculates ((xs mod n)e mod n)t mod n = xe mod n for i = 1 . . . 52. A then chooses a card randomly
i i
(I.e., picks xe jwhere j ∈ [1 . . . 52]) and sends it to B.
(6) B then takes (xje mod n)d mod n = xj mod n. This is the card B has been dealt.
Why it works: Note that so long as no partial information can be obtained from the RSA trapdoor function,
neither A nor B can influence in any way the probably of B getting any given card. A is unable to give B
bad cards and likewise B can not deal himself good cards. This follows from the fact that encrypting the
cards is analogous to placing each of them in boxes locked with padlocks. So long as a card is locked in a
box with a padlock of the other player’s on it, nothing can be told about it and it is indistinguishable from
the other locked boxes.
When B gets the deck in step 3, he has no idea which card is which and thus is unable to influence which
card he is dealt. However, A can still tell them apart since its A’s padlocks that are on the boxes. To prevent
A from being able to influence the cards, B then puts his own locks on the boxes as well and shuffles the
deck. Now A also can not tell the cards apart so when he is forced to make his choice, he is forced to just
deal a random card. Thus, the two players in spite of distrusting each other can play poker.
How to extract partial information from the RSA function: The protocol fails, however, because
it is possible to extract partial information from the RSA function and thus determine to some degree of
accuracy which cards are which and hence influence the outcome of the draw. One way to do this is by
computing the Jacobi symbol since (Jn(xi)) = (Jn(xs)) i since s is odd. Thus, since half of the xi’s have a
Jacobi symbol of 1 on the average since they are random numbers in Zn∗ , we can extract roughly one bit of
information from each of the cards. In order to influence the draw in our favor, we simply determine whether
or not the cards with a Jacobi symbol of 1 or the cards with a Jacobi symbol of -1 are better for us and then
draw only from that set of cards.
One’s immediate reaction to this, of course, is simply to modify the protocol so that in step 1 only numbers
with say a Jacobi symbol of 1 are chosen. Then no information will be gained by computing the Jacobi
symbol. However, this is no guarantee that some other more clever predicate does not exist which can still
extract partial information and indeed such functions must exist by the very nature of trapdoor functions.
Let the exponent be e = 3. We saw that any exponent relatively prime to ϕ(N ) is OK, and we can easily
choose N = pq so that 3 is relatively prime to (p—1)(q −1) = ϕ(N ). This is a popular choice for performance
reasons. Encryption is now fast. And we saw that RSA is still (assumed) one-way under this choice.
So encryption of m is now m3 mod N . Here is an interesting attack illustrating the weaknesses of RSA
encryption, due to Coppersmith, Franklin, Patarin and Reiter [58]. Suppose I encrypt m and then m + 1. I
Cryptography: Lecture Notes 125
c1 = m3
c2 = (m + 1)3 = m3 + 3m + 3m2 + 1 = c1 + 3m + 3m2 + 1
Now lets try to solve for m. Perhaps the first thought that springs to mind is that we have a quadratic
equation for m. But taking square roots is hard, so we don’t know how to solve it that way. It turns out the
following works:
c2 + 2c1 − 1 (m + 1)3 + 2m3 − 1 3m3 + 3m2 + 3m
= = = m.
c2 − c1 + 2 (m + 1)3 − m3 + 2 3m2 + 3m + 3
This can be generalized. First, you can generalize to messages m and αm + β for known α, β. Second, it
works for exponents greater than 3. The attack then runs in time O(e2) so it is feasible for small exponents.
Finally, it can work for k messages related by a higher degree polynomial.
These are the kinds of attacks we most definitely would like to avoid.
fn(m) ≡ m2 mod n
where n is the product of two large primes, p and q. Once again, this function can yield another example of
a trapdoor/public key cryptosystem except that fn is not as permutation but a 4-to-1 function. An inverse
of fn(m):
However, in practice, when we invert Rabin’s function, we do not simply want any square root of the
encrypted message, but the correct one of the four that was meant to be sent by the sender and would
be meaningful to the intended recipient. So, we need to add a constraint to uniquely identify the root x
which must be output by the decryption algorithm on fn(m2) such as find x such that x2 = m2 mod n,
and x ∈ S where S is a property for which it is quite unlikely that there exists two roots m, x∈ S. What
could S be? Well if the message space M is sparse in Zn∗ (which would usually be the case), then S may be
simply M . In such case it is unlikely that there exists m m′ ∈ M such that m′2 = m2 mod n. (If M is
not sparse, S may be the all x whose last 20 digits are r for some random r. Then to send m in secrecy,
(fn(m′) = fn(220m + r), r) need be sent.)
Recall, that earlier in the class, we had shown that inverting Rabin’s function is as hard as factoring. Namely,
we had shown that inverting Rabin’s function for ϵ of the m∈2 Z∗n ’s implies the ability to factor. The
proof went as follows:
• Suppose there existed a black box that on inputs x2 responded with a y such that x2 = y2 mod n.
Then, to factor n, choose an i at random from Zn∗ and give as input i2 mod n to the black box. If
the
box responds with a y, such that y ±i, then we can indeed factor n by computing gcd(i ± y, n). In
the case that y = ±i, we have gained no information, so repeat.
If we think of this black box as a decoding algorithm for the public key system based on Rabin’s function
used to encrypt messages in message space M , can we conclude that if it is possible to decrypt the public key
system fn(m) for m ∈ M, then it is possible to factor n?
If the message space M is sparse, then the answer is no. Why? for the black box (above) to be of any use
we need to feed it with an fn(i) for which there exists an y such that y ∈ M and y /= i. The probability that
such y exists is about |M|
∗
, which may be exponentially small.
|Z n|
126 Goldwasser and Bellare
If the message space M is not sparse, we run into another problem. Rabin’s scheme would not be secure in
the presence of an active adversary who is capable of a chosen ciphertext attack. This is easy to see again
using the above proof that inverting Rabin’s function is as hard as factoring. Temporary access to a decoding
algorithm for Rabin’s public key encryption for message in M , is the same as having access to the black box
of the above proof. The adversary chooses i at random and feeds the decoding algorithm with fn(i). If the
adversary gets back y such that y2 = i2 mod n, (again, i ±y), factor n, and obtain the secret key. If M is
not sparse this will be the case after trying a polynomial number of i’s. From here on, the adversary would
be able to decrypt any ciphertext with the aid of the secret key and without the need for a black box.
Therefore, either Rabin’s scheme is not equivalent to factoring, which is the case when inverting on a sparse
message space, or (when M is not sparse) it is insecure before a chosen ciphertext adversary.
7.2.5 Knapsacks
A number of public-key cryptosystems have been proposed which are based on the knapsack (or — more
properly — the subset sum) problem: given a vector a = (a1, a2, . . . , an) of integers, and a target value C, to
determine if there is a length-n vector x of zeroes and ones such· that a x = C. This problem is NP-
complete [86].
To use the knapsack problem as the basis for a public-key cryptosystem, you create a public key by creating
a knapsack vector a, and publish that as your public key. Someone else can send you the encryption of a
message M (where M is a length-n bit vector), by sending you the value of the inner product C = M · a.
Clearly, to decrypt this ciphertext is an instance of the knapsack problem. To make this problem easy for
you, you need to build in hidden structure (that is, a trapdoor) into the knapsack so that the encryption
operation becomes one-to-one and so that you can decrypt a received ciphertext easily. It seems, however,
that the problem of solving knapsacks containing a trapdoor is not NP-complete, so that the difficulty of
breaking such a knapsack is no longer related to the P = NP question.
In fact, history has not been kind to knapsack schemes; most of them have been broken by extremely clever
analysis and the use of the powerful L3 algorithm [127] for working in lattices. See [137, 180, 182, 2, 184,
123, 44, 151].
Some knapsack or knapsack-like schemes are still unbroken. The Chor-Rivest scheme [56], and the multi-
plicative versions of the knapsack [137] are examples. McEliece has a knapsack-like public-key cryptosystem
based on error-correcting codes [136]. This scheme has not been broken, and was the first scheme to use
randomization in the encryption process.
We are now ready to introduce what is required from a secure Public Key Cryptosystem.
Brain storming about what it means to be secure brings immediately to mind several desirable properties.
Let us start with the the minimal requirement and build up.
First and foremost the private key should not be recoverable from seeing the public key. Secondly, with high
probability for any message space, messages should not be entirely recovered from seeing their encrypted
form and the public file. Thirdly, we may want that in fact no useful information can be computed about
messages from their encrypted form. Fourthly, we do not want the adversary to be able to compute any
useful facts about traffic of messages, such as recognize that two messages of identical content were sent,
nor would we want her probability of successfully deciphering a message to increase if the time of delivery
or relationship to previous encrypted messages were made known to her.
In short, it would be desirable for the encryption scheme to be the mathematical analogy of opaque envelopes
containing a piece of paper on which the message is written. The envelopes should be such that all legal
senders can fill it, but only the legal recipient can open it.
Cryptography: Lecture Notes 127
Several definitions of security attempting to capture the “opaque envelope” analogy have been proposed. All
definitions proposed so far have been shown to be equivalent. We describe two of them and show they are
equivalent.
Definition 7.2 We say that a Public Key Cryptosystem (G, E, D) is polynomial time indistinguishable if
for every PPT M , A, and for every polynomial Q, ∀ sufficiently large k
R R R
P r(A(1kR, e, m , m , c) = m | (e, d) ← G(1k ) ; {m , m } ← M (1k ) ; m ← {m , m
} ; c← E(e, m))
0 1 0 1 0 1
1 1
< + (7.1)
2 Q(k)
In other words, it is impossible in polynomial in k time to find two messages m0, m1 such that a polynomial
time algorithm can distinguish between c ∈ E(e, m0) and c ∈ E(e, m1).
• Game 1: I tell the adversary that I am about to choose m ∈ M (1k) and, ask her to guess h(m).
• Game 2: I tell the adversary α ∈ E(m), for some m ∈ M (1k) and once again, ask her to guess h(m).
128 Goldwasser and Bellare
In both of the above cases we may assume that the adversary knows the message space algorithm M and
the public key P .
In the first game, the adversary only knows that a message m is about to be chosen. In addition to this
fact, the adversary of the Game 2 sees the actual ciphertext itself. For all types of message spaces, semantic
security will essentially require that the probability of the adversary winning Game 1 to be about the same as
her probability of winning Game 2. Namely, that the adversary should not gain any advantage or information
from having seen the ciphertext resulting from our encryption algorithm.
Said differently, this definition will require that for all probability distributions over the message space, no
partial information about the message can be computed from the ciphertext. This requirement is reminiscent
of Shannon’s perfect security definition – with respect to a computationally bounded adversary.
Definition 7.3 We say that an encryption scheme (G, E, D) is semantically secure if for all PPT algorithms
M and A, functions h, polynomials Q there is a PPT B such that for sufficiently large k,
k R k 1
Here, Game 1 is represented by PTM B, and Game 2 by PTM A. Again, this can only hold true when
the encryption algorithm is a probabilistic one which selects one of many possible encodings for a message;
otherwise, if E were deterministic, and M = {0, 1}, then any adversary would have 100% chance of guessing
correctly h(m) for m ∈ M by simply testing whether E(0) = c or E(1) = c.
Theorem 7.4 A Public Key Cryptosystem passes Indistinguishable Security if and only if it passes Semantic
Security.
enables the computation of the predicate. We can construct examples of collection of trapdoor predicates
based on the intractability of factoring, RSA inversion and the difficulty of distinguishing quadratic residues
from non-residues.
Now, given a collection of trapdoor predicates exist, we use them to set up a cryptosystem for one bit
encryption as follows. Every user A chooses and publishes a random trapdoor predicate, keeping secret the
corresponding trapdoor information. To send A a one bit message m, any other user chooses at random
an element in the domain of the trapdoor predicate for which the predicate evaluates to m. To decrypt, A
uses his trapdoor information to compute the value of predicate on the domain element it receives. Note,
that this is a probabilistic encryption with many possible cyphertexts for 0 as well as 1, where essentially an
adversary cannot distinguish between an encoding of 0 and an encoding of 1.
Recall, the formal definition of trapdoor predicates 2.59.
Let I be a set of indices and for i ∈ I let Di be finite. A collection of trapdoor predicates is a set B = {Bi :
Di → {0, 1}}i∈I satisfying the following conditions. Let D i
v
= {x ∈ Di , Bi (x) = v.
1. There exists a polynomial p and a PTM S1 which on input 1k finds pairs (i, ti) where i ∈ I ∩ {0, 1}k
and |ti | < p(k) The information ti is referred to as the trapdoor of i.
2. There exists a PTM S2 which on input i ∈ I and v ∈ { 0, 1} outputs x ∈ Di at random such that
Bi(x) = v.
3. There exists a PTM A1 such that for i ∈ I and trapdoor ti, x ∈ Di A1(i, ti, x) = Bi(x).
4. For every PPT A there exists a negligible νA such that ∀ k large enough
h i
P z /= v : i ← I ∩ {0, 1}k ; v ← {0, 1} ; x ← v
R R R
; z ← A(i, x) ≤ ν (k)
Di A
Definition 7.5 Assume that B is a collection of trapdoor predicates. We can now define a public key
cryptosystem (G, E, D)B for sending single bit messages as follows:
• Key generation algorithm: G(1k) chooses (i, ti) (public key is then i and private key is ti). This is
doable by running algorithm S1.
• Encryption algorithm: Let m ∈ {0, 1} be the message. Encryption algorithm E(i, e) selects x ∈ Di m .
(The ciphertext is thus x). This is doable by running algorithm S2.
• Decryption algorithm: D(c, ti) computes Bi(c). This is doable using A1 given the trapdoor information.
It is clear from the definition of a set of trapdoor predicates, that all of the above operations can be done in
expected polynomial time and that messages can indeed be sent this way. It follows immediately from the
definition of trapdoor predicates than indeed this system is polynomially indistinguishable when restricted
to one bit message spaces.
1. S1 (1k ) samples (i, ti ) where i ∈ I, |i| = k and |ti | < p(k) for some polynomial p.
130 Goldwasser and Bellare
Definition 7.6 Given a collection F with hard core predicates B, define public key cryptosystem (G, E, D)B
for sending a single bit as follows:
• Key generation algorithm: G(1k) chooses pair < i, ti > by running S1(1k). (for RSA, G(1k) chooses
< n, e >, d such that n is an RSA modulus, and ed = 1 mod φ(n).)
• Encryption algorithm: E(i, m) chooses at random an ∈x Di such that Bi(x) = m, and output as a
ciphertext fi(x). Using the Goldreich Levin construction of a hard core predicate, simply choose x, r
such that the inner product of x and r is m and output f (x) ◦ r. (for RSA, to encrypt bit m, choose
at random an x ∈ Zn∗ such that LSB<n,e> (x) = m and output as a ciphertext RSA<n,e> (x).)
• Decryption algorithm: To decrypt c = fi(x), given i and ti, the decryption algorithm D(ti, c) compute
Bi(f −1i (c)) = Bi(x) = m. Using the Goldreich Levin construction this amounts to given c = fi(x)◦ r
to computing the inner product of x and r. (for RSA, to decrypt c, given n, e and d, compute the
LSB((RSA<n,e>(x))d) = least significant bit of x.)
Definition 7.7 We define a probabilistic encryption based on trapdoor collection F with hard core bit B
to be PE = (G, E, D) where:
• G(1k) chooses (i, ti) by running S1(1k) (Public key is i, private key is ti ).
• Let m = m 1 . . . m k where mj ∈ {0, 1 be the message.
E(i, m) encrypts
} m as follows:
Choose xj ∈ R Di such that Bi (xj ) = mj for j = 1, . . . ,
k. Output c = fi(x1) . . . fi(xk).
• Let c = y . . . y
1 k where yi ∈ Di be the cyph ertext.
D(ti, c) decrypts c as follows:
Compute mj = Bi (fi−1 (yj )) for j = 1, . . . , k.
Output m = m1 . . . mk.
Cryptography: Lecture Notes 131
Claim 7.8 If F is a collection of trapdoor permutations then the probabilistic encryption PE = (G, E, D)
is indistinguishably secure.
Proof: Suppose that (G, E, D) is not indistinguishably secure. Then there is a polynomial Q, a PTM A
and a message space algorithm M such that for infinitely many k, ∃m0 , m1 ∈ M (1k ) with,
Pr[A(1k , i, m , m , c) = j| 1 1
m 0 1 j ∈ {m0 , m1 }, c ∈ E(i, mj ))] > +
2 Q(k)
where the probability is taken over the coin tosses of A, (i, ti) ∈ G(1k), the coin tosses of E and mj ∈
{ 0, m1 . }In other words, A says 0 more often when c is an encryption of m0 and says 1 more often when
m
c is an encryption of m1.
Then 1
2
+ 1
Q(k)
< Pr[A chooses j correctly] = (1 − P0)(21 ) + Pk( 12 ).
Σk−1
Hence, Pk − P0 > 2
Q(k) and since j=0 (Pj+1 − Pj ) = Pk − P0 , ∃j such that Pj+1 − Pj > 2
Q(k) .
k
Now, consider the following algorithm B which takes input i, fi(y) and outputs 0 or 1. Assume that sj and
sj+1 differ in the lth bit; that is, sj,l =/ sj+1,l or, equivalently, sj+1 = s¯j .
Note that c ∈ E(i, sj ) if Bi (y) = sj,l and c ∈ E(i, sj+1 ) if Bi (y) = sj+1,l .
2 Q(k)k
Proof:
Thus, B will predict Bi(y) given i, fi(y) with probability better than 1
+ 1
. This contradicts the
2 Q(k)k
assumption that Bi(y) is hard core for fi(y).
132 Goldwasser and Bellare
In fact, the probabilistic encryption PE = (G, E, D) is also semantically secure. This follows from the fact
that semantic and indistinguishable security are equivalent.
Key Generation: G(1k) = S1(1k) = (i, ti). The public key is i, and the secret key is ti.
Encryption Algorithm: To encrypt m, E(i, m) runs as follows, where l = |m|:
(1) Choose r ∈ Di at random.
(2) Compute fi(r), f 2(r), . . . , fl(r).
i i
(3) Let p = Bi(r)Bi(fi(r))Bi(f 2(r)) . . . Bi(fl−1(r)).
i i
l
(4) Output the ciphertext c = (p ⊕ m,if (r)).
Decryption Algorithm: To decrypt a ciphertext c = (m′ , a), D(ti , c) runs as follows, where l = |m′ |:
(1) Compute r such that fli(r) = a. We can do this since we can invert fi using the trapdoor
information, ti, and this r is unique since fi is a permutation.
(2) Compute the pad as above for encryption: p = Bi(r)Bi(fi(r)) . . . Bi(fil−1(r)).
(3) Output decrypted message m = m′ ⊕ p.
To consider the efficiency of this scheme, we note that the channel bandwidth is
| |c =|m| + k, where k is the
security parameter as defined above. This is a significant improvement over the | m| · k bandwidth achieved
by the scheme proposed in the previous lecture, allowing improvement in security with only minimal
increase in bandwidth.
If Ci1 is the cost of computing fi, and Ci2 is the cost of computing f i−1 given ti, then the cost of encryption
is |m| · Ci1, and the cost of decryption is |m| · Ci2, assuming that the cost of computing Bi is negligible.
Another interesting point is that for all functions currently conjectured to be trapdoor, even with ti, it is
still easier to compute fi than f −1, that is, Ci1 < Ci2, though of course, both are polynomial in k =| i |.
i
Thus in EPE, if it is possible to compute f −l more efficiently than as l compositions of f −1, then computing
i i
Cryptography: Lecture Notes 133
r = f −l(a), and then computing fi(r), f 2(r), . . . , fl−1(r) may reduce the overall cost of decryption. The
i i i
following implementation demonstrates this.
Generation: G(1k) = (n, (p, q)) where pq = n ∈ N , and |n = k. Thus n is the public key, and (p,q) is
the secret key. |
Decryption: D((p, q), c), where c = (m′ , a), l = |m′ | (as in general case above):
l
(1) Compute r such that r2 ≡ a mod n.
l−1
(2) Compute p = LSB(r)LSB(r2)LSB(r4) . . . LSB(r2 ).
(3) Output m = m′ ⊕ p.
p− 1
Since
that ifp,pq is≡ prime,
7 mod 8,
thewe have p =symbol
Legendre 8t + 7 J
and
(a)q =
= 8s
a +2 7 ≡for1 some
mod pintegers s, t. Recall
if and only if a ∈ from Lecture
Q , Since a ∈3 Q ,
p p n
we also have a ∈ Qp. Thus we can compute
p− 1
a≡ a· a 2 ≡ a1+4t+3 ≡ (a2t+2 )2
(mod p),
√ 2
yielding, 2a√ ≡ a2t+2 mod p. Furthermore, a2t+2 = (at+1) ∈ Qp, so we can do this repeatedly to
find rp ≡ a ≡ a(2t+2) modl
p. (This is why we require p ≡ 7 mod 8.) Analogously, we can find
l
√
2 l
l
rq ≡ a ≡ a(2s+2) mod q, and using the Chinese Remainder Theorem (Lecture 5), we can find
√l 3
r≡ 2
a mod n. The cost of decrypting in this fashion is O(k · l).
However, we can also compute r directly by computing u = (2t + 2)l and v = (2s + 2)l first, and in
fact, if the length of the messages is known ahead of time, we can compute u and v off-line. In any
event, the cost of decrypting then is simply the cost of computing au mod p and av mod q, using the
Chinese Remainder Theorem, and then computing p given r, just as when encrypting. This comes out
to O(k3 + k2 · l) = O(k3) if l = O(k).
1
More recent results indicate that this additional restriction may not be necessary.
134 Goldwasser and Bellare
We wish to show that EPE also passes indistinguishable security. To do this we use the notion of pseudo-
random number generators (PSRG) introduced in the chapter on pseudo random number generation. Note
that PSRG(r, i) = fl(r)
i ◦ Bi(r)Bi(fi(r))Bi(f 2(r))i . . . Bi(fl−1(r))
i = a ◦ p where p and a are generated while
encrypting messages, (◦ is the concatenation operator.) is a pseudo-random number generator. Indeed, this
is the construction we used to prove the existence of PSRGs, given one-way permutations.
Certainly if the pad p were completely random, it would be impossible to decrypt the message since m′ = m
⊕p
maps m′ to a random string for any m. Since p is pseudo-random, it appears random to any PTM without
further information i.e., the trapdoor ti. However, the adversary does know ai = fl(r), and we have to
show
that it cannot use this to compute p.
More precisely, we note that if there exists a PTM A that can distinguish between⊕ (m◦ p) a and (m ⊕ R)◦ a
where R is a completely random string from{ 0, 1} l, then it can distinguish between ◦p a and R◦ a. We
can use this then, as a statistical test to check whether a given string is a possible output of PSRG, which
contradicts the claim that PSRG is pseudo-random, and thus the claim that fi is one-way. It is left as an
exercise to express this formally.
The heuristic schemes invariably take the following form: one (probabilistically, invertibly) embeds x into
a string rx and then takes the encryption of x to be f (rx).2 Let’s call such a process a simple-embedding
scheme. We will take as our goal to construct provably-good simple-embedding schemes which allow n to
be close to k.
2It is well-known that a naive embedding like r
x = x is no good: besides the usual deficiencies of any deterministic
encryption, f being a trapdoor permutation does not mean that f (x) conceals all the interesting properties of x. Indeed it was
exactly such considerations that helped inspire ideas like semantic security [98] and hardcore bits [40, 201].
Cryptography: Lecture Notes 135
The best known example of a simple embedding scheme is the RSA PKCS #1 standard. Its design is however
ad hoc; standard assumptions on the trapdoor permutation there (RSA) do not imply the security of the
scheme. In fact, the scheme succumbs to chosen ciphertext attack [34]. The OAEP scheme we discuss below
is just as efficient as the RSA PKCS #1 scheme, but resists such attacks. Moreover, this resistance is backed
by proofs of security. The new version of the RSA PKCS#1 standard, namely v2, uses OAEP.
OAEP is a simple embedding scheme that is bit-optimal (i.e., the length of the string x that can be
encrypted by f (rx) is almost k). It is proven secure assuming the underlying hash functions are ideal. It is
shown in
[23] that RSA-OAEP achieves semantic security (as defined by [98]). It is shown in [84] (building on [188])
that it also achieves a notion called “plaintext-aware encryption” defined in [23, 21]. The latter notion is
very strong, and in particular it is shown in [21] that semantic security plus plaintext awareness implies
“ambitious” goals like chosen-ciphertext security and non-malleability [71] in the ideal-hash model.
Now we briefly describe the basic scheme and its properties. We refer the reader to [23] for full descriptions
and to [23, 84] for proofs of security.
The scheme
Recall k is the security parameter, f mapping k-bits to k-bits is the trapdoor permutation. Let k0 be
chosen such that the adversary’s running time is significantly smaller than 2 k0 steps. We fix the length of
the message to encrypt as let n = k − k0 − k1 (shorter messages can be suitably padded to this length). The
scheme makes use of a “generator” G: {0, 1}k0 → {0, 1}n+k1 and a “hash function” H: {0, 1}n+k1 → {0, 1}k0 .
To encrypt x ∈ {0, 1}n choose a random k0-bit r and set
E G,H (x) = f (x0k1 ⊕ G(r)ǁr ⊕ H(x0k1 ⊕ G(r))).
The decryption DG,H is defined as follows. Apply f −1 to the ciphertext to get a string of the form a ǁ b with
a
| |= k − k0 and |b | = k0. Compute r = H(a) ⊕ b and y = G(r) ⊕ a. If the last k1 bits of y are not all zero
then reject; else output the first n bits of y as the plaintext.
The use of the redundancy (the 0k1 term and the check for it in decryption) is in order to provide plaintext
awareness.
Efficiency
The function f can be set to any candidate trapdoor permutation such as RSA [170] or modular squaring
[164, 35]. In such a case the time for computing G and H is negligible compared to the time for computing
f, f −1. Thus complexity is discussed only in terms of f, f −1 computations. In this light the scheme requires
just a single application of f to encrypt, a single application of f −1 to decrypt, and the length of the
ciphertext is k (as long as k ≥ n + k0 + k1).
As we indicated above, when proving security we take G, H to be random, and when we want a concrete
scheme, G, H are instantiated by primitives derived from a cryptographic hash function. In this regard we
are following the paradigm of [15] who argue that even though results which assume an ideal hash function
do not provide provable security with respect to the standard model of computation, assuming an ideal hash
function and doing proofs with respect to it provides much greater assurance benefit than purely ad. hoc.
protocol design. We refer the reader to that paper for further discussion of the meaningfulness, motivation
and history of this ideal hash approach.
Exact security
We want the results to be meaningful for practice. In particular, this means we should be able to say
meaningful things about the security of the schemes for specific values of the security parameter (e.g., k =
136 Goldwasser and Bellare
512). This demands not only that we avoid asymptotics and address security “exactly,” but also that we
strive for security reductions which are as efficient as possible.
Thus the theorem proving the security of the basic scheme quantifies the resources and success probability
of a potential adversary: let her run for time t, make qgen queries of G and qhash queries of H, and suppose
she could “break” the encryption with advantage ϵ. It then provides an algorithm M and numbers t′, ϵ′ such
that M inverts the underlying trapdoor permutation f in time t′ with probability ϵ′. The strength of the
result is in the values of t′, ϵ′ which are specified as functions of t, qgen, qhash, ϵ and the underlying scheme
parameters k, k0, n (k = k0 + n). Now a user with some idea of the (assumed) strength of a particular f
(e.g., RSA on 512 bits) can get an idea of the resources necessary to break our encryption scheme. See [23]
for more details.
OAEP achieves semantic security for any trapdoor function f , as shown in [23]. It achieves plaintext
awareness, and thus security against chosen-ciphertext attack, when f is RSA, as shown in [84].
7.4.7 Enhancements
An enhancement to OAEP, made by Johnson and Matyas [114], is to use as redundancy, instead of the 0 k1
above, a hash of information associated to the key. This version of OAEP is proposed in the ANSI X9.44
draft standard.
(3) Recall that α1 = (fi(x1), fi(x2), . . . , fi(xl)), with xj chosen randomly from Di for j = 1, 2,...., l. Let
α2 = (fi(x1),....., fi(xl−1), fi(y)).
(4) Use the decoding equipment on c = (α1, α2). If it answers m, then Bi(y) = b. If it doesn’t decrypt c,
then Bi(y) = b.
What is done instead uses the notion of Non-Interactive Zero-Knowledge Proofs (NIZK) [41, 146]. The
idea is that anyone can check a NIZK to see that it is correct, but no knowledge can be extracted from it
about what is being proved, except that it is correct. Shamir and Lapidot have shown that if trapdoor
functions exist, then NIZKs exist. Then a ciphertext will consist of three parts: two distinct encodings α1, α2 of
the message, and a NIZK that α1 and α2 encrypt the same message. Then the decoding equipment will
simply refuse to decrypt any ciphertext with an invalid NIZK, and this refusal to decrypt will not give the
adversary any new knowledge, since it already knew that the proof was invalid.
The practical importance of chosen ciphertext attack is illustrated in the recent attack of Bleichenbacher on
the RSA PKCS #1 encryption standard, which has received a lot of attention. Bleichenbacher [34] shows
how to break the scheme under a chosen ciphertext attack. One should note that the OAEP scheme discussed
in Section 7.4.6 above is immune to such attacks.
C H A P T E R 8
Message authentication
A message authentication scheme enables parties in possession of a shared secret key to achieve the goal of
data integrity. This is the second main goal of private-key cryptography.
8.1 Introduction
138
Cryptography: Lecture Notes 139
new ones. These abilities depend on the setting. It may be hard to introduce data into a dedicated phone
line, but not on a network like the Internet. It would be advisable to assume adversaries do have such
abilities.
The authentication problem is very different from the encryption problem. We are not worried about secrecy
of the data; let the data be in the clear. We are worried about the adversary modifying it.
The argument that this provides data integrity is as follows. Suppose S transmits, as in the above
example, a message M to its bank B asking that $200 be transferred from S’s account to A’s account. A
wants to change the $200 to $2,000. If M is sent in the clear, A can easily modify it. But if M is encrypted
so that ciphertext C is sent, how is A to modify C so as to make B recover the modified message M ′? It
does not know the key K, so cannot encrypt the modified message M ′. The privacy of the message appears to
make tampering difficult.
This argument is fallacious. To see the flaws let’s first look at a counter-example and then the issues.
Consider, say the randomized CTR scheme, using some block cipher F , say RC6. We proved in the chapter
on symmetric encryption that this was a secure encryption scheme assuming RC6 is a pseudorandom
function. For simplicity say that the message M above is a single 128 bit block, containing account
information for the parties involved, plus a field for the dollar amount. To be concrete, the last 16 bits of
the 128-bit block hold the dollar amount encoded as a 16-bit binary number. (So the amount must be at
most $65,535.) Thus, the last 16 bits of M are 0000000011001000, the binary representation of the integer
200. We assume that A is aware that the dollar amount in this electronic check is $200; this information
is not secret. Now recall that under randomized CTR encryption the ciphertext transmitted by⟨ ⟩S has the
′
form C = ⟨ r y ⟩where
⊕ y = FK( r + 1 ) M . A’s attack is ⟨as ⟩ follows. It gets ⊕C = r y and sets y = y
112 ′ ′ ′
0 0000011100001000.
⟨⟩ It sets C = r y and forwards C to B. B will decrypt this, so that it recovers
⟨ ⟩ ⊕the
message FK( r + 1 ) y′. Denoting it by M ′, its value is
M′ = FK (⟨r + 1⟩)⊕y ′
= FK (⟨r + 1⟩)⊕y⊕0112 0000011100001000
= M ⊕01120000011100001000
= Mprefix0000011111000000
where Mprefix is the first 112 bits of the original message M . Notice that the last 16 bits of M ′ is the binary
representation of the integer 2000, while the first 112 bits of M ′ are equal to those of M . So the end result
is that the bank B will be misled into executing the transaction that S requested except that the dollar
amount has been changed from 200 to 2000.
There are many possible reactions to this counter-example, some sound and some unsound. Let’s take a look
at them.
What you should conclude from this is that encryption does not provide data integrity. With hindsight,
it is pretty clear. The fact that data is encrypted need not prevent an adversary from being able to make
the receiver recover data different from that which the sender had intended, for many reasons. First, the
data, or some part of it, might not be private at all. For example, above, some information about M was
known to A: as the recipient of the money, A can be assumed to know that the amount will be $200, a
sum probably agreed upon beforehand. However, even when the data is not known a priori, an adversary can
make the receiver recover something incorrect. For example with the randomized CTR scheme, an adversary
can effectively flip an bit in the message M . Even if it does not know what is the value of the original bit,
140 Goldwasser and Bellare
damage can be caused by flipping it to the opposite value. Another possibility is for the adversary to simply
transmit some string C. In many encryption schemes, including CTR and CBC encryption, C will decrypt
to something, call it M . The adversary may have no idea what M will be, but we should still view it as
wrong that the receiver accepts M as being sent by S when in fact it wasn’t.
Now here is another possible reaction to the above counter-example: CTR mode encryption is bad, since
it permits the above attack. So one should not use this mode. Let’s use CBC instead; there you can’t flip
message bits by flipping ciphertext bits.
This is an unsound reaction to the counter-example. Nonetheless it is not only often voiced, but even printed.
Why is it unsound? Because the point is not the specific attack on CTR, but rather to recognize the disparity
in goals. There is simply no reason to expect encryption to provide integrity. Encryption was not designed
to solve the integrity problem. The way to address this problem is to first pin down precisely what is the
problem, and then seek a solution. Nonetheless there are many existing systems, and places in the literature,
where encryption and authentication are confused, and where the former is assumed to provide the latter.
It turns out that CBC encryption can also be attacked from the integrity point of view, again leading to
claims in some places that it is not a good encryption mechanism. Faulting an encryption scheme for not
providing authenticity is like faulting a screwdriver because you could not cut vegetables with it. There is
no reason to expect a tool to solve a problem it was not designed to solve.
It is sometimes suggested that one should “encrypt with redundancy” to provide data integrity. That is, the
sender S pads the data with some known, fixed string, for example 128 bits of zeros, before encrypting it.
The receiver decrypts the ciphertext and checks whether the decrypted string ends with 128 zeros. If not,
the receiver rejects the transmission as unauthentic; else it outputs the rest of the string as the actual data.
This too can fail in general; for example it is easy to see that with CTR mode encryption, an attack just
like the above applies. It can be attacked under CBC encryption too.
Good cryptographic design is goal oriented. One must first understand and formalize the goal. Only then
does one have the basis on which to design and evaluate potential solutions. Accordingly, our next step will
be to come up with a definition of message authentication schemes and their security.
Definition 8.1 A message authentication scheme MA = (K, T , V) consists of three algorithms, as follows:
Cryptography: Lecture Notes 141
R
• The key generation algorithm K is a randomized algorithm that returns a key K; we write K ← K
• The tagging algorithm T is a (possibly randomized) algorithm that takes the key K and a message M
to return a tag σ; we write σ ← TK(M )
• The verification algorithm V is a deterministic algorithm that takes the key K, a message M , and a
candidate tag σ for M to return a bit; we write d ← VK(M, σ).
Associated to the scheme is a message space Plaintexts from which M is allowed to be drawn. We require
that VK(M, TK(M )) = 1 for all M ∈ Plaintexts.
The last part of the definition says that tags that were correctly generated will pass the verification test.
This simply ensures that authentic data will be accepted by the receiver.
The tagging algorithm might be randomized, meaning internally flip coins and use these coins to determine
its output. In this case, there may be many correct tags associated to a single message M . The algorithm
might also be stateful, for example making use of a counter that is maintained by the sender. In that case
the tagging algorithm will access the counter as a global variable, updating it as necessary.
Unlike encryption schemes, whose encryption algorithms must be either randomized or stateful for the
scheme to be secure, a deterministic, stateless tagging algorithm is not only possible, but common, and in
that case we refer to the message authentication scheme as deterministic. In this case, verification can be
performed by computing the correct tag and checking that the transmitted tag equals the correct one. That is,
the verification algorithm is simply the following:
Algorithm VK(M, σ)
σ′ ← K(M )
If σT = σ′ then return 1 else return 0
Hence when the tagging algorithm is deterministic, the verification algorithm need not be explicitly specified;
it is understood that it is the above.
Example 8.2 Let F : {0, 1} k × { 0, 1} l → {0, 1} l be a block cipher. The CBC MAC with base family F
is the (deterministic) message authentication scheme in which the tag of a message is the last block of
ciphertext obtained by processing the message in CBC mode with zero IV. In more detail, the scheme is
CBC- MACF = ( K, ,T )Vwith the algorithms defined as follows. We let be K the algorithm which picks a k-
bit key K by flipping k coins and returning their outcome. The message M input to the algorithms below
must have length a multiple of l bits.
Algorithm K(M )
Divide MT into l bit blocks, M = x1 . . . Algorithm V K(M, σ)
xn Divide M into l bit blocks, M = x1 . . . xn
y0 ←R
0l y0 ←R
0l
For i = 1, . . . , n do yi← FK(yi−1 x⊕i) For i = 1, . . . , n do yi← FK(yi−1 ⊕xi)
Return yn If yn = σ then return 1 else return 0
Since the tagging algorithm is deterministic, the verification algorithm simply checks whether or not σ is the
correct tag, as discussed above.
The choice of message space is important for the security of the CBC MAC as we will see later. If messages
of varying length are allowed the scheme is insecure, but if the length of the messages is restricted to some
single pre-specified and fixed value, the scheme is secure.
The goal that we seek to achieve in using a message authentication scheme is to be able to detect any attempt
by the adversary to modify the transmitted data. What we are afraid of is that the adversary can produce
messages that the receiver accepts as coming from the legitimate sender S when in fact S did not send this
message. That is, A can produce M, σ such that VK(M, σ) = 1, but M did not originate with the sender S.
This is called a forgery.
Perhaps the first question one might ask is whether one should try to gauge the value of the forgery to the
adversary, for example by asking what is the content of the message. For example, say the messages are
expected to have certain formats, and the forgery is just a random string. Should this really be viewed as a
forgery? The answer is yes. We have seen this general issue before. It would be unwise to make assumptions
about how the messages are formatted or interpreted. Good protocol design means the security is guaranteed
no matter what is the application. Accordingly we view the adversary as successful if she produces M, σ
such that the sender never authenticated M but VK(M, σ) = 1.
In some discussions of security in the literature, the adversary’s goal is viewed as being to recover the shared
secret key K. Certainly if she could do this, it would be a disaster, since she could forge anything. It is
important to understand, however, that she might be able to forge without recovering the key. Thus, we are
here making the notion of adversarial success more liberal: what counts is forgery, not key recovery. So a
secure scheme has a stronger guarantee of security.
In making forgeries we must consider various attacks, of increasing severity. The simplest setting is that the
sender has not yet sent any transmissions, and the adversary may simply attempt to concoct a pair M, σ
which passes the verification test, namely such that VK(M, σ) = 1. This is called a no-message attack.
However, the adversary also has the ability to see what is transmitted. She might try to make forgeries
based on this information. So suppose the sender sends the transmission M, σ consisting of some message
M and its legitimate (correct) tag σ. The receiver will certainly accept this. At once, a simple attack comes
to mind. The adversary can just copy this transmission. That is, she stores M, σ, and at some later time re-
transmits it. If the receiver accepted it the first time, he will do so again. This is called a replay attack. Is
this a valid forgery? In real life it probably should be so considered. Say the first message was “Transfer
$1000 from my account to the account of B.” B suddenly sees a way of enriching herself. She keeps replaying
this message and her bank balance increases.
It is important to protect against replay attacks. But for the moment we will not try to do this. We will
say that a replay is NOT a valid forgery. To be valid, a forgery must be of a message M which was not
transmitted by the sender. We will later see that we can achieve security against replay by addition of time
stamps or counters to any normal message authentication mechanism. At this point, separating the issues
results in a cleaner problem and allows greater modularity in protocol design. Namely we will cut up the
problem into logical parts and solve them one by one. Accordingly from now on don’t regard replay as a
valid attack.
So if the adversary wants to be successful, it must somehow use the valid transmission M, σ to concoct a
pair M ′, σ′ such that M M ′ but VK(M ′, σ′) = 1. If she can do this, we say she is successful. Thus, we
have a very liberal notion of adversarial success. So when we say a scheme is secure, it is secure in a very
strong sense.
We have allowed the adversary to see an example message. Of course, it may see more than one, and forgery
must still be hard. We expect that the adversary’s ability to forge will increase as it sees more examples of
legitimately authenticated data, so that as usual we expect the notion of security to be quantitative, with
the adversary’s success probability being a function of of the number q of legitimate pairs seen.
In many settings, it is possible for the adversary to influence the choice of legitimate messages being tagged.
In the worst case, we can think the adversary herself chooses these messages. This is called a chosen plaintext
attack. At first glance a chosen plaintext attack may seem unrealistically strong. There are two arguments
against this view. First, we will see examples where such an attack is quite realistic. Second, recall our
general principles. We want to design schemes which are secure in any usage. This requires that we make
“worst case” notions of security in which if we err, it is on the side of caution, allowing the adversary as
Cryptography: Lecture Notes 143
much power as possible. Since eventually we will be able to design schemes that meet such stringent notions
of security, we only gain by the process.
One instance of a chosen-message attack is a setting in which S is forwarding to B data that it receives
from C, and authenticating that data based on a key K shared between S and B, in the process. If C
wants to play an adversarial role, C can choose the data as it wishes, and then see the corresponding tags
as sent by S to B. Other scenarios are also possible.
In summary, we want a notion of security to capture the following. We allow an adversary to mount a chosen-
message attack on the sender, obtaining from the sender correct tags of messages of the adversary’s choice.
Then, the adversary attempts a forgery, and is declared successful if the forgery is valid (meaning accepted by
the receiver) and the message in it was never authenticated by the sender.
-cma
Experiment Expuf
MA,A
R
Let K ← K
Let (M, σ) ← ATK (·)
If KV(M, σ) = 1 and M was not a query of A to its oracle
Then return 1 else return 0
any t, q, µ let
-cma uf-cma
AdvufMA (t, q, µ) = max { AdvMA, }
A A
where the maximum is over all A running in time t, making at most q oracle queries, and such that the sum
of the lengths of all oracle queries plus the length of the message M in the output forgery is at most µ bits.
In practice, the queries correspond to tagged messages sent by the legitimate sender, and it would make
sense that getting these examples is more expensive than just computing on one’s own. That is, we would
expect q to be smaller than t. That is why q, µ are resources separate from t.
Algorithm K(M )
T Algorithm V K(M, σ)
Divide M into l bit blocks, M = x1 . . .
Divide M into l bit blocks, M = x1 . . . xn
xn For i = 1, . . . , n do yi← FK(xi)
For i = 1, . . . , n do yi ← FK(xi) σ′ ← y⊕1 · · · ⊕ yn
σ ← y⊕1 · · · ⊕ yn
If σ = σ′ then return 1 else return 0
Return σ
Now let us try to assess the security of this message authentication scheme.
Suppose the adversary wants to forge the tag of a certain given message M . A priori it is unclear this can
be done. The adversary is not in possession of the secret key K, so cannot compute FK and hence will have
a hard time computing σ. However, remember that the notion of security we have defined says that the
adversary is successful as long as it can produce a correct tag for some message, not necessarily a given one.
We now note that even without a chosen-message attack (in fact without seeing any examples of correctly
tagged data) the adversary can do this. It can choose a message M consisting of two equal blocks, say
M = xǁx where x is some l-bit string, set σ ← 0l , and output M, σ. Notice that VK (M, σ) = 1
because FK (x)⊕FK (x) = 0l = σ. So the adversary is successful. In more detail, the adversary is:
(·)
Adversary A1 TK
Let x be some l-bit string
Let M ← xǁ x
Let σ ← 0l
Return (M, σ)
uf-cma
Then AdvMA ,A 1 1
= 1. Furthermore A1 makes no oracle queries, uses t = O(l) time, and outputs an l-bit
message in its forgery, so we have shown that
-cma
Advuf (t, 0, l) = 1 .
MA1
As the code indicates, we divide M into smaller blocks: not of size l, but of size l −m. Then we prefix the i-
th message block with the value i itself, the block index, written in binary. Above i⟨ denotes
⟩ the integer i
written as a binary string of m bits. It is to this padded block that we apply FK before taking the XOR.
Note that encoding of the block index i as an m-bit string is only possible if i < 2m. This means that we
cannot authenticate a message M having more than 2m blocks. That is, the message space is confined to
strings of length at most (l —m)(2m − 1), and, for simplicity, of length a multiple of l − m bits. However
this is hardly a restriction in practice since a reasonable value of m, like m = 32, is large enough that
typical messages fall in the message space, and since l is typically at least 64, we have at least 32 bits left
for the data itself.
Anyway, the question we are really concerned with is the security. Has this improved with respect to MA 1?
Begin by noticing that the attacks we found on MA 1 no longer work. For example take the adversary A1
above. (It needs a minor modification to make sense in the new setting, namely the chosen block x should
not be of length l but of length l − m. Consider this modification made.) What is its success probability
when viewed as an adversary attackingMA 2? The question amounts to asking what is the chance that
V K(M, σ) = 1 where V is the verification algorithm of our amended scheme and M, σ is the output of A1.
The verification algorithm will compute σ′ = FK(⟨ ⟩ǁ ⊕ FK( 2⟨ ⟩ǁ x) and test whether this equals 0l, the
1 x)
value of σ output by A. This happens only when
FK (⟨1⟩ǁx) = FK (⟨2⟩ǁx) ,
and this is rather unlikely. For example if we are using a block cipher it never happens because FK is a
permutation. Even when F is not a block cipher, this event has very low probability as long as F is a
good
uf-cma
PRF; specifically, AdvMA prf
2,A1 is at most Adv F(t, 2) where t = O(l). (A reader might make sure they see
why this bound is true.) So the attack has very low success probability.
Similar arguments show that the second attack discussed above, namely that based on permuting of message
blocks, also has low success against the new scheme. Why? In the new scheme
These are unlikely to be equal for the same reasons discussed above. As an exercise, a reader might upper
bound the probability that these values are equal in terms of the value of the insecurity of F at appropriate
parameter values.
However, MA
2 is still insecure. The attacks however require a more non-trivial usage of the chosen-message
attacking ability. The adversary will query the tagging oracle at several related points and combine the
responses into the tag of a new message. We call it A2–
(·)
Adversary A2TK
Let x1, x′1 be distinct, l − m bit strings, and let x2, x′2 be distinct l − m bit strings
σ1 ← TK (x1 x2 ) ; σ2 ← TK (x1 x′2 ) ; σ3 ← TK (x′1 x2 )
σ ← σ1 ⊕σ2 ⊕σ3
Return (x′1x′2, σ)
-cma
We claim that Advuf
′ ′ = 1. Why? This requires two things. First that VK(x′ x′ , σ) = 1, and second
that MA2,A2 1 2
x1 x2 was never a query to TK ·)(in the above code. The latter is true because we insisted above that
x1 x′1 and x2 /= x′2 , which together mean that x′1 x2′ /∈ {x1 x2 , x1 x2 , x′1 x2 }. So now let us check the
first
146 Goldwasser and Bellare
Now look how A2 defined σ and do the computation; due to cancellations we get
σ = σ1⊕σ2⊕σ3
= FK (⟨1⟩ǁx′1 )⊕FK (⟨2⟩ǁx′2 ) .
This is indeed the correct tag of x′1 x′2 , meaning the value σ ′ that
V ′ ′
K (x 1 x 2 , σ) would compute, so the
latter algorithm returns 1, as claimed. In summary we have shown that
-cma
AdvufMA2(t, 3, 4(l − m)) = 1,
Our auxiliary function applies f at n + 1 points, each of these points being an l-bit string. The first point
is 0ǁ s. Namely we prefix the (l −1)-bit string s with a zero bit, which brings the total to l-bits, and then
apply f to get y0. The other n points on which f is applied are all prefixed with the bit 1. That is followed
by an encoding of the block index and then the data block itself, for a total length of 1 + m +—(l m − 1) = l
bits.
We are now ready to describe the scheme. We fix a family of functions F : { 0, 1} k× { 0, 1} l → {0, 1} L, and the
key for the message authentication scheme is simply a k-bit key K for the family F , which specifies a specific
function FK. The parties will use FK in the role of f above. There are actually two versions of the scheme.
One is deterministic and stateful, making use of a global counter; the other is stateless and randomized.
The difference is only in how s is chosen. We begin with the counter version. Here the sender maintains an
integer counter ctr, initially 0. We denote by⟨ ctr⟩ its encoding as an l− 1 bit integer. (The counter thus
ranges from 0 to 2l−1 —1. Note that when i is a block index, i⟨ ⟩ also denotes its binary encoding, but as an
m bit string, so that the notation ⟨⟩is
· a bit overloaded in that the length of the string returned depends on
the context of its argument, but hopefully this will not cause too much confusion.) The counter-based
F
XOR MAC scheme using F , denoted C-XOR = (K, T , V), works as follows–
In other words, the tag for message M = x1 . . . xn is a pair consisting of the current counter value ctr
encoded in binary, and the subtag τ , where
To verify the received tag σ = ( ⟨ ctr ⟩ , τ ) the verification algorithm recomputes the correct subtag, calling it
τ ′, as a function of the given counter value, and then checks that this subtag matches the one provided in σ.
The randomized version of the scheme, namely the randomized XOR MAC scheme using F , is denoted
R - XORF = ( K, T, V). It simply substitutes the counter with a random (l − 1)-bit value chosen anew at
each application of the tagging algorithm. In more detail, the algorithms work as follows–
In other words, the tag for message M = x1 . . . xn is a pair consisting of a random value r and the subtag τ
where
To verify the received tag σ = (r, τ ) the verification algorithm recomputes the correct subtag, calling it τ
′
, as a function of the given value r, and then checks that this subtag matches the one provided in σ.
the counter-based XOR scheme; here s is the value of a counter, and thus for legitimately tagged messages,
a value that never repeats from one message to the next. (We assume no more than 2l−1 messages are
authenticated so that the counter does not wrap around.) This does not mean that the adversary is forced
to use a counter value in the role of s in its attempted forgery M, (s, τ ). The adversary is free to try any
value of s, and in particular to re-use an already used counter value. Remember that the adversary’s goal
is to get the verification algorithm to accept the pair M, (s, τ ), subject only to the constraint that M was
not a query to the tagging oracle. Look at the code of the verification algorithm: it does not in any way
reflect knowledge of s as a counter, or try to check any counter-related property of s. In fact the verification
algorithm does not maintain a counter at all; it is stateless. So there is nothing to constrain an adversary to
use the value of the counter in its attempted forgery.
A similar situation holds with respect to the randomized version of the XOR scheme. Although the legitimate
party chooses r at random, so that legitimate tags have random values of r as the first component of their
tags, the adversary can attempt a forgery M, (r, τ ) in which r is quite non-random; the adversary gets to
choose r and can set it to whatever it wants. This freedom on the part of the adversary must be remembered
in analyzing the schemes.
To get some intuition about the security of these schemes, it is helpful to return to the attack that we used
to break the example scheme MA 2 in the previous section, and see that it fails here. We will look at the
attack in the context of the counter-based XOR scheme. Remember that the attack, specified by adversary
A2 above, requested the tags of three related messages and XORed the returned values to get the tag of the
third message, exploiting commonality between the values to get cancellations. For the same three messages
under the new scheme, let us look at the subtags returned by the tagging oracle. They are:
XOR-TagFK (⟨0⟩, x1 x2 ) = FK (0ǁ⟨0⟩)⊕FK (1ǁ⟨1⟩ǁx1 )⊕FK (1ǁ⟨2⟩ǁx2 ) XOR-
TagFK (⟨1⟩, x1 x′2 ) = FK (0ǁ⟨1⟩)⊕FK (1ǁ⟨1⟩ǁx1 )⊕FK (1ǁ⟨2⟩ǁx′2 ) XOR-TagFK
′
(⟨2⟩, x′1 x2 ) = FK (0ǁ⟨2⟩)⊕FK (1ǁ⟨1⟩ǁx1 )⊕FK (1ǁ⟨2⟩ǁx2 ) .
Summing these three values yields a mess, something that does not look like the subtag of any message,
because the values corresponding to the counter don’t cancel. So this attack does not work.
Is there another attack? It seems hard to come up with one, but that does not mean much; maybe the
attack is quite clever. This is the point where the kind of approach we have been developing, namely
provable security, can be instrumental. We will see that the XOR schemes can be proven secure under the
assumption that the family F is a PRF. This means that simple attacks like the above do not exist. And our
confidence in this stems from much more than an inability to find the attacks; it stems from our confidence
that the underlying family F is itself secure.
get when using some specific PRF (say a block cipher) in the role of F . The bounds are rather good: we
see that the chance of breaking the message authentication scheme is hardly more than that of breaking the
PRF.
Theorem 8.4 [11] Suppose F : {0, 1} k × { 0, 1} l → {0, 1} L is a PRF, and let C - XOR F = (K , T, ) be the
V message authentication scheme as described above, with block-indexing
corresponding counter-based XOR
parameter m ≤ l − 2 and message space Plaintexts(l, m). Then for any t, q, µ with q < 2l−1 we have
-cma
Advuf F (t, q, µ) ≤ Advprf (t′, q′) + 2−L ,
C-XOR F
The result for the randomized version of the scheme is similar except for accruing an extra term. This time,
there is a “collision probability” type term of q2/2l in the upper bound, indicating that we are unable to
rule out a breaking probability of this magnitude regardless of the quality of the PRF. We will see later that
this is an inherent feature of the scheme, which is subject to a sort of birthday attack.
Theorem 8.5 [11] Suppose F : {0, 1} k × { 0, 1} l → {0, 1} L is a PRF, and let R - XOR F = K( ,T , ) be
V message authentication scheme as described above, with block-indexing
the corresponding randomized XOR
parameter m ≤ l − 2 and message space Plaintexts(l, m). Then for any t, q, µ
Advuf-cma ( ′ q2
) Adv (prf ′
)+ + 2−L
R-XORF t, q, µ ≤
F t,q ,
2l
where t′ = t + O(µ) and q′ = q + 1 + µ/(l − m − 1).
We will not prove these results at this time. We will be able to do this later when we have developed some
more technology.
Theorem 8.6 Let MAC : KeysMAC ×{0, 1}d → {0, 1}s be a family of functions, and let q, t ≥ 1 be integers.
Then
-cma 1
Advuf (t, q, dq) ≤ Advprf (t′, q) + (8.1)
MAC MAC
2s
where t′ = t + O(s + d).
The constant hidden in the O-notation depends only on details of the model of computation. It is a small
constant; one should think of t′ ≈ t.
Proof: Let A by any forger attacking the message authentication code MAC . Assume the oracle in Experi-
ment Forge(MAC, A) is invoked at most q times, and the “running time” of A is at most t, these quantities
being measured as discussed in Definition 8.3. We design a distinguisher BA for MAC versus Randd→s such
that
prf -cma — 1
Adv MA (B ) ≥ Adv uf MAC, . (8.2)
C A 2 s
A
150 Goldwasser and Bellare
Moreover B will run in time t′ and make at most q queries to its oracle, with the time measured as discussed
in Definition 5.4. This implies Equation (8.1) because
, ,
-cma uf-cma
AdvufMA (t, q, dq) = max Adv MAC,A
C A
, ,
−s
≤ max Advprf
MA (BA) + 2
A C
, ,
= max AdvMAprf
(BA) + 2−s
A
, C ,
≤ max Adv prf
(B) + 2−s
B MAC
So it remains to design BA such that Equation (8.2) is true. Remember that BA is given an oracle for a
function f : {0, 1} d → {0, 1}s. It will run A, providing it an environment in which A’s oracle queries are
answered by BA. When A finally outputs its forgery, BA checks whether it is correct, and if so bets that f
must have been an instance of the family MAC rather than a random function.
By assumption the oracle in Experiment Forge(MAC, A) is invoked at most q times, and for simplicity we
assume it is exactly q. This means that the number of queries made by A to its oracle is q− 1. Here now is
the code implementing BA.
Distinguisher BAf
For i = 1, . . . , q− 1 do
When A asks its oracle some query, Mi, answer with f (Mi)
End For
A outputs (M, σ)
σ′ ← f (M )
If σ = σ′ and M /∈ { M1, . . . , Mq−1}
then return 1 else return 0
Here BA initializes A with some random sequence of coins and starts running it. When A makes its first
oracle query M1, algorithm BA pauses and computes f (M1) using its own oracle f . The value f (M1) is
returned to A and the execution of the latter continues in this way until all its oracle queries are answered.
Now A will output its forgery (M, σ). BA verifies the forgery, and if it is correct, returns 1.
h i
R 1
P B f = 1 : f ← Randd→s ≤ . (8.4)
A
2
Subtracting, we get Equation (8.2), and from the code it is evident that BA makes q oracle queries. Taking
into account our conventions about the running times referring to that of the entire experiment it is also
true that the running time of BA is t + O(d + s). So it remains to justify the two equations above.
In the first case f is an instance of MAC , so that the simulated environment that BA is providing for A is
exactly that of experiment Forge(MAC, A). Since BA returns 1 exactly when A makes a successful forgery,
we have Equation (8.3).
Cryptography: Lecture Notes 151
In the second case, A is running in an environment that is alien to it, namely one where a random
function is being used to compute MACs. We have no idea what A will do in this environment, but no
matter what, we know that the probability that σ = f (M ) is 2−s, because f is a random function, as long
as A did not query M of its oracle. Equation (8.4) follows.
Theorem 8.7 [12] Let l, m ≥ 1 and q, t ≥ 1 be integers such that qm ≤ 2(l+1)/2. Let F : KeysF × {0, 1}l →
{0, 1}l be a family of functions. Then
Advuf-cma(
) Advprf( ′ ′ 3q2m2 + 2
)+
t, q, mql ≤
F
qF t ,
(m)
2l+1
prp-cpa ′ ′
2q2m2 + 1
≤ AdvF (t , q ) +
2l
where q′ = mq and t′ = t + O(mql).
In particular, if F = DES we have an assessment of the strength of the DES CBC MAC in terms of the
strength of DES as a PRF. Unfortunately as we discussed in Section 5.6.2, DES is not too strong as a PRF.
We would be better of with stronger block ciphers.
Proposition 8.8 Let l, m, q be integers such that 1 ≤ q ≤ 2(l+1)/2 and m ≥ 2. Let F : KeysF × {0, 1}l →
{0, 1}l be a family of permutations. Then there is a forger A making q + 1 oracle queries, running for time
152 Goldwasser and Bellare
uf-cma q(q − 1)
Adv F ≥ 0.3 · .
(m),A
2
As a consequence for q ≥ 2
-cma (q − 1)(q − 2)
Advuf (t, q, qml) ≥ 0.3 · .
F
(m) 2
The time assessment here puts the cost of an oracle call at one unit.
Comparing the above to Theorem 8.7 we see that the upper bound is tight to within a factor of the square
of the number of message blocks.
We now proceed to the proof. We begin with a couple of lemmas. The first lemma considers a slight variant
of the usual birthday problem and shows that the “collision probability” is still the same as that of the usual
birthday problem.
Lemma 8.9 Let l, q be integers such that 1 ≤ q ≤ 2(l+1)/2. Fix b1, . . . , bq ∈ {0, 1}l. Then
h i
P ∃ i, j such that i /= j and R q(q − 1)
= bj ⊕rj : r1, . . . , rq {0, 1}l ≥ 0.3 · .
bi⊕ri ← 2
Proof: This is just like throwing q balls into N = 2l bins and lower bounding the collision probability, except
that things are “shifted” a bit: the bin assigned to the i-th ball ⊕is ri bi rather than ri as we would
usually imagine. But with bi fixed, if ri is uniformly distributed,⊕ so is ri bi . So the probabilities are the
same as in the standard birthday problem of Appendix A.1.
The first part of the following lemma states an obvious property of the CBC-MAC transform. The item of
real interest is the second part of the lemma, which says that in the case where the underlying function is
a permutation, the CBC-MAC transform has the property that output collisions occur if and only if input
collisions occur. This is crucial to the attack we will present later.
Lemma 8.10 Let l, m ≥ 2 be integers and f : {0, 1}l → {0, 1}l a function. Suppose α1 · · · αm and β1 · · · βm
in {0, 1}ml are such that αk = βk for k = 3, . . . , m. Then
Proof: The first part follows from the definition of f (m). For the second part let f −1 denote the inverse of
the permutation f . The CBC-MAC computation is easily unraveled using f −1. Thus the procedure
ym ← f (m)(α1 · · · αm) ; For k = m downto 3 do yk−1 ← f −1(yk)⊕αk End For ; Return f −1(y2)
returns f (α1)⊕α2, while the procedure
ym ← f (m)(β1 · · · βm) ; For k = m downto 3 do yk−1 ← f −1(yk)⊕βk End For ; Return f −1(y2)
Cryptography: Lecture Notes 153
returns f (β1) ⊕ β2. But the procedures have the same value of ym by assumption and we know that αk = βk
for k = 3,......, m, so the procedures return the same thing.
Proof of Proposition 8.8: Before presenting the forger let us discuss the idea.
The forger A has an oracle g = f (m) where f is an instance of F . The strategy of the forger is to make
q queries all of which agree in the last m− 2 blocks. The first blocks of these queries are all distinct but
fixed. The second blocks, however, are random and independent across the queries. Denoting the first block
of query n by an and the second block as rn , the forger hopes to have i j such that f (ai )⊕ri = f (aj )⊕rj .
The probability of this happening is lower bounded by Lemma 8.9, but simply knowing the event happens
with some probability is not enough; the forger needs to detect its happening. Lemma 8.10 enables us to
say that this internal collision happens iff the output MAC values for these queries are equal. (This is true
because f is a permutation.) We then observe that if the second blocks of the two colliding queries are
modified by the xor to both of some value a, the resulting queries still collide. The forger can thus forge by
modifying the second blocks in this way, obtaining the MAC of one of the modified queries using the second,
and outputting it as the MAC of the second modified query.
The forger is presented in detail below. It makes use of a subroutine Find that given a sequence σ1, . . . , σq
of values returns a pair (i, j) such that σi = σj if such a pair exists, and otherwise returns (0, 0).
Forger Ag
Let a1, . . . , aq be distinct l-bit strings
For i = 1, . . . , q do ri ←R
{0, 1}l
For i = 1, . . . , q do
xi,1 ← ai ; xi,2 ← ri
For k = 3, . . . , m do xi,k ← 0l
Xi ← xi,1 . . . xi,m
σi ← g(Xi )
End For
(i, j) ← Find (σ1, . . . , σq)
If (i, j) = (0, 0) then
abort Else
Let a be any l-bit string different from 0l
x′i,2 ← xi,2 ⊕a ; x′j,2 ← xj,2 ⊕a
Xi′ ← xi,1 x′i,2 xi,3 · · · xi,m ; Xj′ ← xj,1 xj′ ,2 xj,3 · ·
← σi′
· xj,m g(Xi′)
′ ′
Return (Xj , σi )
End If
To estimate the probability of success, suppose g = f (m) where f is an instance of F . Let (i, j) be the pair
of values returned by the Find subroutine. Assume (i, j) (0, 0). Then we know that
By assumption f is a permutation and by design xi,k = xj,k for k = 3, . . . , m. The second part of Lemma 8.10
then implies that f (ai )⊕ri = f (aj )⊕rj . Adding a to both sides we get f (ai )⊕(ri ⊕a) = f (aj )⊕(rj ⊕a).
In other words, f (ai )⊕x′i,2 = f (aj )⊕x′j,2 . The first part of Lemma 8.10 then implies that f (m) (Xi′ ) = f (m)
(Xj′ ).
Thus σi′ is a correct MAC of Xj′ . Furthermore we claim that Xj′ is new, meaning was not queried of the
g oracle. Since a1, . . . , aq are distinct, the only thing we have to worry about is that Xj′ = Xj, but this is
ruled out because a /= 0l.
We have just argued that if the Find subroutine returns (i, j) /= (0, 0) then the forger is successful, so the
success probability is the probability that (i, j) (0, 0). This happens whenever here is a collision amongst
154 Goldwasser and Bellare
the q values σ1, . . . , σq. Lemma 8.10 tells us however that there is a collision in these values if and only if
there is a collision amongst the q values f (a1)⊕ r1, . . . , f (aq)⊕ rq. The probability is over the random choices
of r1, . . . , rq. By Lemma 8.9 the probability of the latter is lower bounded by the quantity claimed in the
Proposition. We conclude the theorem by noting that, with a simple implementation of FindCol (say using
a balanced binary search tree scheme) the running time is as claimed.
For simplicity, let us assume throughout this section that strings to be authenticated have length which is a
multiple of l bits. This restriction is easy to dispense with by using simple and well-known padding methods:
for example, always append a “1” and then append the minimal number of 0’s to make the string a multiple
of l bits.
The CBC MAC does not directly give a method to authenticate messages of variable input lengths. In fact,
it is easy to “break” the CBC MAC construction if the length of strings is allowed to vary. You are asked
to do this in a problem at the end of this chapter. Try it; it is a good exercise in MACs!
One possible attempt to authenticate messages of varying lengths is to append to each string x = ·x· 1· xm
the number m, properly encoded as the final l-bit block, and then CBC MAC the resulting string m + 1
blocks. (Of course this imposes a restriction that m < 2l, not likely to be a serious concern.) We define
fa 1 · · · x m (m+1) 1 · · · x m).
) = fa
∗
(x (x
m
We show that f ∗ is not a secure MAC. Take arbitrary l-bit words b, b′ and c, where b = b′. /It is easy to
check that given
(1) tb = f ∗(b),
(2) tb' = f ∗(b′), and
(3) tb1c = f ∗ (bǁ1ǁc)
the adversary has in hand f ∗(b′ 1ǁ tǁb t⊕b' c)⊕—the authentication tag of a string she has not asked about before—
since this is precisely tb1c.
Despite the failure of the above method there are many suitable ways to obtain a PRF that is good on
variable input lengths. We mention three. In each, let F be a finite function family from and to l-bit strings.
Let x = x1 · · · xm be the message to which we will apply fa:
(1) Input-length key separation. Set f ∗(x) = f (m)(x), where a = f (m).
a am m a
fa∗1 a2 fa2
The first two methods are from [12]. The last method appears in an informational Annex of [112], and has
now been analyzed by Petrank and Rackoff [156]. It is the most attractive method of the bunch, since the
length of x is not needed until the end of the computation, facilitating on-line MAC computation.
Today the most effective paradigm for fast message authentication is based on the use of “almost universal
hash functions”. The design of these hash functions receives much attention and has resulted in some very
fast ones [32], so that universal hash based MACs are the fastest MACs around. Let us begin by describing
the tool, and then seeing how it can be used for message authentication.
Cryptography: Lecture Notes 155
Definition 8.11 Let H: Keys(H) × Dom(H) → {0, 1}L be a family of functions. Let
,
AdvuhH = max P HK i,
a1,a2 h
(a1) = (a ) : K Keys(H) ,
R
HK ←2
the maximum being over all distinct points a1, a2 ∈ Dom(H).
The smaller the value of AdvuhH, the better the quality of H as an almost universal function. We say that
H is a universal hash function if Advuh H = 2−L . (We will see later that this is the lowest possible value
of the insecurity.)
A stronger property is almost xor-universality.
Definition 8.12 Let H: Keys(H) × Dom(H) → {0, 1}L be a family of functions. Let
,
AdvxuhH = max P HK i,
a1,a2,b h
(a1 )⊕HK (a ) = b : K Keys(H) ,
R
←2
the maximum being over all distinct points a1 , a2 ∈ Dom(H) and all strings b ∈ {0, 1}L .
The smaller the value of AdvxuhH, the better the quality of H as an almost xor-universal function. We
say that H is a xor-universal hash function if Advxuh H = 2−L . (We will see later that this is the
lowest possible value of the insecurity.)
Almost xor-universality is a stronger requierement than almost universality.
Proposition 8.13 Let H: Keys(H) × Dom(H) → {0, 1}L be a family of functions. Then
AdvuhH ≤ AdvxuhH .
Proposition 8.14 The family Randl→L of all functions of l-bits to L-bits is universal and xor-
universal, meaning
Advuh Randl→L = Advxuh Randl→L = 2−L .
Proof: By Proposition 8.13 we need only show that Advxuh Randl→L = 2−L . With distinct a1 , a2 ∈ {0, 1}l ,
and b ∈ {0, 1}L fixed, we clearly
h have i
R
P h(a )⊕h(a ) = b : h ← Randl→L = 2−L
1 2
Example 8.15 Identify 0,{ 1 l} with GF(2l), the finite field of 2 l elements. We fix an irreducible, degree l
polynomial over GF(2) so as to be able to do arithmatic over the field. The hash function H we define
takes as key a pair α, β of points in {0, 1}l such that α /= 0. The domain is {0, 1}l and the range is {0,
1}L where L ≤ l. We define the function by
That is, with key α, β and input x ∈ { 0, 1}l, first compute, in the finite field, the value αx + β. View this as
an l-bit string, and output the first L bits of it.
Proposition 8.16 The family H: Keys(H) × {0, 1}l → {0, 1}L defined above, where L ≤ l and Keys(H)
is the set of all pairs (a, b) of l-bit strings such that a /= 0, is a xor-universal hash function.
Proof: We need to show that AdvH = 2−L . Accordingly fix a1 , a2 ∈ {0, 1}l such that a1 =/ a2 , and fix
b ∈ {0, 1}L . Fix any key for the function, meaning any α /= 0 and any β. Notice that y = αx + β iff
x = α−1(y − β). (The arithmatic here is over the finite field, and we are using the assumption that α 0.)
l l
This means that the map of GF(2 ) to GF(2 ) given by x ›→ αx + β is a permutation. The proposition
follows from this.
For the following it is useful to have some terminology. Fix any two points a1, a2 in the domain Dom(H) of
the family, the only restriction on them being that they are not allowed to be equal. Also fix a point b in
the range {0, 1}L of the family. With H fixed, we can associate to these three points a probability
h i
R
UHColPr H(a ,1a ,2 b) = P H K(a 1)⊕H K(a 2) = b : K ← Keys(H)
h i
R
= P h(a )⊕h(a ) = b : h ← H ,
1 2
Proposition 8.17 Let HKeys(H) ×Dom(H) → {0, 1} L be a family of functions and C a (possibly probabilis-
tic) algorithm that outputs a triple a1, a2, b such that a1, a2 are distinct points in Dom(H) and∈b{ 0, 1} L.
Then
AdvxuhH, C ≤ AdvxuhH .
Proof: Remember that to say C is probabilistic means that it has as an auxiliary input a sequence ρ of
random bits of some length r, and uses them in its computation. Depending on the value of r, the output
triple of C will change. We can denote by a1(ρ), a2(ρ), b(ρ) the triple that C outputs when its coins are ρ.
For any particular value hof ρ it is clear from Definition 8.11 that
P HK (a1 (ρ))⊕HK (a (ρ)) = b(ρ) : K i
← R
Keys(H)
2
h i
≤ max { P HK (a1 )⊕HK (a 2) = b : K ←R Keys(H) }
a ,a ,b
1 2
= AdvxuhH .
= AdvxuhH .
The first equality is by definition of AdvxuhH, C. In the second line we used the fact that the coins of C are
chosen at random from the set of all strings of length r. In the third line, we used the above observation.
How low can Advxuh H go? We claim that the lowest possible value is 2−L , the value achieved by a
xor- universal family. The following justifies this claim.
Proposition 8.18 Let HKeys(H) × Dom(H) → {0, 1}L be a family of functions. Then
Advxuh H ≥ 2−L .
Then c(K) = 2−L . Why? With K, a1 , a2 all fixed, HK (a1 ) ⊕ HK (a2 ) is some fixed value, call it b′ . The above
is then just asking what is the probability that b = b′ if we pick b at random, and this of course is
2−L .
158 Goldwasser and Bellare
Now consider the adversary C that picks b at random from 0, { 1 L}and outputs the triple a1, a2, b. (Note
this adversary is probabilistic, because of its random choice of b.) Then
h i
Advxuh H, C = P HK (a1 )⊕HK (a2 ) = b : b ← {0, 1}L ; K Keys(H)
R
R
Σ ←
=
c(K) · P [ K′ = K : K′ ← Keys(H) ]
K∈Keys(H)
Σ
= 2−L · P [ K ′ = K : K ′ ← Keys(H) ]
K∈Keys(H)
= 2−L · 1 .
Thus we have been able to present an adversary C such that Advxuh H, C = 2−L . From Proposition 8.17
it follows that Advxuh H ≥ 2−L .
Algorithm TK ,K (M )
Algorithm VK1,K2 (M, σ)
1 2
x ← HK1 (M )
x ← HK1 (M σ′ ← FK (x)
)
2
σ ← FK2 (x)
If σ = σ′ then return 1 else return 0
Return σ
Lemma 8.19 Let H: Keys(H) × Plaintexts → {0, 1}L be a family of functions, and A an adversary attacking
H,Randl→L
the message authentication scheme U HM . Then for any q, µ we have
Advuf-cmaH,Rand q(q −
2 1)
UHM ,A
l→
L
≤ · AdvuhH .
Theorem 8.20 Let H: Keys(H)×Plaintexts → {0, 1}L be a family of functions, and let F : {0, 1}k ×{0, 1}l →
{0, 1}L be a PRF. Then for any t, q, µ we have
Advuf-cma q(q − 1)
(t, q, µ) ≤ · AdvuhH + Advprf(t′, q + 1)
H,F
UHM F
2
where t′ = t + O(µ).
Let H: Keys(H) × Plaintexts → {0, 1} L be a family of hash functions, and let F : {0, 1} k × { 0, 1} l → {0, 1} L
be a PRF. We associate to them the xor-universal hash based MACs. There are two such MACs; one
stateful (using counters) and deterministic, the other stateless and randomized. The key will be a pair of
strings, K1, K2, where the first subkey is for H and the second is for F . (We call them the hashing and
masking keys respectively.) In both cases, the basic paradigm is the same. The message is first hashed to
a string x
Cryptography: Lecture Notes 159
using HK1 , and this value is then “encrypted” by XORing with FK2 (s) to yield a value τ , where s is some
point chosen by the sender. The tag contains τ , but also s so as to permit verification. The difference in the
two version is in how s is selected. In the counter version it is a counter, and in the randomized version a
random number chosen anew with each application of the tagging algorithm.
H,F
Here now is the full description of the counter-based version of the scheme, C-UHM = (K, T , V)–
Algorithm K1,K2 (M )
x ← HK1T(M ) Algorithm VK1,K2 (M, σ)
τ ← FK2 (ctr) ⊕x Parse σ as (s, τ )
σ ← (ctr, τ ) x′ ← FK2 (s) ⊕τ
ctr ← ctr + 1 x ← HK1 (M )
Return σ If x = x′ then return 1 else return 0
H,F
The randomized version R-UHM = (K, T , V) is like this–
Algorithm TK1,K2 (M )
Algorithm VK1,K2 (M, σ)
x ← HK1 (M ) Parse σ as (s, τ )
r←R
{0, 1}l x′ ← FK2 (s)⊕τ
τ ← FK2 (r) ⊕ x ← HK1 (M )
x If x = x′ then return 1 else return 0
σ ← (r, τ
) Return
σ
Lemma 8.21 Let H: Keys(H) × Plaintexts → {0, 1}L be a family of functions, and A an adversary attacking
H,Randl→L
the message authentication scheme C-UHM . Then for any q, µ with q < 2l we have
Proof of Lemma 8.21: The adversary A makes a sequence M1, . . . , Mq of queries to its K1T,K2 ( ) oracle,
·
and these are answered according to the above scheme. Pictorially:
M1 =⇒ σ1 = (s1, τ1)
M2 =⇒ σ2 = (s2, τ2)
. . .
Mq =⇒ σq = (sq, τq)
Here si = ⟨i − 1⟩ is simply the (binary representation of the) counter value, and τi = f (si )⊕h(Mi ), where
l→L
h = HK1 is the hash function instance in use, and f = RandK2 is the random function specified by the
second key. Following this chosen-message attack, A outputs a pair M, σ where σ = (s, τ ). We may assume
wlog that M /∈ {M1, . . . , Mq }. We know that A will be considered successful if
V K1,K2 (M, σ) = 1. We wish
to upper bound the probability of this event.
Let New be the event that s /∈ {s1, . . . , sq}, and Old the complement event, namely that s = si for some value
l→L
of i ∈ {1, . . . , q} . Let P [· ] denote the probability of event ·“ ” in the experiment ForgeExp(C -UHM H,Rand , A).
We consider
Claim 1: p1 ≤ AdvuhH.
Claim 2: p2 ≤ 2−L .
We will prove these claims later. Let us first check that they yield the desired result:
Advuf-cma l→
L
= P [VK ,K (M, σ) = 1]
C-UHMH,Rand ,A 1 2
= p1q + p2(1 − q)
≤ Advuh H · q + 2−L · (1 − q)
≤ Adv uh
H · q + Adv Huh· (1 − q)
≤ Adv uh
H.
The first line is simply by definition of the success probability. The second line is obtained by conditioning.
In the third line we used the claims. In the fourth line we used Proposition 8.18.
Proof of Claim 2: Since the queries of the adversary did not result in the function f being evaluted on the
point s, the value f (s) is uniformly distributed from the point of view of A. Or, remember the dynamic view
of random functions; we can imagine that f gets specified only as it is queried. Since the tagging oracle
(as invoked by A) has not applied f at s, we can imagine that the coins to determine f (s) are tossed after the
forgery is created. With that view it is clear that
p2 = P [f (s)⊕h(M ) = τ ] = 2−L .
Note that here we did not use anything about the hash function; the claim is true due only to the randomness
of f . Q
Proof of Claim 2:
Adversary C
Initialize counter ctr to 0
For i = 1, . . . , q do
A → Mi
τi ← {0, 1}L ; si ← ⟨ctr⟩ ; σi ← (s
R
i , iτ )
A ← σi ; ctr ← ctr + 1
A → M, σ
Parse σ as (s, τ )
If s /∈ { s1, . . . , sq} then FAIL
Else let i be such that s =
si
Let b ← τi ⊕τ and return M, Mi , b
Theorem 8.22 Let H: Keys(H)×Plaintexts → {0, 1}L be a family of functions, and let F : {0, 1}k ×{0, 1}l →
{0, 1}L be a PRF. Then for any t, q, µ we have
Advuf-cma H,F (t, q, µ) ≤ AdvxuhH + Advprf(t′, q + 1)
C-UHM F
′
where t = t + O(µ).
Cryptography: Lecture Notes 161
The function HMAC takes the key K and Text, and produces HMACK(Text) =
H(K ⊕ opad, H(K ⊕ ipad, Text)) .
Namely,
(1) Append zeros to the end of K to create a 64 byte string
(2) XOR (bitwise exclusive-OR) the 64 byte string computed in step (1) with ipad
(3) Append the data stream Text to the 64 byte string resulting from step (2)
(4) Apply H to the stream generated in step (3)
(5) XOR (bitwise exclusive-OR) the 64 byte string computed in step (1) with opad
(6) Append the H result from step (4) to the 64 byte string resulting from step (5)
(7) Apply H to the stream generated in step (6) and output the result
The recommended length of the key is at least l bits. A longer key does not add significantly to the security
of the function, although it may be advisable if the randomness of the key is considered weak.
HMAC optionally allows truncation of the final output say to 80 bits.
162 Goldwasser and Bellare
As a result we get a simple and efficient construction. The overall cost for authenticating a stream Text is
close to that of hashing that stream, especially as Text gets large. Furthermore, the hashing of the padded
keys can be precomputed for even improved efficiency.
Note HMAC uses the hash function H as a black box. No modifications to the code for H are required
to implement HMAC. This makes it easy to use library code for H, and also makes it easy to replace a
particular hash function, such as MD5, with another, such as SHA-1, should the need to do this arise.
The advantage of HMAC is that its security can be justified given some reasonable assumptions about the
strength of the underlying hash function.
The assumptions on the security of the hash function should not be too strong, since after all not enough
confidence has been gathered in current candidates like MD5 or SHA. (In particular, we now know that MD5
is not collision-resistant [70]. We will discuss the MD5 case later.) In fact, the weaker the assumed security
properties of the hash function, the stronger the resultant MAC construction.
We make assumptions that reflect the more standard existing usages of the hash function. The properties
we require are mainly a certain kind of weak collision-freeness and some limited “unpredictability.” What is
shown is that if the hash function function has these properties the MAC is secure; the only way the MAC
could fail is if the hash function fails.
The analysis of [18] applies to hash functions of the iterated type, a class that includes MD5 and SHA,
and consists of hash functions built by iterating applications of a compression function CF according to the
procedure of Merkle [138] and Damg˚ard [63]. (In this construction a l-bit initial variable IV is fixed,
and the output of H on text x is computed by breaking x into 512 bit blocks and hashing in stages using
CF, in a simple way that the reader can find described in many places, e.g. [115].) Roughly what [18] say
is that an attacker who can forge the HMAC function can, with the same effort (time and collected
information), break the underlying hash function in one of the following ways:
(1) The attacker finds collisions in the hash function even when the IV is random and secret, or
(2) The attacker is able to compute an output of the compression function even with an IV that is random,
secret and unknown to the attacker. (That is, the attacker is successful in forging with respect to the
application of the compression function secretly keyed and viewed as a MAC on fixed length messages.)
The feasibility of any of these attacks would contradict some of our basic assumptions about the
cryptographic strength of these hash functions. Success in the first of the above attacks means success in
finding collisions, the prevention of which is the main design goal of cryptographic hash functions, and thus
can usually be assumed hard to do. But in fact, even more is true: success in the first attack above is even
harder than finding collisions in the hash function, because collisions when the IV is secret (as is the
case here) is far more difficult than finding collisions in the plain (fixed IV) hash function. This is because the
former requires interaction with the legitimate user of the function (in order to generate pairs of
input/outputs from the function), and disallows the parallelism of traditional birthday attacks. Thus, even
if the hash function is not collision-free in the traditional sense, our schemes could be secure.
Some “randomness” of hash functions is assumed in their usage for key generation and as pseudo-random
generators. (For example the designers of SHA suggested that SHA be used for this purpose [81].) Ran-
domness of the function is also used as a design methodology towards achieving collision-resistance. The
success of the second attack above would imply that these randomness properties of the hash functions are
very poor.
It is important to realize that these results are guided by the desire to have simple to state assumptions and
a simple analysis. In reality, the construction is even stronger than the analyses indicates, in the sense that
even were the hash functions found not to meet the stated assumptions, the schemes might be secure. For
example, even the weak collision resistance property is an overkill, because in actuality, in our constructions,
the attacker must find collisions in the keyed function without seeing any outputs of this function, which is
Cryptography: Lecture Notes 163
significantly harder.
The later remark is relevant to the recently discovered collision attacks on MD5 [70]. While these attacks
could be adapted to attack the weak collision-resistance property of MD5, they do not seem to lead to a
breaking of HMAC even when used with MD5.
Theorem 8.23 There exists a secure message authentication scheme for message space {0, 1 }∗ if and only
if there exists a one-way function.
Problem 8.24 Let F : {0, 1}k × {0, 1}l → {0, 1}l be a PRF. Recall that the CBC MAC based on F is the
message authentication scheme MA whose tagging and verifying algorithms are as follows:
Let the message space be the set of all strings x whose length is a multiple of l bits. (Meaning the number
of message blocks n may vary in the above.) Show that the scheme is insecure over this message space.
Namely present an adversary A attacking the scheme using time t, making q oracle queries, these
totalling µ bits, uf-cma
and achieving Adv = 1, where t, q, µ are some small values that you will specify.
MA,A
C H A P T E R 9
Digital signatures
The notion of a digital signature may prove to be one of the most fundamental and useful inventions of
modern cryptography. A signature scheme provides a way for each user to sign messages so that the
signatures can later be verified by anyone else. More specifically, each user can create a matched pair of
private and public keys so that only he can create a signature for a message (using his private key), but
anyone can verify the signature for the message (using the signer’s public key). The verifier can convince
himself that the message contents have not been altered since the message was signed. Also, the signer can
not later repudiate having signed the message, since no one but the signer possesses his private key.
By analogy with the paper world, where one might sign a letter and seal it in an envelope, one can sign
an electronic message using one’s private key, and then seal the result by encrypting it with the recipient’s
public key. The recipient can perform the inverse operations of opening the letter and verifying the signature
using his private key and the sender’s public key, respectively. These applications of public-key technology
to electronic mail are quite widespread today already.
If the directory of public keys is accessed over the network, one needs to protect the users from being sent
fraudulent messages purporting to be public keys from the directory. An elegant solution is the use of a
certificate – a copy of a user’s public key digitally signed by the public key directory manager or other
trusted party. If user A keeps locally a copy of the public key of the directory manager, he can validate all
the signed communications from the public-key directory and avoid being tricked into using fraudulent keys.
Moreover, each user can transmit the certificate for his public key with any message he signs, thus removing
the need for a central directory and allowing one to verify signed messages with no information other than
the directory manager’s public key. Some of the protocol issues involved in such a network organization, are
discussed in the section on key distribution in these lecture notes.
164
Cryptography: Lecture Notes 165
call the signature of m. (We use notation s ∈ σ(1k, S, m) if the signing algorithm is probabilistic and
s = σ(1k, S, m) otherwise. As a shorthand when the context is clear, the secret key may be omitted
and we will write s ∈ σ(S, m) to mean meaning that s is the signature of message m.)
• Verification algorithm V is a probabilistic polynomial time algorithm which given a public key P , a
digital signature s, and a message m, returns 1 (i.e ”true”) or 0 (i.e ”false”) to indicate whether or
not the signature is valid. We require that V (P, s, m) = 1 if ∈s σ(m) and 0 otherwise. (We may omit the
public key and abbreviate V (P, s, m) as V (s, m) to indicate verifying signature s of message m
when the context is clear.)
• The final characteristic of a digital signature system is its security against a probabilistic polynomial-
time forger. We delay this definition to later.
Note that if V is probabilistic, we can relax the requirement on V to accept valid signatures and reject invalid
signatures with high probability for all messages m, all sufficiently large security parameters k, and all pairs
of keys (P, S) ∈G(1k). The probability is taken over the coins of V and S. Note also that the message to
be signed may be plain text or encrypted, because the message space of the digital signature system can be
any subset of {0, 1}∗.
• Key Generation: G(1k) picks pairs (fi, ti) from F where i ∈ I ∩ {0, 1}k.
We will consider the security of this proposal and others. We first define security for digital signatures.
166 Goldwasser and Bellare
• Key-Only Attack: In this attack the adversary knows only the public key of the signer and therefore
only has the capability of checking the validity of signatures of messages given to him.
• Known Signature Attack: The adversary knows the public key of the signer and has seen mes-
sage/signature pairs chosen and produced by the legal signer. In reality, this the minimum an adversary
can do.
• Chosen Message Attack: The adversary is allowed to ask the signer to sign a number of messages of
the adversary’s choice. The choice of these messages may depend on previously obtained signatures.
For example, one may think of a notary public who signs documents on demand.
We distinguish several levels of success for an adversary, listed below in the order of increasing success for
the adversary.
• Existential Forgery: The adversary succeeds in forging the signature of one message, not necessarily of
his choice.
• Selective Forgery: The adversary succeeds in forging the signature of some message of his choice.
• Universal Forgery: The adversary, although unable to find the secret key of the The forger, is able to
forge the signature of any message.
• Total Break : The adversary can compute the signer’s secret key.
Clearly, different levels of security may be required for different applications. Sometimes, it may suffice to
show that an adversary who is capable of a known signature attack can not succeed in selective forgery, while
for other applications (for example when the signer is a notary-public or a tax-return preparer) it may be
required that an adversary capable of a chosen signature attack can not succeed even at existential forgery
with non-negligible probability.
The security that we will aim at, in these notes are that with high probability a polynomial time adversary
would not be able to even existentially forge in the presence of a chosen message attack.
We say that a digital signature is secure if an enemy who can use the real signer as “an oracle” can not
in time polynomial in the size of the public key forge a signature for any message whose signature was not
obtained from the real signer. Formally, let B be a black box which maps messages m to valid signatures,
i.e , V (P, B(m), m) = 1 for all messages m. Let the forging algorithm F on input the public key P have
access to B, denoted as F B (P ). The forging algorithm runs in two stages: it first launches a chosen message
attack, and then outputs a “new forgery” which is defined to be any message-signature pair such that the
message was not signed before and that signature is valid. We require that for all forging algorithms F , for all
1
polynomials Q, for all sufficiently large k, P rob(V (P, s, m) = 1 : (P, S) G(1k ) ; (m, s) F B (P )) ≤ Q(k) .
R R
← ←
Cryptography: Lecture Notes 167
The probability is taken over the choice of the keys (P, S) ∈ G(1k) , the coin tosses of the forgery algorithm
F , and the coins of B.
Diffie and Hellman’s original proposal does not meet this strict definition of security; it is possible to existen-
tially forge with just the public information: Choose an s at random. Apply the public key to s to produce
m = f (s). Now s is a valid signature of m.
Many digital signature systems have been proposed. For a fairly exhaustive list we refer to the paper [101]
handed out.
We examine the security of three systems here.
Claim 9.1 RSA is universallly forgable under a chosen-message attack. (alternatively, existentially forgable
under known message attack)
Proof: If we are able to produce signatures for two messages, the signature of the the product of the two
messages is the product of the signatures. Let m1 and m2 be the two messages. Generate signatures for
these messages with the black box: σ(m1) = m1d mod n, σ(m2) = m2d mod n. Now we can produce the
signature for the product of these two messages: σ(m1m2) = (m1m2)d = m1dm2d = σ(m1)σ(m2) mod n
To produce a signature for a message m, begin by choosing a random number ∈r 2n∗. Now define m1 and
m2 as follows: m1 = mr mod n, and m2 = r−1 mod n Using the strategy above, we can find a signature for
the product of these messages, which is the original message m, as follows: m1m2 = (mr)r−1 = m.
• Public key: A triple (y, p, g), where y = g x mod p, p is prime and g is a generator for Zp∗ .
• Signing: The signature of message m is a pair (r, s) such that 0 /= r, s /= p − 1 and gm = yrrs mod p.
In order to generate a pair (r, s) which constitutes a signature, the signer begins by choosing a random
number k such that 0 k /= p − 1 and GCD(k, p − 1) = 1. Let r = gk(modp). Now we want to compute an s
168 Goldwasser and Bellare
such that g m = y r rs = g xr+ks modp. In terms of the exponents, this relationship is m = xr + ks(modp − 1).
− 1
Hence s = (m − xr)k modp − 1. The signature of m is the pair (r, s).
Clearly, If an attacker could solve the discrete logarithm problem, he could break the scheme completely by
computing the secret key x from the information in the public file. Moreover, if an attacker finds k for one
message, he can solve the discrete logarithm problem, so the pseudo random number generator employed to
generate k’s has to be of superior quality.
Claim 9.2 This scheme is existentially forgable in the presence of a known message attack.
Exercise.
Note on a key exchange protocol based on discrete log: It is interesting to note that it is possible for two
people to exchange a secret key without prior secret meeting using the DL problem which is not known to
yield a trapdoor function. This can be done by Persons A and B agree on a prime p and a generator g.
Person A chooses a secret number x and sends gx(modp) to B. Person B chooses a secret number y and
sends gy(modp) to A. Now each user can readily compute gxy(modp); let this be the shared secret key. It is
not known if computing xy is as difficult as DLP .
• Public key: n = pq
• Secret key: primes p, q
√
• Signing: s = m mod n (assume WLOG that all m are squares)
• Verification: Check that s2 = m mod n.
Claim 9.4 The system is totally breakable in the face of a chosen message attack.
Proof: We know that if we can find two distinct square roots of a message, we can factor the modulus.
Choose a value s and let m = s2. Now s is a valid signature of m. Submit m to the black box. There is a
one in two chance that it will produce the same signature s. If so, repeat this process. If not, we have both
square roots of m and can recover the factors of n.
Cryptography: Lecture Notes 169
Given the insecurity of Rabin’s scheme in the face of a chosen message attack, one might hypothesize that
there exists no secure digital signature system based on factoring. That is, a scheme wherein:
False proof: We assume (1) and show that (2) is impossible. Since the first statement is that ”breaking”
the scheme is equivalent to factoring, we know that the following reduction must be possible on input of a
composite number n.
• Produce a message m.
• Produce a valid signature s ∈ σ(P, m) using the ”breaker” algorithm. (Repeat these three steps up to
a polynomial number of times.)
• Factor n.
Conclude that the system must be insecure in the face of a chosen message attack, since we can substitute
the CMA for the ”breaker” algorithm in step 3. QED
What is wrong with this argument? First, there is only a vague definition of the public information P ;
it need not contain the number n. Second, the CMA will always produce signatures with respect to fixed
public information, whereas in the above reduction it may be necessary to use different public information
in every call to the ”breaker”.
by releasing the message x1. Merkle [139] introduced some extensions of this basic idea, involving building
a tree of authenticated values whose root is stored in the public key of the signer.
We now proceed to describe in detail some of these theoretical developments.
Definition 9.5 [f-claw] Let f0, f1 be permutation over a common domain D. We say that (x, y, z) is f-claw
if f0(x) = f1(y) = z.
Definition 9.6 [A family of claw-free permutations] A family F ={ f0,i, f1,i : Di → Di }i∈I is called a
family of claw-free trap-door permutations if:
1. There exists an algorithm G such that G(1k) outputs two pairs (f0, t0), (f1, t1) where where ti is the
trapdoor information for fi.
3. ∀ (inverting algorithm) I, there exists some negligible function νI such that for all sufficiently large k,
P rob(f0 (x) = f 1(y) = z : ((f 0, t0 ), (f1 , t1 )) ← G(1k ) ; (x, y, z) ← 0I(f1 , f ))I< ν (k)
R R
The following observation shows that the existence of a pair of trap-door permutations does not immediately
imply the existence of a claw-free permutation. For example, define a family of (“RSA”) permutations by
(gcd(x, n) = 1, and gcd(15, Φ(n)) = 1). Since the two functions commute, it is easy to create a claw by
choosing w at random and defining x = f1,n(w), y = f0,n(w), and
Open Problem 9.7 Does the existence of a family of trap-door permutations imply the existence of a
family of claw-free trap-door permutations ?
The converse of the above is clearly true: Given a claw-free permutations generator, it is easy to generate
a trap-door permutation. If {f0, f1 }is a pair of claw-free permutations over a common domain, that is,
−1
it is computationally infeasible to find a triple x, y, z such that f0 (x) = f1 (y) = z, then (f0 , f0 ) is trap-
door. (Otherwise, give the inverting algorithm I, z = f1(y); z is also distributed uniformly over D, so with
non-negligible probability, I can produce x = f0−1(z). Therefore (x, y, z) is a claw, contradiction.)
3. x ∈ QRn has exactly one square root y ∈ QRn (x is a Blum integer), but has four square root
y, −y, w, −w in general. Roots w, −w have Jacobi symbol −1, y and −y have Jacobi symbol +1.
We now define a family of pairs of functions, and prove, assuming the intractability of factoring, that it is
a family of claw-free trap-door permutations over QRn.
Define, for x ∈ QRn:
f0,n(x) = x2 mod n f1,n(x) = 4x2 mod n
It follows from the above notes that the functions f0,n, f1,n are permutations of QRn.
Claim: {f0,n, f1,n} is claw-free.
Proof: Suppose that the pair is not claw-free. Assume x, y ∈ QRn satisfy
x2 ≡ 4y2 mod n
This implies that (x − 2y)(x + 2y) ≡ 0 mod n. However, checking the Jacobi symbol of both sides we have:
y 2 −1
(J n(x)) = +1 n (2y)) = ( )( ) = −1 (J (−2y)) = ( ) = −1
(J n
n n n
That is, x is a quadratic residue, but ± 2y are not. Since x /≡ ± 2y mod n gcd(x ± 2y, n) will produce a
nontrivial factor on n.
Public Secret
x ∈ D, f0, f1 f0−1, f1−1
Claim 9.8 The above scheme is existentially secured against Chosen Message Attack.
Proof: Suppose, by way of contradiction, that the scheme is not secure. That is,∃ a forging algorithm
F CMA (P ) that can forge the signature (given the public information); F asks for the signature of b and
(∀polynomial Q and infinitely many k’s) can sign b correctly with probability > 1/Q(k). To derive the
contradiction, we design an algorithm that, given F CM A , can make claws:
(1) Select randomly x ∈ D; flip a coin and put in the public file: z = fcoin(x) ∈ D, f0, f1. (Note that f0, f1
are permutations, so z is uniform in D).
Public Secret
x ∈ D, f0, f1 f0−1, f1−1
s1 = σ(m1) = f −11(x)
m
and verify by:
1 1 1 if fm1 (s1) = x
V (s , m ) =
0 otherwise
where, for m1 = m1m1 . . . m1:
1 2
f −1(x) = f −1(. . . (f −1(f −1(x))))
k
m1 m1k m12 m11
Clearly fm is a permutation on D, and is easy to compute. To sign the next message m2, we apply the new
permutation on the previous signature:
Notes:
1. With this scheme, the length of the signature grows linearly with the number of messages signed so
far.
2. It is clearly easy to forge signatures for prefix of a message we have already seen. We therefore assume
here that we pre-process the messages to be presented in a prefix-free encoding scheme. (i.e no messages
is a prefix of another message).
Cryptography: Lecture Notes 173
Claim: The scheme is not existentially secure with respect to a Known Message Attack.
Proof: Assume ∃ F (H, P ) that ( ∀ polynomial Q and sufficiently large k), given the public information P
and the history H = ((m1, σ(m1)),......, (ml, σ(ml))), for messages m1, m2,...., ml selected by running M (1k),
can find a message mˆ /= mi , (1 ≤ i ≤ l), can produce a signature σ(mˆ ) such that
1
P rob{V (σ(mˆ ), mˆ ) = 1} >
Q(k)
where the probability is taken over all public files and coin tosses of F .
(1) Choose m1 , m2 , . . . , mi ∈ M(1k ), x ∈R D. Let z = fml (. . . (fm1 (x))). Let P = {f0 , f1 , x} be the public
file. (Notice that z is also selected uniformly in D).
(2) Generate the history H = (m1, fm1 (z)), . . . (ml, (fml (. . . (fm1 (z)))), Denote m = m1◦ m2 ◦. . . m
◦ l, the
string of all messages generated.
(3) Run the forging algorithm F (H, P ) to produce (mˆ , σ(mˆ )).
(4) With non negligible probability, σ(mˆ ) is a valid signature; that is, ”walking back” with fmˆ from σ(mˆ ),
according to the history it supplies, will get to x, and therefore must meet the path going back from
σ(mi ) Let l be the location at which the two paths meet, that is, m agrees on the first l − 1
with mˆ 0
bits, and denote w = fm−1l−1 (. . . (f −1 (z))). Assume, w.l.o.g that the l − th bit of m is 0, the l − th bit
m
of −1 −1
is 1, and let u, v be the corresponding f0 (w), f1 (w). Output (u, v, w).
mˆ
Clearly (u, v, w) is a claw. Thus, applying the public f0, f1 on the output of the forging algorithm F results
in a claw, with non-negligible probability; contradiction.
However, this scheme does not seem to be secure against a Chosen Message Attack. At least we do not know
how to prove that it is. In the next section we modify it to achieve this.
PK SK f0−1,
f1−1 g0−1,
Df , X, f0, f1 g0, g1−1
g1
Let ◦ be the concatenation function and set the history H1 = ∅. To sign mi , for i ∈ {1, · · · , B(k)}:
1. Choose Ri ∈ Dg uniformly.
174 Goldwasser and Bellare
2. Set zi = f −1 (X).
1 Hi ◦Ri
3. Set z i = g −1 (Ri ).
2 mi
4. Set signature σ(mi) = (zi , zi , Hi).
1 2
1. Let R = gm(z2).
2. Check that fH◦R (z1 ) = X.
If so, then the signature is valid and the verification function V (m, s) = 1. Otherwise, V (m, s) = 0. This
scheme takes advantage of the fact that a new random element z1i can be used in place of X for each message
so that the forger is unable to gain information by requesting signatures for a polynomial number of
messages.
It is clear that the signing and verification procedures can be performed in polynomial time as required. The
following theorem also shows that it is secure:
Theorem 9.9 The claw-free permutation signature scheme is existentially secure against CMA if claw-free
permutations exist.
Proof: (by contradiction) Suppose not. Then there is a forger FCMA(f0, f1, g0, g1, X) which consists of the
following two stages:
We show that if such an F did exist, then there would be a PTM A which would:
1 1
Input: Uniformly chosen (h0 , h1 , Dh ) claw-free such that h−0 and h−1 are not known.
Output: Either a h-claw with probability greater than 1
Q(k) where Q(k) is a polynomial in k.
PTM A is based on the fact that when F is successful it does one of the following in stage 2:
PTM A consists of two PTM’s A1 and A2 which are run one after the other. A1 attempts to find an h-claw
based on the assumption that F produces a g-claw. A2 attempts to find a h-claw based on the assumption
that F produces a f -claw. Both A1 and A2 will use h0 and h1 in their public keys. In order to sign a message
using h0 and h1, these PTM’s will compute v = hi(R) for some R∈ Dh and use R as hb−1(v). Thus, neither
A1 nor A2 will need to invert hb when answering F ’s requests. Note that since hb is a permutation, v will
be random if R is.
Description of A1:
Cryptography: Lecture Notes 175
−1 −1
1. Choose (f0 , f1 , Df ) claw-free such that we know f0 and f1 . Let the public key contain Df , X, f0 , f1 , g0 =
−1 −1
h0 , and g1 = h1 . Let the secret key contain f0 and f1 .
PK SK
Df , X, f0, f1 g0 = f0−1, f1−1
h0, g1 = h1
2. Set history H1 = ∅ and run F (f0, f1, g0, g1, X). When F asks for the signature of a message mi,
(a) Choose zi2 ∈ Dg at random.
(b) Set Ri = gm (zi ).
i 2
(c) Set zi = f −1 (X).
1 Hi ◦Ri
i
(d) Output (z , z , Hi). i
1 2
(e) Set Hi+1 = Hi ◦ Ri.
F then outputs (mˆ , sˆ) where sˆ = (zˆ1 , zˆ2 , Hˆ ).
3. Test to see that V (mˆ , sˆ) = 1. If not then A1 fails.
4. Let Rˆ = gmˆ (zˆ2 ). If Rˆ /= Ri for any i, then A1 fails since F did not produce a type 1 forgery
5. Otherwise, let j be such that Rˆ = Rj . We now have hmˆ (zˆ2 ) = hm (z j ) = Rj . From this we easily
j 2
obtain a h-claw.
Description of A2:
−1 −1
1. Choose (g0 , g1 , Dg ) claw-free such that we know g0 and g1 . Let f0 = h0 and f1 = h1 . Choose
R1 , R2 , · · · , RB(k) ∈ Dg , c ∈ {0, 1} and z ∈ Df uniformly and independently. Set X =
fR1 ◦R2 ◦···◦RB(k) ◦c (z). Let the public key contain Df , X, f0 , f1 , g0 and g1 . Let the secret key contain
−1 −1
g0 and g1 .
PK SK
Df , X, g0, g1 f0 = g0−1,
g1−1
h0, f1 = h1
2. Set history H1 = ∅ and run F (f0, f1, g0, g1, X). When F asks for signature of message mi,
(a) Set zi =
fR 1 i+1 ◦···◦R (X).
−1 B(k)
i
(b) Set z = g (Ri ).
2 mi
(c) Output (zi , zi , Hi).
1 2
(d) Set Hi+1 = Hi ◦ Ri.
F then outputs (mˆ , sˆ) where sˆ = (zˆ1 , zˆ2 , Hˆ ).
F made type 1 forgery: This means Hˆ ◦ Rˆ = Hi for some i. In this case A2 fails.
176 Goldwasser and Bellare
F made type 2 forgery: There is some first bit in Hˆ◦ Rˆ which differs from2 A ’s final historyN H .
As a result, ◦ Hˆ Rˆ◦ =◦ H b Sˆ and HN ¯
◦ ◦= H b S for∈some{ }b 0, 1 and strings H, Sˆ, S.
N
From this we obtain fb (f ˆ (zˆ1 )) = f¯b (fS (z )) which provides A2 with a h-claw.
S 1
F made type 3 forgery: Hˆ◦ Rˆ = HN◦ ◦ b S for some bit b and string S. Since the bit d chosen by A2
to follow HN if another request were1 made is random, b will
1 be different from d with probability
1/2. In this case, A2 will have h−0 (h−1 (X)) and h−1 (h−1 (X)) providing A2 with a h-claw.
HN HN
Suppose that with probability p1 F (f0, f1, g0, g1, X) provides a type 1 forgery, with probability p2 F (f0, f1, g0, g1, X)
provides a type 2 forgery, and with probability p3 F (f0, f1, g0, g1, X) provides a type 3 forgery. Since
f0, f1, g0, g1, h0, h1 are chosen uniformly over claw-free permutations, A1 will succeed with probability p1
and A2 will succeed with probability p2 + p3 . Thus, A1 or A2 will succeed with probability at least
2
max(p , + p32 ) ≥ 1
1 2 3Q(k).
p
Notes:
1. Unlike the previous scheme, the signature here need not contain all the previous messages signed by
the scheme; only the elements Ri ∈ Dg are attached to the signature.
2. The length of the signature need not be linear with the number of messages signed. It is possible
instead of linking the Ri together in a linear fashion, to build a tree structure, where R1
authenticates R2 and R3, and R2 authenticates R4 and R5 and so forth till we construct a full
binary tree of depth logarithmic in B(k) where B(k) is a bound on the total number of signatures
ever to be signed. Then, relabel the Rj ’s in the leafs of this tree as r1 , ..., rB(k) .
In the computation of the signature of the i-th message, we let z i = g −1i (r i ), and let z i = f −1 (R)
2 m 1 i r
where R is the father of ri in the tree of authenticated R’s. The signature of the ith message needs to
contain then all R′s on the path from the leaf ri to the root, which is only logarithmic in the number
of messages ever to be signed.
As we saw in Example 9.4.2, if factoring is hard, a particular family of trap-door permutations is claw
free. Let n = pq, where p and q are primes and p ≡ 3 mod 8, q ≡ 7 mod 8. for x ∈ QRn:
q√
f 01
−1
(z) = 4z = √41
10 q 4√ √ √√
f 11−1(z) = 1 z 4 z
Let i(m)−1
be the
4 integer
4 1corresponding to the string m reversed. It is easy to see that in the general case we
get: f (z) = ( z ) |m|2
m 4i(m)
Now, all we need is to compute the 2|m|th root modn once, and this can be done efficiently, by raising to a
power modΦ(n).
Cryptography: Lecture Notes 177
1. Choose a trapdoor permutation f for which we know the inverse. Choose X0, X1 ∈ Df uniformly and
independently. Let the public key contain f, f (X0), and f (X1). Let the secret key contain X0 and X1.
PK SK
f, f (X0), f (X1)X0, X1
1. Choose a trapdoor permutation f1 for which we know the inverse. Choose αj 0, αj 1∈ {0, 1}k for j ∈
{1, · · · , k} and β0j, βj 1∈ {0, 1}k for j ∈ {1, · · · , K(k)} where K(k) is a polynomial in k uniformly and
independently. Let the public key contain f1 and all α’s and β’s. Let the secret key contain f1−1. Let
history H1 = ∅.
PK SK
f1, αi ,bb1
βj f −1
for b ∈ {0, 1}, i ∈ 1, · · · , k, j ∈ 1, · ·
· , K(k)
6. Set α,fi
i+1 = H ◦ (AUTH , AUTH ).
H i fi+1
m
i
Theorem 9.10 The trapdoor permutation signature scheme is existentially secure against CMA if trapdoor
permutations exist.
178 Goldwasser and Bellare
Proof: (by contradiction) Suppose not. Then there is a forger F which can request messages of its choice
1
and then forge a message not yet requested with probability at least
Q(k) where Q(k) is a polynomial in k.
We show that if such an F did exist, we could find a PTM A′ which would:
Input: Trapdoor function h for which inverse is unknown and ω ∈ {0, 1}k.
Output: h−1(ω) with probability at least 1
'Q where Q′(k) is a polynomial in k. Probability is taken over
h’s, ω’s, coins of A′. (k)
1. A′ will attempt to use h as one of its trapdoor permutations in answering a signature request by F
. Since A′ does not know h−1, it generates an appropriate set of α’s and β’s as follows: Randomly and
uniformly choose γbj , δbj ∈ {0, 1}k for all b ∈ {0, 1} and j ∈ {1, · · · , k}. Let
b αj =b h(γ j ) and
b βj =
b
h(δ j )
for the same range of b and j. Choose n∈ { 1,· · · , B(k) }uniformly. For the first phase, A′ will act
very much like a trapdoor permutation signature scheme with one exception. When it is time for A′
to choose its one way permutation fn, it will choose h. If A′ were to leave the α’s and β’s unchanged
at this point, it would be able to sign F ’s request for mn though it does not know h−1. However A′
does change one of the α’s or β’s, as follows:
2. Randomly choose one of the α’s or β’s and set it equal to the input ω. Let the public key contain f1
(this is h if n = 1), the α’s and β’s:
3. Run F using the current scheme. Note that with probability at least 1
B(k)
, F will make at least n
message requests. Note also that when F does request a signature for message mn, A′ will be able to
sign mn with probability 1/2. This is because with probability 1/2 A′ will not have to calculate
(using h) the inverse of the α (or β) which was set to ω.
1
4. With probability Q(k) , F will successfully output a good forgery (mˆ , sˆ). In order for sˆ to be
a good forgery it must not only be verifiable, but it must diverge from the history of requests made
to A′. With probability atB(k)
least 1 the forger will choose to diverge from the history precisely at
request n. Thus, F will use h as its trapdoor permutation.
5. If this is the case, the probability is 1
2(k+K(k))
that the forger will invert the α (or β) which was set to
ω.
We have already seen that such schemes do exist. Unfortunately, none of them match the schemes of the
hash then decrypt paradigm in efficiency and simplicity. (See Section 9.5.12 for comparisons). So what can
we do?
We present here some schemes that match “hash then decrypt” ones in efficiency but are provably secure
assuming we have access to ideal hash functions. (As discussed in Section 7.4.6, this means that formally,
the hash functions are modeled as random oracles, and in implementation, the hash functions are derived
from cryptographic hash functions. This represents a practical compromise under which we can get efficiency
with reasonable security assurances. See [15] for a full discussion of this approach.)
We present and analyze two schemes. The first is the FDH scheme of [15]. The second is the PSS of [24].
Furthermore we present a scheme called PSS-R which has the feature of message recovery. This is a useful
way to effectively shorten signature sizes.
Let us now expand on all of the above. We begin by looking at current practice. Then we consider the full
domain hash scheme of [15, 24] and discuss its security. Finally we come to PSS and PSS-R, and their exact
security.
We present these schemes for RSA. The same can be done for the Rabin scheme.
The materiel of this section is taken largely from [24].
In order to make this section self-contained, we repeat some of the basics of previous parts of this chapter.
Still the viewpoint is different, being that of concrete security, so the materiel is not entirely redundant.
Definition 9.11 A digital signature scheme DS = (K, S, V) consists of three algorithms, as follows:
• The key generation algorithm K is a randomized algorithm that returns a pair (pk, sk) of keys, the
R
public key and matching secret key, respectively; we write (pk, sk) ← K
• The signing algorithm S is a (possibly randomized) algorithm that takes the secret key sk and a
message M to return a tag or signature σ; we write σ ← Ssk(M )
• The verification algorithm V is a deterministic algorithm that takes the public key pk, a message M ,
and a candidate signature σ for M to return a bit; we write d ← Vpk(M, σ).
Associated to each public key pk is a message space Plaintexts(pk) from which M is allowed to be drawn.
We require that Vpk(M, Ssk(M )) = 1 for all M ∈ Plaintexts(pk).
Let S be an entity that wants to have a digital signature capability. The first step is key generation: S
K runs to generate a pair of keys (pk, sk) for itself. The key generation algorithm is run locally by S. S will
produce signatures using sk, and others will verify these signatures using pk. The latter requires that anyone
wishing to verify S’s signatures must be in possession of this key pk which S has generated. Furthermore,
the verifier must be assured that the public key is authentic, meaning really is the key of S and not someone
else.
There are various mechanisms used to ensure that a prospective verifier is in possession of an authentic
public key of the signer. These usually go under the name of key management. Very briefly, here are a few
options. S might “hand” its public key to the verifier. More commonly S registers pk in S’s name with
180 Goldwasser and Bellare
some trusted server who acts like a public phone book, and anyone wishing to obtain S’s public key requests
it of the server by sending the server the name of S and getting back the public key. Steps must be taken
to ensure that this communication too is authenticated, meaning the verifier is really in communication
with the legitimate server, and that the registration process itself is authentic.
In fact key management is a topic in its own right, and needs an in-depth look. We will address it later. For
the moment, what is important to grasp is the separation between problems. Namely, the key management
processes are not part of the digital signature scheme itself. In constructing and analyzing the security
of digital signature schemes, we make the assumption that any prospective verifier is in possession of an
authentic copy of the public key of the signer. This assumption is made in what follows.
Once the key structure is in place, S can produce a digital signature on some document M by running
S(M ) to return a signature σ. The pair (M, σ) is then the authenticated version of the document. Upon
sk
receiving a document M ′ and tag σ′ purporting to be from S, a receiver B verifies the authenticity of the
signature by using the specified verification procedure, which depends on the message, signature, and public
key key. Namely he computes Vpk(M ′, σ′), whose value is a bit. If this value is 1, it is read as saying the
data is authentic, and so B accepts it as coming from S. Else it discards the data as unauthentic.
A viable scheme of course requires some security properties. But these are not our concern now. First we
want to pin down what constitutes a specification of a scheme, so that we know what are the kinds of objects
whose security we want to assess.
The last part of the definition says that tags that were correctly generated will pass the verification test.
This simply ensures that authentic data will be accepted by the receiver.
The signature algorithm might be randomized, meaning internally flip coins and use these coins to determine
its output. In this case, there may be many correct tags associated to a single message M . The algorithm
might also be stateful, for example making use of a counter that is maintained by the sender. In that case
the signature algorithm will access the counter as a global variable, updating it as necessary.
Unlike encryption schemes, whose encryption algorithms must be either randomized or stateful for the
scheme to be secure, a deterministic, stateless signature algorithm is not only possible, but common.
Formally we define the “experiment of running the adversary” F in an attack on digital signature scheme
DS = (K, S, V) as the following. Notice that the public key is provided as an input to F .
-cma
Experiment Expuf
DS,F
R
Let (pk, sk) ← K
Let (M, σ) ← F Ssk (·)(pk)
If V
pk(M, σ) = 1 and M was not a query of F to its oracle
Then return 1 else return 0
In practice, the queries correspond to messages signed by the legitimate sender, and it would make sense
that getting these examples is more expensive than just computing on one’s own. That is, we would expect
q to be smaller than t. That is why q, µ are resources separate from t.
The RSA trapdoor permutation is widely used as the basis for digital signature schemes. Let us see how.
Algorithm K
Pick at random two distinct primes p, q each k/2 bits long
∗
N ← pq ; e Zϕ ( ; d ← e−1 mod ϕ(N )
R
← N)
pk ← (N, e) ; sk ← (N, d)
Return pk, sk
Recall that ϕ(N ) = (p —1)(q − 1) so that having generated p, q, the above key generation algorithm can
compute ϕ(N ) and thus is able to complete the rest of the steps which depend on knowledge of this value.
The computation of d is done usingethe extended GCD algorithm. ∗ −
Recall that the map RSAN,e (x) = x mod N is a permutation on ZN with inverse RSA 1 (y) = y d mod N .
N,
We will make the well-believed assumption that RSA is one-way. d
Below we will consider various signature schemes all of which use the above key generation algorithm and
try to build in different ways on the one-wayness of RSA in order to securely sign.
can compute the inverse RSA function RSA −1 N, ; for anyone else, knowing only the public key N, d, this
task is computationally infeasible. Accordingly,d the signer signs a message by performing on it this “hard”
operation. This requires that the message be a member of ZN∗ , which, for convenience, is assumed. It
is possible to verify a signature by performing the “easy” operation of computing RSA N,e on the claimed
signature and seeing if we get back the message. More precisely, the scheme DS = K( ,S , ) has the above
key generation algorithm, and the following signing and verifying algorithms: V
Algorithm N,d(M )
S Algorithm VN,e(M, x)
x M d mod N M ′ ← xe mod N
←
Return x If M = M ′ then return 1 else return 0
The message space for this public key is Plaintexts(N, e) = ZN∗ , meaning the only allowed messages that
the signer can sign are those which are elements of the group ZN∗ . In this scheme we have denoted the
signature of M by x.
How secure is this scheme? As we said above, the intuition behind it is that the signing operation should
−1
be something only the signer can perform, since computing RSA N,e (M ) is hard without knowledge of d.
However, what one should remember is that one-wayness is under a very different model and setting than
that of security for signatures. One-wayness tells us that if we select M at random and then feed it to an
−1
adversary (who knows N, e but not d) and ask the latter to find x = RSA N,e (M ), then the adversary will
have a hard time succeeding. But the adversary in a signature scheme is not given a random message M on
which to forge a signature. Keep in mind that the goal of the adversary is to create a pair (M, x) such that
V N,e(M, x) = 1. It does not have to try to imitate the signing algorithm; it must only do something that
satisfies the verification algorithm. In particular it is allowed to choose M rather than having to sign a given
or random M . It is also allowed to obtain a valid signature on any message other than the M it
−1
eventually outputs, via the signing oracle, corresponding in this case to having anN,e oracle for RSA (·).
These features
make it easy for an adversary to forge signatures.
The simplest forgery strategy is simply to choose the signature first, and define the message as a function of
it. That is illustrated by the following forger.
Forger F SN,e(·)(N, e)
x ← ZN∗ ; M ← xe mod N
R
Return (M, x)
This forger makes no queries of its signing oracle, and simply outputs the forgery ( M, x) derived as shown. To
uf-cma
compute its success probability we note that V N,e(M, x) = 1, because xe mod N = M . So AdvDS,F = 1.
uf-cma 3
This implies Adv DS(t, 0, k) = 1, where t = O(k ) is the time to do an exponentiation modulo N , which
is the computation time of F , and µ = k because the length of M is k. The values t, q, µ here being
very
small, we are saying the scheme is totally insecure.
The message M whose signature the above forger managed to forge is random. This is enough to break the
scheme as per our definition of security, because we made a very strong definition of security. Actually for
this scheme it is possible to even forge the signature of a given message M , but this time one has to use
the signing oracle. The attack relies on the multiplicativity of the RSA function.
Forger F SN,e(·)∗(N, e) −
M1 ←
R ZN − {1, M } ; M2 ← M M1 1 mod N
x1 ← SN,e(M1) ; x2 ← N,e(M2)
x ←S x1x2 mod N
Return (M, x)
Given M the forger wants to compute a valid signature x for M . It creates M1, M2 as shown, and obtains
their signatures x1, x2. It then sets x = x1x2 mod N . Now the verification algorithm will check whether
Cryptography: Lecture Notes 183
Here we used the multiplicativity of the RSA function and the fact that xi is a valid signature of Mi for
i = 1, 2. This means that x is a valid signature of M . Since M1 is chosen to not be 1 or M , the same is true
of M2, and thus M was not an oracle query of F . So F succeeds with probability one.
These attacks indicate that there is more to signatures than one-wayness of the underlying function.
Algorithm N,d(M )
S AlgorithmV N,e(M, x)
y ← Hash(M )
y ← Hash(M )
d
x ← y mod N y′ ← xe mod N
Return x If y = y′ then return 1 else return 0
Let us see why this might help resolve the weaknesses of trapdoor signatures, and what requirements
security imposes on the hash function.
Let us return to the attacks presented on the trapdoor signature scheme above. Begin with the first forger
we presented, who simply set M to xe mod N for some random ∈ x ZN∗ . What is the success
probability of this strategy under the hash-then-invert scheme? The forger wins if xe mod N = Hash(M )
(rather than merely xe mod N = M as before). The hope is that with a “good” hash function, it is very
unlikely that xe mod N = Hash(M ).
Consider now the second attack we presented above, which relied on the multiplicativity of the RSA function.
For this attack to work under the hash-then-invert scheme, it would have to be true that
Hash(M1) · Hash(M2) ≡ Hash(M ) (mod N ) . (9.1)
Again, with a “good” hash function, we would hope that this is unlikely to be true.
The hash function is thus supposed to “destroy” the algebraic structure that makes attacks like the above
possible. How we might find one that does this is something we have not addressed.
While the hash function might prevent some attacks that worked on the trapdoor scheme, its use leads to a
new line of attack, based on collisions in the hash function. If an adversary can find two distinct messages
M1, M2 that hash to the same value, meaning Hash(M1) = Hash(M2), then it can easily forge signatures, as
follows:
Forger F SN,e(·)(N, e)
x1 ← N,e(M1)
S
Return (M2, x1)
This works because M1, M2 have the same signature. Namely because x1 is a valid signature of M1, and
because M1, M2 have the same hash value, we have
xe1 ≡ Hash(M1) ≡ Hash(M2) (mod N ) ,
184 Goldwasser and Bellare
and this means the verification procedure will accept x1 as a signature of M2. Thus, a necessary requirement
on the hash function is that it be collision-resistant, meaning it should be computationally infeasible to find
distinct values M, M ′ such that Hash(M ) = Hash(M ′).
Below we will go on to more concrete instantiations of the hash-then-invert paradigm. But before we do
that, it is important to try to assess what we have done so far. Above, we have pin-pointed some features
of the hash function that are necessary for the security of the signature scheme. Collision-resistance is one.
The other requirement is not so well formulated, but roughly we want to destroy algebraic structure in such
a way that Equation (9.1), for example, should fail with high probability. Classical design focuses on these
attacks and associated features of the hash function, and aims to implement suitable hash functions. But
if you have been understanding the approaches and viewpoints we have been endeavoring to develop in this
class and notes, you should have a more critical perspective. The key point to note is that what we need
is not really to pin-point necessary features of the hash function to prevent certain attacks, but rather to pin-
point sufficient features of the hash function, namely features sufficient to prevent all attacks, even ones that
have not yet been conceived. And we have not done this. Of course, pinning down necessary features of
the hash function is useful to gather intuition about what sufficient features might be, but it is only that,
and we must be careful to not be seduced into thinking that it is enough, that we have identified all the
concerns. Practice proves this complacence wrong again and again.
How can we hope to do better? Return to the basic philosophy of provable security. We want assurance
that the signature scheme is secure under the assumption that its underlying primitives are secure. Thus
we must try to tie the security of the signature scheme to the security of RSA as a one-way function, and
some security condition on the hash function. With this in mind, let us proceed to examine some suggested
solutions.
Recall we have already discussed collision-resistant hash functions. Let us fix a function h: {0, 1 }∗ → {0, 1} l
where l ≥128 and which is “collision-resistant” in the sense that nobody knows how to find any pair of
distinct points M, M ′ such that h(M ) = h(M ′). Currently the role tends to be played by SHA-1, so that
l = 160. Prior to that it was MD5, which has l = 128. The RSA PKCS #1 standard defines
Here ǁ denotes concatenation, and enough FF-bytes are inserted that the length of PKCS-Hash(M ) is equal
to k bits. Note the the first four bits of the hash output are zero, meaning as an integer it is certainly at
most N , and by the above thus a group element. Also note that PKCS-Hash is collision-resistant simply
because h is collision-resistant, so that it fulfills the first of our necessary conditions.
Recall that the signature scheme is exactly that of the hash-then-invert paradigm. For concreteness, let us
rewrite the signing and verifying algorithms:
Algorithm N,d(M )
y ← PKCS-Hash(M
S ) Algorithm V N,e(M, x)
x ← yd mod N y ← PKCS-Hash(M )
Return x y′ ← xe mod N
If y = y′ then return 1 else return 0
Now what about the security of this signature scheme? Our first concern is the kinds of algebraic attacks we
saw on trapdoor signatures. As discussed in Section 9.5.5, we would like that relations like Equation (9.1)
fail. This we appear to get; it is hard to imagine how PKCS-Hash(M1)· PKCS-Hash(M2) mod N could have
the specific structure required to make it look like the PKCS-hash of some message. This isn’t a proof
that the attack is impossible, of course, but at least it is not evident.
This is the point where our approach departs from the classical attack-based design one. Under the latter,
the above scheme is acceptable because known attacks fail. But looking deeper there is cause for concern.
The approach we want to take is to see how the desired security of the signature scheme relates to the
assumed or understood security of the underlying primitive, in this case the RSA function.
−1
We are assuming RSA is one-way, meaning it is computationally infeasible to compute RSA N,e(y) for a
−1
randomly chosen point y ∈ ZN∗ . On the other hand, the points on which RSA N,e is applied in the signature
scheme are those in the range S = { PKCS-Hash(M ) : M ∈ {0, 1}∗ } of the PKCS hash function. The size
of S is at most 2l since h outputs l bits and the other bits of PKCS-Hash(·) are fixed. With SHA-1
this
means |S| ≤ 2160 . This may seem like quite a big set, but within the RSA domain ZN∗ it is tiny:
|S | 1
| ≤ 2160 .
21023 = 2863
ZN ∗
|
This is the probability with which a point chosen randomly from ZN∗ lands in S. For all practical purposes,
it is zero. So RSA could very well be one-way and still be easy to invert on S, since the chance of a
random point landing in S is so tiny. So the security of the PKCS scheme cannot be guaranteed solely
under the standard one-wayness assumption on RSA. Note this is true no matter how “good” is the
underlying hash function h (in this case SHA-1) which forms the basis for PKCS-Hash. The problem is the
design of PKCS-Hash itself, in particular the padding.
The security of the PKCS signature scheme would require the assumption that RSA is hard to invert on
the set S, a miniscule fraction of its full range. (And even this would be only a necessary, but not
sufficient condition for the security of the signature scheme.)
Let us try to clarify and emphasize the view taken here. We are not saying that we know how to attack the
PKCS scheme. But we are saying that an absence of known attacks should not be deemed a good reason to
be satisfied with the scheme. We can identify “design flaws,” such as the way the scheme uses RSA, which
is not in accordance with our understanding of the security of RSA as a one-way function. And this is cause
for concern.
186 Goldwasser and Bellare
The only change with respect to the way we wrote the algorithms for the generic hash-then-invert scheme
of Section 9.5.5 is notational: we write H as a superscript to indicate that it is an oracle accessible only
via the specified oracle interface. The instruction y H(M ) is implemented by making the query (hash, M
←
) and letting y denote the answer returned, as discussed above.
We now ask ourselves whether the above signature scheme is secure under the assumption that RSA is
one-way. To consider this question we first need to extend our definitions to encompass the new model. The
Cryptography: Lecture Notes 187
key difference is the the success probability of an adversary is taken over the random choice of H in addition
to the random choices previously considered. The forger F as before has access to a signing oracle, but now
also has access to H. Furthermore, S itself has access to H. Let us first write the experiment that measures
the success of forger F and then discuss it more.
Experiment ForgeExpro(DS, F )
Let ((N, e), (N, d)) K
R
← at random
∗
Pick H: {0, 1} → (·)
(N, e)
ZN ∗
H
Let (M, x) ← FH,SN, d
H
If V N,e (M, σ) = 1 and M was not a query of F to its signing oracle
Then return 1 else return 0
The superscript of “ro” to the name of the experiment indicates it is in the random oracle model. For
concreteness we have written the experiment specific to the case of RSA based schemes such as FDH-RSA,
but it is easily generalized. We begin by picking the RSA public key (N, e) and secret key (N, d) as per the
standard RSA key generation algorithm. Next a random hash function is chosen. This choice is best thought
of dynamically as discussed above. Don’t think of H as chosen all at once, but rather think of the process
implementing the table we described, so that random choices are made only at the time the H oracle is
called. The forger is given oracle access to H. To model a chosen-message attack it is also given access to a
H
signing oracle S N, (·) to which it can give any message M and receive a signature, this being H(M )d mod N
in the case of FDH-RSA. In order to return a signature, the signing oracle itself must invoke the H oracle,
d
so that there are two ways in which the H oracle might be invoked: either directly by F or indirectly, by
H
SN, (·) when the latter is invoked by F . After querying its oracles some number of times the forger outputs
d
a message M and candidate signature x for it. We say that F is successful if the verification process would
accept M, x, but F never asked the signing oracle to sign M . (F is certainly allowed to make hash query
M , and indeed it is hard to imagine how it might hope to succeed in forgery otherwise, but it is not allowed
to make sign query M .)
-cma
We let AdvufDS , be the probability that experiment ForgeExpro( DS, ) returns 1. The notation is the
same as we have F used before; we will know whether or not we areFin the random oracle model from the
The resources t, qsig, qhash, µ are measured in a specific way as we now describe. Rather than referring to
the resources used by the adversary F itself, they measure the resources used by the entire experiment. We
first define the execution time as the time taken by the entire experiment ForgeExp roDS( , F ). This means it
includes the time to compute answers to oracle queries, to generate the keys, and even to verify the forgery.
Then t is supposed to upper bound the execution time plus the size of the code of F . The number of sign
queries made by F must be at most qsig. In counting hash queries we again look at the entire experiment
and ask that the total number of queries to H here be at most qhash. Included in the count are the direct
hash queries of F , the indirect hash queries made by the signing oracle, and even the hash query made
by the verification algorithm in the last step. (The latter means that qhash is always at least the number
of hash queries required for a verification, which for FDH-RSA is one. In fact for FDH-RSA we will have
qhash ≥ qsig + 1, something to be kept in mind when interpreting later results.) Finally µ is the sum of the
lengths of all messages in sign queries plus the length of the final output message M .
In this setting we claim that the FDH-RSA scheme is secure. The following theorem upper bounds its
insecurity solely in terms of the insecurity of RSA as a one-way function.
Theorem 9.13 [24] Let DS be the FDH-RSA scheme with security parameter k. Then for any t, qsig, µ
and any qhash ≥ 1 + qsig we have
-cma
Advuf (t, qsig, qhash, µ) ≤ qhash · Advowf (t′)
DS RSA
′ 3
where t = t + qhash · O(k ).
188 Goldwasser and Bellare
The theorem says that the only way to forge signatures in the FDH-RSA scheme is to try to invert the
RSA function on random points. There is some loss in security: it might be that the chance of breaking
the signature scheme is larger than that of inverting RSA in comparable time, by a factor of the number
of hash queries made in the forging experiment. But we can make Advowf (t′) small enough that even
owf RSA
qhash · Adv ′
RSA (t ) is small, by choosing a larger modulus size k.
One must remember the caveat: this is in a model where the hash function is random. Yet, even this tells us
something, namely that the hash-then-invert paradigm itself is sound, at least for “perfect” hash functions.
This puts us in a better position to explore concrete instantiations of the paradigm.
Let us now proceed to the proof of Theorem 9.13. The paradigm is the usual one. Let F be some forger
attacking the FDH-RSA scheme. Assume that the resource parameters associated to it are t, qsig, qhash, µ,
measured relative to the experiment ForgeExpro(DS, F ) as we discussed above. We will design an inverter
I for the RSA function such that
Advuf -cma
DS,F
owf ≥ . (9.2)
Adv RSA ,I qhash
Furthermore I will have running time bounded by the value t′ given in the theorem statement. Now the
theorem follows as usual by some arithmetic and the taking of maximums.
Remember that inverter I takes as input (N, e), describing an instance RSAN,e of the RSA function, and
−1
also a point y ∈ ZN∗ . Its job is to try to output RSA N,e(y) = yd mod N , the inverse of y under the RSA
function, where d is the decryption exponent corresponding to encryption exponent e. Of course, neither
d nor the factorization of N are available to I. The success of I is measured under a random choice of
(N, e), (N, d) as given by the standard RSA key generation algorithm, and also a random choice of y
from ZN∗ . In order to accomplish its task, I will run F as a subroutine, on input public key N, e, hoping
somehow RSA
−1
to use F ’s ability to forger signatures to find N,e(y). Before we discuss how I might hope to use the
forger to determine the inverse of point y, we need to take a closer look at what it means to run F as a
subroutine.
Recall that F has access to two oracles, and makes calls to them. At any point in its execution it might
output (hash, M ). It will then wait for a return value, which it interprets as H(M ). Once this is received, it
continues its execution. Similarly it might output (sign, M ) and then wait to receive a value it interprets as
H
SN, (M ). Having got this value, it continues. The important thing to understand is that F , as an algorithm,
d
merely communicates with oracles via an interface. It does not control what these oracles return. You
might think of an oracle query like a system call. Think of F as writing an oracle query M at some specific
prescribed place in memory. Some process is expected to put in another prescribed place a value that F will
take as the answer. F reads what is there, and goes on.
When I executes F , no oracles are actually present. F does not know that. It will at some point make an
oracle query, assuming the oracles are present, say query (hash, M ). It then waits for an answer. If I wants
to run F to completion, it is up to I to provide some answer to F as the answer to this oracle query. F
will take whatever it is given and go on executing. If I cannot provide an answer, F will not continue
running; it will just sit there, waiting. We have seen this idea of “simulation” before in several proofs: I is
creating a “virtual reality” under which F can believe itself to be in its usual environment.
The strategy of I will be to take advantage of its control over responses to oracle queries. It will choose them
in strange ways, not quite the way they were chosen in Experiment ForgeExp DS ro
( , F ). Since F is just an
algorithm, it processes whatever it receives, and eventually will halt with some output, a claimed forgery
(M, x). By clever choices of replies to oracle queries, I will ensure that F is fooled into not knowing that it
is not really in ForgeExpro( DS, F ), and furthermore x will be the desired inverse of y. Not always, though;
I has to be lucky. But it will be lucky often enough.
We begin by consider the case of a very simple forger F . It makes no sign queries and exactly one hash
query (hash, M ). It then outputs a pair (M, x) as the claimed forgery, the message M being the same in the
hash query and the forgery. (In this case we have qsig = 0 and qhash = 2, the last due to the hash query of F
and the final verification query in the experiment.) Now if F is successful then x is a valid signature of M ,
meaning xe ≡ H(M ) mod N , or, equivalently, x ≡H(M )d mod N . Somehow, F has found the inverse of
H(M ), the value returned to it as the response to oracle query M . Now remember that I’s goal had been to
Cryptography: Lecture Notes 189
compute yd mod N where y was its given input. A natural thought suggests itself: If F can invert RSA N,e
at H(M ), then I will “set” H(M ) to y, and thereby obtain the inverse of y under RSA N,e. I can set H(M )
in this way because it controls the answers to oracle queries. When F makes query (hash, M ), the inverter I
will simply return y as the response. If F then outputs a valid forgery (M, x), we have x = yd mod N , and
I can output x, its job done.
But why would F return a valid forgery when it got y as its response to hash query M ? Maybe it will
refuse this, saying it will not work on points supplied by an inverter I. But this will not happen. F is
simply an algorithm and works on whatever it is given. What is important is solely the distribution of the
DS ForgeExpro( , F ) the response to (hash, M ) is a random
response. In Experiment N element of Z∗ . But y
has exactly the same distribution, because that is how it is chosen in the experiment defining the success
of
RSA I in breaking as a one-way function. So F cannot behave any differently in this virtual reality than it
uf-cma
could in its
real
DS ,F world; its probability of returning a valid forgery is still Adv . Thus for this simple F the success
probability of the inverter in finding
yd mod
N is exactly same
the as the success probability
F of in forging
signatures. Equation (9.2) claims less, so we certainly satisfy it.
However, most forgers will not be so obliging as to make no sign queries, and just one hash query consisting
of the very message in their forgery. I must be able to handle any forger.
Inverter I will define a pair of subroutines, H -Sim (called the hash oracle simulator) and S -Sim (called the
sign oracle simulator) to play the role of the hash and sign oracles respectively. Namely, whenever F makes
a query (hash, M ) the inverter I will return H -Sim(M ) to F as the answer, and whenever F makes a query
(sign, M ) the inverter I will return S-Sim(M ) to F as the answer. (The S-Sim routine will additionally
invoke H -Sim.) As it executes, I will build up various tables (arrays) that “define” H. For j = 1, , qhash,
the j-th string on which H is called in the experiment (either directly due to a hash query by F , indirectly
due to a sign query by F , or due to the final verification query) will be recorded as Msg[j]; the
response returned by the hash oracle simulator to Msg[j] is stored as Y [j]; and if Msg[j] is a sign
query then the response returned to F as the “signature” is X[j]. Now the question is how I defines all
these values.
Suppose the j-th hash query in the experiment arises indirectly, as a result of a sign query (sign, Msg[j]) by
F . In Experiment ForgeExproDS ( , F ) the forger will be returned H(Msg[j])d mod N . If I wants to
keep F running it must return something plausible. What could I do? It could attempt to directly mimic
the signing process, setting Y [j] to a random value (remember Y [j] plays the role of H(Msg[j])) and
returning (Y [j])d mod N . But it won’t be able to compute the latter since it is not in possesion of the
secret signing
exponent d. The trick, instead, is that I first picks a value X[j] at random in ZN∗ and sets Y [j] = (X[j])e mod
N . Now it can return X[j] as the answer to the sign query, and this answer is accurate in the sense that
the verification relation (which F might check) holds: we have Y [j] ≡ (X[j])e mod N .
This leaves a couple of loose ends. One is that we assumed above that I has the liberty of defining Y
[j] at the point the sign query was made. But perhaps Msg[j] = Msg[l] for some l < j due to there
having been a hash query involving this same message in the past. Then the hash value Y [j] is already
defined, as Y [l], and cannot be changed. This can be addressed quite simply however: for any hash query
Msg[l], the hash simulator can follow the above strategy of setting the reply Y [l] = (X[l])e mod N at the
time the hash query is made, meaning it prepares itself ahead of time for the possibility that Msg[l] is
later a sign query. Maybe it will not be, but nothing is lost.
Well, almost. Something is lost, actually. A reader who has managed to stay awake so far may notice that
we have solved two problems: how to use F to find yd mod N where y is the input to I, and how to simulate
answers to sign and hash queries of F , but that these processes are in conflict. The way we got yd mod N
was by returning y as the answer to query (hash, M ) where M is the message in the forgery. However, we
do not know beforehand which message in a hash query will be the one in the forgery. So it is difficult to
know how to answer a hash query Msg[j]; do we return y, or do we return (X[j])e mod N for some X[j]? If
we do the first, we will not be able to answer a sign query with message Msg[j]; if we do the second,
and if Msg[j] equals the message in the forgery, we will not find the inverse of y. The answer is to
take a guess as to which to do. There is some chance that this guess is right, and I succeeds in that case.
Specifically, notice that Msg[qhash] = M is the message in the forgery by definition since Msg[qhash] is the
message in the final verification query. The message M might occur more than once in the list, but it occurs
190 Goldwasser and Bellare
at least once. Now I will choose a random i in the range 1 ≤ i ≤ qhash and respond by y to hash query
(hash, Msg[i]). To all other queries j it will respond by first picking X[j] at random in ZN∗ and setting
H(Msg[j]) = (X[j])e mod N . The forged message M will equal Msg[i] with probability at least 1/qhash and
this will imply Equation (9.2). Below we summarize these ideas as a proof of Theorem 9.13.
It is tempting from the above description to suggest that we always choose i = qhash, since Msg[qhash] = M
by definition. Why won’t that work? Because M might also have been equal to Msg[j] for some j <
qhash , and if we had set i = qhash then at the time we want to return y as the answer to M we find we have
already defined H(M ) as something else and it is too late to change our minds.
Proof of Theorem 9.13: Let F be some forger attacking the FDH-RSA scheme, with resource
parameters t, qsig, qhash, µ, measured relative to the experiment ForgeExp
DS
ro
( , F ) as we discussed above. We
will design an inverter RSAI for the function such that Equation (9.2) is true and the running time of I
is bounded by the value t′ given in the theorem statement. The theorem follows.
We first decribe I in terms of two subroutines: a hash oracle simulator H -Sim( )· and a sign oracle simulator
S -Sim( · ). It maintains three tables, Msg, X and Y , each an array with index in the range from 1 to qhash.
It picks a random index i. All these are global variables which will be used also be the subroutines. The
intended meaning of the array entries is the following, for j = 1, . . . , qhash–
Inverter I(N, e, y)
Initialize arrays Msg[1 . . . qhash], X[1 . . . qhash], Y [1 . . . qhash] to empty
j ← 0 ; i {1, . . . , hash}
R
← q
Run F on input N, e
If F makes oracle query (hash, M )
then h ← H -Sim(M ) ; return h to F as the answer
If F makes oracle query (sign, M )
then x ← S-Sim(M ) ; return x to F as the answer
Until F halts with output (M, x)
y′ ← H -Sim(M )
Return x
The inverter responds to oracle queries by using the appropriate subroutines. Once it has the claimed forgery,
it makes the corresponding hash query and then returns the signature x.
We now describe the hash oracle simulator. It makes reference to the global variables instantiated in in the
main code of I. It takes as argument a value v which is simply some message whose hash is requested either
directly by F or by the sign simulator below when the latter is invoked by F .
We will make use of a subroutine Find that given an array A, a value v and index m, returns 0 if v /∈
{A[1], . . . , A[m]}, and else returns the smallest index l such that v = A[l].
Subroutine H -Sim(v)
l ← Find (Msg, v, j) ; j ← j + 1 ; Msg[j] ← v
If l = 0 then
Cryptography: Lecture Notes 191
If j = i then Y [j] ← y
Else X[j] ← Z ; Y [j] ← (X[j])e mod N
R ∗
End If N
Return Y
[j]
Else
If j = i then abort
Else X[j] ← X[l] ; Y [j] ← Y [l] ; Return Y
[j] End If
End If
The manner in which the hash queries are answered enables the following sign simulator.
Subroutine S -Sim(M )
h ← H -Sim(M )
If j = i then abort
Else return X[j]
End If
Inverter I might abort execution due to the “abort” instruction in either subroutine. The first such situation
is that the hash oracle simulator is unable to return y as the response to the i-th hash query because this
query equals a previously replied to query. The second case is that F asks for the signature of the message
which is the i-th hash query, and I cannot provide that since it is hoping the i-th message is the one in the
forgery and has returned y as the hash oracle response.
Now we need to lower bound the success probability of I in inverting RSA, namely the quantity
h i
owf
AdvRSA,I = P xe ≡ y (mod N ) : ((N, e), (N, d)) K R; y Z ; x ← I(N, e, y) .
←
R
← ∗
N
There are a few observations involved in verifying the bound claimed in Equation (9.2). First that the “view”
of F at any time at which I has not aborted is the “same” as in Experiment ForgeExp ro( DS , F ). This means
that the answers being returned to F by I are distributed exactly as they would be in the real
experiment. Second, F gets no information about the value i that I chooses at random. Now remember
that the last hash simulator query made by I is the message M in the forgery, so M is certainly in the
array Msg at the end of the execution of I. Let l = Find (Msg, M, qhash) be the first index at which M occurs,
meaning Msg[l] = M but no previous message is M . The random choice of i then means that there is a 1/qhash
chance that i = l, which in turn means that Y [i] = y and the hash oracle simulator won’t abort. If x is a
correct signature of≡ M we will have xe Y [i] (mod N ) because Y [i] is H(M ) from the point of view of F . So I
is successful whenever this happens.
uses that to compute signatures. The scheme DS = (K, S, V) has the usual RSA key generation algorithm K
of Section 9.5.3. Like FDH-RSA it makes use of a public hash function H: {0, 1}∗ → ZN∗ which is modeled
as a random oracle. Additonally it has a parameter s which is the length of the random value chosen by
the signing algorithm. We write the signing and verifying algorithms as follows:
H H
Algorithm SN, (M ) Algorithm VN,e (M, σ)
R ds Parse σ as (r, x) where |r| = s
r ← {0, 1}
y ← H(r ǁM ) y ← H(r ǁ M )
x ← yd mod N If xe mod N = y
Return (r, x) Then return 1 else return 0
Obvious “range checks” are for simplicity not written explicitly in the verification code; for example in a
real implementation the latter should check that 1 ≤ x < N and gcd(x, N ) = 1.
This scheme may still be viewed as being in the “hash-then-invert” paradigm, except that the hash is
randomized via a value chosen by the signing algorithm. If you twice sign the same message, you are likely
to get different signatures. Notice that random value r must be included in the signature since otherwise
it would not be possible to verify the signature. Thus unlike the previous schemes, the signature is not a
member of ZN∗ ; it is a pair one of whose components is an s-bit string and the other is a member of
ZN ∗ .
The length of the signature is s + k bits, somewhat longer than signatures for deterministic hash-then-invert
signature schemes. It will usually suffice to set l to, say, 160, and given that k could be 1024, the length
increase may be tolerable.
The success probability of a forger F attackingDS
is measured in the random oracle model, via experiment
ForgeExpro( DS
, F ). Namely the experiment is the same experiment as in the FDH-RSA case; only the
scheme DS
we plug in is now the one above. Accordingly we have the insecurity function associated to the
scheme. Now we can summarize the security property of the PSS0 scheme.
Theorem 9.14 [24] Let DS be the PSS0 scheme with security parameters k and s. Then for any t, qsig, µ
and any qhash ≥ 1 + qsig we have
-cma
Advuf (t, q ,q
, µ) ≤ Advowf (qhash − 1) · qsig
DS sig hash RSA
(t′) +
2s
′
where t = t + qhash · O(k3).
Say qhash = 260 and qsig = 240. With l = 160 the additive term above is about 2 −60, which is very small. So
for all practical purposes the additive term can be neglected and the security of the PSS0 signature scheme
is tightly related to that of RSA.
We proceed to the proof of Theorem 9.14. Given a foger F attacking DS in the random oracle model, with
resources t, qsig, qhash, µ, we construct an inverter I for RSA such that
(qhash − 1) · qsig
Advowf ≥ Advuf-cma −. (9.3)
RSA, DS,F
I 2
Furthermore I will have running time bounded by the value t′ given in the theorem statement. Now the
theorem follows as usual by some arithmetic and the taking of maximums.
The design of I follows the same framework used in the proof of Theorem 9.13. Namely I, on input N, e, y,
will execute F on input N, e, and answer F ’s oracle queries so that F can complete its execution. From the
forgery, I will somehow find yd mod N . I will respond to hash oracle queries of F via a subroutine H -Sim
called the hash oracle simulator, and will respond to sign queries of F via a subroutineS -Sim called the
sign oracle simulator. A large part of the design is the design of these subroutines. To get some intuition it
is helpful to step back to the proof of Theorem 9.13.
We see that in that proof, the multiplicative factor of qhash in Equation (9.2) came from I’s guessing at
random a value i ∈ {1, . . . , qhash}, and hoping that i = Find (Msg, M, qhash) where M is the message in the
Cryptography: Lecture Notes 193
forgery. That is, it must guess the time at which the message in the forgery is first queried of the hash oracle.
The best we can say about the chance of getting this guess right is that it is at least 1/qhash. However if
we now want I’s probability of success to be as in Equation (9.3), we cannot afford to guess the time at
which the forgery message is queried of the hash oracle. Yet, we certainly don’t know this time in advance.
Somehow, I has to be able to take advantage of the forgery to return yd mod N nonetheless.
A simple idea that comes to mind is to return y as the answer to all hash queries. Then certainly a
forgery on a queried message yields the desired value yd mod N . Consider this strategy for FDH. In that case,
two problems arise. First, these answers would then not be random and indpendent, as required for answers
to hash queries. Second, if a message in a hash query is later a sign query, I would have no way to answer
the sign query. (Remember that I computed its reply to hash query Msg[j]/ for j = i as (X[j])e mod N
exactly in order to be able to later return X[j] if Msg[j] showed up as a sign query. But there is a
conflict here: I can either do this, or return y, but not both. It has to choose, and in FDH case it chooses
at random.)
The first problem is actually easily settled by a small algebraic trick, exploiting what is called the self-
reducibility of RSA. When I wants to return y as an answer to a hash oracle query Msg[j], it picks a
random
X[j] in ZN∗ and returns Y [j] = y ·(X[j])e mod N . The value X[j] is chosen randomly and independently each
time. Now the fact that RSAN,e is a permutation means that all the different Y [j] values are randomly and
independently distributed. Furthermore, suppose (M, (r, x)) is a forgery for which hash oracle query
rǁM has been made and got the reponse Y [l] = y · (X[l])e mod N . Then we have (x · X[l]−1 )e ≡ y
(mod N ), and thus the inverse of y is x · X[l]−1 mod N .
The second problem however, cannot be resolved for FDH. That is exactly why PSS0 pre-pends the random
value r to the message before hashing. This effectively “separates” the two kinds of hash queries: the direct
queries of F to the hash oracle, and the indirect queries to the hash oracle arising from the sign oracle. The
direct hash oracle queries have the form rǁ M for some l-bit string r and some message M . The sign query
is just a message M . To answer it, a value r is first chosen at random. But then the value rǁ M has low
probability of having been a previous hash query. So at the time any new direct hash query is made, I
can assume it will never be an indirect hash query, and thus reply via the above trick.
Here now is the full proof.
Proof of Theorem 9.13: Let F be some forger attacking the PSS0 scheme, with resource parameters
t, qsig, qhash, µ, measured relative to the experiment ForgeExp ro( DS
, F ) as we discussed above. We will design
an inverter I for the RSA function such that Equation (9.3) is true and the running time of I is bounded
by the value t′ given in the theorem statement. The theorem follows.
We first decribe I in terms of two subroutines: a hash oracle simulator H -Sim( )· and a sign oracle simulator
S -Sim( · ). It maintains four tables, R, V , X and Y , each an array with index in the range from 1 to qhash.
All these are global variables which will be used also be the subroutines. The intended meaning of the array
entries is the following, for j = 1, . . . , qhash–
V [j] – The j-th hash query in the experiment, having the form R[j] ǁ Msg[j]
R[j] – The first l-bits of V [j]
Y [j] – The value playing the role of H(V [j]), chosen either by the hash simulator or
the sign simulator
X[j] – If V [j] is a direct hash oracle query of F this satisfies Y [j]· X[j]−e≡ y (mod N ).
If V [j] is an indirect hash oracle query this satisfies X[j] ≡ e Y [j] (mod N ),
meaning it is a signature of Msg[j].
Note that we don’t actually need to store the array Msg; it is only referred to above in the explanation of
terms.
We will make use of a subroutine Find that given an array A, a value v and index m, returns 0 if v /∈
{A[1], . . . , A[m]}, and else returns the smallest index l such that v = A[l].
194 Goldwasser and Bellare
Inverter I(N, e, y)
Initialize arrays R[1 . . . qhash], V [1 . . . qhash], X[1 . . . qhash], Y [1 . . . qhash], to empty
j ←0
Run F on input N, e
If F makes oracle query (hash, v)
then h ← H -Sim(v) ; return h to F as the answer
If F makes oracle query (sign, M )
then σ ← S-Sim(M ) ; return σ to F as the answer
Until F halts with output (M, (r, x))
y ← H -Sim(rǁM ) ; l ← Find (V, rǁM, qhash )
w ← x · X[l]−1 mod N ; Return w
We now describe the hash oracle simulator. It makes reference to the global variables instantiated in in the
main code of I. It takes as argument a value v which is assumed to be at least s bits long, meaning of the
form rǁ M for some s bit strong r. (There is no need to consider hash queries not of this form since they
are not relevant to the signature scheme.)
Subroutine H -Sim(v)
Parse v as rǁ M where| r = s
l ← Find (V,| v, j) ; j ← j + 1 ; R[j] ← r ; V [j] ← v
If l = 0 then
X[j] ← Z ; Y [j] ← y · (X[j])e mod N ; Return Y [j]
R ∗
N
Else
X[j] ← X[l] ; Y [j] ← Y [l] ; Return Y
[j] End If
Every string v queried of the hash oracle is put by this routine into a table V , so that V [j] is the j-th
hash oracle query in the execution of F . The following sign simulator does not invoke the hash simulator, but if
necessary fills in the necessary tables itself.
Subroutine S-Sim(M )
r ← {0, 1}s
R
l ← Find (R, r, j)
If l =/ 0 then abort
Else
j ← j + 1 ; R[j] ← r ; V [j] ← rǁ M ; X[j] Z ; Y [j] ← (X[j])e mod N
R
← ∗
N
Return X[j]
End If
Now we need to lower bound the success probability of I in inverting RSA, namely the quantity
h i
owf
AdvRSA,I = P x e
≡ y (mod N ) : ((N, e), (N, d)) K ; y Z ; x ← I(N, e, y) .
R
←
R
← ∗
N
Inverter I might abort execution due to the “abort” instruction in the sign oracle simulator. This happens
if the random value r chosen in the sign oracle simulator is already present in the set {R[1], . . . , R[j]}.
This set has size at most qhash − 1 at the time of an sign query, so the probability that r falls in it is at
most (qhash − 1)/2s. The sign oracle simulator is invoked at most qsig times, so the probability of abortion at
some time in the execution of I is at most (qhash − 1)qsig/2s.
The “view” of F at any time at which I has not aborted is the “same” as the view of F in Experiment
ForgeExpro(DS, F ). This means that the answers being returned to F by I are distributed exactly as they
Cryptography: Lecture Notes 195
M r
zz s
z
zz s
z ss
ss
zzzsss
)
h g1(w)
g1 v
⊕ (
v v
0 w r∗ g2(w)
g2 ˆ
Figure 9.1: PSS: Components of image y = 0ǁwǁr∗ ǁg2 (w) are darkened. The signature of M is y d mod N .
would be in the real experiment. Now remember that the last hash simulator query made by I is rǁM where
M is the message in the forgery, so rǁM is certainly in the array V at the end of the execution of I. So
l = Find (V, rǁM, qhash ) 0. We know that rǁM was not put in V by the sign simulator, because F is not
allowed to have made sign query M . This means the hash oracle simulator has been invoked on rǁM . This
means that Y [l] = y · (X[l])e mod N because that is the way the hash oracle simulator chooses its
replies. The correctness of the forgery means that xe ≡ H(rǁM ) (mod N ), and the role of the H
value here is played by Y [l], so we get xe ≡ Y [l] ≡ y · X[l] (mod N ). Solving this gives (x · X[l]−1 )e
mod N = y, and thus the inverter is correct in returning x · X[l]−1 mod N .
Algorithm SignPSSg,h (M )
N, Algorithm VerifyPSSN,e g,h
(M, x)
r← R
{0, 1}k0 ; wd ← h(M e
y ← x mod N
ǁr) ǁ ǁ ǁ
r∗ ← g1(w)⊕r Parse y as b w r∗ γ where
∗
y ← 0ǁ ǁwǁ r∗ g2(w) |b| = 1, |w | = k1, |r | = k0
∗
x ← yd mod N r ← r ⊕g1(w)
Return x If ( h(M ǁ r) = w and g2(w) = γ and b = 0 )
Then return 1 else return 0
Obvious “range checks” are for simplicity not written explicitly in the verification code; for example in a
real implementation the latter should check that 1 ≤ x < N and gcd(x, N ) = 1.
R
The step r ← {0, 1}k0 indicates that the signer picks at random a seed r of 0k bits. He then concatenates this
seed to the message M , effectively “randomizing” the message, and hashes this down, via the
“compressing” function, to a k1 bit string w. Then the generator g is applied to w to yield a k0 bit string
r∗ = g1(w) and
196 Goldwasser and Bellare
a k —k0 −k1 −1 bit string g2(w). The first is used to “mask” the k0-bit seed r, resulting in the masked
seed r∗. Now w ǁ r∗ is pre-pended with a 0 bit and appended with g2(w) to create the image point y which
is decrypted under the RSA function to define the signature. (The 0-bit is to guarantee that y is in
Z∗N .)
Notice that a new seed is chosen for each message. In particular, a given message has many possible
signatures, depending on the value of r chosen by the signer.
Given (M, x), the verifier first computes y = xe mod N and recovers r∗, w, r. These are used to check that
y was correctly constructed, and the verifier only accepts if all the checks succeed.
Note the efficiency of the scheme is as claimed. Signing takes one application of h, one application of g,
and one RSA decryption, while verification takes one application of h, one application of g, and one RSA
encryption.
The following theorem proves the security of the PSS based on the one-wayness of RSA. The relation
between the two securities is pretty much the same as that for PSS0 that we saw in Theorem 9.14, meaning
essentially tight, and much tighter than the one we saw
FDHfor the scheme. This time however it was achieved
without increase in signature size.
Theorem 9.15 [24] Let DS be the PSS scheme with security parameters k0 and k1. Then for any t, qsig, µ
and any qhash ≥ 1 + qsig we have
-cma
Advuf (t, qsig, qhash, µ) ≤ Advowf (t′) + [3(qhash − 1)2] · (2−k0 + 2−k1 ) ,
DS RSA
′
where t = t + qhash · k0 · O(k3).
The proof is in [24]. It extends the proof of Theorem 9.14 given above.
MESSAGE RECOVERY.
In a standard signature scheme the signer transmits the message M in the clear,
attaching to it the signature x. In a scheme which provides message recovery, only an “enhanced signature”
τ is transmitted. The goal is to save on the bandwidth for a signed message: we want the length of this
enhanced signature to be smaller than| M| +|x|. (In particular, when M is short, we would like the length
of τ to be k, the signature length.) The verifier recovers the message M from the enhanced signature and
checks authenticity at the same time.
We accomplish this by “folding” part of the message into the signature in such a way that it is “recoverable”
by the verifier. When the length n of M is small, we can in fact fold the entire message into the signature,
so that only a k bit quantity is transmitted. In the scheme below, if the security parameter is k = 1024, we
can fold up to 767 message bits into the signature.
DEFINITION. Formally, the key generation and signing algorithms are as before, but Vis replaced by Recover ,
which takes pk and x and returns Recoverpk(x) ∈0,{ 1 ∗} ∪ {REJECT }. The distinguished point REJECT is
used to indicate that the recipient rejected the signature; a return value of M ∈ {0, 1 }∗ indicates that the
verifier accepts the message M as authentic. The formulation of security is the same except for what it means
for the forger to be successful : it should provide an x such that Recoverpk(x) = M ∈ {0, 1}∗, where M was
not a previous signing query. We demand that if x is produced via x ← Ssk(M ) then Recoverpk(x) = M .
A simple variant of PSS achieves message recovery. We now describe that scheme and its security.
THE SCHEME. The scheme PSS-R[k0, k1] = (K, SignPSSR, RecPSSR) is parameterized by k0 and k1, as
before. The key generation algorithm is K, the same as before. As with PSS, the signing and verifying
algorithms depend on hash functions h: {0, 1 }∗ → {0, 1} k1 and g: { 0, 1} k1 → {0, 1} k−k1−1, and we use the
same g1 and g2 notation. For simplicity of explication, we assume that the messages to be signed have length
n = k —k0 − k1 − 1. (Suggested choices of parameters are k = 1024, k0 = k1 = 128 and n = 767.) In this
case, we produce “enhanced signatures” of only k bits from which the verifier can recover the n-bit message
Cryptography: Lecture Notes 197
zzz M r
zzz sss s s s
zzzsss
) g (w)
h 1
g1 v(
⊕
v v
0 w r∗ M∗
vg ˆ
2
g2(w) )⊕
ˆ
and simultaneously check authenticity. Signature generation and verification proceed as follows. Refer to
Figure 9.2 for a picture.
Algorithm
) SignPSSRg,h (
Algorithm RecPSSRg,h (x)
N,d
M N,e
r← R {0, 1}
k0
; w ← h(M y← mod
ǁr)
xe N
r∗ ← g Parse y as bǁwǁr∗ ǁM ∗ where
(w)⊕r
1
M∗ ← |b| = 1, |w| = k1 , |r∗ | =
g2(w)⊕M k0 r ← r∗∗⊕g1(w)
0
y ← ǁwǁr ∗ ǁM ∗ M ← M ⊕g2(w)
x ← yd mod N
If ( h(M ǁ r) = w and b = 0 )
Return x
Then return M else return REJECT
The difference in SignPSSR with respect to SignPSS is that the last part of y is not g2(w). Instead, g2(w)
is used to “mask” the message, and the masked message M ∗ is the last part of the image point y.
The above is easily adapted to handle messages of arbitrary length. A fully-specified scheme would use about
min{k, n + k0 + k1 + 16} bits.
Theorem 9.16 [24] Let DS be the PSS with recovery scheme with security parameters k0 and k1. Then
for any t, qsig, µ and any qhash ≥ 1 + qsig we have
-cma
Advuf (t, qsig, qhash, µ) ≤ Advowf (t′) + [3(qhash − 1)2] · (2−k0 + 2−k1 ) ,
DS RSA
′ 3
where t = t + qhash · k0 · O(k ).
We have already discussed the PKCS standards [173, 174] and the ISO standard [1] and seen that their
security cannot be justified based on the assumption that RSA is trapdoor one-way. Other standards, such
as [9], are similar to [173], and the same statement applies.
The schemes we discuss in the remainder of this section do not use the hash-then-decrypt paradigm.
Signature schemes whose security can be provably based on the RSA assumption include [101, 14, 145,
171, 74]. The major plus of these works is that they do not use an ideal hash function (random oracle) model
— the provable security is in the standard sense. On the other hand, the security reductions are quite loose
for each of those schemes. On the efficiency front, the efficiency of the schemes of [101, 14, 145, 171] is too
poor to seriously consider them for practice. The Dwork-Naor scheme [74], on the other hand, is
computationally quite efficient, taking two to six RSA computations, although there is some storage overhead
and the signatures are longer than a single RSA modulus. This scheme is the best current choice if one is
willing to allow some extra computation and storage, and one wants well-justified security without assuming
an ideal hash function.
Back among signature schemes which assume an ideal hash, a great many have been proposed, based on the
hardness of factoring or other assumptions. Most of these schemes are derived from identification schemes,
as was first done by [79]. Some of these methods are provable (in the ideal hash model), some not. In some
of the proven schemes exact security is analyzed; usually it is not. In no case that we know of is the security
tight. The efficiency varies. The computational requirements are often lower than a hash-then-decrypt RSA
signature, although key sizes are typically larger.
Finally we note related new work. Pointcheval and Stern [159] consider the provable security of signatures
in the random oracle model and show that a modified version of the El Gamal scheme [85], as well as the
Schnorr [178] scheme, can be proven secure. (And the scheme of [79] can be proven secure against attacks
in which there are no signature queries.) But they don’t consider exact security. An interesting question is
to consider, and possibly improve, the exact security of their reductions (making, if necessary, modifications
to the schemes).
More recently, some quite simple RSA based signature schemes have appeared that have a proof of security
based on a stronger and less standard assumption about RSA, but which do not rely on random oracles
[87, 61].
and at the same time to increase the protection against forgery by making it harder for the adversary to learn
the secret signature key. Notice that in particular, the threshold approach rules out the naive solution based
on traditional secret sharing (see Chapter 11), where the secret key is shared in a group but reconstructed by
a single player each time that a signature is to be produced. Such protocol would contradict the requirement
that no t (or less) players can ever produce a new valid signature. In threshold schemes, multiple signatures
are produced without an exposure or an explicit reconstruction of the secret key.
Threshold signatures are part of a general approach known as threshold cryptography. This approach has
received considerable attention in the literature; we refer the reader to [66] for a survey of the work in this
area. Particular examples of solutions to threshold signatures schemes can be found in [65, 177] for RSA
and in [105] for ElGamal-type of signatures.
A threshold signature scheme is called robust if not only t or less players cannot produce a valid signature,
but also cannot prevent the remaining players from computing a signature on their own. A robust scheme
basically foils possible denial of service attacks on the part of corrupted servers. The solutions mentined
above are not robust. In this chapter we will concentrate on robust schemes. We will not go into technical
details. The goal of this section is to present the reader with the relevant notions and point to the sources
in the literature.
In the following we will refer to the signing servers with the letters P1, , Pn.
Key distribution
We have looked extensively at encryption and data authentication and seen lots of ways to design schemes
for these tasks. We must now address one of the assumptions underlying these schemes. This is the
assumption that the parties have available certain kinds of keys.
This chapter examines various methods for key distribution and key management. A good deal of our effort
will be expended in understanding the most important practical problem in the area, namely session key
distribution.
Let us begin with the classic secret key exchange protocol of Diffie and Hellman.
Suppose Alice and Bob have no keys (shared or public), and want to come up with a joint key which they
would use for private key cryptography. The Diffie-Hellman (DH) secret key exchange (SKE) protocol [68]
enables them to do just this.
We fix a prime p and a generator ∈g Zp∗ . These are public, and known not only to all parties but
also to the adversary E.
the operations being in the group Zp∗ . Let’s call this common quantity K. The crucial fact is that
both parties can compute it! Namely A computes Y x, which is K, and B computes X y , which is also K, and
now they have a shared key.
200
Cryptography: Lecture Notes 201
The DH Problem: Given gx and gy for x, y chosen at random from Zp−1, compute gxy.
Thus the question is how hard is this problem? We saw that if the discrete logarithm problem in Zp∗ is
easy then so is the DH problem; ie. if we can compute discrete logs we can solve the DH problem. Is the
converse true? That is, if we can solve the DH problem, can we compute discrete logarithms? This
remains an open
question. To date it seems possible that there is some clever approach to solving the DH problem without
computing discrete logarithms. However, no such approach has been found. The best known algorithm for
the DH problem is to compute the discrete logarithm of either X or Y . This has lead cryptographers to
believe that the DH problem, although not known to be equivalent to the discrete logarithm one, is still a
computationally hard problem, and that as a result the DH secret key exchange is secure in the sense
that a computationally bounded adversary can’t compute the key K shared by the parties.
These days the size of the prime p is recommended to be at least 512 bits and preferably 1024. As we have
already seen, in order to make sure the discrete logarithm problem modulo p is intractable, −p 1 should
have at least one large factor. In practice we often take p = 2q + 1 for some large prime q.
The relationship between the DH problem and the discrete logarithm problem is the subject of much inves-
tigation. See for example Maurer [135].
The DH secret key exchange gives rise to a very convenient public key cryptosystem. A party A will
choose as its secret key a random ∈point x Zp−1, and let X = gx be its public key. Now if party B wants
to privately send A a message M , it would proceed as follows.
First, the parties agree on a private key cryptosystem (E, D) (cf. Chapter 6). For concreteness assume it is a
DES based cryptosystem, so that it needs a 56 bit key. Now B picks y at random from Zp−1 and computes
the DH key K = Xy = gxy. From this, he extracts a 56 bit key a for the private key cryptosystem according
to some fixed convention, for example by letting a be the first 56 bits of K. He now encrypts the plaintext
M under a using the private key cryptosystem to get the ciphertext C = Ea(M ), and transmits the pair
(Y, C) where Y = gy.
A receives (Y, C). Using her secret key x she can compute the DH key K = Y x = gxy, and thus recover a.
Now she can decrypt the ciphertext C according to the private key cryptosystem, via M D = a(C), and thus
recover the plaintext M .
Intuitively, the security would lie in the fact that the adversary is unable to compute K and hence a. This,
however, is not quite right, and brings us to the issue of the bit security of the DH key.
202 Goldwasser and Bellare
Above the first 56 bits of the key K = gxy is used as the key to a private key cryptosystem. What we know
(are willing to assume) is that given gx, gy the adversary cannot recover K. This is not enough to make the
usage of K as the key to the private key cryptosystem secure. What if the adversary were able to recover the
first 56 bits of K, but not all of K? Then certainly the above cryptosystem would be insecure. Yet, having
the first 56 bits of K may not enable one to find K, so that we have not contradicted the DH assumption.
This is an issue we have seen before in many contexts, for example with one-way functions and with encryp-
tion. It is the problem of partial information. If f is one-way it means given f (x) I can’t find x; it doesn’t
mean I can’t find some bits of x. Similarly, here, that we can’t compute K doesn’t mean we can’t compute
some bits of K.
Indeed, it turns out that computing the last bit (ie. LSB) of K = gxy given gx, gy is easy. To date there
do not seem to be other detectable losses of partial information. Nonetheless it would be unwise to just use
some subset of bits of the DH key as the key to a private key cryptosystem. Assuming that these bits are
secure is a much stronger assumption than the DH assumption.
So what could we do? In practice, we might hash the DH key K to get a symmetric key a. For example,
applying a cryptographic hash function like SHA-1 to K yields 160 bits that might have better “randomness”
properties than the DH key. Now use the first 56 bits of this if you need a DES key.
However, while the above may be a good heuristic in practice, it can’t be validated without very strong
assumptions on the randomness properties of the hash function. One possibility that can be validated is to
extract hard bits from the DH key via an analogue of Theorem 2.49. Namely, let r be a random string of
length |p and let b be the dot product of K and r. Then predicting b given gx, gy is infeasible if computing
K = gxy |given gx, gy is infeasible. The drawback of this approach is that one gets very few bits. To get 56
bits one would need to exchange several DH keys and get a few bits from each.
We saw in Chapter 2 that for certain one way functions we can present hardcore predicates, the prediction
of which can be reduced to the problem of inverting the function itself. A theorem like that for the DH key
would be nice, and would indicate how to extract bits to use for a symmetric key. Recently results of this
kind have been proved by Boneh and Venkatesan [42].
At first glance, the DH secret key exchange might appear to solve in one stroke the entire problem of getting
keys to do cryptography. If A wants to share a key with B, they can just do a DH key exchange to get one,
and then use private key cryptography.
Don’t do it. The problem is authenticity. The security of the DH key is against a passive adversary, or
eavesdropper. It is assumed that the adversary will recover the transmitted data but not try to inject data
on the line. In practice, of course, this is an untenable assumption. It is quite easy to inject messages on
networks, and hackers can mount active attacks.
What damage can this do? Here is what the adversary does. She calls up B and simply plays the role of
A. That is, she claims to be A, who is someone with whom B would like to share a key, and then
executes the DH protocol like A would. Namely she picks x at random and sends X = gx to B. B returns
Y = gy and now B and the adversary share the key K = gxy. But B thinks the key is shared with A. He
might encrypt confidential data using K, and then the adversary would recover this data.
Thus in the realistic model of an active adversary, the DH key exchange is of no direct use. The real problem
is to exchange a key in an authenticated manner. It is this that we now turn to.
However, we remark that while the DH key exchange is not a solution, by itself, to the key distribution
problem in the presence of an active adversary, it is a useful tool. We will see how to use it in conjunction
with other tools we will develop to add to session key distribution protocols nice features like “forward
secrecy.”
Cryptography: Lecture Notes 203
This model seems to have been first mentioned by Needham and Schroeder [148]. It has since been popu-
larized largely by the Kerberos system [193].
In this model there is a trusted party called the authentication server , and denoted S. Each party A in the
system has a key KA which it shares with the server. This is a private key between these two parties, not
known to any other party. When two parties A, B, sharing, respectively, keys KA and KB with S, want
to engage in a communication session, a three party protocol will be executed, involving A, B and S. The
result will be to issue a common key K to A and B. They can then use this key to encrypt or authenticate
the data they send each other.
The distributed key is supposed to be a secure session key. When the parties have completed their commu-
nication session, they will discard the key K. If later they should desire another communication session, the
three party protocol will be re-executed to get a new, fresh session key.
What kinds of security properties should this distributed session key have? We will look at this question in
depth later. It is an important issue, since, as we will see, session key distribution protocols must resist a
variety of novel attacks.
When public key cryptography can be used, the authentication server’s active role can be eliminated. In
this trust model, the assumption is that A has the public key pkB of B, and B has the public key pkA of
A. These keys are assumed authentic. That is, A is assured the key he holds is really the public key of B
and not someone else, and analogously for B.1
Now, suppose A and B want to engage in a secure communication session. The problem we want to consider
is how they can get a shared, private and authentic session key based on the public keys, via a two party
protocol.
1
How is this situation arrived at? That isn’t a problem we really want to discuss yet: it falls under the issue of key
management and will be discussed later. But, briefly, what we will have is trusted servers which provide public, certified
directories of users and their public keys. The server maintains for each user identity a public key, and provides this upon
request to any other user, with a signature of the server that serves as a certificate of authenticity. Barring this directory
service, however, the server plays no active role.
204 Goldwasser and Bellare
Questions pertaining to what exactly is the problem, and why, may arise here. We already know that we
can authenticate and encrypt data with public keys. That is, the parties already have the means to secure
communication. So why do they need a shared session key?
There are several reasons. One is that private key cryptography, at least under current technology, is
considerable more efficient than public key cryptography. The second, however, probably more important,
is that it is convenient to have session keys. They allow one to associate a key uniquely to a session. This
is an advantage for the following reasons.
Keys actually used to encrypt or authenticate data get greater exposure. They are used by applications in
ways that may not be known, or controllable, beforehand. In particular, an application might mis-use a
key, or expose it. This might (or might not) compromise the current session, but we would not like it to
compromise the long lived secret key and thus other uses and sessions. Similarly, the long lived secret key
of a user A (namely the secret key skA corresponding to her public key pkA) may be stored in protected
hardware and accessed only via a special interface, while the session key lies on a more exposed machine.
Probably the simplest model is of two parties who already share a long lived key. Each time they wish to
engage in a communication session they will run a protocol to derive a session key.
Again, the motivation is the convenience and security advantages of session keys. We stress the main one.
A host of applications might be run by the users, all wanting keys for one reason or another. We don’t want
to make assumptions about how they use the key. Some might use it in ways that are secure for their own
purposes but compromise the key globally. In order for this not to affect the global security, we assign each
run of each application a separate session key.
it is easy to come up with concrete protocols which are logically correct but blatantly insecure.
Examining the work on the session key distribution problem, one finds that the bulk of it is divorced from
basic cryptographic principles. For example one find over and over again a confusion between data
encryption and data authentication. The most prevalent problem is a lack of specification of what exactly is
the problem that one is trying to solve. There is no model of adversarial capabilities, or definition of
security.
Influential works in this area were Bird et. al. [31] and Diffie et. al. [69]. In particular the former pointed
to new classes of attacks, called “interleaving attacks,” which they used to break existing protocols, and
they suggested a protocol (2PP) defeated by none of the interleaving attacks they considered. Building
on this, Bellare and Rogaway provide a model and a definition of security for two party symmetric session
key distribution [16] and for three party session key distribution [17], just like we have for primitives like
encryption and signatures. Based on this they derive protocols whose security can be proven based on
standard cryptographic assumptions. It turns out the protocols are efficient too.
Now other well justified protocols are also emerging. For example, the SKEME protocol of Krawczyk [121]
is an elegant and multi-purpose two party session key distribution protocol directed at fulfilling the key
distribution needs of Internet security protocols. Even more recently, a proven-secure protocol for session
key distribution in smart cards was developed by Shoup and Rubin [189].
problem, and one of the ithings that makes session key distribution different from many other problems.
It is the goal of a session-key distribution protocol to provide and
i, with a session key σs,t to protect
Πs Π t
j
their session. Instances i, and must come up with this key without
j, knowledge of s, t, i,or whatever
Πs j Πt
j,
i j
viewed is that the key is secure if the adversary cannot compute it. We have by now, however, seen time
and again, in a variety of settings, that this is not the right notion of secrecy. We must also prevent partial
information from leaking. (Examples of why this is important for session keys are easy to find, analogous to
the many examples we have seen previously illustrating this issue.) Accordingly, the definitions ask that a
session key be unpredictable in the sense of a probabilistically encrypted message.
We note that insufficient protection of the session key is a flaw that is present in all session key distribution
protocols of which we are aware barring those of [16, 17]. In fact, this insecurity is often built in by a desire
to have a property that is called “key confirmation.” In order to “confirm” that it has received the session
key, one party might encrypt a fixed message with it, and its ability to do so correctly is read by the other
party as evidence that it has the right session key. But this reveals partial information about the key. It
might seem un-important, but one can find examples of usages of the session key which are rendered
insecure by this kind of key confirmation. In fact “key confirmation,” if needed at all, can be achieved in
other ways.
Authenticated Key Exchange Protocol 1, is depicted in Figure 10.1, and a more complete description of the
flows follows.
A RA )B
TKm (AǁRB ) )
Remark 10.1 Notice that both encryption and message authentication are used. As we mentioned above,
one of the commonly found fallacies in session key distribution protocols is to try to use encryption to
provide authentication. One should really use a message authentication code.
Remark 10.2 It is important that the encryption scheme ( E, ) used above be secure in the sense we
have discussed in Chapter 6. Recall in particular this means D it is probabilistic. A single plaintext has
many possible ciphertexts, depending on the probabilistic choices made by the encryption algorithms. These
probabilistic choices are made by S when the latter encrypts the session key, independently for the two
encryptions it performs. This is a crucial element in the security of the session key.
These remarks apply also to the protocols that follow, appropriately modified, of course, to reflect a change
in setting. We will not repeat the remarks.
Fix a digital signature scheme, and let S, denote, respectively, the signature and verification algorithms
V signing key skd and message to return a signature, and the latter
for this scheme. The former takes a secret
d
takes the public verification key pk , message, and candidate signature to return an indication of whether
or not the signature is valid. This scheme should be secure in the sense we have discussed in Chapter 9.
Every user I in the system has a public key pkI which is in fact a pair of public keys, pkI = (pke, pkd),
I I
one for the encryption scheme and the other for the signature scheme. These keys are known to all other
users and the adversary. However, the user keeps privately the corresponding secret keys. Namely he holds
skI = (ske,Iskd) Iand nobody else knows these keys.
Recall the model is that A has B’s public key pkB and B has A’s public key pkA. The protocol for the
parties to get a joint, shared secret key α is depicted in Figure 10.2, and a more complete explanation follows.
A RA )B
R Bpk
ǁE( e α) ǁS skd ( BǁA ǁR ABpk
ǁ R ǁE( e α))
( A B A
S skd ( A ǁR B )
A )
(3) A verifies that Vpk dB(AǁRA ǁRB ǁC, µ) = 1. If this is the case she computes the signature Ssk d (RAB ) and
sends it to B. She also decrypts C via α = Dske A(C) to recover the session key.
(4) B verifies the last signature and accepts (outputting session key α) if the last signature was valid.
Here now is a more complete description of the flows and accompanying computations:
(1) In Step 1, party A chooses a random challenge RA and sends it to B.
Cryptography: Lecture Notes 209
Flow 1. A → B: RA
Flow 2. B → S: Flow RAǁRB
3A. S → A: Flow 3B. E(K Ae α) ǁ T(K Am AǁBǁ R AǁE( K e α))
A
S → B: E(K eB α) ǁ T(K Bm AǁBǁ R BKǁE( e α))
B
Remark 10.3 This protocol has four flows. Typically, the three party key distribution protocols you will
see in the literature have five. In fact, four suffices.
gx
A )B
gyǁS d
sk B
( BǁAǁ gxyǁg )
(
S skd ( A ǁ gy)
A )
Figure 10.4: Protocol for exchange of symmetric key with forward secrecy.
The use of the DH secret key exchange protocol here is intriguing. Is that the only way to get forward
secrecy? It turns out it is. Bellare and Rogaway have noted that secret key exchange is not only sufficient
but also necessary for the forward secrecy property [22].
As we noted in Section 10.1.4, the DH key is not by itself a good key because we cannot guarantee bit
security. Accordingly, the session key in the above should actually be set to, say, H(gxy) rather than gxy
itself, for a “good” hash function H.
C H A P T E R 11
Protocols
Classical cryptography is concerned with the problem of security communication between users by providing
privacy and authenticity. The need for an underlying infrastructure for key management leads naturally into
the topic of key distribution. For many years this is all there was to cryptography.
One of the major contributions of modern cryptography has been the development of advanced protocols.
These protocols enable users to electronically solve many real world problems, play games, and accomplish
all kinds of intriguing and very general distributed tasks. Amongst these are zero-knowledge proofs, secure
distributed computing, and voting protocols. The goal of this chapter is to give a brief introduction to this
area.
(1) Alice picks two primes p, q at random and multiplies them to produce the modulus N = pq. She
encrypts the message m under this modulus in some standard way, having the property that if you
know p, q then you can decrypt, else you can’t. She sends N and the ciphertext C to Bob.
(2) Bob picks a ∈
at random and sends w = a2 mod N to Alice.
ZN ∗
(3) Alice computes the four square roots x, −x, y, −y of w, picks one at random and sends it back to Bob 211
212 Goldwasser and Bellare
(4) If Bob got back the root which is not ±a he can factor N and recover m. Else he can’t.
If we had a method by which B could prove to A that he indeed followed the protocol and choose x at
random without revealing what x is, the protocol could be modified to provably work. We will see in a later
section on zero-knowledge proofs on how such proofs can be done.
There is another form of OT called 1 out of 2 OT. Here Alice has two secrets, m0 and m1. Bob has a
selection bit c. At the end of the protocol, Bob gets bc and Alice still does not know c. See [77].
Alice and Bob want to sign the contract, but only if the other person does as well. That is, neither wants
to be left in the position of being the only one who signs. Thus, if Alice signs first, she is worried Bob will
then not sign, and vice versa. (Maybe easier to think of having two contracts, the first promising something
to Alice, the second to Bob. It is a trade. Obviously, each wants the other one to sign.) This problem was
proposed in [77].
One approach is that Alice signs the first letter of her name and sends the contract to Bob. He does likewise,
and sends it back. And so on. Assume their names have the same length. Then this makes some progress
towards a solution. Of course the problem is the person who must go last can stop. But you can make this
a negligible difference. For example, not a letter at a time, but a few millimeters of the letter at a time. No
party is ever much ahead of the other. If at some point they both stop, they both are at about the same
point.
Electronically, we are exchanging strings, which are digital signatures of the contract. Alice has signed it to
produce σA and Bob has signed it to produce σB. Now they exchange these strings a bit at a time, each
time sending one more bit.
There is a problem with this. What if one person does not send the signature, but just some garbage string?
The other will not know until the end. Even, Goldreich and Lempel [77] show how oblivious transfer can be
used to fix this.
Alice creates LA which is the signature of the contract together with the phrase “this is my signature of
the left half of the contract.” Similarly she creates RA which is the signature of the contract together with
the phrase “this is my signature of the right half of the contract.” Similarly, Bob creates LB and RB.
Also Alice picks two DES keys, KL and KR, and encrypts L, R respectively to produce CL and CR. Similarly
A A A A
for Bob, replacing As by Bs.
The contract is considered signed if you have both halves of the other person’s signature.
All the ciphertexts are sent to the other party.
Alice 1 out of two OTs (KL, KR) to Bob with the latter choosing a random selection bit, and vice versa.
A A
Say Bob gets KL and Alice gets KR.
A B
Alice and Bob send each the first bits of both DES keys. Keep repeating until all bits of all keys are sent.
In this phase, if a party catches a mistake in the bits corresponding to the key it already has, it aborts, else
it continues.
Cryptography: Lecture Notes 213
want to compute it obliviously, so that at the end of the game they both have the value v = f (xA, xB) but
neither knows anything else.
There are protocols for this task, and they are quite complex. We refer the reader to [10, 43]
Step 1: A picks a1 , a2 , ..., aK at random in ZBn∗ and then computes bi =i a2 (mod nB ) for 1 ≤ i ≤ k. B picks
w1, w2, ..., wk at random in ZnB and then computes xi = wi∗ (mod nA) for 1 ≤ i ≤ k.
Step 4: While 1 ≤ j ≤ k A sends B the jth significant bit of yi and zi for 1 ≤ i ≤ k. B sends A the jth
significant bit of ci and di for 1 ≤ i ≤ k.
Step 5: After completing the above loop, A (and B) figure out the factorization of nB (and nA) with the
information obtained in Step 4. (A computes gcd(c— i di , nB ) for each i and B computes gcd −(yi zi ,
nA ) for each i. Using this information, they figure out sB and sA by decrypting α and β.
Why are k numbers chosen rather that just one? This is to prevent the following type of cheating on the
A and B’s behalf. Suppose only one x was sent to A. A could figure out y and z and then send the jth
significant bits of y and a junk string to B in Step 4, hoping that y =± w and A will not notice that junk
is being sent. If y = w± then B has no way of knowing that A is cheating until the last step, at which
time A has all the information he needs to find sB, but B has not gained any new information to find sA.
So A can cheat with a 50% chance of success. If, on the other hand, k different x’s are sent to A, A has
an exponentially vanishing chance of successfully cheating in this fashion. Namely P rob(yi = ±wi ∀i) ≤ ( 1 )2k .
Unfortunately, Shamir, and H˚astad pointed out a way to successfully cheat at this protocol. If,
instead of choosing the wi’s at random, A chooses w1 at random, sets 1 x1 = w2 (mod nB), and then sets xi =
x1/2i−1 (mod nB), then after one iteration of Step 4, A has all of the information that he needs to factor nB
by the reduction of [102]. So, a seemingly good protocol fails, since B has no way to check whether A chose
the xi s at random independently from each as specified in the protocol or not. Note: that this problem is
similar to the problem which arose in the oblivious transfer protocol and can be corrected if A and B
could check that each other was following the protocol.
Cryptography: Lecture Notes 215
Definition 11.1 An interactive Turing machine (ITM) is a Turing machine with a read-only input tape, a read-
only random tape, a read/write worktape, a read-only communication tape, a write-only communication tape,
and a write-only output tape. The random tape contains an infinite sequence of bits which can be thought of
as the outcome of unbiased coin tosses, this tape can be scanned only from left to right. We say that an
interactive machine flips a coin to mean that it reads the next bit from its random tape. The contents of the
write-only communication tape can be thought of as messages sent by the machine; while the contents of
the read-only communication tape can be thought of as messages received by the machine.
Definition 11.2 An interactive protocol is an ordered pair of ITMs (A, B) which share the same input tape;
B’s write-only communication tape is A’s read-only communication tape and vice versa. The machines
take turns in being active with B being active first. During its active stage, the machine first performs
some internal computation based on the contents of its tapes, and second writes a string on its write-only
communication tape. The ith message of A(B) is the string A(B) writes on its write-only communication
tape in ith stage. At this point, the machine is deactivated and the other machine becomes active, unless the
protocol has terminated. Either machine can terminate the protocol, by not sending any message in its active
stage. Machine B accepts (or rejects) the input by entering an accept (or reject) state and terminating the
protocol. The first member of the pair, A, is a computationally unbounded Turing machine. The computation
time of machine B is defined as the sum of B’s computation time during its active stages, and it is bounded
by a polynomial in the length of the input string.
1. ∃ ITM P s.t (P, V ) is an interactive protocol and∀ x∈ L s.t x| |is sufficiently large the prob(V accepts) >
2
3 (when probabilities are taken over coin tosses of V and P ).
2. ∀ IT M P s.t (P, V ) is an interactive protocol ∀x ∈/ L s.t. |x| is sufficiently large P rob(V accepts) >3 1
(when probabilities are taken over coin tosses of V and P ’s).
Note that it does not suffice to require that the verifier cannot be fooled by the predetermined prover (such
a mild condition would have presupposed that the “prover” is a trusted oracle). NP is a special case of
interactive proofs, where the interaction is trivial and the verifier tosses no coins.
We say that (P, V ) (for which condition 1 holds) is an interactive proof-system for L.
Define IP = {L | L has interactive proof} .
216 Goldwasser and Bellare
11.2.2 Examples
Notation
Throughout the lecture notes, whenever an interactive protocol is demonstrated, we let−→B A : denote an
active stage of machine B, in the end of which B sends A a message. Similarly,−→
A B : denotes an active
stage of machine A.
Example 1: (From Number Theory)
zi2 mod n if bi = 1
w = 2
x · zi mod n if bi = 0 i
If the two graphs are not isomorphic, the prover has no difficulty to always answer correctly (i.e., a β equal
to α), and the verifier will accept. If the two graphs are isomorphic, it is impossible to distinguish a random
isomorphic copy of the first from a random isomorphic copy of the second, and the probability that the
prover answers correctly to one “query” is at most 21 . The probability that the prover answers correctly all
k queries is ≤ ( 21 )k.
11.2.3 Zero-Knowledge
Now that we have extended the notion of what is an efficient proof-system, we address the question of how
much “knowledge” need to be transferred in order to convince a polynomial-time bounded verifier, of the
truth of a proposition. What do we mean by “knowledge”? For example, consider SAT, the NP -complete
language of satisfiable sentences of propositional calculus. The most obvious proof-system is one in which
on logical formula F the prover gives the verifier a satisfying assignment I, which the verifier can check in
polynomial time. If finding this assignment I by himself would take the verifier more than polynomial time
(which is the case if P /= NP ), we say that the verifier gains additional knowledge to the mere fact that
F ∈ SAT .
Goldwasser, Micali and Rackoff [99] make this notion precise. They call an interactive proof-system for
language L zero-knowledge if∀x ∈ L whatever the verifier can compute after participating in the interaction
with the prover, could have been computed in polynomial time on the input x alone by a probabilistic
polynomial time Turing machine.
We give the technical definition of zero-knowledge proof-systems and its variants in section 11.2.4, and
briefly mention a few interesting results shown in this area.
11.2.4 Definitions
Let (A, B) be an interactive protocol. Let view be a random variable denoting the verifier view during the
protocol on input x. Namely, for fixed sequence of coin tosses for A and B, view is the sequences of messages
exchanged between verifier and prover, in addition to the string of coin tosses that the verifier used. The
string h denotes any private input that the verifier may have with the only restriction that its length is
bounded by a polynomial in the length of the common input. (view is distributed over both A’s and B’s
coin tosses).
We say that (A, B) is perfect zero-knowledge for L if there exists a probabilistic, polynomial time Turing
machine M s.t ∀ x∈ L, for all a > 0, for all strings h such that | h| < |x |a, the random variable M (x, h) and
view are identically distributed. (M (x, h) is distributed over the coin tosses of M on inputs x and h).
We say that (A, B) is statistically zero-knowledge for L if there exists a probabilistic polynomial time Turing
machine M s.t ∀x ∈ L, for all a > 0, for all strings h such that |h| < a|x| ,
Σ 1
|prob(M (x, h) = α)− prob(view = α) < c
|x|
α
|
for all constants c > 0 and sufficiently large |x|.
Intuitively the way to think of statistically zero-knowledge protocols, is that an infinite power “examiner”
who is given only polynomially large samples of {M (x, h)|M ’s coin tosses } and {view |A’s and B’s
coin tosses} can’t tell the two sets apart.
Finally, we say that a protocol (A, B) is computationally zero-knowledge if a probabilistic polynomial time
bounded “examiner” given a polynomial number of samples from the above sets can not tell them apart.
Formally,
We say that (A, B) is computationally zero-knowledge for L if ∃ probabilistic, polynomial time Turing machine
M s.t ∀ polynomial size circuit families C = {C|x| }, ∀ constants a, d > 0, for all sufficiently large |x| s.t x ∈
L, and for all strings h such that |h| < |x|a ,
218 Goldwasser and Bellare
1
prob(C|x| (α) = 1|α random in M (x, h)) − prob(C|x| (α) = 1|α random in view(x))| <
|x|d
We say that L has (computational/statistical/perfect) zero-knowledge proof-system if
Clearly,the last definition is the most general of the three. We thus let KC[0] = {L|L has computational zero-knowledge
pr
• The prover switchs the three colors at random (e.g., switching all red nodes to blue, all blue nodes to
yellow, and all yellow nodes to red).
• The prover encrypts the color of each node, using a different probabilistic encryption scheme for each
node, and show the verifier all these encryptions, together with the correspondence indicating which
ciphertext goes with which vertex.
• The verifier selects an edge of the graph at random.
• The prover reveals the decryptions of the colors of the two nodes that are incident to this edge by
revealing the corresponding decryption keys.
• The verifier confirms that the decryptions are proper, and that the two endpoints of the edge are
colored with two different but legal colors.
(any private probabilistic encryption scheme which is polynomial time indistinguishable will work here) If
the graph is indeed three-colorable (and the prover know the coloring), then the verifier will never detect
any edge being incorrectly labeled. However, if the graph is not three-colorable, then there is a chance of
at least |E|−1 on each stage that the prover will be caught trying to fool the verifier. The chance that
the prover could fool the verifier for |E|2 stages without being caught is exponentially small.
Note that the history of our communications—in the case that the graph is three-colorable—consists of the
concatenation of the messages sent during each stage. It is possible to prove (on the assumption that secure
encryption is possible) that the probability distribution defined over these histories by our set of possible
interactions is indistinguishable in polynomial time from a distribution that the verifier can create on these
histories by itself, without the provers participation. This fact means that the verifier gains zero (additional)
knowledge from the protocol, other than the fact that the graph is three-colorable.
The proof that graph three-colorability has such a zero-knowledge interactive proof system can be used to
prove that every language in NP has such a zero-knowledge proof system.
Cryptography: Lecture Notes 219
Interpolation: Given t + 1 points on the polynomial, namely (x1, y1), . . . , (xt+1, yt+1) where x1,....., xt=1
are distinct and yi = f (xi), it is possible to find a0,....., at. The algorithm to do this is called interpo-
lation. You can find it in many books.
Secrecy: Given any t points on the polynomial, namely (x1, y1), . . . , (xt, yt) where x1,......., xt are distinct
and yi = f (xi), one can’t figure out anything about a0. More precisely, for any value v, the number of
polynomials satisfying these t constraints does not depend on v. (In fact there is exactly one of them.)
220 Goldwasser and Bellare
These makes them a tool for secret sharing. Associate to each player i a point x∈i F , these points being all
distinct. (So F| n).
| ≥ To share secret s, the dealer picks a1, . . . , at at random, sets a0 = s and forms the
polynomial f (x) = a0 + a1x + · +· · atxt. Now he computes si = f (xi) and sends this privately to player i.
Now if t + 1 players get together they can figure out f and hence s; any set of at most t players can’t figure
out anything about s.
Shamir’s scheme suffers from two problems. If the dealer of the secret is dishonest, he can give pieces which
when put together do not uniquely define a secret. Secondly, if some of the players are dishonest, at the
reconstruction stage they may provide other players with different pieces than they received and again cause
an incorrect secret to be reconstructed.
Chor, Goldwasser, Micali, and Awerbuch [55] have observed the above problems and showed how to achieve
secret sharing based on the intractability of factoring which does not suffer from the above problems. They
call the new protocol verifiable secret sharing since now every party can verify that the piece of the secret
he received is indeed a proper piece. Their protocol tolerated up to O(log n) colluders. Benaloh [26], and
others [95, 78] showed how to achieve verifiable secret sharing if any one-way function exists which tolerates
a minority of colluders. In [25] it has been recently shown how to achieve verifiable secret sharing against
a third of colluders using error correcting codes, without making cryptographic assumptions. This was
improved to a minority of colluders in [167].
Chaum has advocated the use of anonymous transactions as a way of protecting individuals from the main-
tenance by “Big Brother” of a database listing all their transactions, and proposes using digital
pseudonyms to do so. Using pseudonyms, individuals can enter into electronic transactions with assurance
that the transactions can not be later traced to the individual. However, since the individual is anonymous,
the other party may wish assurance that the individual is authorized to enter into the transaction, or is
able to pay. [50, 53].
One way of demonstrating that a cryptographic protocol is secure is to show that the primitive operations
that each party performs can not be composed to reveal any secret information.
Consider a simple example due to Dolev and Yao [73] involving the use of public keys. Alice sends a message
M to Bob, encrypting it with his public key, so that the ciphertext C is EB(M ) where EB is Bob’s public
encryption key. Then Bob “echos” the message back to Alice, encrypting it with Alice’s public key, so that
the ciphertext returned is C′ = EA(M ). This completes the description of the protocol.
Is this secure? Since the message M is encrypted on both trips, it is clearly infeasible for a passive eavesdrop-
per to learn M . However, an active eavesdropper X can defeat this protocol. Here’s how: the eavesdropper
X overhears the previous conversation, and records the ciphertext C = EB(M ). Later, X starts up a con-
versation with Bob using this protocol, and sends Bob the encrypted message EB(M ) that he has recorded.
Now Bob dutifully returns to X the ciphertext EX (M ), which gives X the message M he desires!
The moral is that an adversary may be able to “cut and paste” various pieces of the protocol together to
break the system, where each “piece” is an elementary transaction performed by a legitimate party during
the protocol, or a step that the adversary can perform himself.
It is sometimes possible to prove that a protocol is invulnerable to this style of attack. Dolev and Yao
[73] pioneered this style of proof; additional work was performed by Dolev, Even, and Karp [72], Yao [202],
and Even and Goldreich [76]. In other cases a modification of the protocol can eliminate or alleviate the
Cryptography: Lecture Notes 221
danger; see [168] as an example of this approach against the danger of an adversary “inserting himself into
the middle” of a public-key exchange protocol.
Goldreich, Micali, and Wigderson [95] have shown how to “compile” a protocol designed for honest parties
into one which will still work correctly even if some number less than half of the players try to “cheat”.
While the protocol for the honest parties may involve the disclosure of secrets, at the end of the compiled
protocol none of the parties know any more than what they knew originally, plus whatever information is
disclosed as the “official output” of the protocol. Their compiler correctness and privacy is based on the
existence of trapdoor functions.
Ben-Or, Goldwasser and Wigderson [25] and Chaum, Cr´epeau, and Damga˙ rd [51] go one step further.
They assume secret communication between pairs of users as a primitive. Making no intractability
assumption, they show a “compiler” which, given a description (e.g., a polynomial time algorithm or circuit) of
any polyno- mial time function f , produces a protocol which always computes the function correctly and
guarantees that no additional information to the function value is leaked to dishonest players . The “compiler”
withstands up to 1/3 of the parties acting dishonestly in a manner directed by a worst-case unbounded-
computation-time adversary.
These “master theorems” promise to be very powerful tool in the future design of secure protocols.
7. The protocol should be fault-tolerant, meaning it should be able to work even in the presence of a
number of “bad” parties.
8. It should be impossible to coerce a voter into revealing how she voted (e.g. vote-buying)
Usually in in election protocols it is not desirable to involve all the voters Vi in the computation process. So
we assume that there are n government centers C1, . . . , Cn whose task is to collect votes and compute the
tally.
222 Goldwasser and Bellare
(The need for the second index n + 1 will become clear in a minute, for now it is just irrelevant.)
Now we have the values y’s posted. In order from center Cn to center C1, each center Ci does the following.
For each yi+1,j, Ci chooses a random value ri,j and broadcasts yi,j' = Ei(yi+1,j, j). The new index j′ is
computed by taking a random permutation πi of the integers [1..n]. That is j′ = πi(j). Ci keeps the
permutation secret.
At the end we have
y1,j = E1(E2(. . . En(yn+1,j, rn,j) . . . r2,j)r1,j)
At this point, the verification cycle begins. It consists of two rounds of decryption in the order C1 −→
C2 . . . C−→
n.
The decrypted values are posted and the tally computed by taking the sums of the votes vj’s.
(1) and (2) are clearly satisfied. (3) is satisfied, as even if the votes are revealed, what is kept hidden is the
connection between the vote and the voter who casted it. Indeed in order to reconstruct such link we need to
know all the permutations πi. (4) is not satisfied as voter V1 can easily copy voter V2, by for example casting
the same encrypted string. (5) and (6) are satisfied using the random strings: during the first decryption
rounds each center checks that his random strings appear in the decrypted values, making sure that all his
ciphertexts are being counted. Also at the end of the second decryption round each voter looks for her
string sj to make sure her vote is being counted (choosing a large enough space for the random string should
eliminate the risk of duplicates.) Notice that in order to verify the correctness of the election we need the
cooperation of all the voters (a negative feature especially in large protocols.)
(7) requires a longer discussion. If we are concerned about the secrecy of the votes being lost because of
parties going “bad”, then the protocol is ideal. Indeed even if n − 1 of the centers cooperate, they will not
be able to learn who casted what vote. Indeed they need to know all the permutations πi. However even
if one of the government agencies fails, by for example crashing, the entire system falls apart. The whole
election needs to be repeated.
(8) is not satisfied. Indeed the voter can be forced to reveal both vj and sj and she tries to lie about the
vote she will be discovered since the declared values will not match the ciphertext yn+1,j.
• satisfies (4), meaning it will be impossible to copy other people vote (the protocol before did not)
• Does not require the cooperation of each voter to publicly verify the tally (better solution to (6) than
the above)
• introduces fault-tolerance: we fix a threshold t and we assume that if there are less than t “bad” centers
the protocol will correctly compute the tally and the secrecy of each vote will be preserved (better
solution to (7) than the above.)
This protocol is still susceptible to coercion (requirement (8)). We will discuss this point at the end.
The ideas behind this approach are due to Josh Benaloh [28]. The protocol described in the following section
is the most efficient one in the literature due to Cramer, Franklin, Schoemakers and Yung [60].
Cryptography: Lecture Notes 223
Homomorphic Commitments
One possible example of such commitment is the following (invented by Pedersen [155]):
Discrete-Log based Homomorphic Commitment: Let p be a prime of the form p = kq + 1 and let g, h
be two elements in the subgroup of order q. We assume nobody knows the discrete log in base g of h. To
commit to a number m in [1..q]:
Ba(m) = ga hm (11.2)
for a randomly chosen a modulo q. To open the commitment a and m must be revealed.
Notice that this is a (+, ×)-homomorphic commitment as:
Ba 1(m1)Ba (m a1 m1 a2 m2
2 2) = g h g h = ga1+a2 hm1+m2 = Ba +a (m
1 1 2 + m2)
Assume for now that there is only one center C and let E be his encryption function.
Assuming the votes are either -1 or 1, each voter Vj encrypts his vote vj by computing and posting Baj (vj )
for a randomly chosen aj . Vj also sends the values aj and vj to C encrypted.
The voter now must prove that the vote is correct (i.e. it’s the encryption of a -1 or of a 1.) He does this by
performing a zero-knowledge proof of validity.
For the discrete-log based homomorphic commitment scheme described above, here is a very efficient protocol.
Let us drop the index j for simplicity.
For v = 1:
1. The voter V chooses at random a, r1, d1, w2 modulo q. He posts Ba(v) = gah and also posts α1 =
gr1 (Ba(v)h)−d1 , α2 = gw2 .
3. The voter V responds as follows: V computes d2 = c − d1 and r2 = w2 + ad2 and posts d1, d2, r1, r2
• d1 + d2 = c
• gr1 = α1(Ba(v)h)d1
• gr2 = α2(Ba(v)/h)d2
For v = −1:
224 Goldwasser and Bellare
1. The voter V chooses at random a, r2, d2, w1 modulo q. He posts Ba(v) = ga/h and also posts α1 = gw1 ,
α2 = gr2 (Ba(v)/h)−d2
• d1 + d2 = c
• gr1 = α1(Ba(v)h)d1
• gr2 = α2(Ba(v)/h)d2
which should be true for the correct tally, because of the homomorphic property of B.
The 1-center version of the protocol however has the drawback that this center learns everybody’s vote.
Bj = Baj (vj )
for a randomly chosen aj modulo q. He also proves that this is a correct vote by performing Proof(Baj (vj )).
Then he shares the values aj and vj among the centers using Shamir’s (t, n) threshold secret sharing.
That is, he chooses random polynomials Hj (X) and Aj (X) of degree t such that Hj (0) = vj and Aj (0) =
aj . Let
Σ
Ti = ui,j
j
this is the sum of the shares of the votes received by each player.
Σ
Ai = wi,j
j
this is the sum of the shares of the random string aj used to commit to the vote by each player.
Anybody can check that the center is revealing the right stuff by using the homomorphic property of the
commitment scheme B. Indeed it must hold that
jm At
gAi hTi = Y Y (BA,j )j l! (11.4)
Bj
=1 =1
Notices that the correct Ti’s are shares of the tally T in a (t, n) Shamir’s secret sharing scheme. So it is
enough to take t + 1 of them to interpolate the tally.
Notice: Equations (11.3) and (11.4) are valid only under the assumption that nobody knows the discrete
log in base g of h. Indeed who knows some value can open the commitment B in both ways and so reveal
incorrect values that satisfies such equations.
Analysis: Let’s go through the properties one by one. (1) and (2) are clearly satisfied. (3) is satisfied
assuming that at most t centers can cooperate to learn the vote. If t + 1 centers cooperate, then the
privacy of the votes is lost. (4) is true for the following reason: assume that V1 is trying to copy the
action of V2. When it comes to the point of proving the correctness of the vote (i.e. perform Proof(B)), V1 will
probably receive a different challenge c than V2. He will not be able to answer it and he will be eliminated
from the election. (5) is true under the discrete-log assumption (see note above.) (6) is true as anybody
can check on the the ZK proofs and Equations (11.3) and (11.4). (7) is true as we need only t + 1 good centers
to reconstruct the tally.
It is easy to see that because we need t + 1 good centers and at most t centers can be bad, the maximum
number of corrupted centers being tolerated by the protocol is n −2 1.
(8) is not satisfied. This is because somebody could be coerced into revealing both a and v when posting
the commitment Ba(v).
11.4.4 Uncoercibility
The problem of coercion of voters is probably the most complicated one. What exactly does it mean? In
how many ways can a coercer, try to force a voter to cast a given vote.
Let’s try to simplify the problem. We will consider two possible kinds of coercer. One who contacts the
voter before the election starts and one who contacts the voter after the election is concluded.
The “before” coercer has a greater power. He can tell the voter what vote to cast and also what randomness
to use during the protocol. This basically would amount to fix the behavior of the voter during the protocol.
If the voter does not obey, it will be easy for the coercer to detect such occurrence. There have been some
solutions proposed to this problem that use some form of physical assumption. For example one could allow
the voter to exchange a limited number of bits over a secure channel with the voting centers [27, 175].
This would hopefully prevent the coercer from noticing that the voter is not following his instructions. Or
one could force the voter to use some tamper-proof device that encrypts messages for him, choosing the
randomness. This would prevent the coercer from forcing the user to use some fixed coin tosses as the user
has no control on what coins the tamper-proof device is going to generate.
226 Goldwasser and Bellare
The “after” coercer has a smaller power. He can only go to the voter and ask to see the vote v and the
randomness ρ used by the voter during the protocol. Maybe there could be a way for the voter to construct
different v′ and ρ′ that “match” his execution of the protocol. This is not possible in the protocol above
(unless the voter solves the discrete log problem.) Recently however a protocol for this purpose has been
proposed by Canetti and Gennaro [47]. They use a new tool called deniable encryption (invented by Canetti,
Dwork, Naor and Ostrovsky [46]), which is a new form of public key probabilistic encryption E with the
following property.
Let m be the message and r the coin tosses of the sender. The sender computes the ciphertext c = Er(m).
After if somebody approaches him and asks for the value of m, the sender will be able to produce m′ and
r′ such that Er' (m′) = c.
• forgery is hard
• duplication should be either prevented or detected
• preserve customers’ anonymity
• minimize on-line operations on large database
Withdrawal Protocol:
Payment Protocol:
Deposit Protocol:
Given some suitable assumption on the security of the signature scheme, it is clear that it is impossible
to forge digital coins. However it is very easy to duplicate and double-spend the same digital coin several
times. It is also cleat that anonymity is not preserved as the Bankcan link the name of the Userwith the
serial number appearing on the bill and know where the Userspent the coin.
Withdrawal Protocol:
2. Usercalculates M ′ = M · re mod n.
s′ = (M ′)d = M d · (re)d = M d · r
s = Md
The payment and deposit protocol remain the same as above. This solves the problem of preserving the
Useranonymity, as when the coin comes back to the Bankthere is no link between it and the Userit was
issued to.
We still have two problems.
1. The bank can still be fooled into signing something that it shouldn’t (like a $100 bill that it thinks is
a $1 bill)
4. The Bankpicks one to sign (at random), and requires that the Userunblind all of the rest (by revealing
the r’s). Before the signature is returned, the Bankensures that all of the bills that were unblinded
were correct.
1
This way the Userhas only100 probability of cheating. Of course, one could set up the protocol to create an
smaller cheating chance (by requiring that the user provided more blinded messages, for example).
So, now we have a protocol that satisfies the anonymity requirement and can provide sufficiently small
possibilities for cheating. We still have to deal with the double-spending problem.
Although this is a simple solution it incurs in a high communication overhead as now the payment protocol
looks a lot like a credit card transaction, when the Vendorawaits for authorization to finish the trade. Also
the size of the database to be managed by the Bankcould be problematic.
Notice that we are preventing double-spending this way. We are going to show now a way to detect double-
spending which does not require on-line verification.
If the Bankreceives two identical bills with different RIS values, then the Userhas cheated and the bank can
identify him. If the Bankreceives two identical bills with the same RIS values, then the Vendorhas cheated.
The above idea appeared first in [52].
Here is a possible solution. Let H to be a one-way hash function.
Withdrawal Protocol:
where yi,j = H(xi,j ), yi′,j = H(x′i,j ), where xi,j and x′i,j are randomly chosen under the condition that
2. The Userblinds all the Mi to random messages Mi′ (using the blinding protocol outlined above) and
sends them to the Bank.
4. When the Userunblinds them, he also reveals the appropriate xi,j and x′i,j .
5. The Bankchecks not only that the bills are indeed $20 bills, but also that yi,j = H(xi,j ), yi′,j = H(x′i,j
) and xi,j ⊕ x′i,j = Username, for the unblinded bills.
From now on let us drop the index i = 17 for simplicity. The payment protocol is modified to force the
Userto produce a RIS on the coin. The RIS is going to be one of xj or x′j for each j = 1, , K. Which one
is going to be depends on a random challenge from the Vendor.
Payment Protocol:
2. The Vendorchecks the Banksignature on the bill and if it is valid, answers with a random bit string of
length K, b1 . . . bK .
3. If bj = 0 Userreveals xj , otherwise he reveals x′j
4. The Vendorchecks that yj = H(xj ) or yj′ = H(xj′ ), whichever is the case. If the above equalities
hold, he accepts the bill.
Notice that the above properties or RIS are satisfied. Indeed the probability that in a different payment the
same RIS is produced is 2−K since the Vendorchooses the “challenge” at random. Only the Usercan produce
a valid RIS since the function H is one-way. Finally two different RIS on the same coin leak the name of
the User, as if two RIS are different there must be an index j for which we have both xj and x′j .
Deposit Protocol:
[1] ISO/IEC 9796. Information technology security techniques – digital signature scheme giving message
recovery, 1991. International Organization for Standards.
[2] L. M. Adleman. On breaking generalized knapsack public key cryptosystems. In Proc. 15th ACM
Symp. on Theory of Computing, pages 402–412, Boston, 1983. ACM.
[3] L. M. Adleman. Factoring numbers using singular integers. Technical Report TR 90-20, U.S.C.
Computer Science Department, September 1990.
[4] L. M. Adleman and M. A. Huang. Recognizing primes in random polynomial time. In Proc. 19th ACM
Symp. on Theory of Computing, pages 462–469, New York City, 1987. ACM.
[5] L. M. Adleman, C. Pomerance, and R. S. Rumely. On distinguishing prime numbers from composite
numbers. Ann. Math., 117:173–206, 1983.
[6] W. B. Alexi, B. Chor, O. Goldreich, and C. P. Schnorr. RSA/Rabin functions: certain parts are as
hard as the whole. SIAM J. Computing, 17(2):194–209, April 1988.
[7] D. Angluin. Lecture notes on the complexity of some problems in number theory. Technical Report
TR-243, Yale University Computer Science Department, August 1982.
[8] Eric Bach. How to generate factored random numbers. SIAM J. Computing, 17(2):179–193, April
1988.
[9] D. Balenson. RFC 1423: Privacy Enhancement for Internet Electronic Mail: Part III – Algorithms,
Modes, and Identifiers. Internet Activities Board, February 1993.
[10] D. Beaver. Efficient multiparty protocols using circuit randomization. In J. Feigenbaum, editor,
Proc. CRYPTO 91, pages 420–432. Springer, 1992. Lecture Notes in Computer Science No. 576.
[11] M. Bellare, R. Gu´erin, and P. Rogaway. XOR MACs: New methods for message authentication
using finite pseudorandom functions. In Don Coppersmith, editor, Proc. CRYPTO 95, pages 15–28.
Springer, 1995. Lecture Notes in Computer Science No. 963.
[12] M. Bellare, J. Kilian, and P. Rogaway. The security of cipher block chaining. In Yvo G. Desmedt,
editor, Proceedings of Crypto 94, volume 839 of Lecture Notes in Computer Science, pages 341–358.
Springer-Verlag, 1994. Full version to appear in J. Computer and System Sciences, available via
http://www-cse.ucsd.edu/users/mihir.
231
232 Goldwasser and Bellare
[13] M. Bellare, J. Kilian, and P. Rogaway. The security of the cipher block chaining message authentication
code. Journal of Computer and System Sciences, 61(3):362–399, December 2000.
[14] M. Bellare and S. Micali. How to sign given any trapdoor permutation. Journal of the ACM,
39(1):214– 233, January 1992.
[15] M. Bellare and P. Rogaway. Random oracles are practical: A paradigm for designing efficient protocols.
In First ACM Conference on Computer and Communications Security, pages 62–73, Fairfax, 1993.
ACM.
[16] M. Bellare and P. Rogaway. Entity authentication and key distribution. In Douglas R. Stinson, editor,
Proc. CRYPTO 93, pages 232–249. Springer, 1994. Lecture Notes in Computer Science No. 773.
[17] M. Bellare and P. Rogaway. Provably secure session key distribution– the three party case. In Proc.
27th ACM Symp. on Theory of Computing, pages 57–66, Las Vegas, 1995. ACM.
[18] Mihir Bellare, Ran Canetti, and Hugo Krawczyk. Keying hash functions for message authentication. In
Proceedings of Crypto 96, volume 1109 of Lecture Notes in Computer Science. Springer-Verlag, 1996.
[19] Mihir Bellare, Ran Canetti, and Hugo Krawczyk. Pseudorandom functions revisited: The cascade
construction and its concrete security. In Proc. 37th IEEE Symp. on Foundations of Comp. Science.
IEEE, 1996.
[20] Mihir Bellare, Anand Desai, Eron Jokipii, and Phillip Rogaway. A concrete security treatment of
sym- metric encryption: Analysis of the DES modes of operation. In Proc. 38th IEEE Symp. on
Foundations of Comp. Science. IEEE, 1997.
[21] Mihir Bellare, Anand Desai, David Pointcheval, and Phillip Rogaway. Relations among notions of
security for public-key encryption schemes. In Proceedings of Crypto 98, volume 1462 of Lecture Notes
in Computer Science. Springer-Verlag, 1998.
[22] Mihir Bellare and Phillip Rogaway. Distributing keys with perfect forward secrecy. Manuscript, 1994.
[23] Mihir Bellare and Phillip Rogaway. Optimal asymmetric encryption. In Proceedings of EURO-
CRYPT’94, volume 950 of Lecture Notes in Computer Science. Springer-Verlag, 1994.
[24] Mihir Bellare and Phillip Rogaway. The exact security of digital signatures: How to sign with RSA
and Rabin. In Proceedings of EUROCRYPT’96, volume 1070 of Lecture Notes in Computer Science.
Springer-Verlag, 1996.
[25] M. Ben-Or, S. Goldwasser, and A. Wigderson. Completeness theorems for fault-tolerant distributed
computing. In Proc. 20th ACM Symp. on Theory of Computing, pages 1–10, Chicago, 1988. ACM.
[26] J. Benaloh. Secret sharing homomorphisms: Keeping shares of a secret sharing. In A. M. Odlyzko,
editor, Proc. CRYPTO 86. Springer, 1987. Lecture Notes in Computer Science No. 263.
[27] J. Benaloh and D. Tuinstra. Receipt-free secret ballot elections. In 26th ACM Symposium on Theory
of Computing, pages 544–553, 1994.
[28] Josh Benaloh. Verifiable secret ballot elections. Technical Report TR–561, Yale Department of Com-
puter Science, September 1987.
[29] R. Berger, R. Peralta, and T. Tedrick. A provably secure oblivious transfer protocol. In T. Beth,
N. Cot, and I. Ingemarsson, editors, Proc. EUROCRYPT 84, pages 379–386. Springer-Verlag, 1985.
Lecture Notes in Computer Science No. 209.
[30] D. Bernstein. How to stretch random functions: the security of protected counter sums. Journal of
Cryptology, 12(3):185–192, 1999.
Cryptography: Lecture Notes 233
[31] R. Bird, I. Gopal, A. Herzberg, P. Janson, S. Kutten, R. Molva, and M. Yung. Systematic design
of two-party authentication protocols. In J. Feigenbaum, editor, Proc. CRYPTO 91, pages 44–61.
Springer, 1992. Lecture Notes in Computer Science No. 576.
[32] John Black, Shai Halevi, Hugo Krawczyk, Ted Krovetz, and Phillip Rogaway. UMAC: fast and secure
message authentication. In Proceedings of CRYPTO’99, Lecture Notes in Computer Science.
Springer- Verlag, 1999.
[33] G. R. Blakley. Safeguarding cryptographic keys. In Proc. AFIPS 1979 National Computer Conference,
pages 313–317. AFIPS, 1979.
[34] D. Bleichenbacher. A chosen ciphertext attack against protocols based on the RSA encryption standard
pkcs #1. In Proceedings of Crypto 98, volume 1462 of Lecture Notes in Computer Science. Springer-
Verlag, 1998.
[35] L. Blum, M. Blum, and M. Shub. A simple unpredictable pseudo-random number generator. SIAM J.
Computing, 15(2):364–383, May 1986.
[36] M. Blum. Coin flipping by telephone. In Proc. IEEE Spring COMPCOM, pages 133–137. IEEE, 1982.
[37] M. Blum. How to exchange (secret) keys. Trans. Computer Systems, 1:175–193, May 1983. (Previously
published in ACM STOC ’83 proceedings, pages 440–447.).
[38] M. Blum. Independent unbiased coin flips from a correlated biased source: A finite state Markov
chain. In Proc. 25th IEEE Symp. on Foundations of Comp. Science, pages 425–433, Singer Island,
1984. IEEE.
[39] M. Blum and S. Goldwasser. An efficient probabilistic public-key encryption scheme which hides all
partial information. In G. R. Blakley and D. C. Chaum, editors, Proc. CRYPTO 84, pages 289–302.
Springer, 1985. Lecture Notes in Computer Science No. 196.
[40] M. Blum and S. Micali. How to generate cryptographically strong sequences of pseudo-random bits.
SIAM J. Computing, 13(4):850–863, November 1984.
[41] M. Blum, A. De Santis, S. Micali, and G. Persiano. Noninteractive zero-knowledge. SIAM J. Com-
puting, 20(6):1084–1118, December 1991.
[42] D. Boneh and R. Venkatesan. Hardness of computing the most significant bits of secret keys in Diffie-
Hellman and related schemes. In Proceedings of CRYPTO’96, Lecture Notes in Computer Sci- ence.
Springer-Verlag, 1996.
[43] Gilles Brassard and Claude Cr´epeau. Zero-knowledge simulation of boolean circuits. In A.M.
Odlyzko, editor, Proc. CRYPTO 86, pages 223–233. Springer-Verlag, 1987. Lecture Notes in
Computer Science No. 263.
[44] E. F. Brickell. Solving low density knapsacks. In D. Chaum, editor, Proc. CRYPTO 83, pages 25–37,
New York, 1984. Plenum Press.
[45] Michael Burrows, Martin Abadi, and Roger Needham. A logic of authentication. ACM Transactions
on Computer Systems, 8(1):18–36, February 1990.
[46] Ran Canetti, C. Dwork, M. Naor, and R. Ostrovsky. Deniable encryption. In Proc. CRYPTO 97,
Lecture Notes in Computer Science. Springer-Verlag, 1997.
[47] Ran Canetti and R. Gennaro. Incoercible multiparty computation. In Proc. 37th IEEE Symp. on
Foundations of Comp. Science, 1996.
[49] M. Cerecedo, T. Matsumoto, and H. Imai. Efficient and secure multiparty generation of digital sig-
natures based on discrete logarithm. IEICE Trans. on Fund. Electr. Comm. and Comp. Sci., E76–
A(4):532–545, 1993.
[50] D. Chaum. Untraceable electronic mail, return addresses, and digital pseudonyms. Communications
of the ACM, 24:84–88, February 1981.
[51] D. Chaum, C. Cr´epeau, and I. Damg˚ard. Multiparty unconditionally secure protocols. In Carl
Pomer- ance, editor, Proc. CRYPTO 87, pages 462–462. Springer-Verlag, 1988. Lecture Notes in
Computer Science No. 293.
[52] D. Chaum, A. Fiat, and M. Naor. Untraceable electronic cash. In S. Goldwasser, editor, Proc. CRYPTO
88, pages 319–327. Springer-Verlag, 1988. Lecture Notes in Computer Science No. 403.
[53] D. L. Chaum. Verification by anonymous monitors. In Allen Gersho, editor, Advances in Cryptology:
A Report on CRYPTO 81, pages 138–139. U.C. Santa Barbara Dept. of Elec. and Computer Eng.,
1982. Tech Report 82-04.
[54] B. Chor and O. Goldreich. Unbiased bits from sources of weak randomness and probabilistic commu-
nication complexity. SIAM J. Computing, 17(2):230–261, April 1988.
[55] B. Chor, S. Goldwasser, S. Micali, and B. Awerbuch. Verifiable secret sharing and achieving simul-
taneity in the presence of faults. In Proc. 26th IEEE Symp. on Foundations of Comp. Science, pages
383–395, Portland, 1985. IEEE.
[56] B. Chor and R. L. Rivest. A knapsack type public-key cryptosystem based on arithmetic in finite
fields. IEEE Trans. Inform. Theory, 34(5):901–909, September 1988.
[57] D. Coppersmith. Evaluating logarithms in GF (2n). In Proc. 16th ACM Symp. on Theory of Computing,
pages 201–207, Washington, D.C., 1984. ACM.
[58] D. Coppersmith, M. K. Franklin, J. Patarin, and M. K. Reiter. Low-exponent RSA with related
messages. In Ueli Maurer, editor, Advances in Cryptology - EuroCrypt ’96, pages 1–9, Berlin, 1996.
Springer-Verlag. Lecture Notes in Computer Science Volume 1070.
[59] Thomas H. Cormen, Charles E. Leiserson, and Ronald L. Rivest. Introduction to Algorithms. MIT
Press/McGraw-Hill, 1990.
[60] R. Cramer, M. Franklin, B. Schoenmakers, and M. Yung. Multi-authority secret-ballot elections with
linear work. In EUROCRYPT’96, volume 1070 of Lecture Notes in Computer Science, pages 72–83.
Springer-Verlag, 1996.
[61] R. Cramer and V. Shoup. Signature schemes based on the strong RSA assumption. Theory of Cryp-
tography Library Record 99-01, 1999.
[63] I. Damg˚ard. A design principle for hash functions. In G. Brassard, editor, Proc. CRYPTO 89,
pages 416–427. Springer-Verlag, 1990. Lecture Notes in Computer Science No. 435.
[64] D. Denning and G. Sacco. Timestamps in key distribution protocols. Communications of the ACM,
24(8):533–536, 1981.
[65] Y. Desmedt and Y. Frankel. Shared generation of authenticators and signatures. In J. Feigenbaum,
editor, Proc. CRYPTO 91, pages 457–469. Springer, 1992. Lecture Notes in Computer Science No.
576.
[67] W. Diffie and M. E. Hellman. Multiuser cryptographic techniques. In Proc. AFIPS 1976 National
Computer Conference, pages 109–112, Montvale, N.J., 1976. AFIPS.
[68] W. Diffie and M. E. Hellman. New directions in cryptography. IEEE Trans. Inform. Theory, IT-
22:644–654, November 1976.
[69] Whitfield Diffie, Paul C. Van Oorschot, and Michael J. Wiener. Authentication and authenticated key
exchanges. Designs, Codes, and Cryptography, 2(2):107–125, June 1992.
[70] H. Dobbertin. MD5 is not collision-free. Manuscript, 1996.
[71] D. Dolev, C. Dwork, and M. Naor. Non-malleable cryptography. In Proc. 23rd ACM Symp. on Theory
of Computing, pages 542–552. ACM, 1991.
[72] D. Dolev, S. Even, and R. M. Karp. On the security of ping-pong protocols. In R. L. Rivest, A. Sherman,
and D. Chaum, editors, Proc. CRYPTO 82, pages 177–186, New York, 1983. Plenum Press.
[73] D. Dolev and A. C. Yao. On the security of public key protocols. In Proc. 22nd IEEE Symp. on
Foundations of Comp. Science, pages 350–357, Nashville, 1981. IEEE.
[74] C. Dwork and M. Naor. An efficient existentially unforgeable signature scheme and its applications.
In Yvo G. Desmedt, editor, Proc. CRYPTO 94, pages 234–246. Springer, 1994. Lecture Notes in
Computer Science No. 839.
[75] P. Elias. The efficient construction of an unbiased random sequence. Ann. Math. Statist., 43(3):865–
870, 1972.
[76] S. Even and O. Goldreich. On the security of multi-party ping-pong protocols. In Proc. 24th IEEE
Symp. on Foundations of Comp. Science, pages 34–39, Tucson, 1983. IEEE.
[77] S. Even, O. Goldreich, and A. Lempel. A randomized protocol for signing contracts. Communications
of the ACM, 28:637–647, 1985.
[78] P. Feldman. A practical scheme for non-interactive verifiable secret sharing. In Proc. 28th IEEE Symp.
on Foundations of Comp. Science, pages 427–438, Los Angeles, 1987. IEEE.
[79] A. Fiat and A. Shamir. How to prove yourself: practical solutions to identification and signature
problems. In A. M. Odlyzko, editor, Proc. CRYPTO 86, pages 186–194. Springer, 1987. Lecture Notes
in Computer Science No. 263.
[80] R. Fischlin and C. Schnorr. Stronger security proofs for RSA and Rabin bits. In EUROCRYPT’97,
volume 1223 of Lecture Notes in Computer Science, pages 267–279. Springer-Verlag, 1997.
[81] National Institute for Standards and Technology. A proposed federal information processing standard
for digital signature standard (DSS). Technical Report FIPS PUB XX, National Institute for
Standards and Technology, August 1991. DRAFT.
[82] Y. Frankel, P. Gemmell, and M. Yung. Witness-based cryptographic program checking and robust
function sharing. In 28th ACM Symposium on Theory of Computing, 1996.
[83] A. M. Frieze, J. Hastad, R. Kannan, J. C. Lagarias, and A. Shamir. Reconstructing truncated integer
variables satisfying linear congruences. SIAM J. Computing, 17(2):262–280, April 1988.
[84] E. Fujisaki, T. Okamoto, D. Pointcheval, and J. Stern. RSA-OAEP is secure under the RSA assump-
tion. In CRYPTO’01, Lecture Notes in Computer Science. Springer-Verlag, 2001.
[85] T. El Gamal. A public key cryptosystem and a signature scheme based on discrete logarithms. IEEE
Trans. Inform. Theory, 31:469–472, 1985.
[86] M. Garey and D. S. Johnson. Computers and Intractability: A Guide to the Theory of NP-
Completeness. Freeman, 1979.
236 Goldwasser and Bellare
[87] R. Gennaro, S. Halevi, and T. Rabin. Secure hash-and-sign signatures without the random oracle. In
EUROCRYPT’99, Lecture Notes in Computer Science. Springer-Verlag, 1999.
[88] R. Gennaro, S. Jarecki, Hugo Krawczyk, and T. Rabin. Robust and efficient sharing of rsa functions.
In CRYPTO’96, volume 1109 of Lecture Notes in Computer Science. Springer-Verlag, 1996.
[89] R. Gennaro, S. Jarecki, Hugo Krawczyk, and T. Rabin. Robust threshold dss signatures. In EU-
ROCRYPT’96, volume 1070 of Lecture Notes in Computer Science, pages 354–371. Springer-Verlag,
1996.
[90] O. Goldreich. Two remarks concerning the Goldwasser-Micali-Rivest signature scheme. Technical
Report MIT/LCS/TM-315, MIT Laboratory for Computer Science, September 1986.
[91] O. Goldreich. A uniform complexity treatment of encryption and zero-knowledge. Journal of
Cryptol- ogy, 6(1):21–53, 1993.
[92] O. Goldreich, S. Goldwasser, and S. Micali. How to construct random functions. Journal of the ACM,
33(4):792–807, October 1984.
[93] O. Goldreich, S. Goldwasser, and S. Micali. On the cryptographic applications of random functions. In
G. R. Blakley and D. C. Chaum, editors, Proc. CRYPTO 84, pages 276–288. Springer, 1985. Lecture
Notes in Computer Science No. 196.
[94] O. Goldreich and L. Levin. A hard-core predicate for all one-way functions. In 21st ACM Symposium
on Theory of Computing, 1989.
[95] O. Goldreich, S. Micali, and A. Wigderson. Proofs that yield nothing but their validity and a method-
ology of cryptographic protocol design. In Proc. 27th IEEE Symp. on Foundations of Comp. Science,
pages 174–187, Toronto, 1986. IEEE.
[96] S. Goldwasser and J. Kilian. Almost all primes can be quickly certified. In Proc. 18th ACM Symp. on
Theory of Computing, pages 316–329, Berkeley, 1986. ACM.
[97] S. Goldwasser and S. Micali. Probabilistic encryption and how to play mental poker keeping secret all
partial information. In Proc. 14th ACM Symp. on Theory of Computing, pages 365–377, San
Francisco, 1982. ACM.
[98] S. Goldwasser and S. Micali. Probabilistic encryption. JCSS, 28(2):270–299, April 1984.
[99] S. Goldwasser, S. Micali, and C. Rackoff. The knowledge complexity of interactive proof-systems. In
Proc. 17th ACM Symp. on Theory of Computing, pages 291–304, Providence, 1985. ACM.
[100] S. Goldwasser, S. Micali, and C. Rackoff. The knowledge complexity of interactive proof-systems.
SIAM. J. Computing, 18(1):186–208, February 1989.
[101] S. Goldwasser, S. Micali, and Ronald L. Rivest. A digital signature scheme secure against adaptive
chosen-message attacks. SIAM J. Computing, 17(2):281–308, April 1988.
[102] S. Goldwasser, S. Micali, and P. Tong. Why and how to establish a private code on a public network.
In Proc. 23rd IEEE Symp. on Foundations of Comp. Science, pages 134–144, Chicago, 1982. IEEE.
[103] S. Goldwasser, S. Micali, and A. Yao. Strong signature schemes. In Proc. 15th ACM Symp. on
Theory of Computing, pages 431–439, Boston, 1983. ACM.
[104] S. W. Golomb. Shift Register Sequences. Aegean Park Press, Laguna Hills, 1982. Revised edition.
[105] L. Harn. Group–oriented (t, n) threshold digital signature scheme and digital multisignature. IEE
Proc. Comput. Digit. Tech., 141(5):307–313, 1994.
[106] J. Hastad. Solving simultaneous modular equations of low degree. SIAM J. Computing, 17(2):336–341,
April 1988.
Cryptography: Lecture Notes 237
[107] J. H˚astad. Pseudo-random generators under uniform assumptions. In 22nd ACM Symposium
on Theory of Computing, 1990.
[108] J. Hastad, A.W. Schrift, and A. Shamir. The discrete logarithm modulo a composite hides o(n) bits.
Journal of Computer and Systems Sciences, 47:376–404, 1993.
[109] Johan H˚astad, Russell Impagliazzo, Leonid Levin, and Michael Luby. A pseudorandom generator
from any one-way function. SIAM Journal on Computing, 28(4):1364–1396, 1999.
[110] R. Impagliazzo and M. Luby. One-way functions are essential for complexity based cryptography. In
Proc. 30th IEEE Symp. on Foundations of Comp. Science, 1989.
[111] Russell Impagliazzo, Leonid A. Levin, and Michael Luby. Pseudo-random generation from one-way
functions. In Proc. 21st ACM Symp. on Theory of Computing, pages 12–24, Seattle, 1989. ACM.
[112] ISO. Data cryptographic techniques – data integrity mechanism using a cryptographic check function
employing a block cipher algorithm. ISO/IEC 9797, 1989.
[113] D. Johnson, A. Lee, W. Martin, S. Matyas, and J. Wilkins. Hybrid key distribution scheme giving key
record recovery. IBM Technical Disclosure Bulletin, 37(2A):5–16, February 1994. See also U.S.
Patent 5,142,578.
[114] D. Johnson and M. Matyas. Asymmetric encryption: Evolution and enhancements. RSA Labs Cryp-
tobytes, 2(1), Spring 1996.
[115] B. Kaliski and M. Robshaw. Message authentication with MD5. CryptoBytes, 1(1):5–8, Spring 1995.
[116] B. S. Kaliski, Jr. A pseudo-random bit generator based on elliptic logarithms. In A.M. Odlyzko, editor,
Proc. CRYPTO 86, pages 84–103. Springer-Verlag, 1987. Lecture Notes in Computer Science No. 263.
[117] B. S. Kaliski, Jr. Elliptic Curves and Cryptography: A Pseudorandom Bit Generator and Other
Tools. PhD thesis, MIT EECS Dept., January 1988. Published as MIT LCS Technical Report
MIT/LCS/TR- 411 (Jan. 1988).
[118] R. Kannan, A. Lenstra, and L. Lov´asz. Polynomial factorization and non-randomness of bits of
alge- braic and some transcendental numbers. In Proc. 16th ACM Symp. on Theory of Computing,
pages 191–200, Washington, D.C., 1984. ACM.
[119] J. Kilian. Founding cryptography on oblivious transfer. In Proc. 20th ACM Symp. on Theory of
Computing, pages 20–31, Chicago, 1988. ACM.
[120] Donald E. Knuth. Seminumerical Algorithms, volume 2 of The Art of Computer Programming.
Addison-Wesley, 1969. Second edition, 1981.
[121] Hugo Krawczyk. Skeme: A versatile secure key exchange mechanism for internet. In Proceedings of
the Symposium on Network and Distributed System Security, 1996.
[122] Hugo Krawczyk, Mihir Bellare, and Ran Canetti. Hmac: Keyed-hashing for message authentication,
February 1997. Internet RFC 2104.
[123] J. C. Lagarias and A. M. Odlyzko. Solving low-density subset sum problems. In Proc. 24th IEEE
Symp. on Foundations of Comp. Science, pages 1–10, Tucson, 1983. IEEE.
[124] X. Lai and J. Massey. A proposal for a new block encryption standard. In I.B. Damg˚ard, editor,
Proc. EUROCRYPT 90, pages 389–404. Springer-Verlag, 1990. Lecture Notes in Computer Science
No. 473.
[125] L. Lamport. Constructing digital signatures from a one-way function. Technical Report CSL-98, SRI
International, October 1979.
238 Goldwasser and Bellare
[126] A. K. Lenstra and H. W. Lenstra, Jr. Algorithms in number theory. In Jan van Leeuwen, editor,
Handbook of Theoretical Computer Science (Volume A: Algorithms and Complexity), chapter 12,
pages 673–715. Elsevier and MIT Press, 1990.
[127] A. K. Lenstra, H. W. Lenstra, Jr., and L. Lov´asz. Factoring polynomials with rational
coefficients.
Mathematische Ann., 261:513–534, 1982.
[128] A. K. Lenstra, H. W. Lenstra, Jr., M. S. Manasse, and J. M. Pollard. The number field sieve. In Proc.
22nd ACM Symp. on Theory of Computing, pages 564–572, Baltimore, Maryland, 1990. ACM.
[129] H. W. Lenstra, Jr. Factoring integers with elliptic curves. Annals of Mathematics, 126:649–673, 1987.
[130] R. Lipton. How to cheat at mental poker. In Proc. AMS Short Course on Cryptography, 1981.
[131] D. L. Long and A. Wigderson. The discrete logarithm problem hides O(log n) bits. SIAM J. Computing,
17(2):363–372, April 1988.
[132] M. Luby, S. Micali, and C. Rackoff. How to simultaneously exchange a secret bit by flipping a
symmet- rically biased coin. In Proc. 24th IEEE Symp. on Foundations of Comp. Science, pages 11–
22, Tucson, 1983. IEEE.
[133] M. Luby and C. Rackoff. How to construct pseudorandom permutations and pseudorandom functions.
SIAM J. Computing, 17(2):373–386, April 1988.
[134] Maurice P. Luby and C. Rackoff. A study of password security. In Carl Pomerance, editor, Proc.
CRYPTO 87, pages 392–397. Springer-Verlag, 1988. Lecture Notes in Computer Science No. 293.
[135] Ueli M. Maurer. Towards the equivalence of breaking the Diffie-Hellman protocol and computing
discrete algorithms. In Yvo G. Desmedt, editor, Proc. CRYPTO 94, pages 271–281. Springer, 1994.
Lecture Notes in Computer Science No. 839.
[136] R. J. McEliece. A Public-Key System Based on Algebraic Coding Theory, pages 114–116. Jet Propulsion
Lab, 1978. DSN Progress Report 44.
[137] R. Merkle and M. Hellman. Hiding information and signatures in trapdoor knapsacks. IEEE Trans.
Inform. Theory, IT-24:525–530, September 1978.
[138] Ralph C. Merkle. A certified digital signature. In G. Brassard, editor, Proc. CRYPTO 89, pages 218–
238. Springer-Verlag, 1990. Lecture Notes in Computer Science No. 435.
[139] Ralph Charles Merkle. Secrecy, authentication, and public key systems. Technical report, Stanford
University, Jun 1979.
[140] M. Merritt. Cryptographic Protocols. PhD thesis, Georgia Institute of Technology, February 1983.
[141] S. Micali, C. Rackoff, and R. H. Sloan. The notion of security for probabilistic cryptosystems.
SIAM J. Computing, 17(2):412–426, April 1988.
[142] Gary L. Miller. Riemann’s hypothesis and tests for primality. JCSS, 13(3):300–317, 1976.
[143] M. Naor and O. Reingold. Synthesizers and their application to the parallel construction of pseudo-
random functions. In Proc. 36th IEEE Symp. on Foundations of Comp. Science. IEEE, 1995.
[144] M. Naor and O. Reingold. Number-theoretic constructions of efficient pseudo-random functions. In
Proc. 38th IEEE Symp. on Foundations of Comp. Science. IEEE, 1997.
[145] M. Naor and M. Yung. Universal one-way hash functions and their cryptographic applications. In
Proc. 21st ACM Symp. on Theory of Computing, pages 33–43, Seattle, 1989. ACM.
[146] M. Naor and M. Yung. Public-key cryptosystems provably secure against chosen ciphertext attack.
In Proc. of the Twenty-Second Annual ACM Symposium on Theory of Computing, pages 427–437,
Baltimore, Maryland, 1990. ACM.
Cryptography: Lecture Notes 239
[147] National Institute of Standards and Technology (NIST). FIPS Publication 46: Announcing the Data
Encryption Standard, January 1977. Originally issued by National Bureau of Standards.
[148] R. M. Needham and M. D. Schroeder. Using encryption for authentication in large networks of com-
puters. Communications of the ACM, 21(12):993–999, December 1978.
[149] R. M. Needham and M. D. Schroeder. Authentication revisited. Operating Systems Review, 21(1):7,
January 1987.
[150] I. Niven and H. S. Zuckerman. An Introduction to the Theory of Numbers. Wiley, 1972.
[151] A. M. Odlyzko. Cryptanalytic attacks on the multiplicative knapsack scheme and on Shamir’s fast
signature scheme. IEEE Trans. Inform. Theory, IT-30:594–601, July 1984.
[152] A. M. Odlyzko. Discrete logarithms in finite fields and their cryptographic significance. In T. Beth,
N. Cot, and I. Ingemarsson, editors, Proc. EUROCRYPT 84, pages 224–314, Paris, 1985. Springer.
Lecture Notes in Computer Science No. 209.
[153] C. Park and K. Kurosawa. New elgamal type threshold signature scheme. IEICE Trans. on Fund.
Electr. Comm. and Comp. Sci., E79–A(1):86–93, 1996.
[154] T. Pedersen. Distributed provers with applications to undeniable signatures. In EuroCrypt’91, 1991.
[155] T.P. Pedersen. Non-interactive and information-theoretic secure verifiable secret sharing. In J. Feigen-
baum, editor, Proc. CRYPTO 91, pages 129–140. Springer, 1992. Lecture Notes in Computer Science
No. 576.
[156] E. Petrank and C. Rackoff. Cbc mac for real-time data sources. Manuscript, 1997.
[157] J. Plumstead. Inferring a sequence generated by a linear congruence. In Proc. 23rd IEEE Symp. on
Foundations of Comp. Science, pages 153–159, Chicago, 1982. IEEE.
[158] S. C. Pohlig and M. E. Hellman. An improved algorithm for computing logarithms over GF (p) and
its cryptographic significance. IEEE Trans. Inform. Theory, IT-24:106–110, January 1978.
[159] D. Pointcheval and J. Stern. Security proofs for signatures. In Proceedings of EUROCRYPT’96, volume
1070 of Lecture Notes in Computer Science, pages 387–398. Springer-Verlag, 1996.
[160] J. M. Pollard. Theorems on factorization and primality testing. Proc. Cambridge Philosophical Society,
76:521–528, 1974.
[161] V. Pratt. Every prime has a succinct certificate. SIAM J. Comput., 4:214–220, 1975.
[162] B. Preneel and P.C. van Oorschot. On the security of two MAC algorithms. In Proceedings of EURO-
CRYPT’96, volume 1070 of Lecture Notes in Computer Science, pages 19–32. Springer-Verlag, 1996.
[163] Bart Preneel and Paul C. van Oorschot. MDx-MAC and building fast MACs from hash functions. In
Don Coppersmith, editor, Proc. CRYPTO 94, pages 1–14. Springer, 1995. Lecture Notes in Computer
Science No. 963.
[165] M. Rabin. Probabilistic algorithms for testing primality. J. Number Theory, 12:128–138, 1980.
[166] M. Rabin. How to exchange secrets by oblivious transfer. Technical Report TR-81, Harvard Aiken
Computation Laboratory, 1981.
[167] T. Rabin and M. Ben-Or. Verifiable secret sharing and multiparty protocols with honest majority. In
21st ACM Symposium on Theory of Computing, pages 73–85, 1989.
240 Goldwasser and Bellare
[168] R. L. Rivest and A. Shamir. How to expose an eavesdropper. Communications of the ACM, 27:393–395,
April 1984.
[169] Ronald L. Rivest. The MD5 message-digest algorithm. Internet Request for Comments, April 1992.
RFC 1321.
[170] Ronald L. Rivest, Adi Shamir, and Leonard M. Adleman. A method for obtaining digital signatures
and public-key cryptosystems. Communications of the ACM, 21(2):120–126, 1978.
[171] John Rompel. One-way functions are necessary and sufficient for secure signatures. In Proc. 22nd
ACM Symp. on Theory of Computing, pages 387–394, Baltimore, Maryland, 1990. ACM.
[172] J. Rosser and L. Schoenfield. Approximate formulas for some functions of prime numbers. Illinois J.
Math., 6:64–94, 1962.
[173] RSA Data Security, Inc. PKCS #1: RSA Encryption Standard, June 1991. Version 1.4.
[174] RSA Data Security, Inc. PKCS #7: Cryptographic Message Syntax Standard, June 1991. Version 1.4.
[175] K. Sako and J. Kilian. Receipt-free mix-type voting schemes. a practical implementation of a vot-
ing booth. In EUROCRYPT’95, volume 921 of Lecture Notes in Computer Science, pages 393–403.
Springer-Verlag, 1995.
[176] M. Santha and U. V. Vazirani. Generating quasi-random sequences from slightly-random sources. In
Proc. 25th IEEE Symp. on Foundations of Comp. Science, pages 434–440, Singer Island, 1984. IEEE.
[177] Alredo De Santis, Yvo Desmedt, Yair Frankel, and Moti Yung. How to share a function securely. In
Proc. 26th ACM Symp. on Theory of Computing, pages 522–533, Montreal, Canada, 1994. ACM.
[178] C. P. Schnorr. Efficient signature generation by smart cards. Journal of Cryptology, 4:161–174, 1991.
[179] R. J. Schoof. Elliptic curves over finite fields and the computation of square roots mod p. Math.
Comp., 44:483–494, 1985.
[180] R. Schroeppel and A. Shamir. A TS 2 = O(2n) time/space tradeoff for certain NP-complete problems.
In Proc. 20th IEEE Symp. on Foundations of Comp. Science, pages 328–336, San Juan, Puerto Rico,
1979. IEEE.
[181] A. Shamir. How to share a secret. Communications of the ACM, 22:612–613, November 1979.
[182] A. Shamir. On the cryptocomplexity of knapsack schemes. In Proc. 11th ACM Symp. on Theory of
Computing, pages 118–129, Atlanta, 1979. ACM.
[184] A. Shamir. A polynomial-time algorithm for breaking the basic Merkle-Hellman cryptosystem. In
Proc. 23rd IEEE Symp. on Foundations of Comp. Science, pages 145–152, Chicago, 1982. IEEE.
[185] A. Shamir, R. L. Rivest, and L. M. Adleman. Mental poker. In D. Klarner, editor, The Mathematical
Gardner, pages 37–43. Wadsworth, Belmont, California, 1981.
[186] C. E. Shannon. A mathematical theory of communication. Bell Sys. Tech. J., 27:623–656, 1948.
[187] C. E. Shannon. Communication theory of secrecy systems. Bell Sys. Tech. J., 28:657–715, 1949.
[188] V. Shoup. Oaep reconsidered. In CRYPTO’01, Lecture Notes in Computer Science. Springer-Verlag,
2001.
[189] V. Shoup and A. Rubin. Session key distribution for smart cards. In U. Maurer, editor, Proc. CRYPTO
96. Springer-Verlag, 1996. Lecture Notes in Computer Science No. 1070.
Cryptography: Lecture Notes 241
[190] R.D. Silverman. The multiple polynomial quadratic sieve. Mathematics of Computation, 48:329–339,
1987.
[191] R. Solovay and V. Strassen. A fast Monte-Carlo test for primality. SIAM J. Computing, 6:84–85, 1977.
[192] William Stallings. Network and Internetwork Security Principles and Practice. Prentice Hall, 1995.
[193] J.G. Steiner, B.C. Neuman, and J.I. Schiller. Kerberos: an authentication service for open network
systems. In Usenix Conference Proceedings, pages 191–202, Dallas, Texas, February 1988.
[194] Joseph D. Touch. Performance analysis of MD5. Proceedings SIGCOMM, 25(4):77–86, October 1995.
Also at ftp://ftp.isi.edu/pub/hpcc-papers/touch/sigcomm95.ps.Z.
[195] Gene Tsudik. Message authentication with one-way hash functions. ACM SIGCOMM, Computer
Communication Review, 22(5):29–38, October 1992.
[196] P. van Oorschot and M. Wiener. Parallel collision search with applications to hash functions and
discrete logarithms. In Proceedings of the 2nd ACM Conf. Computer and Communications Security,
November 1994.
[197] U. V. Vazirani. Towards a strong communication complexity theory, or generating quasi-random
sequences from two communicating slightly-random sources. In Proc. 17th ACM Symp. on Theory of
Computing, pages 366–378, Providence, 1985. ACM.
[198] U. V. Vazirani and V. V. Vazirani. Trapdoor pseudo-random number generators, with applications
to protocol design. In Proc. 24th IEEE Symp. on Foundations of Comp. Science, pages 23–30, Tucson,
1983. IEEE.
[199] Umesh V. Vazirani and Vijay V. Vazirani. RSA bits are 732 + ϵ secure. In D. Chaum, editor, Proc.
CRYPTO 83, pages 369–375, New York, 1984. Plenum Press.
[200] J. von Neumann. Various techniques for use in connection with random digits. In von Neumann’s
Collected Works, volume 5, pages 768–770. Pergamon, 1963.
[201] A. C. Yao. Theory and application of trapdoor functions. In Proc. 23rd IEEE Symp. on
Foundations of Comp. Science, pages 80–91, Chicago, 1982. IEEE.
[202] A.C. Yao. Protocols for secure computations. In Proc. 23rd IEEE Symp. on Foundations of Comp.
Science, pages 160–164, Chicago, 1982. IEEE.
[203] A.C. Yao. How to generate and exchange secrets. In Proc. 27th IEEE Symp. on Foundations of
Comp. Science, pages 162–167, Toronto, 1986. IEEE.
C H A P T E R A
Proposition A.1 Let C(N, q) denote the probability of at least one collision when we throw q ≥ 1 balls at
random into N ≥ q buckets. Then
q(q − 1)
C(N, q) ≤ .
2
Also N
C(N, q) ≥ 1 − e−q(q−1)/2N ,
√
and for 1 ≤ q ≤ 2N
q(q − 1)
C(N, q) ≥ 0.3 · .
N
242
Cryptography: Lecture Notes 243
In the proof we will find the following inequalities useful to make estimates.
1
1 −e · x ≤ 1 − e−x ≤ x .
Proof of Proposition A.1: Let Ci be the event that the i-th ball collides with one of the previous ones.
Then P [Ci ] is at most (i — 1)/N , since when the i-th ball is thrown in, there are at −most i 1
different occupied slots and the i-th ball is equally likely to land in any of them. Now
C(N, q) = P [C1 ∨ C2 ∨ · · · ∨ Cq]
≤ P [C1] + P [C2] + · · · + P [Cq]
0 1 q− 1
≤ N + +···+
N
N
q(q − 1)
= 2N .
This proves the upper bound. For the lower bound we let Di be the event that there is no collision after
having thrown in the i-th ball. If there is no collision after throwing in i balls then they must all be occupying
different slots, so the probability of no collision upon throwing in the (i + 1)-st ball is exactly (N − i)/N .
That is,
P [D i+1 | Di ] = N − = 1 − i .
N N
i
Also note P [D1] = 1. The probability of no collision at the end of the game can now be computed via
1 − C(N, q) = P [Dq]
= P [Dq | Dq−1] · P [Dq−1]
. .
q−1
Y
= P [Di+1 | Di ]
i=1
q−1
= Y
i=1 i
1− N .
Note that i/N 1. So we can use the inequality 1 x e−x for each term of the above expression. This
≤ − ≤
means the above is not more than
q−1
Y
e−i/N = e−1/N −2/N −···−(q−1)/N = e−q(q−1)/2N .
i=1
As of today, we do not even know how to prove a linear lower bound on the time required to solve an NP-
complete problem. Thus, in our development of a theory of cryptography in the presence of a computationally
bounded adversary we must resort to making assumptions about the existence of hard problems. In fact, an
important current research topic in cryptography (on which much progress has been made in recent years)
is to find the minimal assumptions required to prove the existence of “secure” cryptosystems.
Our assumptions should enable us to quickly generate instances of problems which are hard to solve for
anyone other than the person who generated the instance. For example, it should be easy for the sender of
a message to generate a ciphertext which is hard to decrypt for any adversary (naturally, in this example,
it should also be easy for the intended recipient of the message to decrypt the ciphertext). To formally
describe our assumptions (the existence of one way functions and trapdoor function) we first need to recall
some complexity theory definitions.
The class of languages P is classically considered to be those languages which are ‘easily computable’. We
will use this term to refer to these languages and the term ‘efficient algorithm’ to refer to a polynomial time
Turing machine.
244
Cryptography: Lecture Notes 245
1. x ∈ L ⇒ ∃y with |y| ≤ l(|x|) such that M (x, y) accepts and M terminates after at most p(|x|) steps.
2. x /∈ L ⇒ ∀y with |y| ≤ l(|x|), M (x, y) rejects.
Note that this is equivalent to the (perhaps more familiar) definition of L∈ NP if there exists a non-
deterministic polynomial time Turing machine M which accepts x if and only if ∈x L. The string y above
corresponds to the guess of the non-determinstic Turing machine.
We know that P ⊆NP and P BPP. ⊆ We do not know if these containments are strict although it is often
conjectured to be the case. An example of a language known to be in BPP but not known to be in P is the
language of all prime integers (that is, primality testing). It is not known whether BPP is a subset of NP.
From now on we will consider probabilistic polynomial time Turing machines as “efficient algorithms” (ex-
tending the term previously used for deterministic polynomial time Turing machines). We also call the class
of languages in BPP “easily computable”. Note the difference between a non-deterministic Turing machine
and a probabilistic Turing machine. A non-deterministic machine is not something we could implement in
practice (as there may be only one good guess y which will make us accept). A probabilistic machine is
something we could implement in practice by flipping coins to yield the string y (assuming of course that
there is a source of coin flips in nature). Some notation is useful when talking about probabilistic Turing
machines.
x. Pr[M (x) = z] is the probability of z being the output of M on input x (where the probability is taken
over the possible internal coin tosses made by M during its execution). M (x, y) will denote the outcome of
M on input x when internal coin tosses are y.
Definition B.1 A Monte Carlo algorithm is a probabilistic algorithm M for which there exists a polynomial
P such that for all x, M terminates within P (|x|) steps on input x. Further,
2
Pr[M(x) is correct ] >
3
(where the probability is taken over the coin tosses of M).
A Las Vegas algorithm is a probabilistic algorithm M for which there exists a polynomial p such that for all
Σ∞
x, E(running time) = t · Pr[M(x) takes exactly t steps] < p(|x|). Further, the output of M(x) is always
t=1
correct.
All Las Vegas algorithms can be converted to Monte Carlo algorithms but it is unknown whether all Monte
Carlo algorithms can be converted to Las Vegas algorithms. Some examples of Monte Carlo algorithms are
primality tests such as Solovay Strassen (see [191]) or Miller-Rabin (see [165]) and testing the equivalence of
multivariate polynomials and some examples of Las Vegas algorithms are computing square roots modulo a
prime p, computing square roots modulo a composite n (if the factors of n are known) and primality tests
based on elliptic curves (see [4] or [96]).
Definition B.2 A non-uniform algorithm A is an infinite sequence of algorithms {Mi} (one for each input
size i) such that on input x, M|x|(x) is run. We say that A(x) accepts if and only if M|x|(x) accepts. We
say that A is a polynomial time non-uniform algorithm if there exist polynomials P and Q such that M|x|
(x) terminates within P (|x|) steps and the size of the description of Mi (according to some standard
encoding of all algorithms ) is bounded by Q(|i|).
Definition B.3 We say that a language L is in P/poly if ∃ a polynomial time non-uniform algorithm
A = {Mi} such that x ∈ L iff M|x|(x) accepts.
There are several relationships known about P/poly. It is clear that P ⊂ P/poly and it has been shown by
Adleman that BPP ⊂ P/poly.
We will use the term ‘efficient non-uniform algorithm’ to refer to a non-uniform polynomial time algorithm
and the term ‘efficiently non-uniform computable’ to refer to languages in the class P/poly.
Cryptography: Lecture Notes 247
B.3 Adversaries
We will model the computational power of the adversary in two ways. The first is the (uniform) adversary
(we will usually drop the “uniform” when referring to it). A uniform adversary is any polynomial time
probabilistic algorithm. A non-uniform adversary is any non-uniform polynomial time algorithm. Thus,
the adversary can use different algorithms for different sized inputs. Clearly, the non-uniform adversary is
stronger than the uniform one. Thus to prove that “something” is “secure” even in presence of a non-uniform
adversary is a better result than only proving it is secure in presence of a uniform adversary.
We thus need yet a stronger assumption which will guarantee the following. There exists a language L ∈
NP such that for every sufficiently large input size n, every uniform adversary makes (with high probability)
the wrong decision on many inputs x of length n when deciding whether x is in L. Moreover, we want it
to be possible, for every input size n, to generate input x of length n such that with high probability every
uniform adversary will make the wrong decision on x.
The assumption that will guarantee the above is the existence of (uniform) one way functions. The assump-
tion that would guarantee the above in the presence of non-uniform adversary is the existence non-uniform
one way functions. For definitions, properties, and possible examples of one-way functions see Chapter 2.
Many important constructions of cryptographic primitives are based on problems from number theory which
seem to be computationally intractable. The most well-known of these problems is that of factoring
composite integers. In order to work with these problems, we need to develop some basic materiel on
number theory and number theoretic algorithms. Accordingly, we provide here a mini-course on this subject.
The materiel here will be used later when we discuss candidate example one-way and trapdoor functions.
There are many sources for information on number theory in the literatures. For example try Angluin’s
notes [7] and Chapter 33 of Cormen, Leiserson and Rivest [59].
Notation: am is a multiplied by itself m times. Etc. Namely, notation is what you expect. What is a−m?
It is (a−1)m. Note that it “works” like it should.
These groups are all infinite. We are usually interested in finite ones. In such a case:
248
Cryptography: Lecture Notes 249
Euclid’s algorithm can be used to compute GCDs in polynomial time. The way it works is to repeatedly use
the identity gcd(a, b) = gcd(b, a mod b). For examples, see page 10 of [7].
What is the running time? Each division stage takes quadratic time and we have k stages, which would say
it is a O(k3) algorithm. But see Problem 33-2, page 850, of [59]. This yields the following:
Theorem C.3 Euclid’s algorithm can be implemented to use only O( |a | · | b| ) bit operations to compute
gcd(a, b). That is, for k-bit numbers we get a O(k2) algorithm.
Fact C.4 gcd(a, b) = 1 if and only if there exist integers u, v such that 1 = au + bv.
The Extended Euclid Algorithm is given a, b and it returns not only d = gcd(a, b) but integers u, v such
that d = au + bv. It is very similar to Euclid’s algorithm. We can keep track of some extra information at
each step. See page 11 of [7].
Addition is now the following: Given a, b, n with a, b∈ Zn compute a + b mod n. This is still linear
time. Ie. two k-bit numbers can be added in O(k) time. Why? You can’t go much over N . If you do,
just subtract n. That too is linear time.
Taking a mod n means divide a by n and take remainder. Thus, it takes quadratic time.
250 Goldwasser and Bellare
Multiplication of a and b modulo n: First multiply them, which takes O( |a | · | b| ) bit operations. Then
divide by n and take the remainder. We saw latter too was quadratic. So the whole thing is quadratic.
Zn is a group under addition modulo N . This means you can add two elements and get back an element of
the set, and also subtraction is possible. Under addition, things work like you expect.
We now move to Zn∗ . We are interested in the multiplication operation here. We want to see that it
is a group, in the sense that you can multiply and divide. We already saw how to multiply.
Theorem C.5 There is a O(k 2 ) algorithm which given a, n with a ∈ Zn∗ outputs b ∈ Zn∗ satisfying
ab ≡ 1 (mod n), where k = |n|.
See page 12 of [7]. The algorithms uses the extended Euclid. We know that 1 = gcd(a, n). Hence it can
find integers u, v such that 1 = au + nv. Take this modulo n and we get au ≡ 1 (mod n). So can set
b = u mod n. Why is this an element of Zn∗ ? Claim that gcd(u, n) = 1. Why? By Fact C.4, which says
that 1 = au + nv means gcd(u, n) = 1.
The b found in the theorem can be shown to be unique. Hence:
∗
C.3.2 The main groups: Zn and Zn
Theorem C.6 For any positive integer n, Zn∗ forms a group under multiplication modulo n.
This means that a, ∈ b Zn∗ implies ab mod n is in Zn∗ , something one can verify without too much
difficulty. It also means we can multiply and divide. We have an identity (namely 1) and a cancellation
law.
Notation: We typically stop writing modn everywere real quick. It should just be understood.
The way to think about Zn∗ is like the real numbers. You can manipulate things like you are used to.
The following is a corollary of Fact C.1.
Corollary C.8 (Fermat’s little theorem) If p is prime then ap−1 ≡ 1 (mod p) for any a ∈ {1, . . . , p − 1}.
C.3.3 Exponentiation
This is the most basic operation for public key cryptography. The operation is just that given a, n, m where
a ∈ Zn and m is an integer, computes am mod n.
Example C.9 Compute 221 mod 22. Naive way: use 21 multiplications. What’s the problem with this? It
is an exponential time algorithm. Because we want time poly(k) where k = |n| . So we do it by repeated
squaring:
21 ≡ 2
≡ 4
22
≡ 16
24
≡ 14
8
2
≡ 20
16
2
Cryptography: Lecture Notes 251
This is the repeated squaring algorithm for exponentiation. It takes cubic time.
Theorem C.10 There is an algorithm which given a, n, m with a, m ∈ Zn outputs am mod n in time O(k3)
where k = |n|. More precisely, the algorithm uses at most 2k modular multiplications of k-bit numbers.
Algorithm looks at binary expansion of m. In example above we have 21 = 10101. What we did is collect
all the powers of two corresponding to the ones and multiply them.
4 3 2 1 0
a16 a8 a4 a2 a1
1 0 1 0 1
Exponentiate(a, n, m)
The chinese remainder theorem considers the question of recombining a1, a2 back to get y. It says there is
a unique way to do this under some conditions, and under these conditions says how.
Example C.11 m = 6 = 3 ∗ 2
0 (0, 0)
→
1 → (1, 1)
2
→ (2,
(0, 1)
3
0)→ (1,
4 → (2, 1)
5
0)
Example C.12 m = 4 = 2 ∗ 2
0 (0, 0)
→
1 → (1, 1)
2 → (1, 1)
→ (0,
3
0)
The difference here is that in the first example, the association is unique, in the second it is not. It turns
out uniqueness happens when the m1, m2 are relatively prime. Here is a simple form of the theorem.
252 Goldwasser and Bellare
Theorem C.13 [Chinese Remainder Theorem] Let m1, m2, . . . , mk be pairwise relatively prime integers.
That is, gcd(mi , mj ) = 1 for 1 ≤ i < j ≤ k. Let ai ∈ Zmi for 1 ≤ i ≤ k and set m = m1 m2 · · · mk .
Then there exists a unique y ∈ Zm such that y ≡ ai mod mi for i = 1 . . . k. Furthermore there is an O(k2) time
algorithm to compute y given a1 , a2 , m1 , m2 , where k = max(|m1 |, |m2 |).
m
Proof: For each i, let ni = m
∈ Z. By hypothesis, gcd(mi , ni ) = 1 and hence ∃bi ∈ Zm i such that
i
1 mod mi
ni bi ≡ 1 mod mi . Let ci = bi ni . Then ci = 0 mod m for j /= .
ij
k
Σ
Set y = ciai mod m. Then y ≡ ai mod mi for each i.
i=1
Further, if y′ ≡ ai mod mi for each i then y′ ≡ y mod mi for each i and since the mi’s are pairwise relatively
prime it follows that y ≡ y′ mod m, proving uniqueness.
Remark C.14 The integers ci appearing in the above proof will be referred to as the Chinese Remainder
Theorem coefficients. Note that the proof yields a polynomial time algorithm for finding y because the
elements bi ∈ Zmi can be determined by using the Euclidean algorithm and the only other operations
involved are division, multiplication, and addition.
A more general form of the Chinese Remainder Theorem is the following result.
Theorem C.15 Let ai ∈ Zmi for 1 ≤i k.≤ A necessary and sufficient condition that the system of
congruences x ≡ ai mod mi for 1 ≤ i≤ k be solvable is that gcd(mi , mj|) (ai− aj ) for 1≤ i < j≤ k. If
a solution exists then it is unique modulo lcm(m1, m2, . . . , mk).
j
Claim C.16 For each integer j ≥ 0, a ≡ x2j mod p2 . Proof: The claim is certainly true for j = 0. Suppose
j
that for j > 0, a ≡ xj2 mod p2 .
Then j j j j j+1
2
j+1 1
Expanding and adding 4a to both sides gives x2 +2a+a2 x−2 ≡ 4a mod p2 and therefore, (x + a
) ≡
j+1 j j 2 j xj
a mod p2 or x2 2
j+1
j+1 ≡ a mod p .
From the claim, it follows that after [log k| iterations we will obtain a solution to a ≡ x2 mod pk.
⟨a⟩ = { ai : i ≥ 0 } .
Let m = G | the order of G. We know that a0 is the identity, call it 1, and am = 1 also. So the sequence
| be
repeats after m steps, ie. am+1 = a, etc. But it could repeat before too. Let’s look at an example.
What we see is that sometimes we get everything, sometimes we don’t. It might wrap around early.
Let t = a|⟨ .⟩|Then we know that t divides m. And we know that in fact a ⟨ =⟩ a0, {a1, . . . , at−1 . That
} is,
these are the distinct elements. All others are repeats.
Definition C.19 The order of an element a is the least positive integer t such that at = 1. That is,
order(a) = |⟨a⟩|.
Computation in the indices can be done modulo t. That is, ai = ai mod t. This is because at = a0 = 1.
What’s the inverse of ai? Think what it “should” be: a−i. Does this make sense? Well, think of it as (a−1)i.
This is correct. On the other hand, what is it as member of the subgroup? It must be aj for some j.
Well j = t − i. In particular, inverses are pretty easy to compute if you are given the index.
Similarly, like for real numbers, multiplication in the base corresponds to addition in the exponent. Namely
ai+j = ai · aj . Etc.
Note this means that for any y ∈ G there is a unique i ∈ {0, . . . , m − 1} such that g i = y, where m = |G|.
Notation: This unique i is denoted logg(y) and called the discrete logarithm of x to base g.
254 Goldwasser and Bellare
Consider the following problem. Given g, y, figure out logg(y). How could we do it? One way is to go
through all i = 0, . . . , m
− 1 and for each i compute g i and check whether g i = y. But this process
takes exponential time.
It turns out that computing discrete logarithms is hard for many groups. Namely, there is no known
polynomial time algorithm. In particular it is true for Zp∗ where p is a prime.
∗
C.5.2 The group Zp
Remark C.22 What is the order of Zp∗ ? It is φ(p), the number of positive integers below p which
are relatively prime to p. Since p is prime this is p − 1. Note the order is not prime! In particular, it is even
(for p ≥ 3).
Now, how can we use this function? Well, first we have to set it up. This requires two things. First that we
can find primes; second that we can find generators.
We begin with the second. We have to look inside Zp∗ and find a generator. How? Even if we have
a candidate, how do we test it? The condition is that ⟨g⟩ = G which would take |G| steps to check.
In fact, finding a generator given p is in general a hard problem. In fact even checking that g is a generator
given p, g is a hard problem. But what we can exploit is that p = 2q + 1 with q prime. Note that the order
of the group Zp∗ is p − 1 = 2q.
Fact C.23 Say p = 2q + 1 is prime where q is prime. Then g ∈ Zp∗ is a generator of Zp∗ iff g q =/ 1 and
g2 /= 1.
In other words, testing whether g is a generator is easy given q. Now, given p = 2q + 1, how do we find a
generator?
So how many generators are there in Zp∗ ? All things of form g i with i not divisible by 2 or q and i = 1, . . . ,
2q. Namely all i in Z2∗q . So there are φ(2q) = q − 1 of them.
So how do we find a generator? Pick g ∈ Zp∗ at random, and check that g q /= 1 and g 2 1. If it fails, try
again, up to some number of times. What’s the probability of failure? In one try it is (q + 1)/2q so in l tries
it is
q+1 l
2q
which is rougly 2−l because q is very large.
Cryptography: Lecture Notes 255
Fact C.25 If N is the product of two primes, every square w ∈ ZN∗ has exactly four square roots, x, −x and
y, −y for some x, y ∈ ZN∗ . If you have two square roots x, y such that x /= ±y, then you can easily factor N .
The first fact is basic number theory. The second is seen like this. Say x > y are the roots. Consider
x2 —y2 = (x −y)(x + y) ≡0 mod N . Let a = x −y and b = x + y mod N . So N divides ab. So p divides
ab. Since p is prime, this means either p divides a or p divides b. Since 1≤ a, b < N this means either
gcd(a, N ) = p or gcd(b, N ) = p. We can compute the gcds and check whether we get a divisor of N .
However, the Jacobi Symbol does not generalize the Legendre Symbol in the respect of indicating the
quadratic character of a ∈ Z∗n when n is composite. For example, J9 (2) = J3 (2)J3 (2) = 1, although the
equation x2 ≡ 2 mod 9 has no solution.
The Jacobi Symbol also satisfies identities similar to those satisfied by the Legendre Symbol. We list these
here. For proofs of these refer to [150].
5. Jn(2) = (−1) 8 .
n− 1 m−1
2
6. If m and n are relatively prime odd integers then Jn(m) = (−1) 2 J (n).
m
256 Goldwasser and Bellare
Using these identities, the Jacobi Symbol Jn(a) where a ∈ Zn can be calculated in polynomial time even
without knowing the factorization of n. Recall that to calculate the Legendre Symbol in polynomial time
we can call upon Euler’s Theorem; namely, for a ∈ Z∗, where p is prime, we have J (a) ≡ a p−12 mod p.
p p
n−1
However, for a composite integer n it is not necessarily true
∗
that Jn(a) ≡ a 2 mod n for a ∈ Z∗n. In fact,
this statement is true for at most half of the elements in Z n . From this result, we can derive a Monte Carlo
primality test as we shall see later.
C.8 RSA
Here we have a composite modulus N = pq product of two distinct primes p and q of roughly equal length.
Let k = |N |; this is about 1024, say. It is generally believed that such a number is hard to factor.
Recall that φ(N ) =| ZN|∗ is the Euler Phi function. Note that φ(N ) = − (p −1)(q 1). (To be relatively
prime to N , a number must be divisible neither by p nor by q. Eliminating multiples of either yields this. Note
we use here that p /= q.)
Now let e be such that gcd(e, φ(N )) = 1. That is, e ∈ Zφ∗(N ) . The RSA function is defined by
f: ZN ∗ → ZN ∗
x e
›→ x mod N .
We will first show that the problem of deciding whether an integer is prime is in NP. Then we will discuss the
Solovay-Strassen and Miller-Rabin probabilistic primality tests which efficiently find proofs of compositeness.
Finally, we will give a primality test due to Goldwasser and Kilian which uses elliptic curves and which
efficiently finds a proof of primality.
C.9.1 PRIMES ∈ NP
We will first present two algorithms for testing primality, both of which are inefficient because they require
factoring as a subroutine. However, either algorithm can be used to show that the problem of deciding
whether an integer is prime is in NP. In fact, the second algorithm that is presented further demonstrates
that deciding primality is in UP∩coUP. Here UP denotes the class of languages L accepted by a polynomial
time nondeterministic Turing machine having a unique accepting path for each x ∈ L.
Proposition C.27 For an integer n > 1, the following statements are equivalent.
1. |Z∗n | = n − 1.
2. The integer n is prime.
3. There is an element g such that gn−1 ≡ 1 mod n and for every prime divisor q of n − 1,
∈
Zn∗n−1
g q /≡ 1 mod n.
Pratt’s algorithm runs as follows on input a prime p and outputs a proof (or certificate) that p is indeed
prime.
3. Prove that p is prime by proving that g is a generator of Zp∗ . Specifically, check that g p−1 ≡ 1 mod p
p−1
and for each prime qi check that g qi
/≡ 1 mod p.
4. Recursively show that qi is prime for 1 ≤ i ≤ k.
p
Note that if p is a prime, then Z∗p has ϕ(p − 1) = Ω(log log ) generators (see [172]). Thus, in order to
find a generator g by simply choosing elements of Zp∗p at random, we expect to have to choose O(log
log p) candidates for g. If we find a generator g of Zp∗ and if we can− factor p 1 and recursively prove that
−
the prime factors of p 1 are indeed primes then we have obtained a proof of the primality of p.
Unfortunately, it is
not known how to efficiently factor p− 1 for general p. Pratt’s primality testing algorithm does demonstrate,
however, that PRIMES ∈ NP because both the generator g in step 1 and the required factorization in step 2
can be guessed. Moreover, the fact that the factorization is correct can be verified in polynomial time and
the primality of each qi can be verified recursively by the algorithm. Note also, as Pratt showed in
[161] by a simple inductive argument, that the total number of primes involved is O(log p). Thus, verifying a
Pratt certificate requires O(log2 p) modular multiplications with moduli at most p.
258 Goldwasser and Bellare
The Solovay-Strassen primality test runs as follows on input an odd integer n and an integer k, indicating
the desired reliability.
Since the calculations involved in the Solovay-Strassen primality test are all polynomial time computable
(verify that this statement is indeed true for step 1), it is clear that the algorithm runs in time polynomial
in log n and k. The following result guarantees that if n is composite then in step 5 of the algorithm,
1 1 k
Pr[α i = β i mod n] ≤ 2and thus, Pr[α i= β mod
i n for 1 ≤ i ≤ k] ≤ 2.
Proposition C.28 Let n be an odd composite integer which is not a perfect square and let
n−1
G = {a ∈ Zn∗ such that Jn (a) ≡ a 2 mod n}. Then |G| ≤ 2 1 |Z ∗
n |.
Since n is composite and not a perfect square, it has a nontrivial factorization n = rpα where p is prime, α
is odd, and gcd(r, p) = 1.
n− 1
Suppose that a 2 ≡ mod n for all a ∈ Z∗n . Then
n (a)
J
n− 1
a 2 ≡ ±1 mod n for all a ∈ Zn∗ . (C.1)
n− 1 n− 1
∗
We first show that in fact a ≡ 1 mod n for all such a. If not, then there is an a ∈ Z
2
n
with a 2 ≡
−1 mod n. By the Chinese Remainder Theorem there is a unique element b ∈ Zn such that b ≡ 1 mod r and
n− 1 n− 1
b ≡ a mod pα . Then b ∈ Z∗ and n b
2 ≡ 1 mod r and b 2 ≡ −1 mod pα contradicting equation (C.1).
Therefore, Jn (a) = 1 for all a ∈ Z∗n .
However, by the Chinese Remainder Theorem, there is a unique element a ∈ Zrp such that a ≡ 1 mod r
and a ≡ z mod p where z is one of the p−12 quadratic nonresidues modulo p. Then a ∈ Z∗n and thus,
Jn(a) = Jr(1)Jp(z)α = −1 because α is odd. This is a contradiction.
Note that if we reach step 5 of the Solovay-Strassen algorithm then n is not a perfect square and each
ai ∈ Zn∗ because the algorithm checks for perfect powers in step 1 and computes gcd(ai , n) in step 3.
1
Thus, the hypotheses of Proposition C.28 are satisfied and for each 1 ≤ i ≤ k, Pr[αi = βi mod n]
2 ≤ .
Remark The assertion in Proposition C.28 is in fact true even if n is a perfect square. The proof of the
more general statement is very similar to the proof of Proposition C.28. For details refer to [7].
Cryptography: Lecture Notes 259
Finally, it follows from Proposition C.28 that the Solovay-Strassen algorithm runs correctly with high prob-
ability. Specifically,
Pr[Solovay-Strassen outputs probably prime | n is composite] ≤ 1 k
and ( )
2
Fermat’s Little Theorem states that for a prime p and ∈ a Zp∗ ,≡ ap−1 1 mod p. This suggests that
perhaps a possible way to test if n is prime might be to check, for instance, ≡if 2n−1 1 mod n.
≡
Unfortunately, there are composite integers n (called base-2 pseudoprimes) for which 2 n−1
1
mod ≡n. For example, 2340 1· mod 341 and yet 341 = 11 31. In fact, replacing 2 in the above ∈
exponentiation by a random a Z∗n would not help for some values of n because there are composite
integers n (called Carmichael numbers) for which an−1 ≡ 1 mod n for all a ∈ Z∗n . 561, 1105, and 1729 are
the first three Carmichael numbers.
The Miller-Rabin primality test overcomes the problems of the simple suggestions just mentioned by choosing
several random a ∈ Z∗n for which an−1 mod n will be calculated by repeated squaring. While computing
each modular exponentiation, it checks whether some power of a is a nontrivial square root of 1 modulo n
(that is, a root of 1 not congruent to±1 modulo n). If so, the algorithm has determined n to be composite.
The quality of this test relies on Proposition C.30 which Rabin proved in [165]. For a simpler proof which
only yields |{b : Wn(b) holds }| ≥ 12 (n −1) (but is nevertheless sufficient for the purposes of the Miller-Rabin
algorithm) see Chapter 33, pages 842-843 of [59].
Definition C.29 Let n be an odd positive integer. Denote the following condition on an integer b by Wn(b):
1. 1 ≤ b < n and
2. (i) bn−1 /≡ 1 mod n or
2
(ii) there is an integer i such that 2i | (n − 1) and b(n−1)/2 /≡ ±1 mod n but b(n−1)/2
i
≡ 1 mod n.
An integer b for which Wn(b) holds will be called a witness to the compositeness of n.
Remark Rabin originally defined the condition Wn(b) to hold if 1 ≤ b < n and either bn−1 /≡ 1 mod n or
i
for some integer i such that 2i (n| −1), 1 < gcd(b(n−1)/2 − 1, n) < n. In [165] Rabin proves that
the two definitions for Wn(b) are equivalent. This condition was in fact first considered by Miller (see
[142]), who used it to give a nonprobabilistic test for primality assuming the correctness of the extended
Riemann hypothesis. Rabin’s results, however, do not require any unproven assumptions.
The Miller-Rabin algorithm runs as follows on input an odd integer n and an integer k, indicating the desired
reliability.
Proposition C.30 shows that the Miller-Rabin algorithm runs correctly with high probability. Specifically,
Pr[Miller-Rabin outputs probably prime | n is composite] ≤ 1 k
( )
4
and
Pr[Miller-Rabin outputs probably prime | n is prime] = 1.
Furthermore, Miller-Rabin runs in time polynomial in log n and k as all the computations involved can be
performed in polynomial time.
√
Proof: Suppose p is not prime. Then there is a prime d ≤ p such that d p and therefore, by the
∗
q
hypothesis, a /≡ 1 mod d and a ≡ 1 mod d. Thus,
√ |
in Z , ord(a) | q. But q is prime and a does√ not have
∗
order 1. Hence,
d q = ord(a) ≤ |Zd | = d − 1 < p and this contradicts the assumption that q > p.
Note that if p is prime then in step 4, the condition aq ≡ 1 mod p will be verified with probability at least
q−1 √
√1 > (since q > p). However, in order for the algorithm to succeed, there must exist a prime divisor
p−2 p
Cryptography: Lecture Notes 261
√
q of p − 1 such that q > p, and this must occur at every level of the recursion. Namely, there must be a
sequence of primes q = q0, q1, . . . , qk, where qk is small enough to identify as a known prime, such that
√
qi | (qi−1 − 1) and qi > qi−1 for i = 1, . . . , k and this is very unlikely.
This obstacle can be overcome by working with elliptic curves modulo primes p instead of Z∗p . This will
allow us to randomly generate for any prime modulus, elliptic groups of varying orders. In the following
sections, we will exploit this additional freedom in a manner similar to Lenstra’s elliptic curve factoring
algorithm.
The Goldwasser-Kilian algorithm runs as follows on input a prime integer p /= 2, 3 of length l and outputs a
proof that p is prime.
2. Compute |Ea,b (Zp )| using the polynomial time algorithm due to Schoof (see [179]).
4. Select a point M = (x, y) on Ea,b(Zp) by choosing x Z∈p at random and taking y to be the square
root of x3 + ax + b, if one exists. If x3 + ax + b is a quadratic nonresidue modulo p then repeat the
selection process.
5. Compute q · M .
)
log
(i) If q · M = O output (a, b, q, ). Then, if q (
, [5]), recursively prove that is prime
2l
log l
M > 1
q
(specifically, repeat from step 1 with p replaced by q). Otherwise, use the deterministic test due
to Adleman, Pomerance, and Rumely (see [5]) to show that q is prime and terminate.
(ii) If q · M /= O then repeat from step 4.
Remark The test mentioned in step 5i is currently the best deterministic algorithm for deciding whether
an input is prime or composite. It terminates within (log n)O(log log log n) steps on input n.
Theorem C.32 Let n > 1 be an integer with gcd(n, 6) = 1. Let Ea,b(Zn) be an elliptic curve modulo n
and let M O be a point on Ea,b(Zn). If there is a prime integer q such that q > (n1/4 + 1)2 and q · M = O
then n is prime.
262 Goldwasser and Bellare
√
Proof: Suppose that n were composite. Then there is a prime divisor p of n such that p < n.
Let ordE(M ) denote the order of the point M on the elliptic curve E. If q · M = O then q · Mp = Op. Thus,
ordEp (Mp) | q.
√
However, ordEp (Mp) ≤ | Ea,b(Zp) | ≤ p + 1 + 2 p (by Hasse’s Inequality)
< n1/2 + 1 + 2n1/4
<q
and since q is prime, we have that ordEp (Mp) = 1. Therefore, Mp = Op which implies that M = O, a
contradiction.
Theorem C.33 By using the sequence of quadruples output by the Goldwasser-Kilian algorithm, we can
verify in time O(log4 p) that p is indeed prime.
Proof: Let p0 = p. The sequence of quadruples output by the algorithm will be of the form (a1, b1, p1, M1), (a2, b2, p2, M2),
1/2 1/4
where gcd(4a 3
i + 27b
2
i , pi−1) /= 1, Mi O is a point on Eai ,bi (Zp i−1 ), pi > pi−1 + 1 + 2pi−1 , and pi · Mi = O
for 1 ≤ i ≤ k. These facts can all be verified in O(log3 p) time for each value of i. By Theorem C.32 it
follows that pi prime
√ ⇒ pi−1 prime for 1 ≤ i ≤ k. Further, note that in step 3 of the algorithm, c ≥ 2 and
pi−1+2 pi−1 4
hence, pi ≤ 2 . Therefore, the size of k will be O(log p) giving a total of O(log p) steps. Finally,
pk can be verified to be prime in O(log p) time due to its small size.
Next, selecting the point M = (x, y) requires choosing an expected number of at most 2p
≈ 2 values
|Ea,b(Zp)|−1
3
for x before finding one for which x + ax + b is a quadratic residue modulo p. Note that the computation
of square roots modulo a prime p (to find y) can be done in O(log4 p) expected time. Since |Ea,b (Zp )|
= cq where q is prime, Ea,b (Zp ) is isomorphic to Zc1 q × Zc2 where c = c1 c2 and c2 |c1 . Therefore,
Ea,b (Zp ) has at least q − 1 points of order q and hence with probability
c
at cleast q−1 ≈ 1 , the point M selected
in step 4 q
will have order q. Thus, the expected number of points that must be examined before finding a point M of
order q will be c = O(log2 p). Further, the computation of q · M requires O(log p) additions, using repeated
doubling and so can be done in O(log3 p) time. Therefore, dealing with steps 4 and 5 requires O(log5 p)
expected time.
As remarked previously, the recursion depth is O(log p). Therefore, the only remaining consideration is to
determine how often an elliptic curve E | (Z ) has |a,bto bepselected before a,bE (Z p) = cq where 2
√ c = O(log√ p)
and q is prime. By the√presult
log p of Lenstra concerning the distribution of |E (Z )|
√ a,b p √ in (p + 1 − p, p + 1 + p)
(see [126]) this is O( ) where S is the set of integers in (p + 1 − p, p + 1 + p) of the desired form
p √ √
|S|−2
√ p √
) because S contains those integers in (p + 1 − p, p + 1 + p)
p+1+
cq. Note that |S| ≥ π( 2 ) − 2
p+1−
which are twice a prime. Therefore, π(if one assumes that the asymptotic distribution of primes holds in small
intervals, then the expected number of elliptic curves that must be considered is O(log2 p). However, there
is only evidence to assume the following conjecture concerning the number of primes in small intervals.
Cryptography: Lecture Notes 263
Conjecture C.34 There is a positive constant s such that for all x ∈ R≥2, the number of primes between
√
√ logxs
x and x + 2x is Ω x
.
Under this assumption, the Goldwasser-Kilian algorithm proves the primality of p in O((log p)11+s) expected
time.
in l is at least 1 − O(2−l
log log
l ). The Heath-Brown result is the following.
x≤
a≤2x
Using this theorem, Goldwasser and Kilian were able to prove in [96] that their algorithm terminates in
1
log log l
expected time O(l12) on at least a 1 − O(2l ) fraction of those primes of length l. In [4] Adleman and
Huang showed, by a more careful analysis of the Goldwasser-Kilian algorithm, that in fact the fraction of
primes of length l for which Goldwasser-Kilian may not terminate in expected polynomial time is strictly
exponentially vanishing. Further, they proposed a new algorithm for proving primality based on hyperelliptic
curves which they showed will terminate in exponential polynomial time on all prime inputs. Thus, the goal
of obtaining a Las Vegas algorithm has been finally achieved.
Pollard’s p − 1 Method
We begin by introducing a predecessor of the elliptic curve factoring algorithm which uses ideas analogous
to those used in the elliptic curve factoring algorithm. This algorithm, known as Pollard’s p− 1 method,
appears in [160]. Let n be the composite number that we wish to split. Pollard’s algorithm uses the idea
that if we can find integers e and a such that ae ≡ 1 mod p and ae /≡ 1 mod q for some prime factors p and
q of n then, since p | (ae − 1) and q / |(ae − 1), gcd(ae − 1, n) will be a nontrivial factor of n divisible by p
but not by q.
1. Choose an integer e that is a multiple of all integers less than some bound B. For example,Qe might
π(B)
be the least common multiple of all integers ≤ B. To simplify this, we might even√ let e = i=1 pαii
αi
is chosen minimally so that p ≥ n > { − } .
where p , p , . . . , are the primes ≤ B and α i
1 2 π(B)
p i min
p|n p 1
2. Choose a random integer a between 2 and n − 2.
264 Goldwasser and Bellare
4. Compute d = gcd(ae − 1, n) by the Euclidean algorithm. If 1 < d < n output the nontrivial factor d.
Otherwise, repeat from step 2 with a new choice for a.
To explain when this algorithm works, assume that the integer e is divisible by every integer ≤ B and that
p is a prime divisor of n such that p − 1 is the product of prime powers ≤ B. Then e = m(p − 1) for some
integer m and hence ae = a(p−1) m ≡ 1m = 1 mod p. Therefore, p | gcd(ae − 1, n) and the only way that
≡
we could fail to obtain a nontrivial factor of n in step 4 is if ae 1 mod n. In other words, we could only
fail here if for every prime factor q of n the order of a mod q divides e and this is unlikely.
Unfortunately, it is not true that for general n there is a prime divisor p of n for which p− 1 is divisible by
no prime power larger than B for a bound B of small size. If p −1 has a large prime power divisor for each
prime divisor p of n, then Pollard’s −p 1 method will work only for a large choice of the bound B and so
will be inefficient because the algorithm runs in essentially O(B) time. For example, if n is the product of
two √
different primes p and q where |p| ≈ |q| are primes and p − 1 and q − 1 are O ( )-smooth then the method
√
n
will likely require a bound B of size O( n).
Q αi
Reiterating, the problem is that given input n = pi where the pi’s are the distinct prime factors of n,
we are restricted by the possibility that none of the integers p−i 1 are sufficiently smooth. However, we
can ameliorate this restriction by working with the group of points defined over elliptic curves. For each
prime p we will obtain a large collection of groups whose orders essentially vary “uniformly” over the interval
√ √
(p + 1 − p, p + 1 + p). By varying the groups involved we can hope to always find one whose order is
smooth. We will then show how to take advantage of such a collection of groups to obtain a factorization of
n.
Remark The condition 4a3 + 27b2 =/ 0 ensures that the curve is nonsingular. That is, when the field F is
R, the tangent at every point on the curve is uniquely defined.
Let P , Q be two points on an elliptic curve Ea,b(F ). We can define the negative of P and the sum P + Q
on the elliptic curve Ea,b(F ) according to the following rules.
2. O + P = P + O = P .
3. Let P, Q /= O and suppose that P = (x1, y1), Q = (x2, y2).
(i) If P = −Q (that is, x1 = x2 and y1 = −y2) then we define P + Q = O
(ii) Otherwise, let
y1 − y2
α = x1 − x2 if P Q (C.2)
or
3x2 +
a1
α= if P = Q (C.3)
y1 + y2
Cryptography: Lecture Notes 265
That is, if the field F = R, α is the slope of the line defined by P and
Q, if P /= Q, or the slope of the tangent at P , if P = Q.
Then P + Q = R where R = (x3, y3) with x3 = α2 − (x1 + x2) and
y3 = α(x1 − x3) − y1.
It can be shown that this definition of addition on the elliptic curve is associative and always defined, and
thus it imposes an additive abelian group structure on the set Ea,b(F ) with O serving as the additive identity
of the group. We will be interested in F = Zp where p /= 2, 3 is a prime. In this case, addition in Ea,b(Zp)
can be computed in time polynomial in |p| as equations (C.2) and (C.3) involve only additions, subtractions,
and divisions modulo p. Note that to compute z −1 mod p where z ∈ Z∗p we can use the extended
Euclidean algorithm to compute an integer t such that tz ≡ 1 mod p and then set z−1 = t mod p.
To illustrate negation and addition, consider the elliptic curve y2 = x3 − x over R as shown in Figure C.1.
The graph is symmetric about the x-axis so that the point P is on the curve if and only if − P is on the
curve. Also, if the line l through two points P, Q /= O on the curve E(R) is not vertical then there is exactly
one more point where this line intersects the curve. To see this, let P = (x1, y1), Q = (x2, y2) and let
−y 2
y = αx + β be the equation of the line through P and Q where α = y1 2 if P =/ Q or α1= 3x +a if P = Q
x−1 x y1+y2
and β = y1 — αx1. Note that in the case where P = Q, we take to be the 2
tangent at in accordance with
l P
the rules of addition on the curve E(R). A point (x, αx + β) on the line l lies on the elliptic curve if and
only if (αx + β)2 = x3 + ax + b. Thus, there is one intersection point for each root of the cubic equation
− + β)2 + ax + b = 0. The numbers x1 and x2 are roots of this equation because (x1, αx1 + β) and
x3 (αx
(x2, αx2 + β) are, respectively, the points P and Q on the curve. Hence, the equation must have a third root
x3 where x1 + x2 + x3 = α2. This leads to the expression for x3 mentioned in the rules of addition for the
curve E(R). Thus, geometrically, the operation of addition on E(R) corresponds to drawing the line through
P and Q, letting the third intercept of the line with the curve be — R = (x, y) and taking R = (x, − y) to be
the sum P + Q.
Lenstra’s elliptic curve factoring algorithm works with elliptic curves Ea,b(Zn) defined over the ring Zn where
n is an odd, composite integer. The nonsingularity condition 4a3+27b2 /= 0 is replaced by gcd(4a3+27b2, n) =
1. The negation and addition rules are given as was done for elliptic curves over fields. However, the addition
of two points involves a division (refer to equations (C.2) and (C.3) in the rules for arithmetic on elliptic
curves given at the beginning of this section) which is not always defined over the ring Zn. For addition to be
defined the denominators in these equations must be prime to n. Consequently, Ea,b(Zn) is not necessarily
a group. Nevertheless, we may define a method for computing multiples · e P of a point∈ P Ea,b(Zn) as
follows.
2. If aj = 1 then S ← S + 2j P . If this sum is not defined (namely, the division in equation (C.2)
or equation (C.3) has failed) then output undefined and terminate.
4. Calculate 2j P := 2j−1 P + 2j−1 P . If this sum is not defined then output that e· P cannot be
calculated and terminate. Otherwise, repeat from step 2.
266 Goldwasser and Bellare
The elliptic curve algorithm will use1 this method which will be referred to as repeated doubling. Note that
if the repeated doubling method is unable to calculate a given multiple e· P and outputs undefined then
we have encountered points Q1 = (x1, y1) and Q2 = (x2, y2) on Ea,b(Zn) such that Q1 + Q2 is not defined
modulo n (the division in equation (C.2) or equation (C.3) has failed) and hence, either gcd(x1 − x2, n) or
gcd(y1 + y2, n) is a nontrivial factor of n.
Next, we state some facts concerning the relationship between elliptic curves defined over Zn and elliptic
curves defined over Zp when p is a prime divisor of n. Let a,∈b Zn be such that gcd(4a3 + 27b2, n) = 1.
Let p be a prime divisor of n and let ap = a mod p, bp = b mod p.
Further, given P = (x, y) ∈ Ea,b(Zn), define Pp = (x mod p, y mod p). Pp is a point on the elliptic curve
Eap,bp (Zp).
Fact C.38 Let P and Q be two points on Ea,b(Zn) and let p be a prime divisor of n. If P + Q is defined
modulo n then Pp + Qp is defined on Ea,b(Zp) and Pp + Qp = (P + Q)p. Moreover, if P =/ Q then the sum
P + Q is undefined modulo n if and only if there is some prime divisor q of n such that− the points Pq and
Qq add up to the point at infinity O on Eaq,bq (Zq) (equivalently, Pq = −Qq on Eaq,bq (Zq)).
1. Generate an elliptic curve Ea,b(Zn) and a point P = (x, y) on Ea,b(Zn) by randomly selecting x, y and
a in Zn and setting b = y2 − x3 − ax mod n.
2. Compute gcd(4a3 + 27b2, n). If 1 < gcd(4a3 + 27b2, n) < n then we have found a divisor of n and
we stop. If gcd(4a3 + 27b2, n) = 1 then 4a3 + 27b2 0/≡ mod p for every prime divisor p of n and
hence Ea,b is an elliptic curve over Zp for each prime divisor p of n and we may proceed. But if
gcd(4a3 + 27b2, n) = n then we must generate another elliptic curve Ea,b.
Qπ(B) αi
3. Set e = i=1
p iwhere p1, p2, . . . , pπ(B) are the primes ≤ B and αi is chosen maximally so that
α
≤
pi i
C. B and C are bounds that will be determined later so as to optimize the running time and
ensure that the algorithm will most likely succeed.
4. Compute e · P in Ea,b(Zn) by repeated doubling. Every time before adding two intermediate points
P1 = (x1, y1) and P2 = (x2, y2) check if gcd(x1 x2,−n) or gcd(y1 + y2, n) is a nontrivial factor of n. If so,
output the factor and stop. Otherwise, repeat from step 1.
An elliptic curve Ea,b(Zn) will lead to a nontrivial factorization of n if for some prime factors p and q of
n, e · Pp = O on Eap,bp (Zp) but Pq does not have order dividing e on Eaq,bq (Zq). Notice the analogy here between
Lenstra’s elliptic curve algorithm and Pollard’s p − 1 algorithm. In Pollard’s algorithm we seek prime divisors
p and q of n such that e is a multiple of the order of a ∈ Z∗p but not a multiple of the order
of a ∈ Zq∗ . Similarly, in Lenstra’s algorithm we seek prime divisors p and q of n such that e is a multiple
of the order of Pp ∈ Eap,bp (Zp) but not a multiple of the order of Pq ∈ Eaq,bq (Zq). However, there is a key
1
This statement is incorrect and will soon be corrected in these notes. For the method used in the algorithm, see section 2.3
of [129]
Cryptography: Lecture Notes 267
difference in versatility between the two algorithms. In Pollard’s algorithm, the groups Z∗p where p
ranges over the prime divisors of n are fixed so that if none of these groups have order dividing e then the
method fails. In Lenstra’s elliptic curve algorithm the groups Eap,bp (Zp) can be varied by varying a and b.
Hence, if for every prime divisor p|of n, Eap,bp (Z
| p) e, then we may still proceed by simply working over another
/ | values for a and b.
elliptic curve; that is, choosing new
Hence, either gcd(x1 − x2, n) or gcd(y1 + y2, n) is a nontrivial factor of n. The points P1, and P2 will be
encountered when (P1)p + (P2)p = O in Eap,bp (Zp) but (P1)q + (P2)q O in Eaq,bq (Zq).
and thus
B 1
≈ O e[β(log p) (log log p)1/2− (log log p)] ≈ O(Lβ (p)).
1/2
π(B) ≈ 2
log B
Hence, the time required for each iteration of the algorithm is O(Lβ(p)M (n)(log C)). In choosing C, note
that we would like e to be a multiple of |Eap ,bp (Zp )| for some prime divisor p of n and thus it is
sufficient
to take C = |Eap ,bp (Zp )| where p is some prime divisor of n, provided that |√Eap ,bp (Zp )| is B-smooth. The
value of p is unknown, but if p is the smallest prime divisor of n then p < n. We also know by Hasse’s
√ √
Inequality (see, for example, page 131 of [190]) that + 1 2 (Z ) + 1 + 2 and thus
√ √ p − √ p < |E √4 | < p
|Ea p,b p(Zp )| < n + 1 + 2 4 n. Hence, it is safe to take C =
pa n,b +
pp1 p+ 2 n.
The only remaining consideration is to determine the expected number of elliptic curves that must be
examined before we obtain a factorization of n and this part of the analysis relies on the following result due
to Lenstra which appears as Proposition 2.7 in [129].
√ β
Proposition C.39 Let S = {s ∈Z : s | (p − + 1) <| p and s is L(p) -smooth .} Let n be a composite
integer that has at least two distincet prime divisors exceeding 3. Then
|S | − 2 1
Pr[Lenstra’s algorithm factors n] ≥ Ω √
2 p log p
In other words, the proposition asserts that the probability that a random triple (x, y, a) leads √to a
factor- ization of n is essentially the probability that a random integer in the interval (p + 1 − p, p + 1 +
√
p) is | S|
L(p)β -smooth; the latter probability being √ .
2[ p♩+1
Recall that we dealt earlier with the smoothness of integers less than some bound and saw that a theorem
due to Canfield, Erdos and Pomerance (see [48]) implies that
1
Pr[m ≤ x is L(x)α-smooth] = L− 2α (x).
√ √ 1
Pr[m ∈ (p + 1 − p, p + 1 + p) is L(p)β-smooth] = L− 2β(p).
Consequently, the lower bound on the probability of success in Proposition C.39 can be made explicit. Hence,
we have 1 1
Pr[Lenstra’s algorithm factors n] ≥ Ω L− 2 (p) .
β
log p
1
Therefore, we expect to have to try L 2 (p)(log p) elliptic curves before encountering one of Lβ(p)-smooth
β 1
order. 1 Thus, the total running time required is expected
√ to be O(L (p)(log
2 p)Lβ(p)M (n)(log C)) =
β+ 4 2 4 β 1
O(L 2β (p)(log n)). This achieves a minimum of O(L (p)(log n)) when β = √ .
2
Remark In step 3 of Lenstra’s algorithm a minor practical problem arises with the choice of B = Lβ(p)
because the smallest prime divisor p of n is not known before the algorithm begins. This problem can be
resolved by taking B = Lβ(v) and performing the algorithm for a gradually increasing sequence of√ values for
v while factorization continues to be unsuccessful and declaring failure if v eventually exceeds n because
√
the smallest prime divisor of n is less than n.
C H A P T E R D
About PGP
PGP is a free software package that performs cryptographic tasks in association with email systems. In this
short appendix we will review some of its features. For a complete description of its functioning readers are
referred to Chapter 9 in [192].
D.1 Authentication
PGP performs authentication of messages using a hash-and-sign paradigm. That is given a message M , the
process is as following:
• The message is timestamped, i.e. date and time are appended to it;
• it is then hashed using MD5 (see [169]);
• the resulting 128-bit digest is signed with the sender private key using RSA [170];
• The signature is prepended to the message.
D.2 Privacy
PGP uses a hybrid system to ensure privacy. That is each message is encrypted using a fast symmetric
encryption scheme under a one-time key. Such key is encrypted with the receiver public-key and sent
together with the encrypted message.
In detail, assume A wants to send an encrypted message to B.
• A compresses the message using the ZIP compression package; let M be the resulting compressed
message.
• The message M is encrypted under k using the symmetric encryption scheme IDEA (see [124] or
Chapter 7 of [192]); let C be the corresponding ciphertext;
• k is encrypted under B’s public key using RSA; let c be the corresponding ciphertext.
269
270 Goldwasser and Bellare
If both authentication and privacy are required, the message is first signed, then compressed and then
encrypted.
The problem of establishing trust in the connection between a public-key and its owner is at the heart of
public-key systems, no just of PGP.
There are various ways of solving this problem:
Cryptography: Lecture Notes 271
• Physical exchange B could give the key to A in person, stored in a floppy disk.
• Verification A could call B on the phone and verify the key with him
• Certification Authorithy There could be a trusted center AUTH that signs public keys for the users,
establishing the connection between the key and the ID of the user (such a signature is usually referred
to as a certificate.)
Only the last one seems reasonable and it appears to be the way people are actually implementing public
key systems in real life.
PGP does not use any of the above systems, but it rather uses a decentralized trust system. Users reciprocally
certify each other’s keys and one trusts a key to the extent that he/she trusts the user who certify it for it.
Details can be found in [192]
C H A P T E R E
Problems
E.1.1 DES
Let m¯ be the bitwise complement of the string m. Let DESK (m) denote the encryption of m under DES
using key K. It is not hard to see that if
c = DESK(m)
then
c¯ = DESK¯ (m¯ )
We know that a brute–force attack on DES requires searching a space of 256 keys. This means that we have
to perform that many DES encryptions in order to find the key, in the worst case.
1. Under known plaintext attack (i.e., you are given a single pair (m, c) where c = DESK(m)) do the
equations above change the number of DES encryption you perform in a brute–force attack to recover
K?
2. What is the answer to the above question in the case of chosen plaintext attack (i.e., when you are
allowed to choose many m’s for which you get the pair (m, c) with c = DESK(m))?
272
Cryptography: Lecture Notes 273
the known ciphertext from the known plaintext. The situation is more complex for the CBC mode, which
includes the use of a 64-bit IV. This seems to introduce an additional 64 bits of uncerntainty.
1. Suggest strategies for known-plaintext attack on the CBC mode that are of the same order of magnitude
of effort as the ECB attack.
2. Now consider a ciphertext only attack. For ECB mode the strategy is to try to decrypt the given
ciphertext with all possible 2 56 keys and test each result to see if it appears to be a syntactically
correct plaintext. Will this strategy work for the CBC mode? If so, explain. If not, describe an attack
strategy for the CBC mode and estimate its level of effort.
E.1.4 E-mail
Electronic mail systems differ in the way in which multiple recipients are handled. In some systems the
originating mail handler makes all the necessary copies, and these are sent out independently. An alterantive
approach is to determine the route for each destination first. Then a single message is sent out on a common
portion of the route and copies are made when the routes diverge (this system is known as mail-bagging.)
1. Leaving aside security considerations, discuss the relative advantages and disadvantages of the two
methods.
2. Discuss the security requirements and implications of the two methods
E.2 Passwords
The framework of (a simplified version of) the Unix password scheme is this. We fix some function
h: {0, 1} k → {0, 1}L. The user chooses a k-bit password, and the system stores the value y = h(K) in
the password file. When the user logs in he must supply K. The system then computes h(K) and declares
you authentic if this value equals y.
We assume the attacker has access to the password file and hence to y. The intuition is that it is
computa- tionally infeasible to recover K from y. Thus h must be chosen to make this true.
The specific choice of h made by Unix is h(K) = DESK (0) where “0” represents the 64 bit string of all zeros.
Thus k = 56 and L = 64.
In this problem you will analyze the generic scheme and the particular DES based instantiation. The goal
is to see how, given a scheme like this, to use the models we have developed in class, in particular to think
of DES as a pseudorandom function family.
To model the scheme, let F : {0, 1}k × {0, 1}l → {0, 1}L be a pseudorandom function family, having
some given insecurity function · · prf( , ), and with L > k. We let TF denote the time to compute F .
F Adv
(Namely the time, given K, x, to compute FK(x).) See below for the definition of a one-way function,
which we will refer to now.
(a) Define h: {0, 1} k → {0, 1}L by h(K) = FK(0), where “0” represents the l-bit string of all zeros. Prove
that h is a one-way function with
Advowf h, t) ≤ 2 · Advprf(t′, 1) ,
( F
′
where t = t + O(l + L + k + TF ).
Hints: Assume you are given an inverter I for h, and construct a distinguisher D such that
Advprf(D) ≥
1
F · Advowf
h, .
2 I
Use this to derive the claimed result.
274 Goldwasser and Bellare
(b) Can you think of possible threats or weaknesses that might arise in a real world usage of such a scheme,
but are not covered by our model? Can you think of how to protect against them? Do you think this
is a good password scheme “in practice”?
We now provide the definition of security for a one-way function to be used above.
Let h: {0, 1}k → {0, 1}L be a function. It is one-way, if, intuitively speaking, it is hard, given y, to compute
a point x′ such that h(x′) = y, when y was chosen by drawing x at random from {0, 1}k and setting y =
h(x).
In formalizing this, we say an inverter for h is an algorithm I that given a point y∈ {0, 1}L tries to compute
this x′. We let
ow h i
Adv f
′
h,I = P h(x ) = y : x {0, 1}k ; y ← h(x) ; x′ ← I(y)
R
←
be the probability that the inverter is successful, taken over a random choice of x and any coins the inverter
might toss. We let
′
Advowf
h (t ) = max{Adv h,} ,
owf
I I
where the maximum is over all inverters I that run in time at most t′.
1. If k is the number of distinct prime factors of n then the equation x2 = 1 mod n has 2k distinct
solutions in Zn∗ . Hint: use Chinese Remainder Theorem
p− 1
∗
2. If p is prime and x ∈ Z x
p then p( ) = x 2
• computing φ(n)
• factoring n
• computing QRn (a) for some a ∈ Zn∗
• computing square roots modulo n
• computing k-th roots modulo n, where gcd(k, φ(n)) = 1
(A) Does the above primality test always terminate in expected polynomial time? Prove your answer.
(B) What is the probability that the above algorithm makes an error if p is prime?
(C) What is the probability that the above algorithm makes an error if p is composite?
RSA(n,e)(m) = me mod n
Assume that three users in a network Alice, Bob and Carl use RSA public–keys (nA, 3), (nB, 3) and (nC, 3)
respectively. Suppose David wants to send the same message m to the three of them. So David computes
That is, the running time does not depend on the size of the smallest factor, but rather in the size of the
whole composite number.
The above observation seem to suggest that in order to preserve the security of RSA, it may not be necessary
to increase the size of both prime factors, but only of one of them.
276 Goldwasser and Bellare
Shamir suggested the follwong version of RSA that he called unbalanced RSA (also known as RSA for
paranoids). Choose the RSA modulus n to be 5,000 bits long, the product of a 500-bits prime p and a 4,500-
bit prime q. Since usually RSA is usually used just to exchange DES keys we can assume that the messages
being encrypted are smaller than p.
(A) How would you choose the public exponent e? Is 3 a good choice?
Once the public exponent e is chosen, one computes d = e−1 mod φ(n) and keep it secret. The problem
with such a big modulus n, is that decrypting a ciphertext c = me mod n may take a long time (since one
has to compute cd mod n.) But since we know that m < p we can just use the Chinese Remainder
Theorem and compute m1 = cd mod p = m. Shamir claimed that this variant of RSA achieves better
security against the advances of factoring, without losing in efficiency.
(B) Show how with a single chosen message attack (i.e. obtaining the decryption of a message of your
choice) you can completely break the unbalanced RSA scheme, by factoring n.
Recall the Diffie-Hellman key exchange protocol. p is a prime and g a generator of Zp∗ . Alice’s secret
key is a random a < p and her public key is ga mod p. Similarly Bob’s secret key is a random b < p and his
public key is gb mod p. Their common key is gab.
In this problem we will prove that if the Diffie-Hellman key exchange protocol is secure for a small fraction
of the values (a, b), then it is secure for almost all values (a, b).
Assume that there is a ppt algorithm A that
1
P rob[A(g a , g b ) = g ab ] > +ϵ
2
(where the probability is taken over the choices of (a, b) and the internal coin tosses of A)
Your task is to prove that for any δ < 1 there exists a ppt algorithm B such that for all (a,
b)
(where the probability is now taken only over the coin tosses of B)
An eavesdropper Eve stores all the encrypted messages between them and one day she manages to break
into Alice and Bob’s computer and find their secret keys, correspondent to their public keys.
Show how using only public–key cryptography we can achieve perfect forward secrecy, i.e., Eve will not be
able to gain any knowledge about the messages Alice and Bob exchanged before the disclosure of the secret
keys.
1. Fix p a large prime and let g be a generator. For each bit bi in m, choose at random xi ∈ Zp−1
such that lsb(xi ) = bi (lsb(x) = least significant bit of x.) The ciphertext is the concatenation of
the yi = g xi mod p. What about if you use x such that msb(xi ) = bi ?
2. Choose an RSA public key n, e such that n| >|2 m |. Pad
| m with random bits to get it to the same
length of n. Let m′ be the padded plaintext. Encrypt c = me mod n.
3. Choose an RSA public key n, e. Assume that m | is
| smaller than log log n (you can always break the
message in blocks of that size.) Pad m with random bits to get it to the same length of n. Let m′ be
the padded plaintext. Encrypt c = me mod n.
4. Choose two large primes p, q = 3 mod 4. Let n = pq. For each bit bi in m, choose at random xi ∈ Zn∗
and set yi = x2 mod n if bi = 0 or yi = −x2 mod n if bi = 1. The ciphertext is the concatenation of
i i
the yi’s.
1. M, MACK2 (EK1 (M ))
2. EK1 (M, MACK2 (M ))
278 Goldwasser and Bellare
3. EK1 (M ), MACK2 (M )
4. EK1 (M ), EK1 (MACK2 (M ))
5. EK1 (M ), MACK2 (EK1 (M ))
6. EK1 (M, A) where A encodes the identity of Alice. Bob decrypts the ciphertext and checks that the
second half of the plaintext is A
For each say if it secure or not and briefly justify your answer.
h1(M ) = Hn
h2(M ) = Hn
For both proposals, show how to find collisions if the encryption scheme E is chosen to be DES.
hi = RSAn,e(hi−1) ⊕ mi
E.7 Pseudo-randomness
1. G′(s) = G1(s).G(G1(s))
2. G′′(s) = G1(s).G(G2(s))
For each construction say whether it works or not and justify your answer. That is, if the answer is no
provide a simple statistical test that distinguishes the output of, say, G′ from a random 3k string. If the
answer is yes prove it.
1. universally forgeable
2. selectively forgeable
3. existentially forgeable
E.8.2 ElGamal
Suppose Bob is using the ElGamal signature scheme. Bob signs two messages m1 and m2 with signatures
(r, s1) and (r, s2) (the same value of r occurs in both signatures.) Suppose also that gcd(s1 − s2, p − 1) = 1.
Zh = X mod (p − 1)
The signature of the message is s = gZ mod p. To verify the signature, a user checks that sh = Y mod p.
E.8.4 Ong-Schnorr-Shamir
Ong, Schnorr and Shamir suggested the following signature scheme.
Let n be a large integer (it is not necessary to know the factorization of n.) Then choose k ∈ Zn∗ . Let
1. Prove that reconstructing the private key, from the public key is equivalent to factor n.
2. Is that enough to say that the scheme is secure?
E.9 Protocols
• It is anonymous: meaning when you use cash to buy something your identity is not revealed, compare
with credit cards where your identity and spending habits are disclosed
• It is transferable: that is the vendor who receives cash from you can in turn use it to buy something
else. He would not have this possibility if you had payed with a non-transferable check.
The electronic cash proposals we saw in class are all “non–transferable”. that is the user gets a coin from
the bank, spends it, and the vendor must return the coin to the bank in order to get credit. As such they
really behave as anonymous non-transferable checks. In this problem we are going to modify such proposals
in order to achieve transferability.
The proposal we saw in class can be abstracted as follows: we have three agents: the Bank, the Userand the
Vendor.
The Bankhas a pair of keys (S, P ). A signature with S is a coin worth a fixed amount (say $1.). It is possible
to make blind signatures, meaning the Usergets a signature S(m) on a message m, but the Bankgets no
information about m.
Withdrawal protocol
Payment Protocol
2. The Vendorverifies the Banksignature and sends a random challenge c to the User.
3. The Userreplies with an answer r
4. the Vendorverifies that the answer is correct.
The challenge–response protocol is needed in order to detect double–spending. Indeed the system is con-
structed in such a way that if the Useranswers two different challenges on the same coin (meaning he’s trying
to spend the coin twice) his identity will be revealed to the Bankwhen the two coins return to the bank. This
is why the whole history of the payment protocol must be presented to the Bankwhen the Vendordeposits
the coin.
Deposit protocol
In order to make the whole scheme transferrable we give the bank a different pair of keysS ( , ). It is still
possible to make blind signatures withS . However messages signed withShave no value. WeP will call them
pseudo-coins. When people open an account with the Bank, they get a lot of these anonymous pseudo–coins
by running the withdrawal protocol with S as the signature key.
Suppose now the Vendorreceived a payed coin m, S(m), c, r and instead of depositing it wants to use it
to buy something from OtherVendor. What she could do is the following:
Transfer protocol
Notice however that Vendorcan still double–spend the coin m, S(m), c, r if she uses two different pseudo–coins
to transfer it to two differnt people. Indeed since she will never answer two different challenges on the same
pseudo–coin, her identity will never be revealed. The problem is that there is no link between the real coin
and the pseudo-coin used during the transfer protocol. If we could force Vendorto use only one pseudo–coin
for each real coin she wants to transfer then the problem would be solved.
Show how to achieve the above goal. You will need to modify both the payment and the transfer protocol.
Hint: If Vendorwants to transfer the true coin she is receiving during the payment protocol, she must be forced
then to create a link between the true coin and the pseudo–coin she will use for the transfer later. Notice
that Vendorchooses c at random, maybe c can be chosen in some different way?
1. The Userprepares 100 messages m1, . . . , m100 which are all $1 coins. The Userblinds them, that is she
chooses at random r1, . . . , r100 and computes wi = r3imi. The Usersends w1, . . . , w100 to the Bank.
Cryptography: Lecture Notes 283
2. The Bankchooses at random 99 of the blindings and asks the Userto open them. That the Bankchooses
i1,......, i99 and sends it to the User.
3. The Useropens the required blindings by revealing ri1 ,....., ri99 .
4. The Bankchecks that the blindings are constructed correctly and then finally signs the unopened 1
blinding. W.l.o.g. assume this to be the first one. So the Banksigns w1 by sending to the Userw 3 =
1
1
r1m 13
5. The Userdivides this signature by r1 and gets a signature on m1 which is a valid coin.
a = gk mod p
c = H(m, a)
and finally
b = kc + xa mod q
The signature of the message m is sig(m) = (a, b). Given the triple (m, a, b) the verification is performed by
computing c = H(m, a) and checking that
gb = acya
However this is not anonymous since the Bankcan recognize the Userwhen the coin comes back. In order to
make the protocol really anonymous, the Userhas to change the value of “challenge” ci computed at step
3. This modification will allow him to compute a different signature on mi on her own which will not be
recognizable to the Bankwhen the coin comes back. During the protocol the Bankwill check as usual that
this modification has been performed correctly by asking the Userto open 99 random blindings.