
純Python製のECDSA署名/検証とECDH鍵合意
これは、ECC(楕円曲線暗号)の使いやすい実装です。 ECDSA(楕円曲線デジタル署名アルゴリズム)、 EdDSA(エドワーズ曲線デジタル署名アルゴリズム)、および ECDH (楕円曲線ディフィー・ヘルマン)をサポートし、純粋な Python で実装され、 MIT ライセンスで公開されています。このライブラリを使用すると、鍵ペア(署名 鍵と検証鍵)をすばやく作成し、メッセージに署名して、署名を検証できます。また、 交換した公開鍵に基づいて共有秘密鍵に合意することもできます。 鍵と署名は非常に短いため、取り扱いが容易で、 他のプロトコルに組み込みやすくなっています。
注記: このライブラリを本番環境で使用することは避けてください。詳細については セキュリティ を参照してください。
このライブラリは、鍵生成、署名、検証、および共有秘密鍵の導出を提供します。
5つの
一般的なNIST "Suite B" GF(p)(素数体)曲線(鍵長192、
224、256、384、521ビット)に対応しています。OpenSSLツール
(openssl ecparam -list_curves)で知られているこれらの曲線の「短縮名」は、prime192v1、
secp224r1、prime256v1、secp384r1、secp521r1 です。また、
Bitcoinで使用される256ビット曲線 secp256k1 も含まれます。さらに、
160〜512ビットのBrainpool曲線の通常(非ツイスト)変種もサポートしています。
これらの曲線の「短縮名」は、brainpoolP160r1、brainpoolP192r1、
brainpoolP224r1、brainpoolP256r1、brainpoolP320r1、brainpoolP384r1、
brainpoolP512r1 です。SEC標準からの小さな曲線もいくつか
含まれています(主にライブラリのテストを高速化するため)。それらは次のとおりです:
secp112r1、secp112r2、secp128r1、secp160r1。
Ed25519および
Ed448曲線についても、鍵生成、署名、検証がサポートされています。
他の曲線は含まれていませんが、素数体上の曲線を追加するのは
それほど難しくありません。
このライブラリは、Pythonと'six'パッケージのみを使用します。互換性があるのは Python 2.6、2.7、3.6+ です。また、pypyやpypy3のような代替実装での 実行もサポートしています。
gmpy2 または gmpy がインストールされている場合、より高速な演算にそれらが使用されます。
どちらもこのライブラリのインストール後にインストールできます。
python-ecdsa は起動時にそれらの存在を検出し、それらを
自動的に使用します。
Python3 で最適なパフォーマンスを得るには、gmpy2 を推奨します。
OpenSSL互換性テストを実行するには、'openssl'ツールが
PATH に含まれている必要があります。このリリースは、OpenSSL 0.9.8o、
1.0.0a、1.0.2f、1.1.1d、3.0.1 などで正常にテストされています。
このライブラリはPyPIで入手できます。pip を使用してインストールすることをお勧めします:```
pip install ecdsa
より高いパフォーマンスが必要で、ネイティブコードを使用しても問題ない場合は、`gmpy2` と一緒にインストールを指定することが可能です。```
pip install ecdsa[gmpy2]
または(遅い、レガシーオプション):``` pip install ecdsa[gmpy]
## 速度
次の表は、このライブラリが鍵ペアの生成
(`keygen`)、データの署名(`sign`)、それらの署名の検証(`verify`)、
共有秘密の導出(`ecdh`)、および
鍵固有の事前計算なしでの署名検証(`no PC verify`)に要する時間を示しています。
これらの値はすべて秒単位です。
便宜上、これらの値の逆数も示しています:
1秒あたりに生成できる鍵の数(`keygen/s`)、1秒あたりに作成できる署名の数
(`sign/s`)、1秒あたりに検証できる署名の数
(`verify/s`)、1秒あたりに導出できる共有秘密の数
(`ecdh/s`)、および鍵固有の事前計算なしで1秒あたりに検証できる署名の数
(`no PC verify/s`)です。生の
署名のサイズ(一般に、最も小さい
署名のエンコード方式)も`siglen`列に示されています。
`tox -e speed`を使用して、この表を自分のコンピュータで生成できます。
Intel Core i7 4790K @ 4.0GHzでは、次のようなパフォーマンスが得られます:```
siglen keygen keygen/s sign sign/s verify verify/s no PC verify no PC verify/s
NIST192p: 48 0.00032s 3134.06 0.00033s 2985.53 0.00063s 1598.36 0.00129s 774.43
NIST224p: 56 0.00040s 2469.24 0.00042s 2367.88 0.00081s 1233.41 0.00170s 586.66
NIST256p: 64 0.00051s 1952.73 0.00054s 1867.80 0.00098s 1021.86 0.00212s 471.27
NIST384p: 96 0.00107s 935.92 0.00111s 904.23 0.00203s 491.77 0.00446s 224.00
NIST521p: 132 0.00210s 475.52 0.00215s 464.16 0.00398s 251.28 0.00874s 114.39
SECP256k1: 64 0.00052s 1921.54 0.00054s 1847.49 0.00105s 948.68 0.00210s 477.01
BRAINPOOLP160r1: 40 0.00025s 4003.88 0.00026s 3845.12 0.00053s 1893.93 0.00105s 949.92
BRAINPOOLP192r1: 48 0.00033s 3043.97 0.00034s 2975.98 0.00063s 1581.50 0.00135s 742.29
BRAINPOOLP224r1: 56 0.00041s 2436.44 0.00043s 2315.51 0.00078s 1278.49 0.00180s 556.16
BRAINPOOLP256r1: 64 0.00053s 1892.49 0.00054s 1846.24 0.00114s 875.64 0.00229s 437.25
BRAINPOOLP320r1: 80 0.00073s 1361.26 0.00076s 1309.25 0.00143s 699.29 0.00322s 310.49
BRAINPOOLP384r1: 96 0.00107s 931.29 0.00111s 901.80 0.00230s 434.19 0.00476s 210.20
BRAINPOOLP512r1: 128 0.00207s 483.41 0.00212s 471.42 0.00425s 235.43 0.00912s 109.61
SECP112r1: 28 0.00015s 6672.53 0.00016s 6440.34 0.00031s 3265.41 0.00056s 1774.20
SECP112r2: 28 0.00015s 6697.11 0.00015s 6479.98 0.00028s 3524.72 0.00058s 1716.16
SECP128r1: 32 0.00018s 5497.65 0.00019s 5272.89 0.00036s 2747.39 0.00072s 1396.16
SECP160r1: 42 0.00025s 3949.32 0.00026s 3894.45 0.00046s 2153.85 0.00102s 985.07
Ed25519: 64 0.00076s 1324.48 0.00042s 2405.01 0.00109s 918.05 0.00344s 290.50
Ed448: 114 0.00176s 569.53 0.00115s 870.94 0.00282s 355.04 0.01024s 97.69