<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jahanzeb Raja</title>
    <description>The latest articles on DEV Community by Jahanzeb Raja (@jahanzeb_raja_758df006510).</description>
    <link>https://dev.to/jahanzeb_raja_758df006510</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3914754%2Fd9c3c977-8fce-4fe9-a762-1c0051c5f353.jpg</url>
      <title>DEV Community: Jahanzeb Raja</title>
      <link>https://dev.to/jahanzeb_raja_758df006510</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jahanzeb_raja_758df006510"/>
    <language>en</language>
    <item>
      <title>How to scan your codebase for post-quantum cryptographic risk</title>
      <dc:creator>Jahanzeb Raja</dc:creator>
      <pubDate>Tue, 05 May 2026 22:12:50 +0000</pubDate>
      <link>https://dev.to/jahanzeb_raja_758df006510/how-to-scan-your-codebase-for-post-quantum-cryptographic-risk-3da9</link>
      <guid>https://dev.to/jahanzeb_raja_758df006510/how-to-scan-your-codebase-for-post-quantum-cryptographic-risk-3da9</guid>
      <description>&lt;p&gt;If you've been following NIST's post-quantum cryptography standardization process, you already know the threat is real. In August 2024, NIST finalized the first three PQC standards: ML-KEM (CRYSTALS-Kyber), ML-DSA (CRYSTALS-Dilithium), and SLH-DSA (SPHINCS+).&lt;/p&gt;

&lt;p&gt;But here's the problem most engineering teams face: &lt;strong&gt;they don't know what cryptography is actually running in their codebase.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters now
&lt;/h2&gt;

&lt;p&gt;The "harvest now, decrypt later" attack is already happening. Nation-state actors are collecting encrypted traffic today, betting they'll be able to decrypt it once quantum computers are powerful enough. For data that needs to stay confidential for 5+ years, this is not a future problem.&lt;/p&gt;

