
순수 파이썬 ECDSA 서명/검증 및 ECDH 키 합의
이것은 ECDSA(타원곡선 디지털 서명 알고리즘), EdDSA(Edwards-curve 디지털 서명 알고리즘) 및 ECDH(타원곡선 Diffie-Hellman)를 지원하는 ECC(타원곡선 암호)의 사용하기 쉬운 구현체로, 순수 Python으로 구현되었으며 MIT 라이선스로 배포됩니다. 이 라이브러리를 사용하면 키 쌍(서명 키와 검증 키)을 빠르게 생성하고, 메시지에 서명하고, 서명을 검증할 수 있습니다. 또한 교환된 공개 키를 기반으로 공유 비밀 키에 합의할 수도 있습니다. 키와 서명은 매우 짧아서 처리하기 쉽고 다른 프로토콜에 통합하기 쉽습니다.
참고: 이 라이브러리는 프로덕션 환경에서 사용하면 안 됩니다. 자세한 내용은 Security를 참조하세요.
이 라이브러리는 192, 224, 256, 384, 521비트 키 길이를 가진 다섯 가지 널리 사용되는 NIST "Suite B" GF(p)(소수체) 곡선에 대해 키 생성, 서명, 검증 및 공유 비밀 도출을 제공합니다. OpenSSL 도구(openssl ecparam -list_curves)에서 알려진 이러한 곡선의 "짧은 이름"은 prime192v1, secp224r1, prime256v1, secp384r1, secp521r1입니다. 여기에는 비트코인에서 사용되는 256비트 곡선 secp256k1도 포함됩니다. 또한 160비트에서 512비트까지의 Brainpool 곡선의 일반(비-twisted) 변형도 지원합니다. 해당 곡선의 "짧은 이름"은 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`) 걸리는 시간을 보여줍니다.
모든 값은 초 단위입니다.
편의를 위해 해당 값들의 역수도 함께 제공됩니다:
초당 생성할 수 있는 키 수(`keygen/s`), 초당 만들 수 있는 서명 수
(`sign/s`), 초당 검증할 수 있는 서명 수
(`verify/s`), 초당 도출할 수 있는 공유 비밀 키 수
(`ecdh/s`), 그리고 키별 사전 계산 없이
초당 검증할 수 있는 서명 수(`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