PageSourceSearch

https://blog.spicelabs.io/posts/2026-03-30-caring-about-pqc/

html spicelabs.io collected 2026-10-04 02:40:20 UTC 23,451 bytes, 279 lines download raw bytes

1<!DOCTYPE html><html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><link rel="icon" type="image/svg+xml" href="/favicon.svg"><title>Why You Should Care About Post Quantum Cryptography (PQC)</title><meta name="description" content="Spice Labs: Know your Systems, Chart your Course. The easiest and fastest way to generate CBOMs at scale and manage your PQC journey."><meta property="og:url" content="https://blog.spicelabs.io"><meta property="og:type" content="website"><meta property="og:title" content="Why You Should Care About Post Quantum Cryptography (PQC)"><meta property="og:description" content="Spice Labs: Know your Systems, Chart your Course. The easiest and fastest way to generate CBOMs at scale and manage your PQC journey." <meta property="og:image" content="https://blog.spicelabs.io/images/preview.png"><meta name="twitter:card" content="summary_large_image"><meta property="twitter:domain" content="spicelabs.io"><meta property="twitter:url" content="https://blog.spicelabs.io"><meta name="twitter:title" content="Why You Should Care About Post Quantum Cryptography (PQC)"><meta name="twitter:description" content="Spice Labs: Know your Systems, Chart your Course. The easiest and fastest way to generate CBOMs at scale and manage your PQC journey."><meta name="twitter:image" content="https://blog.spicelabs.io/images/preview.png">
1<script async src="https://www.googletagmanager.com/gtag/js?id=G-EVMYQSR30G">
2  // _
3</script>
3 
3<script>(function(){const id = "G-EVMYQSR30G";
4
5  (() => {
6    window.dataLayer = window.dataLayer || [];
7    function gtag() {
8      dataLayer.push(arguments);
9    }
10    gtag('js', new Date());
11    gtag('config', id);
12  })();
13})();</script>
13<link rel="stylesheet" href="/_astro/_slug_.BpjV33An.css"></head> <body> <div id="container" class="with-sidebar"> <header id="header" data-astro-cid-3ef6ksr2> <div id="logo" data-astro-cid-3ef6ksr2> <a href="/" data-astro-cid-3ef6ksr2> <h1 data-astro-cid-3ef6ksr2><img src="/_astro/logo.CG92FhxO_ZTvEcy.webp" alt="Spice Labs" data-astro-cid-3ef6ksr2="true" loading="lazy" decoding="async" fetchpriority="auto" width="223" height="48"></h1> </a> <div class="divider" data-astro-cid-3ef6ksr2></div> <div class="title" data-astro-cid-3ef6ksr2>Blog</div> </div> <div class="toolbar" data-astro-cid-3ef6ksr2> <a class="button" href="https://www.spicelabs.io/get-started" data-astro-cid-3ef6ksr2> Get Started </a> <a class="button login" href="https://dashboard.spicelabs.io/app/login" data-astro-cid-3ef6ksr2> Login </a> </div> </header>  <div class="layout-wrapper"> <!-- Mobile menu button --><button class="mobile-menu-toggle" aria-label="Toggle navigation menu" data-astro-cid-ssfzsv2f> <span data-astro-cid-ssfzsv2f></span> <span data-astro-cid-ssfzsv2f></span> <span data-astro-cid-ssfzsv2f></span> </button> <div class="sidebar-overlay" id="sidebar-overlay" data-astro-cid-ssfzsv2f></div> <nav class="sidebar" id="sidebar" data-astro-cid-ssfzsv2f> <div class="sidebar-content" data-astro-cid-ssfzsv2f> <div class="sidebar-header" data-astro-cid-ssfzsv2f> <button class="sidebar-close" aria-label="Close navigation" data-astro-cid-ssfzsv2f>×</button> </div> <div class="sidebar-search" data-astro-cid-ssfzsv2f> <div id="search-container" data-astro-cid-otpdt6jm> <div id="search-ui" data-astro-cid-otpdt6jm> <div class="search-placeholder" data-astro-cid-otpdt6jm> <input type="text" placeholder="Search..." disabled style="
14        width: 100%;
15        padding: 8px 40px 8px 40px;
16        border: 1px solid var(--color-white-20);
17        border-radius: 6px;
18        background: var(--color-white-8);
19        color: var(--color-light);
20        font-size: 0.875rem;
21        font-family: var(--font-ui);
22        height: 36px;
23        box-sizing: border-box;
24      " data-astro-cid-otpdt6jm> </div> </div> </div> 
24<script>
25  let pagefindLoaded = false;
26
27  async function loadPagefind() {
28    if (pagefindLoaded) return;
29
30    try {
31      const response = await fetch("/pagefind/pagefind.js");
32      if (!response.ok) throw new Error("Pagefind not available");
33
34      const cssLink = document.createElement("link");
35      cssLink.rel = "stylesheet";
36      cssLink.href = "/pagefind/pagefind-ui.css";
37      document.head.appendChild(cssLink);
38
39      const script = document.createElement("script");
40      script.src = "/pagefind/pagefind.js";
41      document.head.appendChild(script);
42
43      const uiScript = document.createElement("script");
44      uiScript.src = "/pagefind/pagefind-ui.js";
45      document.head.appendChild(uiScript);
46
47      await new Promise((resolve, reject) => {
48        uiScript.onload = resolve;
49        uiScript.onerror = reject;
50      });
51
52      // Remove placeholder before initializing Pagefind
53      const placeholder = document.querySelector(".search-placeholder");
54      if (placeholder) placeholder.remove();
55
56      new window.PagefindUI({
57        element: "#search-ui",
58        showSubResults: false,
59        showImages: false,
60        excerptLength: 10,
61        resetStyles: true,
62        bundlePath: "/pagefind/",
63        showEmptyFilters: false,
64        autofocus: false
65      });
66
67      pagefindLoaded = true;
68    } catch (error) {
69      // In dev mode, show a non-functional but styled search interface
70      const searchUI = document.getElementById("search-ui");
71      if (searchUI) {
72        // Remove placeholder
73        const placeholder = document.querySelector(".search-placeholder");
74        if (placeholder) placeholder.remove();
75
76        // Create dev mode search interface
77        searchUI.innerHTML = `
78          <div class="pagefind-ui">
79            <form class="pagefind-ui__form">
80              <input class="pagefind-ui__search-input" type="search" placeholder="Search in prod builds" disabled>
81              <button type="button" class="pagefind-ui__search-clear" disabled style="display: none;">Clear</button>
82            </form>
83            <div class="pagefind-ui__results-area"></div>
84          </div>
85        `;
86      }
87    }
88  }
89
90  function initSearch() {
91    loadPagefind();
92
93    document.addEventListener("keydown", (e) => {
94      if ((e.metaKey || e.ctrlKey) && e.key === "k") {
95        e.preventDefault();
96        const searchInput = document.querySelector("#search-ui input");
97        if (searchInput) searchInput.focus();
98      }
99    });
100
101    setTimeout(fixSearchUX, 1000);
102  }
103
104  function fixSearchUX() {
105    const searchInput = document.querySelector("#search-ui input");
106    let selectedIndex = -1;
107    let results = [];
108
109    const waitForElements = () => {
110      const form = document.querySelector("#search-ui .pagefind-ui__form");
111      if (!form || !searchInput) {
112        setTimeout(waitForElements, 100);
113        return;
114      }
115
116      const toggleIcon = () => {
117        const hasValue = searchInput.value.trim().length > 0;
118        const isFocused = document.activeElement === searchInput;
119
120        if (hasValue || isFocused) {
121          form.classList.add("hide-search-icon");
122        } else {
123          form.classList.remove("hide-search-icon");
124        }
125      };
126
127      searchInput.addEventListener("input", toggleIcon);
128      searchInput.addEventListener("focus", toggleIcon);
129      searchInput.addEventListener("blur", toggleIcon);
130      toggleIcon();
131    };
132
133    const updateSelectedResult = () => {
134      results = Array.from(document.querySelectorAll("#search-ui .pagefind-ui__result"));
135      results.forEach((result, index) => {
136        if (index === selectedIndex) {
137          result.classList.add("selected");
138          result.scrollIntoView({ block: "nearest", behavior: "smooth" });
139        } else {
140          result.classList.remove("selected");
141        }
142      });
143    };
144
145    waitForElements();
146
147    if (searchInput) {
148      searchInput.addEventListener("keydown", (e) => {
149        results = Array.from(document.querySelectorAll("#search-ui .pagefind-ui__result"));
150
151        if (e.key === "ArrowDown") {
152          e.preventDefault();
153          selectedIndex = Math.min(selectedIndex + 1, results.length - 1);
154          updateSelectedResult();
155        } else if (e.key === "ArrowUp") {
156          e.preventDefault();
157          selectedIndex = Math.max(selectedIndex - 1, -1);
158          updateSelectedResult();
159        } else if (e.key === "Tab" && results.length > 0) {
160          e.preventDefault();
161          selectedIndex = e.shiftKey
162            ? Math.max(selectedIndex - 1, -1)
163            : Math.min(selectedIndex + 1, results.length - 1);
164          updateSelectedResult();
165        } else if (e.key === "Enter" && selectedIndex >= 0 && results[selectedIndex]) {
166          e.preventDefault();
167          const link = results[selectedIndex].querySelector(".pagefind-ui__result-link");
168          if (link) {
169            searchInput.value = "";
170            searchInput.dispatchEvent(new Event("input"));
171            window.location.href = link.href;
172          }
173        } else if (e.key === "Escape") {
174          selectedIndex = -1;
175          updateSelectedResult();
176          searchInput.blur();
177        }
178      });
179    }
180
181    document.addEventListener("click", (e) => {
182      const result = e.target.closest("#search-ui .pagefind-ui__result");
183      if (result) {
184        const link = result.querySelector(".pagefind-ui__result-link");
185        if (link) {
186          e.preventDefault();
187          e.stopPropagation();
188          if (searchInput) {
189            searchInput.value = "";
190            searchInput.dispatchEvent(new Event("input"));
191          }
192          window.location.href = link.href;
193        }
194      }
195    });
196
197    const observer = new MutationObserver(() => {
198      const results = document.querySelectorAll("#search-ui .pagefind-ui__result");
199      results.forEach((result) => {
200        if (result && result.querySelector(".pagefind-ui__result-link")) {
201          result.style.cursor = "pointer";
202        }
203      });
204      selectedIndex = -1;
205    });
206
207    const resultsArea = document.querySelector("#search-ui .pagefind-ui__results");
208    if (resultsArea) {
209      observer.observe(resultsArea, { childList: true, subtree: true });
210    }
211  }
212
213  if (document.readyState === "loading") {
214    document.addEventListener("DOMContentLoaded", initSearch);
215  } else {
216    initSearch();
217  }
218</script>
218  </div> <div class="sidebar-nav" data-astro-cid-ssfzsv2f> <a href="/posts/2026-06-06_clock_started/" class="nav-link " data-astro-cid-ssfzsv2f> Executive Order </a><a href="/posts/2026-04-16-evolution_of_trust/" class="nav-link " data-astro-cid-ssfzsv2f> The (De-)Evolution of Trust In Computer Systems </a><a href="/posts/2026-04-14-understanding_where_we_came_from/" class="nav-link " data-astro-cid-ssfzsv2f> Understanding Where We Came From </a><a href="/posts/2026-04-07-on-open-source/" class="nav-link " data-astro-cid-ssfzsv2f> On Open Source Business Models </a><a href="/posts/os/" class="nav-link " data-astro-cid-ssfzsv2f> On Open Source Business Models </a><a href="/posts/2026-03-27_about_surveyor/" class="nav-link " data-astro-cid-ssfzsv2f> About Spice Labs Surveyor </a><a href="/posts/2026-03-30-caring-about-pqc/" class="nav-link active" data-astro-cid-ssfzsv2f> Why You Should Care About Post Quantum Cryptography (PQC) </a><a href="/posts/2026-02-23_writing_png_decoder/" class="nav-link " data-astro-cid-ssfzsv2f> Writing A Slim PNG Decoder In Scala </a><a href="/posts/2025-12-12_lessons_learned_replicating_source_repositories/" class="nav-link " data-astro-cid-ssfzsv2f> Lessons Learned in Replicating Source Repositories </a><a href="/posts/2025-11-17_post_quantum_crypto/" class="nav-link " data-astro-cid-ssfzsv2f> Haystacks and Post-Quantum Crypto </a><a href="/posts/2025-09-30-founder_post/" class="nav-link " data-astro-cid-ssfzsv2f> A Startup Voyage </a><a href="/posts/2025-09-23-mult_publishing_from_github_workflows/" class="nav-link " data-astro-cid-ssfzsv2f> Multipublishing Scala from Github Workflows </a><a href="/posts/2025-02-06-customer_pains/" class="nav-link " data-astro-cid-ssfzsv2f> Building a Fortress in Shifting Sands: How Security Engineers Can Conquer Software Security Uncertainty </a><a href="/posts/2025-01-06-building_profitably_in_2025/" class="nav-link " data-astro-cid-ssfzsv2f> Building Profitably in 2025: A Founder&#39;s Perspective </a><a href="/posts/2024-12-10-introducing_spice_labs/" class="nav-link " data-astro-cid-ssfzsv2f> Introducing Spice Labs and the Hyperscale System of Record for Software </a>  </div> </div> </nav> 
218<script type="module">function i(){const e=document.querySelector(".mobile-menu-toggle"),n=document.getElementById("sidebar"),c=document.querySelector(".sidebar-close"),t=document.getElementById("sidebar-overlay");if(!e||!n)return;const l=()=>{n.classList.add("mobile-open"),e.classList.add("active","menu-open"),t&&(t.style.display="block"),document.body.style.overflow="hidden"},s=()=>{n.classList.remove("mobile-open"),e.classList.remove("active","menu-open"),t&&(t.style.display="none"),document.body.style.overflow=""};e.addEventListener("click",()=>{n.classList.contains("mobile-open")?s():l()}),c?.addEventListener("click",s),t?.addEventListener("click",s),n.querySelectorAll(".nav-link, .category-header-link").forEach(o=>{o.addEventListener("click",s)}),document.addEventListener("keydown",o=>{o.key==="Escape"&&n.classList.contains("mobile-open")&&s()});const d=()=>{const o=document.getElementById("header"),a=o?o.offsetHeight:80;window.scrollY>a-40?e.classList.add("on-content"):e.classList.remove("on-content")};window.addEventListener("scroll",d),d()}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i):i();</script>
218  <main class="docs-main">  <header class="blog-header"> <div class="blog-header-content"> <h1 class="blog-title">Why You Should Care About Post Quantum Cryptography (PQC)</h1> <p class="blog-description">Spice Labs: Know your Systems, Chart your Course. The easiest and fastest way to generate CBOMs at scale and manage your PQC journey.</p> <div class="blog-meta"> <img src="/images/avatar-sdh.avif" alt="Steve Hawley" class="author-avatar"> <div class="author-info"> <div class="author-name-date"> <span class="author-name">Steve Hawley</span> <span class="blog-meta-separator">•</span> <time class="blog-date" datetime="2026-03-27T00:00:00.000Z"> March 27, 2026 </time> </div> <div class="author-title">Engineer</div> </div> </div> </div> </header> <div class="docs-content">  <p>In this article, I’m going to give a quick survey of “how we got here” to help you understand cryptography and why and how cryptography as we know it is over.</p>
219<p>People have always communicated and as long as we have had communication, we have wanted to ensure that some communication
220should be only accessible by a select group of people. Restricting access was done in the past by simple means such as substitution ciphers, like the
221well-known Caeser cipher or wheel encoders such as the Jefferson cipher, or with “security by obscurity” where you use a different
222language, such as the famous Navaho <a href="https://en.wikipedia.org/wiki/Code_talker">code talkers</a> in World War II who transmitted
223secure communications in Navaho.</p>
224<p>But there are more applications of cryptography than hiding sensitive communications from prying eyes. Another use is to verify authenticity. This is not
225to keep someone from snooping on communication but instead to be able to verify that communication or other digital assets are
226exactly as the author(s) intended. For example, if you have ever digitally signed a contract, the document has been
227correspondingly signed with encryption tools to ensure that the document wasn’t subsequently altered by a malicious agent.</p>
228<p>About 1500 years ago, the mathematician Sunzi Suanjing published a theorem about the relationship of remainders in integer
229division. This theorem is the basis of most modern encryption systems, which by and large depend on the product of two large
230prime numbers. In order to break encryption, you need to be able to find the two large primes by factoring their product.
231This was chosen because factoring, while straight-forward, is an exponential algorithm. This means that as the size of the
232number increases, the time it takes to do the work grows by an exponent. The simplest way to visualize this is the penny payment
233scenario: on the first day of a month you give me a penny and each subsequent day you give me double the number of pennies.
234At the end of the month, you will have paid me 2<sup>31</sup> pennies or $21,474,836.</p>
235<p>The same notion has been used in encryption: that you can easily pick numbers that would require centuries for
236current computers to break.</p>
237<p>Quantum Computing changes all this.</p>
238<p>In 1994, Peter Shor created an algorithm for quantum computation for finding the prime factors of an integer and the solution
239can be found in logarithmic time, which makes it very practical for breaking traditional encryption algorithms, including commonly
240used algorithms such as RSA and Elliptic-Curve.</p>
241<p>If you receive a digital contract, how will you know that it hasn’t be altered? If you receive a signed Java jar file, how will
242you know it doesn’t carry a Trojan horse injected by someone who cracked the signing? If you keep encrypted customer data,
243can you say for sure that it’s secure?</p>
244<p>These are all problems and moving forward in a PQC world software will need to be updated to use algorithms that aren’t subject to
245attack by quantum algorithms as well as traditional algorithms. These are algorithms that include ML-KEM, ML-DSA, SLH-DSA and
246others.</p>
247<p>Using these in new software and in your own code base is straight forward.</p>
248<p>Or is it?</p>
249<p>Every modern piece of software is built with dependencies on other libraries. And those libraries have dependencies. And so on.
250It’s <a href="https://en.wikipedia.org/wiki/Turtles_all_the_way_down">turtles all the way down</a>.</p>
251<p>And what about your production system that has been running “just fine” for years? What do you even have deployed on it? What
252was added and what rollbacks changed things? Is the person who did that “quick patch” even still at your company?</p>
253<p>When you start asking the question, “is my organization ready for PQC?” you need to al
253so ask, “what software do I have that
254is at risk?” because it’s not just the software you wrote in house, it’s also everything that comes along with it, and that’s
255a harder list to generate, especially considering how ubiquitous cryptography and cryptographic signing is.</p>
256<p>That’s where Spice Labs steps in. You can try out <a href="https://amuse.spicelabs.io/">Amuse Bouche</a> today. This is a technology
257preview that lets you see what PQC issues exist in your codebase (including all the turtles) and builds a roadmap for
258what you need to do to assess the work that is ahead of you.</p>
259<p>Remember, PQC is here and Spice Labs will be your partner for ensuring that your code is ready for a PQC world.</p>  </div>  </main> </div> <footer data-astro-cid-sz7xmlte> <section id="footer" data-astro-cid-sz7xmlte> <a href="https://www.spicelabs.io" data-astro-cid-sz7xmlte> <div id="logo" data-astro-cid-sz7xmlte> <img src="/_astro/logo.kD7HKa-5_ZuUS7w.svg" alt="Spice Labs Logo" data-astro-cid-sz7xmlte="true" loading="lazy" decoding="async" fetchpriority="auto" width="223" height="48"> </div> </a> <div class="nav" data-astro-cid-sz7xmlte> <ul data-astro-cid-sz7xmlte> <li data-astro-cid-sz7xmlte><a href="https://www.spicelabs.io#team" data-astro-cid-sz7xmlte>Team & Advisors</a></li> <li data-astro-cid-sz7xmlte><a href="https://www.spicelabs.io#contact" data-astro-cid-sz7xmlte>Contact</a></li> <li data-astro-cid-sz7xmlte><a href="https://www.spicelabs.io#careers" data-astro-cid-sz7xmlte>Careers</a></li> <li data-astro-cid-sz7xmlte><a href="https://www.spicelabs.io#resources" data-astro-cid-sz7xmlte>
259Resources</a></li> </ul> <ul data-astro-cid-sz7xmlte> <li data-astro-cid-sz7xmlte><a href="https://www.linkedin.com/company/spice-labs-inc" data-astro-cid-sz7xmlte>LinkedIn</a></li> <li data-astro-cid-sz7xmlte><a href="https://documents.spicelabs.io/privacy/" data-astro-cid-sz7xmlte>Privacy Policy</a></li> <li data-astro-cid-sz7xmlte><a href="https://documents.spicelabs.io/terms/" data-astro-cid-sz7xmlte>Terms of Service</a></li> <li data-astro-cid-sz7xmlte> <a href="/feed.xml" class="rss-link" data-astro-cid-sz7xmlte> <svg xmlns="http://www.w3.org/2000/svg" height="16" viewBox="0 0 24 24" width="16" fill="currentColor" data-astro-cid-sz7xmlte> <path d="M0 0h24v24H0z" fill="none" data-astro-cid-sz7xmlte></path> <circle cx="6.18" cy="17.82" r="2.18" data-astro-cid-sz7xmlte></circle> <path d="M4 4.44v2.83c7.03 0 12.73 5.7 12.73 12.73h2.83c0-8.59-6.97-15.56-15.56-15.56zm0 5.66v2.83c3.9 0 7.07 3.17 7.07 7.07h2.83c0-5.47-4.43-9.9-9.9-9.9z" data-astro-cid-sz7xmlte></path> </svg>
260RSS Feed
261</a> </li> </ul> </div> <div class="copyright" data-astro-cid-sz7xmlte>
262© 2026 Spice Labs. All rights reserved.
263</div> </section> </footer>  </div> 
263<script type="module">function a(){const c=document.createElement("div");c.className="copy-toast",c.textContent="Copied!",document.body.appendChild(c);function l(){c.classList.add("show"),setTimeout(()=>{c.classList.remove("show")},2e3)}async function p(s){try{return await navigator.clipboard.writeText(s),!0}catch{const e=document.createElement("textarea");e.value=s,e.style.position="fixed",e.style.opacity="0",document.body.appendChild(e),e.focus(),e.select();try{return document.execCommand("copy"),document.body.removeChild(e),!0}catch{return document.body.removeChild(e),!1}}}function r(){document.querySelectorAll("pre, .astro-code").forEach(o=>{if(o.querySelector(".copy-button"))return;const e=document.createElement("div");e.className="code-block-wrapper",e.style.position="relative",o.parentNode.insertBefore(e,o),e.appendChild(o);const n=document.createElement("div");n.className="copy-btn-fixed",n.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" height="18px" viewBox="0 -960 960 960" width="18px" fill="currentColor"><path d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"/></svg>',n.style.cssText=`
264        position: absolute;
265        top: 8px;
266        right: 8px;
267        width: 32px;
268        height: 32px;
269        background: rgba(241, 241, 241, 0.3);
270        border: 1px solid rgba(241, 241, 241, 0.2);
271        color: #f1f1f1;
272        border-radius: 6px;
273        cursor: pointer;
274        z-index: 10;
275        display: flex;
276        align-items: center;
277        justify-content: center;
278        transition: all 0.2s ease;
279      `,e.appendChild(n);const t=document.createElement("button");t.className="copy-button",t.innerHTML="📋",t.title="Copy code",t.style.display="none",t.addEventListener("click",async()=>{const d=o.cloneNode(!0),i=d.querySelector(".copy-button");i&&i.remove();const u=d.textContent||"";await p(u)&&(t.innerHTML="✓",t.classList.add("copied"),l(),setTimeout(()=>{t.innerHTML="📋",t.classList.remove("copied")},2e3))}),n.addEventListener("click",async()=>{t.click()}),o.appendChild(t)})}r(),new MutationObserver(()=>{r()}).observe(document.body,{childList:!0,subtree:!0})}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",a):a();</script>
279 </body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.