Skip to main content

Post-Quantum Cryptography (PQC) Masterclass

Welcome to the Masterclass on Post-Quantum Cryptography (PQC). In this guide, we dive deep into the quantum threat landscape and the next generation of cryptographic algorithms designed to withstand quantum attacks.

1. The Concept (ELI5)

Imagine you have a super-complicated combination lock on a safe. A normal computer tries combinations one by one and would take millions of years to open it. But a quantum computer is like a magical lockpick that can try multiple combinations at the exact same time, popping the lock open in minutes. Post-Quantum Cryptography is basically changing out that combination lock for a complex puzzle (like a multi-dimensional maze) that even the magical lockpick gets stuck in.

2. The Visual

3. The Code

Here is how you transition from classic vulnerable RSA to a quantum-resistant approach (conceptualized).

Python

Vulnerable Code ❌ (Using classical RSA)

from cryptography.hazmat.primitives.asymmetric import rsa

# Classic RSA: Vulnerable to Shor's algorithm on a quantum computer
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)

Production-Ready Secure Code ✅ (Using PQC / Kyber - via wrapper libraries)

import oqs # Open Quantum Safe library

# PQC Key Encapsulation: Resistant to quantum attacks
kem = oqs.KeyEncapsulation("Kyber512")
public_key = kem.generate_keypair()
# Use this public_key for quantum-safe encapsulation

Go

Vulnerable Code

package main

import (
"crypto/rsa"
"crypto/rand"
)

func main() {
// Classic RSA: Vulnerable to quantum computers
privateKey, _ := rsa.GenerateKey(rand.Reader, 2048)
_ = privateKey
}

Production-Ready Secure Code

package main

import (
"fmt"
"github.com/cloudflare/circl/kem/kyber/kyber512"
)

func main() {
// PQC KEM: Quantum-safe lattice-based cryptography
pk, sk, _ := kyber512.GenerateKeyPair(nil)
fmt.Println("Generated Quantum-Safe Kyber512 Keys", pk, sk)
}

TypeScript / Node.js

Vulnerable Code

import { generateKeyPairSync } from 'crypto';

// Classic RSA: Quantum-vulnerable
const { publicKey, privateKey } = generateKeyPairSync('rsa', {
modulusLength: 2048,
});

Production-Ready Secure Code

// Conceptual: Using a Node wrapper for PQC (e.g., node-oqs)
import { KeyEncapsulation } from 'node-oqs';

// Quantum-safe Kyber KEM
const kem = new KeyEncapsulation('Kyber512');
const keypair = kem.generateKeypair();

4. The Guardrail

Semgrep Rule: Prevent usage of small RSA keys (which are weak classically, and completely broken quantumly).

rules:
- id: prevent-weak-rsa
message: "Use of classical RSA keys. Migrate to hybrid PQC or at least RSA-3072 / ECC."
severity: WARNING
languages:
- python
pattern: rsa.generate_private_key(..., key_size=$SIZE, ...)
metavariables:
- metavariable: $SIZE
type: int
comparison: $SIZE < 3072

Navigate through the chapters to master PQC!