<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>RSA - tag - 沐木</title><link>https://oldletter.cn/tags/rsa/</link><description>RSA - 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/rsa/" 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></channel></rss>