{"id":1020,"date":"2025-04-18T13:59:13","date_gmt":"2025-04-18T21:59:13","guid":{"rendered":"https:\/\/unmitigatedrisk.com\/?p=1020"},"modified":"2025-04-18T15:08:47","modified_gmt":"2025-04-18T23:08:47","slug":"planning-for-change-lessons-in-cryptographic-agility","status":"publish","type":"post","link":"https:\/\/unmitigatedrisk.com\/?p=1020","title":{"rendered":"Crypto agility isn\u2019t a checkbox\u2014it\u2019s an operational mindset."},"content":{"rendered":"\n<p>In the early 2000s, I was responsible for a number of core security technologies in Windows, including cryptography. As part of that role, we had an organizational push to support \u201cvanity\u201d national algorithms in SChannel (and thus SSL\/TLS) and CMS. Countries like Austria and China wanted a simple DLL\u2011drop mechanism that would allow any application built on the Windows crypto stack to instantly support their homegrown ciphers.<\/p>\n\n\n\n<p>On paper, it sounded elegant: plug in a new primitive and voil\u00e0, national\u2011sovereignty protocols everywhere. In practice, however, implementation proved far more complex. Every new algorithm required exhaustive validation, introduced performance trade-offs, risked violating protocol specifications, and broke interoperability with other systems using those same protocols and formats.<\/p>\n\n\n\n<p>Despite these challenges, the threat of regulation and litigation pushed us to do the work. Thankfully, adoption was limited and even then, often misused. In the few scenarios where it \u201cworked,\u201d some countries simply dropped in their algorithm implementations and misrepresented them as existing, protocol-supported algorithms. Needless to say, this wasn\u2019t a fruitful path for anyone.<\/p>\n\n\n\n<p>As the saying goes, \u201cfailing to plan is planning to fail.\u201d In this case, the experience taught us a critical lesson: real success lies not in one-off plug-ins, but in building <strong>true cryptographic agility<\/strong>.<\/p>\n\n\n\n<p>We came to realize that instead of chasing edge-case national schemes, the real goal was a framework that empowers operators to move off broken or obsolete algorithms and onto stronger ones as threats evolve. Years after I left Microsoft, I encountered governments still relying on those early plugability mechanisms\u2014often misconfigured in closed networks, further fracturing interoperability. Since then, our collective expertise in protocol engineering has advanced so far that the idea of dynamically swapping arbitrary primitives into a live stack now feels not just na\u00efve, but fundamentally impractical.<\/p>\n\n\n\n<p>Since leaving Microsoft, I\u2019ve seen very few platforms, Microsoft or otherwise, address cryptographic agility end-to-end. Most vendors focus only on the slice of the stack they control (browsers prioritize TLS agility, for instance), but <strong>true agility requires coordination across both clients and servers<\/strong>, which you often don\u2019t own.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">My Definition of Crypto Agility<\/h2>\n\n\n\n<p>Crypto agility isn\u2019t about swapping out ciphers. It\u2019s about <strong>empowering operators to manage the full lifecycle of keys, credentials, and dependent services<\/strong>, including:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Generation<\/strong> of new keys and credentials<br><\/li>\n\n\n\n<li><strong>Use<\/strong> under real-world constraints<br><\/li>\n\n\n\n<li><strong>Rotation<\/strong> before algorithms weaken, keys exceed their crypto period, or credentials expire<br><\/li>\n\n\n\n<li><strong>Compromise response<\/strong>, including detection, containment, and rapid remediation<br><\/li>\n\n\n\n<li><strong>Library &amp; implementation updates<\/strong>, patching or replacing affected crypto modules and libraries when weaknesses or compromises are identified<br><\/li>\n\n\n\n<li><strong>Retirement<\/strong> of outdated materials<br><\/li>\n\n\n\n<li><strong>Replacement<\/strong> with stronger, modern algorithms<br><\/li>\n<\/ul>\n\n\n\n<p>Coincidentally, NIST has since released an initial public draft titled <em>Considerations for Achieving Crypto Agility<\/em> (CSWP 39 ipd, March 5, 2025), available here. In it, they define:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>\u201cCryptographic (crypto) agility refers to the capabilities needed to replace and adapt cryptographic algorithms in protocols, applications, software, hardware, and infrastructures without interrupting the flow of a running system in order to achieve resiliency.\u201d<\/strong><\/p>\n<\/blockquote>\n\n\n\n<p>That definition aligns almost perfectly with what I\u2019ve been advocating for years\u2014only now it carries NIST\u2019s authority.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Crypto Agility for the 99%<\/h2>\n\n\n\n<p>Ultimately, consumers and relying parties\u2014the end users, application owners, cloud tenants, mobile apps, and service integrators\u2014are the <strong>99% who depend on seamless, invisible crypto transitions<\/strong>. They shouldn\u2019t have to worry about expired credentials, lapsed crypto periods, or how to protect and rotate algorithms without anxiety, extensive break budgets or downtime.<\/p>\n\n\n\n<p>True agility means <strong>preserving trust and control<\/strong> at every stage of the lifecycle.<\/p>\n\n\n\n<p>Of course, delivering that experience requires careful work by developers and protocol designers. Your APIs and specifications must:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Allow operators to choose permitted algorithms<br><\/li>\n\n\n\n<li>Enforce policy-driven deprecation<br><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">A Maturity Roadmap<\/h2>\n\n\n\n<p>To make these lifecycle stages actionable, NIST\u2019s <strong>Crypto Agility Maturity Model (CAMM)<\/strong> defines four levels:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Level 1 \u2013 Possible<\/strong>: Discover and inventory all keys, credentials, algorithms, and cipher suites in use. Catalog the crypto capabilities and policies of both parties.<br><\/li>\n\n\n\n<li><strong>Level 2 \u2013 Prepared<\/strong>: Codify lifecycle processes (generation, rotation, retirement, etc.) and modularize your crypto stack so that swapping primitives doesn\u2019t break applications.<br><\/li>\n\n\n\n<li><strong>Level 3 \u2013 Practiced<\/strong>: Conduct regular \u201ccrypto drills\u201d (e.g., simulated deprecations or compromises) under defined governance roles and policies.<br><\/li>\n\n\n\n<li><strong>Level 4 \u2013 Sophisticated<\/strong>: Automate continuous monitoring for expired credentials, lapsed crypto-period keys, deprecated suites, and policy violations triggering remediations without human intervention.<br><\/li>\n<\/ul>\n\n\n\n<p>Embedding this roadmap into your operations plan helps you prioritize <strong>inventory, modularity, drills, and automation<\/strong> in the right order.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">My Lifecycle of Algorithm and Key Management<\/h2>\n\n\n\n<p>This operator-focused lifecycle outlines the critical phases for managing cryptographic algorithms and associated keys, credentials, and implementations, including module or library updates when vulnerabilities are discovered:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Generation<\/strong> of new keys and credentials<br><\/li>\n\n\n\n<li><strong>Use<\/strong> under real-world constraints with enforced policy<br><\/li>\n\n\n\n<li><strong>Rotation<\/strong> before degradation or expiration<br><\/li>\n\n\n\n<li><strong>Compromise response<\/strong> (detection, containment, remediation)<br><\/li>\n\n\n\n<li><strong>Library &amp; Implementation Updates<\/strong>, to address discovered vulnerabilities<br><\/li>\n\n\n\n<li><strong>Retirement<\/strong> of outdated keys, credentials, and parameters<br><\/li>\n\n\n\n<li><strong>Replacement<\/strong> with stronger, modern algorithms and materials<br><\/li>\n<\/ul>\n\n\n\n<p>Each phase builds on the one before it. Operators must do more than swap out algorithms\u2014they must update every dependent system and implementation. That\u2019s how we <strong>minimize exposure and maintain resilience<\/strong> throughout the cryptographic lifecycle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>What&#8217;s the message then? Well, from my perspective, cryptographic agility isn\u2019t a feature\u2014it\u2019s an operational mindset. It\u2019s about building systems that evolve gracefully, adapt quickly, and preserve trust under pressure. That\u2019s what resilience looks like in the age of quantum uncertainty and accelerating change.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the early 2000s, I was responsible for a number of core security technologies in Windows, including cryptography. As part of that role, we had an organizational push to support \u201cvanity\u201d national algorithms in SChannel (and thus SSL\/TLS) and CMS. Countries like Austria and China wanted a simple DLL\u2011drop mechanism that would allow any application [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[3,4],"tags":[],"class_list":["post-1020","post","type-post","status-publish","format-standard","hentry","category-security","category-thoughts"],"_links":{"self":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/posts\/1020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1020"}],"version-history":[{"count":0,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=\/wp\/v2\/posts\/1020\/revisions"}],"wp:attachment":[{"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unmitigatedrisk.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}