1. ECDSA签名技术入门指南
第一次接触ECDSA签名时,我被那些数学术语绕得头晕。但实际用起来才发现,OpenSSL已经帮我们封装好了大部分复杂操作。ECDSA(椭圆曲线数字签名算法)就像是数字世界的指纹识别系统,它能确保数据在传输过程中不被篡改,同时验证发送方的真实身份。
secp256r1曲线是目前最常用的椭圆曲线之一,也被称为prime256v1或NIST P-256。这条曲线能提供足够的安全性,同时计算效率也很高。我刚开始使用时经常混淆这些名称,后来发现OpenSSL对这三种叫法都支持,实际使用时可以互换。
2. 密钥对生成实战
2.1 生成私钥
生成密钥对是ECDSA签名的第一步。下面这个命令可以创建secp256r1曲线的私钥:
openssl ecparam -name secp256r1 -genkey -noout -out ec-priv-key.pem
执行后会生成PEM格式的私钥文件,看起来是这样的:
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIEmZBPmaZyg3sPqq9kdKxJq+hFp2POf2fAq0nixBw0HkoAoGCCqGSM49
AwEHoUQDQgAEJuCW8qPsUMEk8NQTaoRUmeOsmsyv4vxlvkFfUw6XZhLXC6TE00c5
VOFefxmSphY7BOy8pYE7Zdu1IjphJ+bO+A==
-----END EC PRIVATE KEY-----
2.2 提取公钥
有了私钥,导出公钥就很简单了:
openssl ec -in ec-priv-key.pem -pubout -out ec-pub-key.pem
公钥文件内容类似这样:
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJuCW8qPsUMEk8NQTaoRUmeOsmsyv
4vxlvkFfUw6XZhLXC6TE00c5VOFefxmSphY7BOy8pYE7Zdu1IjphJ+bO+A==
-----END PUBLIC KEY-----
2.3 密钥格式转换
实际项目中经常需要不同格式的密钥。比如把PEM转为DER格式:
# 私钥转换
openssl ec -in ec-priv-key.pem -outform DER -out ec-priv-key.der
# 公钥转换
openssl ec -in ec-pub-key.pem -pubin -outform DER -out ec-pub-key.der
DER是二进制格式,可以用xxd命令查看内容:
xxd -p ec-pub-key.der
3. 数据签名完整流程
3.1 准备待签名数据
假设我们要签名的原始数据是:
9702021300197653695F01011D1C27CD01015501C328497412CA97A61476414CF795B9CB8AF68B72F5C2C5BCCC074E5658BE6190B9DBCB4E7CA9AE24A0856E8F9B0F952DBF6609F8
通常我们会先对数据进行SHA256哈希:


337

被折叠的 条评论
为什么被折叠?



