Public Key Cryptography and RSA

6 min read Last updated Sun Jul 05 2026 05:11:45 GMT+0000 (Coordinated Universal Time)

Public key cryptography (PKC) uses a key pair, a public key and a private key, rather than a single shared secret key. It is based on Number Theory, not substitution-permutation networks, and is asymmetric.

Motivation

  • Key distribution
    Symmetric cryptography requires either a pre-shared key or a trusted key distribution center (KDC), which must itself be trusted with confidentiality.
  • Digital signatures
    Electronic documents need a signature scheme that is easy to sign and verify, but difficult to forge, with universal verifiability.

PKC Framework

A key pair’s public key is known to everyone. The private key is known only to its owner. Given the public key and the algorithm, it is computationally infeasible to derive the private key.

  • Confidentiality
    Sender encrypts with the receiver’s public key. Only the receiver, holding the private key, can decrypt.
  • Authentication
    Signer encrypts a fingerprint (authenticator) of the message with their private key. Anyone can verify it using the signer’s public key. The authenticator must be infeasible to forge without changing the message.

Groups Over Finite Sets

Number-theoretic PKC computes over finite groups, since infinite groups (Q,Z,R\mathbb{Q}, \mathbb{Z}, \mathbb{R}) are unusable for computation.

  • Zn\mathbb{Z}_n
    The group of integers modulo nn: {0,1,,n1}\{0, 1, \dots, n-1\}.
  • Zn\mathbb{Z}_n^*
    The subgroup of Zn\mathbb{Z}_n relatively prime to nn, excluding 0 by convention.

If nn is prime, every nonzero element of Zn\mathbb{Z}_n is coprime to nn, so Zn={1,,n1}\mathbb{Z}_n^* = \{1, \dots, n-1\}.

The order of a group is its number of elements. Zn=n|\mathbb{Z}_n| = n, and for prime pp, Zp=p|\mathbb{Z}_p| = p.

Example: Z10={1,3,7,9}\mathbb{Z}_{10}^* = \{1, 3, 7, 9\}, removing multiples of the prime factors 2 and 5 from Z10\mathbb{Z}_{10}.

Euler’s Totient Function

ϕ(n)\phi(n): the number of positive integers less than nn relatively prime to nn.

  • ϕ(p)=p1\phi(p) = p - 1 for prime pp.
  • ϕ(pq)=ϕ(p)ϕ(q)=(p1)(q1)\phi(pq) = \phi(p)\phi(q) = (p-1)(q-1) for distinct primes p,qp, q.

Fermat’s Theorem

For prime pp and integer aa not divisible by pp:

ap11(modp)a^{p-1} \equiv 1 \pmod p

Euler’s Theorem

Generalizes Fermat’s theorem to any modulus. For a,na, n relatively prime:

aϕ(n)1(modn)a^{\phi(n)} \equiv 1 \pmod n

For n=pqn = pq (distinct primes) and 0<m<n0 < m < n:

mϕ(n)+1=m(p1)(q1)+1m(modn)m^{\phi(n)+1} = m^{(p-1)(q-1)+1} \equiv m \pmod n

RSA

RSA (Rivest, Shamir, Adleman, 1977) is a block cipher over Zn\mathbb{Z}_n used for both encryption and digital signatures. Security rests on the integer factorization problem: given n=pqn = pq for 2 large equal-size primes, finding p,qp, q is computationally intractable.

Key Pair Generation

  • Choose 2 large, distinct, equal-size primes p,qp, q, kept secret.
  • Compute n=pqn = pq, public, its bit length is the RSA key length.
  • Compute ϕ(n)=(p1)(q1)\phi(n) = (p-1)(q-1), kept secret.
  • Choose ee with 1<e<ϕ(n)1 < e < \phi(n) and gcd(e,ϕ(n))=1\gcd(e, \phi(n)) = 1, public.
  • Compute de1(modϕ(n))d \equiv e^{-1} \pmod{\phi(n)}, secret.

Public key: {e,n}\{e, n\}. Private key: {d}\{d\}. pp, qq, and ϕ(n)\phi(n) must be destroyed after generation.

Encryption and Decryption

c=memodn,m=cdmodnc = m^e \bmod n, \quad m = c^d \bmod n

Encryption cost is a single exponentiation with a small exponent ee. Decryption cost is a single exponentiation with an exponent up to the full length of nn, far more expensive.

Correctness

(memodn)dmodn=m(m^e \bmod n)^d \bmod n = m

Worked Example

p=17p = 17, q=11q = 11.

  • n=187n = 187.
  • ϕ(n)=16×10=160\phi(n) = 16 \times 10 = 160.
  • e=7e = 7, since gcd(7,160)=1\gcd(7, 160) = 1.
  • d=23d = 23, since 23×7=161=160+123 \times 7 = 161 = 160 + 1.
  • Public key {7,187}\{7, 187\}, private key {23}\{23\}.
  • For m=88m = 88: c=887mod187=11c = 88^7 \bmod 187 = 11, and m=1123mod187=88m = 11^{23} \bmod 187 = 88.

RSA Digital Signature

Uses the same key pair as RSA encryption, with the roles of ee and dd reversed.

  • With message recovery
    Applies when the message m<nm < n directly. Signature σ=mdmodn\sigma = m^d \bmod n, signed with the signer’s private key.
  • Without message recovery
    Hashes the message first. Signature σ=H(M)dmodn\sigma = H(M)^d \bmod n, sent as the pair (M,σ)(M, \sigma).

Verification

  • With recovery: compute m=σemodnm' = \sigma^e \bmod n using the signer’s public key, and check it matches the expected message.
  • Without recovery: compute h=H(M)h' = H(M') and h=σemodnh = \sigma^e \bmod n, accept iff h=hh = h'.

Signing cost is a hash plus a single exponentiation with a full-length exponent dd. Verification cost is a hash plus a single exponentiation with the small exponent ee, plus a comparison.

Was this helpful?