Алгоритм цифровой подписи Python PyCryptodome с DSS

в примере Python Pycryptodome по умолчанию для DSA-DSS Привет, ребята. Я задал этот вопрос, но, это не умно, я удалил в своем профиле и просто спросил из своего аккаунта друзей.

Проблема в том, что я пытался использовать шифрование с открытым ключом, подпись, проверку, так что...

До завтра все идет хорошо, но я столкнулся с DSA-DSS ECDSA. Если вы посмотрите на картинку, я думаю, что есть какая-то проблема, на которую я нацелен. Они делают «подписавшего» с закрытым ключом в DSS, но не используют его в подписи. Вместо этого используется знак ключа. Даже на уровне проверки (на картинке не видно) они вызывают открытый ключ из файла «PEM» и пытаются проверить без вызова DSS new() снова.

Итак, если вы сравните мой код и изображение, вы заметите, что я хочу сказать...

from Crypto.PublicKey import DSA
from Crypto.Signature import DSS
from Crypto.Hash import SHA256
key = DSA.generate(2048)
publickey=key.publickey()
message = b"Hello"
hash_obj = SHA256.new(message)
signer = DSS.new(key, 'fips-186-3')
signature = signer.sign(hash_obj)

Итак, здесь я пытаюсь проверить сообщение. Я больше не создавал объект has, и я вызвал открытый ключ из ключа, который я показал выше.

pkey=DSS.new(publickey,'fips-186-3')
pkey.verify(hash_obj,signature)
False

Итак, как видите, я получил "False". Я попробовал это на ECDSA - DSS снова вернул то же самое. так что если у вас есть то, что я хочу сделать, пожалуйста, помогите, что я хочу?


person Günel Resulova    schedule 24.05.2018    source источник
comment
никто не знает? ?????   -  person Günel Resulova    schedule 25.05.2018


Ответы (1)


для метода verify сказать:

Выдает: ValueError — если подпись не является подлинной.

и он всегда возвращает False в случае успеха.

Поэтому вместо того, чтобы проверять возвращаемое значение, вам нужно проверить, вызывает ли метод исключение.

В общем, вам понадобится что-то вроде:

try:
    pkey.verify(hash_obj,signature)
    valid = True
except ValueError:
    valid = False

Тот факт, что в вашем коде не возникает исключение, показывает, что проверка прошла успешно и подпись действительно действительна.

person matt    schedule 25.05.2018
comment
Спасибо. Я заметил это, сегодня утром я просматривал файл DSS, я увидел в конце блока Verify, что возвращается False. Я думал, что если программа успешно проходит весь блок до возврата, то это должно было быть True, почему они сделали это путаница, я не понимаю - person Günel Resulova; 25.05.2018