1. 课程导论
各位好,我是你们这门课的主讲。在正式开始之前,我想先聊聊一个很实际的问题:为什么我们要花整整30章来对比 Ed25519 和 ECC?
说白了,这不是一个「谁好谁坏」的简单选择题。我在做安全协议选型的时候,经常被问到:「用 Ed25519 还是用 P-256?」「哪个更快?」「哪个更安全?」——这些问题背后,其实藏着对密码学底层逻辑的误解。
我个人习惯是,先搞清楚「为什么」,再谈「怎么做」。所以这一章,我们先搭好框架。
1.1 为什么需要对比?
先看一个场景。你是一个后端开发,要设计一个 API 签名方案。你查了一圈资料,发现大家都在用 ECDSA,但突然又冒出来一个 Ed25519,号称「更快、更小、更安全」。你信吗?
我遇到过类似的情况。几年前我在做一个物联网平台,设备端资源极其有限。当时团队选了 ECDSA P-256,结果签名验证耗时太长,电池撑不住。后来换成 Ed25519,性能直接翻倍。但这不是说 ECC 不行——只是场景不同,选择不同。
所以,对比的意义在于:
- 性能差异:签名、验签、密钥生成,到底差多少?
- 安全边界:Ed25519 的「抗侧信道」是真的吗?ECC 的「曲线参数」有没有坑?
- 实现复杂度:哪个更容易写出 bug?哪个库更成熟?
- 生态兼容性:你的上下游系统支持 Ed25519 吗?还是只能用 ECC?
核心观点:Ed25519 和 ECC 不是替代关系,而是互补关系。理解它们的差异,才能做出正确的工程决策。
1.2 课程目标
这门课的目标很明确:让你在真实项目中,能独立完成 Ed25519 和 ECC 的选型、实现和性能调优。
具体来说,学完这门课,你应该能:
- 说清楚 Ed25519 和 ECC 的数学原理差异(不需要背公式,但要懂逻辑)。
- 跑得动 性能基准测试,能分析出瓶颈在哪。
- 写得出 安全的签名/验签代码,避开常见坑。
- 选得对 根据场景(嵌入式、云端、区块链等)做出合理选择。
一个小建议:不要只听课。每章结束后,打开你的编辑器,把代码跑一遍。我当年学密码学的时候,就是靠「边看边写」才真正理解的。
1.3 学习路径
这门课分四个阶段,我画了一张图,方便你把握整体脉络:
嗯,这张图其实已经说得很清楚了。四个阶段层层递进:
- 基础篇(第2-8章):先搞懂 Ed25519 和 ECC 的数学原理。别怕,我不会让你推导椭圆曲线方程,但你要知道「为什么 Ed25519 的签名只有 64 字节」。
- 实现篇(第9-15章):手写代码。我们会对比 OpenSSL、libsodium、Go 标准库等主流实现。我曾经在 libsodium 里踩过一个坑,到时候细说。
- 性能篇(第16-23章):这才是重头戏。我们会用基准测试工具,测签名速度、验签速度、密钥生成速度,甚至内存占用。你会看到,在某些场景下,Ed25519 比 ECC 快 3 倍以上。
- 实战篇(第24-30章):最后,我们回到真实世界。物联网、区块链、TLS 1.3、SSH……每个场景该怎么选?我会用我参与过的项目案例来讲解。
注意:这门课不是密码学入门课。你需要了解基本的公钥密码概念(比如什么是签名、什么是验签)。如果你连「椭圆曲线」都没听过,建议先补一下基础。
1.4 为什么是我来讲?
简单介绍一下我自己。我做了十年安全工程,从嵌入式设备到云端服务,从金融系统到区块链项目,几乎每个场景都跟签名算法打过交道。我踩过的坑,可能比你看过的文档还多。
举个例子。有一次我在做硬件安全模块(HSM)的集成,发现 ECDSA 的随机数生成器出了问题——签名居然可重复!这要是上线,整个系统就废了。而 Ed25519 是确定性签名,天然避免了这个问题。这种「血的教训」,我会在课程里一一分享。
所以,这门课不只是讲理论,更是讲工程实践。我希望你学完之后,能少走弯路。
1.5 你需要准备什么?
为了跟上课程,你需要:
| 工具/环境 | 说明 | 推荐版本 |
|---|---|---|
| 编程语言 | Go 或 Python(课程示例以 Go 为主) | Go 1.20+ / Python 3.10+ |
| 密码学库 | Go 标准库 crypto/ed25519、crypto/ecdsa | 最新稳定版 |
| 基准测试工具 | Go 的 testing.Benchmark 或 Python 的 timeit | 内置 |
| 操作系统 | Linux/macOS/Windows(WSL 也可) | 不限 |
我的建议:如果你用 Windows,强烈建议装 WSL2。我在 Windows 原生环境下遇到过一些奇怪的库兼容性问题,WSL 会省心很多。
1.6 一个小预告
在下一章,我们会直接进入数学基础。但别担心,我会用最直观的方式来讲——不堆公式,只讲逻辑。你只需要记住一句话:Ed25519 是 ECC 的一种特化实现,但它做了很多「工程优化」。
好了,框架搭完了。我们开始吧。