安全加解密引擎基礎(PKE DSA)
1 基本概念
1.2 DSA
DSA(Digital Signature Algorithm,數字簽名演算法)是用於數字簽名的聯邦資訊處理標準。它的安全性取決於離散的對數問題。與RSA相比,DSA的簽名生成速度更快,但驗證速度較慢。如果使用錯誤的數字生成器,可能會破壞安全性。
DSA是另一種公開金鑰演算法,它不能用作加密,只用作數字簽名。DSA使用公開金鑰,為接受者驗證資料的完整性和資料傳送者的身份。它也可用於由第三方去確定簽名和所籤資料的真實性。DSA演算法的安全性基於解離散對數的困難性,這類簽字標準具有較大的相容性和適用性,成為網路安全體系的基本構件之一。
1.3 ECC
Elliptic Curves Cryptography,橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫為ECC),一種建立
1.3.1 ECC引數
ECC的引數可以有很多,通過openssl ecparam -list_curves檢視:
...
secp160r1 : SECG curve over a 160 bit prime field
secp224r1 : NIST/SECG curve over a 224 bit prime field
secp384r1 : NIST/SECG curve over a 384 bit prime field
secp521r1 : NIST/SECG curve over a 521 bit prime field
brainpoolP160r1: RFC 5639 curve over a 160 bit prime field
brainpoolP192r1: RFC 5639 curve over a 192 bit prime field
brainpoolP224r1: RFC 5639 curve over a 224 bit prime field
brainpoolP256r1: RFC 5639 curve over a 256 bit prime field
brainpoolP384r1: RFC 5639 curve over a 384 bit prime field
brainpoolP512r1: RFC 5639 curve over a 512 bit prime field
SM2 : SM2 curve over a 256 bit prime field
更多參考:
《SECG | Standard curve database (neuromancer.sk)》-SEC 2: Recommended Elliptic Curve Domain Parameters version 2.0 January 27, 2010
《SEC 2, ver. 2.0 (secg.org)》-SEC 2: Recommended Elliptic Curve Domain Parameters
1.4 ECDH
橢圓曲線迪菲-赫爾曼金鑰交換(英語:Elliptic Curve Diffie–Hellman key Exchange,縮寫為ECDH),一種匿名的金鑰合意協議(Key-agreement protocol)。
在這個協定下,雙方通過迪菲-赫爾曼金鑰交換演算法,利用由橢圓曲線加密建立的公鑰與私鑰對,在一個不安全的通道中,建立起安全的共有加密資料。這是迪菲-赫爾曼金鑰交換的變種,採用橢圓曲線加密來加強安全性。
ECDH全稱是橢圓曲線迪菲-赫爾曼祕鑰交換(Elliptic Curve Diffie–Hellman key Exchange),主要是用來在一個不安全的通道中建立起安全的共有加密資料,一般來說交換的都是私鑰,這個金鑰一般作為“對稱加密”的金鑰而被雙方在後續資料傳輸中使用。ECDH是ECC演算法和DH結合使用,用於金鑰磋商,這個金鑰交換演算法稱為ECDH。交換雙方可以在不共享任何祕密的情況下協商出一個金鑰。ECC是建立在基於橢圓曲線的離散對數問題上的密碼體制。
1.5 ECDSA
ECDSA(橢圓曲線數字簽名演算法)是DSA(數字簽名演算法)的橢圓曲線實現。橢圓曲線密碼術能夠以較小的金鑰提供與RSA相對相同的安全級別。它還具有DSA對不良RNG敏感的缺點。
1.6 EdDSA
EdDSA(愛德華茲曲線數字簽名演算法)是一種使用基於扭曲愛德華茲曲線的Schnorr簽名變體的數字簽名方案。簽名建立在EdDSA中是確定性的,其安全性是基於某些離散對數問題的難處理性,因此它比DSA和ECDSA更安全,後者要求每個簽名都具有高質量的隨機性。
3 Python關於RSA、ECDH、ECDSA的使用