7.4 的公开密钥加密有个暗门:任何人都能拿到你的公钥给你写信——保密做到了,身份却是空的。本节把钥匙对反过来用:用自己的私钥加密数据发出去,收信人拿你的公钥解——能解开,就证明这数据全世界只有你那把私钥造得出来,"能被公钥解开"本身就是发信人身份证。这就是数字签名(下一节盖楼)的地基。教材标题里的两个算法都是干这活的:RSA(大数质因数分解,钥匙 2048/4096 位,资格最老)和椭圆曲线加密 ECC(椭圆曲线离散对数难题,钥匙 256 位就有 RSA-3072 的强度,短一大截——所以手机和物联网都爱它)。Demo90 在浏览器里见过的 ECDHE,就是 ECC 版的密钥交换。
7.2~7.4 一直在解决"别人看不懂"(机密性),本节第一次转向"确认真的是你"(认证性)——正好接上 7.1 认证三要素里的"你持有私钥"这条线。7.4 埋的那句"私钥反过来用"在本节正式展开。
老账继续对上:7.2 说"加密防不了篡改、也防不了冒充",本节的私钥加密方向就是补这个窟窿的第一块砖;7.1 的数字证书里,CA 给公钥"盖信任章"用的正是本节的私钥加密能力;Demo90 浏览器密码套件里的 ECDHE 在这里揭晓真身——椭圆曲线版的密钥交换,每次打开 https 网页它都在跑。
一、7.4 的暗门:保密做到了,身份却是空的
用公开密钥加密发信,流程是"拿收信人的公钥上锁"。问题在于:公钥是随便谁都能拿到的。
于是出现一个尴尬局面:小波收到一封"老墨"发来的加密信,解得开、看得懂——但这信真是老墨发的吗?任何第三者都能拿到老墨的公钥,锁一封信冒充老墨。保密性满分,身份认证零分。
这和 7.1 的认证思想接上了:光证明"数据没人偷看"不够,还得证明"这数据出自谁的手"。
二、反过来用钥匙:私钥加密 = 亮出身份证(第一张配图)
钥匙对有两种用法,方向完全相反:
- 方向①(7.4,求保密):公钥加密 → 私钥解密。公钥人人有,所以"能加密"不代表任何身份;
- 方向②(本节,求身份):私钥加密 → 公钥解密。私钥只有一把、只在本人手里——能造出这段密文的,全世界只有私钥的主人。
验证逻辑一句话:用"老墨的公钥"能解开的数据,全世界只有"老墨的私钥"能造出来。公钥人人都有,谁都可以当"验票员";但票(密文)只有持私钥的人造得出。伪造者没有那把私钥,数学上就锁不出能被这把公钥打开的东西。
这和 5.21"密码不上线"是同一种安全感:真正需要保密的(私钥)从头到尾没在网络上出现过,可身份照样验成了。
三、RSA 的两个方向:一对钥匙、两套安全模型
RSA 本身是对称的数学构造——两个方向都通,但用途必须分清:
| 方向① 公钥加密 → 私钥解 | 方向② 私钥加密 → 公钥解 | |
|---|---|---|
| 求什么 | 保密(只有我能看) | 认证(确实是我发的) |
| 谁能加密 | 任何人(公钥公开) | 只有私钥主人 |
| 谁能解密 | 只有私钥主人 | 任何人(公钥公开) |
| 对应岗位 | 送会话密钥 | 数字签名、证书盖章 |
铁律:方向不能混。用"公钥加密"去验身份是荒谬的(人人能加密),用"私钥加密"去保密更是笑话(人人能解密)。方向选错,安全模型整个塌掉。
顺带一提:现实中"私钥加密"不是把整封信加密(太慢、也太浪费),而是只对数据的"指纹"(哈希值,下一节细讲)做私钥运算——这就是数字签名的标准形态。本节先把方向和原理吃透。
四、椭圆曲线加密(ECC):更短的钥匙、同样的强度
公开密钥家族不止 RSA 一个成员。教材点名的另一位主力是椭圆曲线加密(ECC,1985 年提出)。
- 数学地基:椭圆曲线上的"点乘"运算正着算容易、反着推极难(椭圆曲线离散对数难题)——和大数的"乘易分难"是同构的不对称性;
- 核心优势:钥匙短一大截。ECC-256 位的安全强度 ≈ RSA-3072 位——钥匙短 12 倍,强度打平;
- 带来的实惠:运算快、功耗低、传输的钥匙小——手机、物联网、智能门锁这些"体格小"的设备几乎清一色用 ECC;
- 老熟人归队:Demo90 在浏览器密码套件里看到的 ECDHE,就是"椭圆曲线 Diffie-Hellman 密钥交换"——每次打开 https 网页,浏览器和服务器正用它现场商量一把 AES 会话密钥。
对照表:RSA 资格最老、生态最广(证书、老系统);ECC 更新更轻(新系统、移动端)。两者干的都是本节和 7.4 的活——只是数学地基不同。
五、现实岗位:这些"身份确认"每天都在发生
- 数字证书:7.1 讲过 CA 给公钥"盖信任章"——那个章就是 CA 用自己的私钥对证书内容做的加密运算,浏览器用 CA 的公钥验;
- HTTPS 握手:服务器出示证书(用私钥证明"我是这个域名的主人"),再用 ECDHE 和你商量会话密钥;
- 软件签名:Windows 安装包、手机 App 的"发行者已验证",就是厂商用私钥盖章、系统用公钥验章——私钥加密方向最日常的应用。
六、动手 Demo(Demo93)
亲手做一次"私钥盖章、公钥验章、篡改现形"。还是不用装任何东西,PowerShell 直接跑。
第一步:盖章 + 验真章
按 Win 键 → 输入 powershell → 回车,整段粘贴后回车:
$rsa = [System.Security.Cryptography.RSACryptoServiceProvider]::new(2048)
$publicXml = $rsa.ToXmlString($false) # 公钥(给验票员的)
$data = [Text.Encoding]::UTF8.GetBytes("这是老墨亲自发的消息")
$sig = $rsa.SignData($data, [Security.Cryptography.HashAlgorithmName]::SHA256, [Security.Cryptography.RSASignaturePadding]::Pkcs1)
$ver = [System.Security.Cryptography.RSACryptoServiceProvider]::new()
$ver.FromXmlString($publicXml) # 验证方手里只有公钥
"验证真章: " + $ver.VerifyData($data, [Security.Cryptography.HashAlgorithmName]::SHA256, $sig)
看什么算成功:最后一行打印 验证真章: True——验证方手里只有公钥,却确认了"这消息确实出自那把私钥的主人"。
第二步:篡改一个字,看现形
接着粘贴(消息里把"亲"改成"假"):
$data2 = [Text.Encoding]::UTF8.GetBytes("这是老墨假自发的消息")
"验证篡改后: " + $ver.VerifyData($data2, [Security.Cryptography.HashAlgorithmName]::SHA256, $sig)
看什么算成功:打印 验证篡改后: False——内容动了一个字,验章立刻失败。7.2 说"加密防不了篡改",这里第一次看到"防篡改"的钥匙被找到了。
第三步:看一眼自己手机上的 ECC
打开 https 网站 → 地址栏锁图标 → 证书详细信息,留意"公钥算法"一栏:很多网站已经写着 ECDSA(椭圆曲线签名)——你正在围观本节两位主角同台。
30 秒实验:把 Demo93 的 2048 改成 512,照样能签能验——但 512 位的 RSA 私钥现在几分钟就能被破解,"能验章"不等于"章可信",钥匙强度是身份确认的地基(呼应 7.3 的密钥空间)。
七、常见误区
- "私钥加密不是人人都能用公钥解开吗?那还叫加密?":本节这个方向的目的本来就不是保密,而是身份认证。谁能"造出"密文才是重点,谁能读不是。
- "所以我要用私钥加密整份文件发出去":不。整份加密又慢又浪费,标准做法是只对哈希指纹做私钥运算(数字签名)——原理同源,形态不同。
- "ECC 钥匙 256 位 < RSA 2048 位,所以 ECC 不安全":两套体系的"位"量法不同,ECC-256 ≈ RSA-3072。钥匙短恰恰是它的优点。
- "验章通过 = 消息没问题 = 发信人可信":验章只证明"这段密文出自对应私钥"。如果那把公钥本身是假的(掉包),验得再漂亮也是骗——公钥的真实性要靠 7.1 的数字证书兜底。
- "RSA 和椭圆曲线是竞争关系,二选一":是分工与共存。老证书、老系统还在大量用 RSA;新系统、移动端偏向 ECC;一次 https 握手里两者完全可以同时出现。
八、动手自测
点开自测(先自己答,再展开对答案)
1. 7.4 的公开密钥加密有个什么暗门?本节怎么补上? 2. 私钥加密的数据,谁能造出来?谁能解开?分别说明这件事的什么性质? 3. "公钥加密 → 私钥解"和"私钥加密 → 公钥解"分别求什么?方向搞反会怎样? 4. ECC 的钥匙为什么可以比 RSA 短那么多?ECC-256 大约对应 RSA 多少位? 5. Demo90 见过的 ECDHE 是什么?它出现在 https 握手的哪个环节? 6. 验章通过了,还有什么可能被骗?靠什么兜底?答案
1. 暗门:公钥人人能拿,**任何人都能冒充你写信**(保密≠认证)。补法:把钥匙反过来——用**自己的私钥**加密发信,收信人用你的公钥验。 2. 全世界**只有私钥的主人**能造出来(认证性);**任何持有公钥的人**都能解开(公开性)——所以"能被这把公钥解开"就成了"确实出自私钥主人之手"的身份证。 3. 前者求**保密**,后者求**认证**。搞反了:用公钥加密验身份是荒谬的(人人能加密),用私钥加密求保密是笑话(人人能解密)——安全模型整个塌掉。 4. 因为 ECC 靠的是**椭圆曲线离散对数难题**,这道题比大数分解"更抗算"——同样强度下钥匙可以短得多。ECC-256 ≈ **RSA-3072**。 5. **椭圆曲线 Diffie-Hellman 密钥交换**——ECC 版的密钥协商。出现在 https 握手阶段:浏览器和服务器现场商量出一把 AES 会话密钥,之后的流量全走 AES。 6. 验章只证明密文出自对应私钥;如果**那把公钥本身是假的**(被人掉包),验得再对也是被骗。靠**数字证书**(CA 背书公钥的真实性)兜底。九、下一步学什么
- ☑ 7.6(按教材顺序)
相关笔记
- 识别数据的创建者(数字签名) —— 地基盖成楼:哈希指纹 + 私钥盖章,认证·完整性·不可否认一次办齐
- 使用两个密钥管理数据(公开密钥加密方式) —— 本节就是它埋的"私钥反过来用":同一对钥匙,方向一调,保密变认证
- 使用一个密钥管理数据(共享密钥加密方式) —— "钥匙强度是地基"(密钥空间)在本节同样成立:512 位的章验得再漂亮也不可信
- 防止数据被窃听的方法(加密) —— 它埋的"加密防不了篡改、防不了冒充"两个窟窿,本节开始逐个补上
- 限制访问用户和设备的方法(身份认证) —— 数字证书(CA 用私钥盖章、大家用公钥验章)就是本节方向的日常现场
- 浏览Web网站时执行的处理(DNS的域名解析、HTTP请求与HTTP响应) —— https 握手 = 证书验明服务器身份 + ECDHE 商量会话密钥 + AES 加密流量,三班倒流水线