<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>证书 - tag - 沐木</title><link>https://oldletter.cn/tags/%E8%AF%81%E4%B9%A6/</link><description>证书 - tag - 沐木</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Thu, 20 Apr 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://oldletter.cn/tags/%E8%AF%81%E4%B9%A6/" rel="self" type="application/rss+xml"/><item><title>非对称加密与签名：RSA、ECC、SM2</title><link>https://oldletter.cn/posts/crypto-04-asymmetric/</link><pubDate>Thu, 20 Apr 2023 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/crypto-04-asymmetric/</guid><description><![CDATA[<blockquote>
<p>作者：林 | 系列：密码学 | 适合读者：后端开发 / 安全工程师</p></blockquote>
<hr>
<h2 id="一非对称加密原理">一、非对称加密原理</h2>
<p>对称加密用一把钥匙，非对称加密用一对钥匙：</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-text">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title=""><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">公钥（Public Key）：可以公开，任何人都能拿到
</span></span><span class="line"><span class="cl">私钥（Private Key）：必须保密，只有自己持有
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">加密：用对方的公钥加密 → 只有对方的私钥能解
</span></span><span class="line"><span class="cl">签名：用自己的私钥签名 → 任何人用公钥都能验证</span></span></code></pre></div></div>
<p>非对称加密的数学基础是&quot;单向陷门函数&quot;，正向计算容易，反向计算极难，但持有特定信息（私钥）可以轻松反向。</p>
<hr>
<h2 id="二三大主流算法">二、三大主流算法</h2>
<h3 id="21-rsa">2.1 RSA</h3>
<p>基于<strong>大整数分解难题</strong>：给定两个大素数 p、q，计算 n = p × q 容易；但给定 n，分解出 p 和 q 极难。</p>
<div class="code-block code-line-numbers open" style="counter-reset: code-block 0">
    <div class="code-header language-text">
        <span class="code-title"><i class="arrow fas fa-angle-right" aria-hidden="true"></i></span>
        <span class="ellipses"><i class="fas fa-ellipsis-h" aria-hidden="true"></i></span>
        <span class="copy" title=""><i class="far fa-copy" aria-hidden="true"></i></span>
    </div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">密钥生成：
</span></span><span class="line"><span class="cl">  1. 选两个大素数 p, q（各 1024 bit）
</span></span><span class="line"><span class="cl">  2. 计算 n = p × q（2048 bit）
</span></span><span class="line"><span class="cl">  3. 计算 φ(n) = (p-1)(q-1)
</span></span><span class="line"><span class="cl">  4. 选择 e（通常 65537），满足 gcd(e, φ(n)) = 1
</span></span><span class="line"><span class="cl">  5. 计算 d = e⁻¹ mod φ(n)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  公钥 = (n, e)
</span></span><span class="line"><span class="cl">  私钥 = (n, d)
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">加密：C = M^e mod n
</span></span><span class="line"><span class="cl">解密：M = C^d mod n</span></span></code></pre></div></div>
<p>RSA 的问题：密钥太长。2048 bit 才提供 112 bit 安全强度，4096 bit 才提供 128 bit。</p>]]></description></item><item><title>国密实战（一）：SM2 密钥格式与 PFX 证书解析全指南</title><link>https://oldletter.cn/posts/guomi-01-sm2-key-cert/</link><pubDate>Thu, 10 Mar 2022 00:00:00 +0000</pubDate><author>mumu</author><guid>https://oldletter.cn/posts/guomi-01-sm2-key-cert/</guid><description><![CDATA[<blockquote>
<p>作者：林 | 系列：国密实战 | 适合读者：Java 后端/架构师</p></blockquote>
<hr>
<h2 id="一背景与问题">一、背景与问题</h2>
<p>随着《密码法》的实施和信创（信息技术应用创新）要求的推进，越来越多的政府、央企、金融项目要求使用<strong>国密算法</strong>替代 RSA/ECDSA。SM2 作为国密体系中的非对称加密算法，对标 RSA-2048 和 ECDSA P-256，已广泛应用于数字证书、签名验签、密钥交换等场景。</p>
<p>然而，在实际项目中接入 SM2 时，第一个拦路虎往往并非算法本身，重点是，<strong>密钥格式和证书解析</strong>。不同厂商输出的密钥格式不一致（hex、DER、PEM），PFX 证书里封装的 SM2 密钥对解析方式与 RSA 也有差异，稍不注意就会踩坑。</p>
<p>本文将系统梳理 SM2 密钥格式，并给出从 PFX 证书中提取 SM2 公私钥的完整 Java 实现。</p>
<hr>
<h2 id="二sm2-算法简介">二、SM2 算法简介</h2>
<p>SM2 是国家密码管理局发布的椭圆曲线公钥密码算法，标准编号 <strong>GM/T 0003</strong>，包含：</p>
<table>
  <thead>
      <tr>
          <th>部分</th>
          <th>内容</th>
          <th>对标国际标准</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GM/T 0003.1</td>
          <td>总则</td>
          <td>—</td>
      </tr>
      <tr>
          <td>GM/T 0003.2</td>
          <td>数字签名算法</td>
          <td>ECDSA</td>
      </tr>
      <tr>
          <td>GM/T 0003.3</td>
          <td>密钥交换协议</td>
          <td>ECDH</td>
      </tr>
      <tr>
          <td>GM/T 0003.4</td>
          <td>公钥加密算法</td>
          <td>ECIES</td>
      </tr>
      <tr>
          <td>GM/T 0003.5</td>
          <td>参数定义</td>
          <td>—</td>
      </tr>
  </tbody>
</table>
<p>SM2 使用的椭圆曲线参数为 <code>sm2p256v1</code>，其曲线方程为标准 Weierstrass 形式：y² = x³ + ax + b (mod p)。</p>]]></description></item></channel></rss>