&lt;p&gt;CNSA 2.0 (NSA's Commercial National Security Algorithm Suite) has set deadlines:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software and firmware: migrate by &lt;strong&gt;2025&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Networking equipment: migrate by &lt;strong&gt;2026&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;General purpose systems: migrate by &lt;strong&gt;2030&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What algorithms are actually at risk
&lt;/h2&gt;

&lt;p&gt;These are the algorithms that quantum computers will break using Shor's algorithm:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Used for&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;RSA-2048&lt;/td&gt;
&lt;td&gt;Encryption, signatures&lt;/td&gt;
&lt;td&gt;Vulnerable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECDSA P-256&lt;/td&gt;
&lt;td&gt;TLS, JWT, SSH&lt;/td&gt;
&lt;td&gt;Vulnerable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECDH&lt;/td&gt;
&lt;td&gt;Key exchange&lt;/td&gt;
&lt;td&gt;Vulnerable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Diffie-Hellman&lt;/td&gt;
&lt;td&gt;Key agreement&lt;/td&gt;
&lt;td&gt;Vulnerable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These are weakened but not broken by Grover's algorithm:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Algorithm&lt;/th&gt;
&lt;th&gt;Used for&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AES-128&lt;/td&gt;
&lt;td&gt;Symmetric encryption&lt;/td&gt;
&lt;td&gt;Downgrade to 64-bit security&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHA-1&lt;/td&gt;
&lt;td&gt;Hashing&lt;/td&gt;
&lt;td&gt;Already deprecated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;MD5&lt;/td&gt;
&lt;td&gt;Hashing&lt;/td&gt;
&lt;td&gt;Already deprecated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3DES&lt;/td&gt;
&lt;td&gt;Legacy encryption&lt;/td&gt;
&lt;td&gt;Vulnerable&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;AES-256 and SHA-256 remain safe&lt;/strong&gt; against known quantum attacks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to find cryptographic risk in your code
&lt;/h2&gt;

&lt;p&gt;The naive approach is grepping for algorithm names. This misses a lot.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# This will miss most real-world usage&lt;/span&gt;
&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s2"&gt;"RSA"&lt;/span&gt; ./src
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Real cryptographic usage hides in:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Library imports (&lt;code&gt;from cryptography.hazmat.primitives.asymmetric import rsa&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Configuration files (&lt;code&gt;ssl_protocols TLSv1 TLSv1.1&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Certificate handling code&lt;/li&gt;
&lt;li&gt;JWT libraries using RS256 or ES256 signing&lt;/li&gt;
&lt;li&gt;SSH key generation&lt;/li&gt;
&lt;li&gt;TLS configuration in web servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A proper scan needs to understand context, not just pattern match.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a real scan looks like
&lt;/h2&gt;

&lt;p&gt;I built &lt;a href="https://cipherahead.com" rel="noopener noreferrer"&gt;CipherAhead&lt;/a&gt; to solve this. Here's what scanning the Apache HTTPD repository surfaces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;57 findings&lt;/strong&gt; across the codebase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;6 critical&lt;/strong&gt; issues including Diffie-Hellman key exchange and TLS 1.0 support&lt;/li&gt;
&lt;li&gt;Specific file and line references for each finding&lt;/li&gt;
&lt;li&gt;Remediation mapped to NIST PQC standards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, in &lt;code&gt;modules/ssl/ssl_engine_init.c&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Line 122 - CRITICAL&lt;/span&gt;
&lt;span class="n"&gt;DH_generate_key&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dh&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="n"&gt;DH_compute_key&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;shared_secret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;peer_pub_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;dh&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Fix: migrate to X25519 or ML-KEM post-quantum key exchange&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And in the same file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Line 910 - HIGH&lt;/span&gt;
&lt;span class="n"&gt;SSL_CTX_set_min_proto_version&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;TLS1_VERSION&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// Fix: require TLS 1.3 as minimum&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  A scan across popular open source projects
&lt;/h2&gt;

&lt;p&gt;After scanning 97 real-world projects, here's what the data shows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;9,869 total findings&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;39 critical&lt;/strong&gt; risk findings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;42 high&lt;/strong&gt; risk findings&lt;/li&gt;
&lt;li&gt;Only &lt;strong&gt;Angular&lt;/strong&gt; scored 0 (fully PQC-safe in its own code)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache Tomcat&lt;/strong&gt;: 152 findings, 15 critical&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bitcoin Core&lt;/strong&gt;: 190 findings, 4 critical&lt;/li&gt;
&lt;li&gt;Classical cryptography still dominates across the ecosystem&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where to start in your own codebase
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Inventory first&lt;/strong&gt;: list every library that handles cryptography&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on data in transit&lt;/strong&gt;: TLS configurations, API authentication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus on data at rest&lt;/strong&gt;: encryption keys, certificate management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check JWT signing algorithms&lt;/strong&gt;: RS256 and ES256 are vulnerable, switch to EdDSA as an intermediate step&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit SSH keys&lt;/strong&gt;: RSA keys should be replaced with Ed25519&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The migration path
&lt;/h2&gt;

&lt;p&gt;For each vulnerable algorithm, NIST recommends:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Key exchange&lt;/strong&gt;: migrate to ML-KEM (CRYSTALS-Kyber)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Digital signatures&lt;/strong&gt;: migrate to ML-DSA (CRYSTALS-Dilithium) or SLH-DSA&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Symmetric encryption&lt;/strong&gt;: upgrade AES-128 to AES-256&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hashing&lt;/strong&gt;: move from MD5/SHA-1 to SHA-256 or SHA-3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most major libraries already support these. OpenSSL 3.x, BouncyCastle, and libsodium have PQC implementations available.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on your own repo
&lt;/h2&gt;

&lt;p&gt;You can scan any public GitHub repository or web URL at &lt;a href="https://cipherahead.com" rel="noopener noreferrer"&gt;cipherahead.com&lt;/a&gt; for free. No install required.&lt;/p&gt;

&lt;p&gt;The goal isn't to panic — most production systems have years before quantum computers become a real threat. But cryptographic migrations take time, and understanding your current exposure is the first step.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you found this useful or have questions about PQC migration, drop a comment below.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>cryptography</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
