W. Diffie and M. Hellman, 1976 paper
Department of Informatics & Telecommunications, University of Athens
October 16, 2025
how can two parties securely communicate over an insecure channel with no prior shared secret?
Public key cryptosystem
Encryption and decryption using different “keys” \(E\) and \(D\), where calculating \(D\) given \(E\) is computationally infeasible.
This means that \(E\) can be made public without jeopardizing the secrecy of \(D\).
Public key distribution system
A system where two users communicate in a public channel can create a shared secret key, and it is computationally infeasible for an eavesdropper to derive the key from this communication.
One-way authentication system
A system that provides a valid digital signature for each message, which is dependent on that message.
All previous models rely on the computational difficulty of the cryptanalyst/adversary to derive a plaintext from a ciphertext without the key.
Till then, preparation in advance was needed for secure communication.
Our goal is to enable two parties communicating over a public channel and using only publicly known techniques to create a secure connection.
This goal can be achieved with a system like this:
Two techniques can achieve this:
Each user generates a pair of keys \((E, D)\):
Anyone can send secure messages by encrypting with \(E\).
Only the intended recipient can decrypt using \(D\).
A pair of algorithm families \(\{E_K\}_{K\in \{K\}}\), \(\{D_K\}_{K \in \{K\}}\) represents reversible transformations \[E_K: \{M\} \to \{M\}\] \[D_K: \{M\} \to \{M\}\] over a finite set \(\{M\}\), such that:
For every \(K \in \{K\}\), \(E_K\) is the inverse of \(D_K\).
For every \(K \in \{K\}\) and \(M \in \{M\}\), \(E_K(M)\) and \(D_K(M)\) are easily computable.
Computing \(D_K\) from \(E_K\) is computationally infeasible.
Deducing a reversible pair \(E_K, D_K\) from a given \(K\) is computationally straightforward.
Due to the third property, a user’s enciphering key \(E_K\) can be made public without compromising the system’s security.
With a public key cryptosystem, key distribution is now easy.
Example
This example is not practical, as the inversion of matrices has a complexity of \(n^3\), but it aids in understanding.
A system that allows two users \(A,B\) to securely exchange a key over an insecure channel.
Initially studied by Merkle [6], however, the proposed solution has several issues [4, pp. 648–649].
A group is a set \(G\) with an operation \(\circ\) satisfying:
For example:\((\mathbb{Z}_p^{*}, \times \mod p)\): The non-zero integers modulo a prime \(p\) under multiplication.
A group is cyclic if there exists a generator/primitive element \(g\) such that \[\forall x \in G, \exists k : x = g^k.\]
let \(\mathbb G=(\mathbb{Z}_p^{*}, \times \mod p)\) a cyclic group of the non-zero integers modulo a prime \(p\) under multiplication.
Let \[Y = a^X \mod p, \quad 1 \leq X \leq p-1\]
where \(a\) is a member of \(\mathbb G\). \(X\) is \(Y\)’s discrete logarithm with base \(a\), \(\mod p\).
In other words, \[X = \log_a Y \mod p, \quad 1 \leq Y \leq p-1.\]
Calculating \(Y\) is straightforward, requiring at most \(2\log_{a} p\) multiplications [7, pp. 398–422]. For example, if \(X = 18\), we have \[Y = a^{18} = (((a^2)^2)^2)^2 \times a^2 \mod p.\]
Conversely, deriving \(X\) from \(Y\) is challenging, as it requires \(p^{1/2}\) operations for well-chosen \(p\) [8, pp. 575–576].
It relies on the computational difficulty of the discrete logarithm problem.
Each user secretly and independently generates a random number \(X_i \in \left\{ 1,2, \dots, p-1 \right\}=\mathbb{Z}_p^{*}\), where \(p\) is a prime and \(g\) is the generator.
The user computes \(Y_i = g^{X_i} \mod p\) and publishes it.
When users \(i\) and \(j\) wish to communicate, they use the key \(K_{ij}=g^{X_i X_j} \mod p\).
A system where a digital signature can be easily recognized as authentic, but cannot be forged by anyone other than the actual signer.
Since every digital signal can be copied, a digital signature must be identifiable without being disclosed.
A function \(f\) is called a one-way function when for every \(x\) in its domain, we can easily compute \(f(x)\), but for almost all \(y\) in its range, it is computationally infeasible to solve for \(y = f(x)\).
Example: Polynomials. Finding the root \(x_0\) of \(p(x) = y\) is difficult, whereas evaluating \(x_0\) as a solution is straightforward.
Functions that appear one-way but can be easily inverted due to specific information.
Given only an algorithm for the forward function from \(x \to f(x)\), it is computationally infeasible to find an easily computable inverse.
Only with specific trap-door information can we compute the inverse.
Let \(S_K\) be such a cryptosystem. We define \(P=P_0\) and a function \(f:\{K\}\to \{C\}\) such that \(f(X)=S_X(P_0)\).
The function \(f\) is one-way since solving for \(X\) given \(f(X)\) is equivalent to cryptanalyzing the key recovery problem from a specific plaintext-ciphertext pair. Thus, knowing \(f\) is equivalent to knowing \(\{S_K\}, P_0\).
If user \(A\) wants to send a signed message \(M\) to user \(B\), then
Given \(E\), we have an algorithm to convert plaintext into cryptograms. In other words, a PKC is a set of trap-door one-way functions.
ALMA — Selected Topics in Algorithms