For students and educators

Teach threshold cryptography with Confium

Confium is the reference implementation for multi-stakeholder threshold cryptography. Use it in your course to give students hands-on experience with the protocols, the math, and the deployment patterns.


Why teach with Confium?

Threshold cryptography is increasingly taught in cryptography, distributed systems, and cybersecurity courses. But most courses stop at the theory — students learn Shamir secret sharing and Lagrange interpolation without ever touching a real implementation. Confium bridges that gap: it's a production-grade framework with real protocol implementations (FROST, CMP20, GG18), real transparency logs, and real adapters for PKCS#11 / OpenSSL / JCE.

Students who learn with Confium leave the course understanding not just the math but the engineering: how threshold protocols are deployed in production, how async sessions work across continents, how transparency logs detect split-view attacks.

Course syllabus template (10 weeks)

WeekTopicLab
1PKI fundamentals: certificates, CAs, trust chainsParse an X.509 cert with confium
2Secret sharing: Shamir's scheme, Lagrange interpolationSplit and recover a secret in 20 lines of Ruby
3Threshold signatures: FROST protocol3-of-5 FROST-P256 signing session
4Threshold ECDSA: CMP20, GG18Compare FROST vs CMP20 vs GG18
5Coordinator architecture: async sessionsRun a cross-region signing session
6Transparency logs: RFC 6962 Merkle treesBuild a transparency log, verify inclusion proofs
7Split-view attacks and defense in depthSimulate an attack, detect via consistency proofs
8Post-quantum migration: composite signaturesAdd ML-DSA-65 alongside Ed25519
9Mode 2: PKI drop-in adaptersWire Confium to nginx via PKCS#11
10Mode 3: Sovereign PKIDesign a custom certificate profile

Lab exercises

Each lab is designed for a 2-3 hour session. They progress from theory to deployment, building on each other.

Lab 1: Shamir secret sharing (week 2)

Students split a secret into 5 shares with threshold 3, recover from any 3, and verify that 2 shares produce the wrong answer. Demonstrates the threshold property.

require "confium"

kp = Confium::TC::FrostP256.generate_keypair
shares = Confium::TC::FrostP256.split_secret(kp["private_key"], 3, 5)

# Recover from any 3
recovered = Confium::TC::FrostP256.recover_secret(
  [shares[0], shares[2], shares[4]].map { |s| { "x" => s.x, "y" => s.y_bytes } }
)
puts recovered == kp["private_key"] ? "MATCH" : "MISMATCH"

# Try with only 2 — wrong answer, no error
wrong = Confium::TC::FrostP256.recover_secret(
  [shares[0], shares[1]].map { |s| { "x" => s.x, "y" => s.y_bytes } }
)
puts wrong == kp["private_key"] ? "unexpected match" : "WRONG (expected)"

Lab 2: FROST threshold signing (week 3)

Students run a 3-of-5 FROST-P256 signing session using the coordinator, verify the signature with standard OpenSSL, and observe that the output is indistinguishable from a single-key signature.

Lab 3: Transparency log (week 6)

Students build a Merkle tree, compute inclusion proofs, and verify them. Then they simulate a split-view attack and detect it via consistency proofs.

Lab 4: Composite signatures (week 8)

Students create a composite signature containing Ed25519 + ECDSA-P256 + ML-DSA-65, verify it, and observe that removing any one component fails verification.

Lab 5: Sovereign PKI profile (week 10)

Students design a custom certificate profile for a hypothetical institution (university degree issuance, supply-chain provenance, treaty organization) and implement it using Confium's certificate and CMS crates.

Reading list

  • Shamir, How to Share a Secret, CACM 1979 — the foundational paper.
  • Komlo & Goldberg, FROST: Flexible Round-Optimized Schnorr Threshold signatures, IACR ePrint 2020/852.
  • Canetti, Makriyannis, Peled, UC Non-Interactive, Proactive, Threshold ECDSA, IACR ePrint 2021/060.
  • Gennaro & Goldfeder, Fast Multiparty Threshold ECDSA with Fast Trustless Setup, CCS 2018.
  • Laurie et al., Certificate Transparency, RFC 6962.
  • Herzberg et al., Proactive Secret Sharing, CRYPTO 1995.
  • NIST FIPS 204, Module-Lattice-Based Digital Signature Algorithm (ML-DSA).

Getting started for educators

  1. Install Confium: gem install confium (Ruby is the easiest for students).
  2. Clone the examples: git clone https://github.com/confium/confium-ruby.
  3. Run the threshold signing example: ruby examples/threshold_signing.rb.
  4. Adapt the labs above for your course's language (Python examples coming).
  5. Reach out on GitHub Discussions for educator support.

Where to go next