Я пытаюсь лучше понять, как работают открытые / закрытые ключи. Я понимаю, что отправитель может добавить цифровую подпись к документу, используя свой закрытый ключ, чтобы по существу получить хэш документа, но я не понимаю, как открытый ключ можно использовать для проверки этой подписи.
Я понимаю, что шифрование открытых ключей, дешифрование закрытых ключей ... может кто-нибудь помочь мне понять?
Ответы:
Ваше понимание «шифрования открытых ключей, дешифрования закрытых ключей» является правильным ... для шифрования данных / сообщений. Для цифровых подписей все наоборот. Используя цифровую подпись, вы пытаетесь доказать, что документ, подписанный вами, пришел от вас. Для этого вам нужно использовать то, что есть только у вас: ваш личный ключ.
Цифровая подпись в ее простейшем описании - это хэш (SHA1, MD5 и т. Д.) Данных (файл, сообщение и т. Д.), Которые впоследствии шифруются с помощью личного ключа подписавшего. Поскольку это то, что есть только у подписавшего (или должно быть), именно отсюда и возникает доверие. КАЖДЫЙ имеет (или должен иметь) доступ к открытому ключу подписавшего.
Итак, чтобы проверить цифровую подпись, получатель
Если они совпадают, подпись считается действительной. Если они не совпадают, это либо означает, что для его подписи использовался другой ключ, либо данные были изменены (преднамеренно или непреднамеренно).
Надеюсь, это поможет!
источник
Клавиши работают обратно:
Ниже приведен пример сценария для тестирования всего этого потока
openssl
.Этот скрипт выводит следующее:
источник
Открытый ключ шифрует, и только закрытый ключ может расшифровать его, и обратное верно. Они оба шифруют разные хеши, но каждый ключ может расшифровать шифрование другого.
Есть несколько способов проверить, что сообщение пришло от ожидаемого отправителя. Например:
Отправитель отправляет:
Сообщение
Хеш сообщения зашифрован с помощью их закрытого ключа
Получатель:
Если они не идентичны, это означает, что сообщение было подделано или подписано каким-то другим ключом, а не тем, который мы думали ...
Другим примером было бы для отправителя использовать общий хеш, который получатель мог бы также использовать. Например:
Отправитель отправляет:
Получатель:
Это снова гарантирует, что сообщение не было подделано и получено от ожидаемого отправителя.
источник
Если бы мне пришлось перефразировать ваш вопрос из того, как я его понимаю, вы спрашиваете следующее:
Другие ответы уже объясняли, как асимметричная криптография означает, что вы можете либо :
Мы знаем, что оба примера # 1 и # 2 работают. Пример № 1 имеет интуитивный смысл, тогда как пример № 2 напрашивается на оригинальный вопрос .
Оказывается, криптография на эллиптических кривых (также называемая «умножением на эллиптических кривых») является ответом на исходный вопрос. Криптография с эллиптической кривой - это математическая зависимость, которая делает возможными следующие условия:
Для большинства условий № 1 и № 2 имеют смысл, но как насчет № 3?
У вас есть два варианта здесь:
В заключение, пара открытых / закрытых ключей создается с использованием криптографии с эллиптической кривой, которая по своей природе создает открытый и закрытый ключи, которые математически связаны в обоих направлениях, но не выводятся математически в обоих направлениях . Это то, что позволяет вам использовать чей-то открытый ключ, чтобы убедиться, что он подписал конкретное сообщение, без предоставления вам вашего личного ключа.
источник
Я подумал, что смогу дать дополнительное объяснение любому, кто ищет что-то более интуитивно-показательное.
Большая часть этой путаницы возникает из-за именования «открытых ключей» и «закрытых ключей» как таковых, потому что то, как эти вещи на самом деле работают, напрямую расходится с тем, как понимается «ключ».
Взять, к примеру, шифрование. Это можно представить так:
Это позволяет отправлять секретные сообщения между сторонами, но с интуитивной точки зрения здесь «публичная блокировка» является более подходящим именем, чем «открытый ключ».
Однако для отправки цифровых подписей роли несколько поменялись местами:
Затем, когда получатель получает сообщение, он может прочитать его, а затем использовать открытый ключ, чтобы разблокировать заблокированное сообщение и сравнить два сообщения. Если сообщения совпадают, то они знают, что:
Открытое сообщение не было подделано во время путешествия и,
Сообщение должно быть от человека, который имеет соответствующую блокировку для своего открытого ключа.
И наконец, вся эта система работает только в том случае, если у любого, кто хочет проверить подпись подписавшего, есть авторитетное место, куда можно обратиться, чтобы получить соответствующий ключ для замков подписавшего. В противном случае, любой может сказать: «Эй, вот ключ к такой-то частной блокировке», отправить вам сообщение, притворяющееся ими, но заблокировать его своей частной блокировкой, вы выполните все вышеописанные шаги и считаете, что сообщение действительно должно быть от человека, которого вы подумали, но вы одурачены, потому что вас ввели в заблуждение относительно истинного владельца открытого ключа.
Пока существует надежный источник для получения открытого ключа подписавшего, вы будете знать, кто является законным владельцем открытого ключа, и сможете проверить свою подпись.
источник
На ваш вопрос - я смотрел на реализацию RSA. И получил больше ясности в том, как открытый ключ используется для проверки подписи с использованием закрытого ключа. Несомненно, закрытый ключ не выставляется. Вот как ...
Хитрость заключается в том, чтобы скрыть закрытый ключ внутри функции. В таком случае,
(p-1)*(q-1).
Рассмотрим p как закрытый ключ, а e как открытый ключ. «р» заключен в другую функцию, чтобы сделать его скрытым.
Данные отправлены = [зашифровано (хеш), сообщение] = [m ^ d, сообщение]; где m - это сообщение. Предположим, «Данные отправлены» = y Чтобы проверить целостность, мы находим y ^ e, чтобы получить m. поскольку
m ^(d*e) = m ^1 = m
как .Надеюсь это поможет! :)
источник