Рейтинг:0

Подписание хэша файла против подписи файла

флаг uz

Если человек А сгенерировал хэш (например, sha256) файла, а затем подписал хэш с помощью закрытого ключа.

Учитывая, что у человека B есть только открытый ключ, файл, подпись и хэш, будет ли проверка подписи с использованием открытого ключа достаточной, чтобы доказать, что лицо A подписало фактический файл?

Какие хэши и алгоритмы лучше всего подходят для этого?

kelalaka avatar
флаг in
Лучший - не лучший термин. Каково ваше мнение? Человеку Б не нужен хэш файла, ему нужны только открытый ключ, подпись, файл и определение схемы подписи. Ты можешь иметь; RSA, ECDSA, EdDSA, ... те проваливаются под квантовым противником, а Rainbow, Falcon и CRYSTALS-DILITHIUM остались от 3-го тура постквантового конкурса NIST. Итак, каковы ваши ограничения и риски?
флаг uz
Я ищу что-то довольно простое в использовании, например, pgp . Ограничения и мудрый риск Я бы подумал, что он должен быть нерушимым в течение как минимум 100 лет, даже против ресурсов нации.
kelalaka avatar
флаг in
Итак, вам нужны схемы постквантовой подписи!
флаг uz
Почему бы RSA не просуществовать 100 или даже 20 лет?
kelalaka avatar
флаг in
Что ж, если построить криптографический квантовый компьютер, алгоритм Шора легко его сломает.
Maarten Bodewes avatar
флаг in
**Генерация подписи** обычно **содержит** алгоритм хеширования. Для реализаций может быть полезно предоставить хеш для окончательной операции подписи, поскольку хеширование может выполняться с использованием другого процесса или в другое время (например, когда ключ подписи еще недоступен). Однако для этого вам не нужно передавать хэш отдельно: проверка хэша является частью проверки подписи и часто содержится непосредственно в подписи.
Рейтинг:3
флаг ng

Учитывая, что у человека B есть только открытый ключ, файл, подпись и хэш, будет ли проверка подписи с использованием открытого ключа достаточной, чтобы доказать, что лицо A подписало фактический файл?

Человеку Б не нужен хэш. Если они получат его, они смогут использовать его для целей отладки или досрочного прекращения проверки, но им не следует доверять ему. Далее я игнорирую любой хеш, который мог получить человек Б.

Лицо Б должно хэшировать файл и проверить, верифицируются ли этот хеш, открытый ключ и подпись.Это должно доказать, что человек А подписал файл.

Хеширование является такой важной частью проверки подписи, что обычно утверждается так: Лицо Б должно проверить, проверяются ли файл, открытый ключ и подпись.

Исключением из абзаца выше является случай, когда поверх системы подписи уже можно подписать сообщение/файл любой длины с помощью хэша. $H_1$, добавлен еще один слой хеширования с помощью хэша $H_2$. В этом случае было бы сказано: человек Б должен хэшировать файл с $H_2$, и проверьте, есть ли этот хэш, открытый ключ и подпись, проверьте (неявно: с помощью хеш-функции $H_1$ применяется к результату $H_2$ в рамках проверки подписи). Такое составное хеширование иногда делается из соображений производительности, потому что $H_2$ по дизайну быстрее, чем $H_1$; или/и потому что $H_1$ выполняется устройством (например, смарт-картой) и $H_2$ выполняется другим (например, компьютером, использующим смарт-карту).

Какие хэши и алгоритмы подходят (подходят) для этого?

С теоретической точки зрения для подписи нужен хэш-алгоритм, устойчивый к коллизиям (подразумевающий устойчивость ко второму прообразу) и имеющий ширину, подходящую для рассматриваемой системы подписи.

Если эта ширина не превышает 512 бит, ША-512 соответственно усеченный будет делать. Для произвольного размера есть встряхнуть256. Для большей скорости есть Блейк2.

С практической точки зрения хэш обычно определяется системой подписи или ее параметрами, и эта спецификация часто встраивается в открытый ключ в сертификате открытого ключа.

Примером широко используемого алгоритма подписи и хэша является ЭЦДСА с кривой секп256р1 и хэш ША-256. Другой пример Эд25519, который указывает алгоритм, кривую и хеш (обратите внимание, что Ed25519ph похож на Ed25519, за исключением двойного хэширования в исключении выше).


¹ Нет ничего лучше абсолютного доказательства: возможно, открытый ключ принадлежит не человеку А; или у человека был украден закрытый ключ; или их компьютер находился под контролем злоумышленника, поэтому А хотел подписать что-то совсем другое; либо система подписи, либо хэш не работает...

Maarten Bodewes avatar
флаг in
Что ж, да, многие протоколы поддерживают несколько элементов данных, и отправка хэша **неизвестных/непрочитанных** элементов данных очень помогает. Деревья Меркла и все такое. Например. электронный МСПД/электронный паспорт содержит набор хэшей по группам данных. Конечно, это не совсем подпись передаваемого хэша, *просто* двойное хеширование для этого не годится. Хотя в ответе содержится многоуровневое хеширование, кажется, что оно сосредоточено на производительности (но, TBH, вопрос также не касается этого варианта использования).
флаг uz
В моем случае использования я хотел подписать хэш только с помощью закрытого ключа. Причина этого заключается в экономии полосы пропускания. Поскольку системы хранения и подписи разделены, а связь между ними уже доверена, быстрее и дешевле передать хеш, а не очень большой файл для подписи.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.