<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cryptography on Christoph Kemetmüller</title><link>https://xn--kemetmller-feb.com/tags/cryptography/</link><description>Recent content in Cryptography on Christoph Kemetmüller</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Christoph Kemetmüller</copyright><lastBuildDate>Fri, 30 Oct 2026 23:03:55 +0100</lastBuildDate><atom:link href="https://xn--kemetmller-feb.com/tags/cryptography/index.xml" rel="self" type="application/rss+xml"/><item><title>eMudhra's CA keys fit in a byte, and curl and Node still trusted them</title><link>https://xn--kemetmller-feb.com/blog/emudhra-weak-ca-keys/</link><pubDate>Sun, 25 Oct 2026 11:00:00 +0100</pubDate><guid>https://xn--kemetmller-feb.com/blog/emudhra-weak-ca-keys/</guid><description>&lt;p&gt;eMudhra was supposed to protect eight intermediate CAs with random P-384 private keys.&#10;&lt;a href="https://lilting.ch/en/articles/emudhra-weak-intermediate-ca-keys" target="_blank" rel="noreferrer"&gt;Ikesan recovered all of them&lt;/a&gt; from the public certificates by trying every integer from 1 to 255, which took 29 ms (EM OV TLS CA - G3C uses the key 4).&#10;The reporter had &lt;a href="https://emudhra.we-have-a-problem.com/" target="_blank" rel="noreferrer"&gt;proved the compromise&lt;/a&gt; on 17 October by signing &amp;ldquo;We have a problem here&amp;rdquo; with all eight keys.&#10;In the &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=2083449" target="_blank" rel="noreferrer"&gt;Bugzilla incident&lt;/a&gt;, eMudhra blames a code flaw in its April 2025 key ceremony that created a second, weaker key pair on the HSM, which ended up in the CSR because the key labels looked alike.&#10;It has since decided to exit the public TLS business, which seems fair.&lt;/p&gt;&#10;&lt;p&gt;Browsers were covered by CRLSet, OneCRL (&lt;a href="https://db.gcve.eu/vuln/CVE-2026-113470" target="_blank" rel="noreferrer"&gt;CVE-2026-113470&lt;/a&gt;, fixed in Firefox 158.0.1) and Certificate Transparency.&#10;Clients with their own trust store were not: Ikesan got HTTP 200 from macOS curl 8.7.1 and Node.js 25.3.0, and &lt;a href="https://scotthelme.co.uk/eight-bits-of-trust-emudhras-ca-keys-cracked-in-milliseconds/" target="_blank" rel="noreferrer"&gt;Scott Helme&amp;rsquo;s forged &lt;code&gt;api.stripe.com&lt;/code&gt; certificate&lt;/a&gt; passed in curl, Python and Node.&#10;Update Node (26.12.1, 24.22.1, 22.23.4), uv (0.13.5) and your CA bundles, because the intermediates are valid until 2039.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Update 2026-10-30:&lt;/strong&gt; In a &lt;a href="https://www.youtube.com/watch?v=NDgS__J1U-M" target="_blank" rel="noreferrer"&gt;25-minute Computerphile video&lt;/a&gt;, Dr Tim Muller walks through what goes wrong when a private key that should be a random 120-digit number is 4.&#10;As the description puts it, you actually have to work quite hard to get there.&lt;/p&gt;</description></item></channel></rss>