公钥密码学
公钥密码学通过 私钥 (Private Key) 和 公钥 (Public Key) 的配合,实现 SSH、HTTPS、数字签名、证书体系 等功能。
基本概念
- 私钥 (Private Key):必须保密在自己电脑上,用于解密或签名
- 公钥 (Public Key):可以公开签发给别人,用于加密或验证签名
- 特点:私钥和公钥是一一对应的,不能从公钥反推出私钥
常见算法
RSA
- 基于大整数因数分解难题
- 常见密钥长度:2048 / 4096 位
- 经典算法,兼容性最好
ECDSA
- 基于椭圆曲线的签名算法
- 比 RSA 短得多的密钥即可达到相同安全性
- 被广泛用于区块链、TLS
Ed25519
- 基于 Curve25519 椭圆曲线
- 现代化、性能高、密钥短小
- OpenSSH 默认推荐
生成方式
OpenSSH (ssh-keygen): SSH、Git
OpenSSL (openssl genpkey): TLS/HTTPS、证书
GPG/PGP (gpg --gen-key): 邮件加密、软件签名
编程库 (Python, Go, Node.js): 应用内生成
区块链钱包: 数字货币地址/账户
OpenSSL
OpenSSL 是一个用 C语言 实现的软件工具包 / 库,实现了各种密码学算法和 TLS 协议。它实现的算法包括:
公钥密码学:
RSA、Ed25519、ECDSA、DH、ECDH对称加密:AES、ChaCha20、DES(已过时)
哈希函数:SHA1/2/3、MD5、BLAKE2 等
Linux
安装方式
bash
sudo apt install openssl
sudo dnf install openssl
sudo pacman -S openssl使用示例
假设要生成到 /home/workspace/resource/ 下
- RSA 2048 位
bash
# 带 -pkeyopt rsa_keygen_bits:2048 参数, 生成一把2048位的RSA 私钥, 叫 rsa_private.pem
openssl genpkey -algorithm RSA -out /home/workspace/resource/rsa_private.pem -pkeyopt rsa_keygen_bits:2048
# 从私钥里提取公钥 叫rsa_public.pem
openssl rsa -in /home/workspace/resource/rsa_private.pem -pubout -out /home/workspace/resource/rsa_public.pem- Ed25519
bash
# 生成一把 Ed25519 私钥, 不需要设置位数, 叫 ed25519_private.pem
openssl genpkey -algorithm Ed25519 -out /home/workspace/resource/ed25519_private.pem
# 从私钥里提取公钥 ed25519_public.pem
openssl pkey -in /home/workspace/resource/ed25519_private.pem -pubout -out /home/workspace/resource/ed25519_public.pemWindows
安装方式
一般 Git for Windows 自带 OpenSSL, 例如我的路径在 "E:\DevTools\Git\usr\bin\openssl.exe"
使用示例
假设要生成到 E:\DevTools\ssh\ 下
- RSA 2048 位
powershell
# 带 -pkeyopt rsa_keygen_bits:2048 参数, 生成一把2048位的RSA 私钥, 叫 rsa_private.pem
openssl genpkey -algorithm RSA -out E:\DevTools\ssh\rsa_private.pem -pkeyopt rsa_keygen_bits:2048
# 从私钥里提取公钥 叫rsa_public.pem
openssl rsa -in E:\DevTools\ssh\rsa_private.pem -pubout -out E:\DevTools\ssh\rsa_public.pem- Ed25519
powershell
# 生成一把 Ed25519 私钥, 不需要设置位数, 叫 ed25519_private.pem
openssl genpkey -algorithm Ed25519 -out E:\DevTools\ssh\ed25519_private.pem
# 从私钥里提取公钥 ed25519_public.pem
openssl pkey -in E:\DevTools\ssh\ed25519_private.pem -pubout -out E:\DevTools\ssh\ed25519_public.pemOpenSSH
OpenSSH 中有了详细的介绍
