Introduction
The common data security concerns:
- Integrity: That data has not been tampered with
- Authenticity: That the origin of the data can be verified
- Non-repudiation: The origin of the data must be verifiable by others
- Confidentiality: That data is kept secret from unauthorised parties and processes
Digital signatures
Key Type
- RSA
- EC
- OKP
Algorithms
- RSA signature with PKCS #1 and SHA-2: RS256 RS384 RS512
- RSA PSS signature with SHA-2: PS256
- EC DSA signature with SHA-2:
- Edwards-curve DSA signature with SHA-2:
RSA、DSA、ECDSA 三者的区别
EdDSA与ECDSA 的区别
ECDSA签名算法的安全性是比较依赖于安全的随机数生成算法的,如果随机数算法存在问题,使用了相同的k进行签名,那么攻击者是可以根据签名信息恢复私钥的,历史上也出过几次这样的事故,比如10年索尼的PS3私钥遭破解以及12年受Java某随机数生成库的影响造成的比特币被盗事件。所以说ECDSA签名在设计上还是存在一些问题的, 这也激励了新的EdDSA算法的出现。
EdDSA签名算法由Schnorr签名发展变化而来,可以在RFC8032中看到它的定义实现,由曲线和参数的选择不同又可以划分为Ed25519和Ed448算法,顾命思义,它们两分别是基于curve25519和curve448曲线,一般用的比较多的是Ed25519算法,相比Ed448而言运算速度要更快,秘钥与签名空间也较小,二者的使用场景还是有点区别。
Ed25519所使用的曲线由curve25519变换而来,curve25519是蒙哥马利曲线,经过变换得到Ed25519使用的扭爱德华曲线edwards25519,curve25519曲线的安全性是非常高的。
EdDSA的运算速度也比ECDSA算法要快很多,优势可以说是非常明显的,门罗币和zcash等加密货币已经将算法切换到了EdDSA了,目前其也被确认为下一代椭圆曲线算法。
Reference
https://connect2id.com/products/nimbus-jose-jwt/algorithm-selection-guide
https://security.stackexchange.com/questions/194830/recommended-asymmetric-algorithms-for-jwt
数字签名算法介绍和区别: https://zhuanlan.zhihu.com/p/33195438
算法性能测试: https://zhuanlan.zhihu.com/p/27615345
针对EdDSA的fault attack: https://www.anquanke.com/post/id/167018
ECDSA Digital Signature Verification in Java: https://metamug.com/article/sign-verify-digital-signature-ecdsa-java.html
Google Implementation Libary: https://github.com/google/tink