Тот же открытый ключ Python ECDSA (сгенерированный с помощью ecdsa.VerifyingKey) Не проверяет - PullRequest
0 голосов
/ 07 мая 2019

Если я генерирую открытый ключ непосредственно из ключа подписи с помощью sk.get_verifying_key()

Он работает нормально и проверяет его, но если я пытаюсь вручную создать открытый ключ с помощью ecdsa.VerifyingKey.from_string, по какой-то причине он не проверяет егои возвращает false.

скопируйте и вставьте следующий код и запустите, вы увидите странную разницу

import random
import string
import sys
import ecdsa
import hashlib
import binascii

# randomly generate secret and public keys
sk = ecdsa.SigningKey.generate(curve=ecdsa.NIST256p, hashfunc = hashlib.sha256)
pk = sk.get_verifying_key()

publicKeyVerifyObject = ecdsa.VerifyingKey.from_string(bytes.fromhex(binascii.hexlify(pk.to_string()).decode('utf-8')), curve=ecdsa.NIST256p)

print("public key:", binascii.hexlify(pk.to_string()))
print("public key:", binascii.hexlify(publicKeyVerifyObject.to_string()))

# a message to sign
name = "lastpeony"

# signature of the message
signature = sk.sign(name.encode('utf-8'))


#first test
try:
    print (publicKeyVerifyObject.verify(signature, name.encode('utf-8')))
except ecdsa.BadSignatureError:
    print (False) 


#second test
try:
    print (pk.verify(signature, name.encode('utf-8')))
except ecdsa.BadSignatureError:
    print (False) 

То, что я ожидаю, - это True True вывод из обоих тестов.

1 Ответ

2 голосов
/ 07 мая 2019

Вы пропустили hashfunc = hashlib.sha256 в publicKeyVerifyObject, по умолчанию sha1.

Попробуйте

publicKeyVerifyObject = ecdsa.VerifyingKey.from_string(bytes.fromhex(binascii.hexlify(pk.to_string()).decode('utf-8')), curve=ecdsa.NIST256p, hashfunc = hashlib.sha256)

Результаты:

public key: b'659ee7dcc3905b7be2969ec1c09824d81d85f54202865eeee3e5a950f585d092b90727759bded7caad24825a501e6e4bf2cb05726d9a153de7a3cc3a58ccc7c7'
public key: b'659ee7dcc3905b7be2969ec1c09824d81d85f54202865eeee3e5a950f585d092b90727759bded7caad24825a501e6e4bf2cb05726d9a153de7a3cc3a58ccc7c7'
True
True
...