Подписание открытого и закрытого ключей обычно работает следующим образом.
Нет, это не так. RSA можно рассматривать таким образом (если вы остаетесь на уровне 10 000 футов); однако а) использование одного и того же ключа как для подписи, так и для расшифровки не рекомендуется, и б) RSA, по сути, является единственным алгоритмом подписи, который можно описать таким образом.
Однако это не относится к вашему реальному вопросу:
Подписание хеш-функции
Ну, вы не описали это должным образом - во-первых, нет ничего, что связывало бы сообщение с раскрытым значением ключа. То есть кто-то может изменить сообщение в пути, и значение ключа все равно будет проверено.
Под чем обычно понимается Лэмпорт:
Мы выбираем $к$ хешировать прообразы $c_1, c_2, ..., c_k$, и хешировать каждый из них, и публиковать результат каждого хеширования $H(c_1), H(c_2), ..., H(c_k)$ как открытый ключ
Когда мы получаем сообщение для подписи, мы преобразуем сообщение в серию значений. $b_1, b_2, ..., b_n$ (каждое значение между $1$ и $к$) — это преобразование выполняется таким образом, что трудно найти второе сообщение, которое преобразуется в серию битов, состоящую исключительно из значений внутри $b_1, b_2, ..., b_n$).
Подпись состоит из выявленных прообразов $c_{b_1}, c_{b_2}, ..., c_{b_n}$
Верификатор может взять сообщение и преобразовать его в ряд значений. $b_1, b_2, ..., b_n$, и убедитесь, что каждый из прообразов в подписи хешируется со значением в открытом ключе.
Должно быть легко понять, что для подделки подписи потребуется либо а) найти сообщение, которое преобразуется в значения, которые все раскрываются в хорошей подписи (что, как мы предполагали, было сложно), либо б) найти прообраз для значения, которое не было выявлено (что мы также предполагаем, трудно).
Тем не менее, ваш вопрос действительно был:
Я вижу, что хеширование/симметричное подписание требует дополнительной уборки.
Ну, Лампорт полезен только в том случае, если вам нужно подписать одно сообщение открытым ключом. Когда вы смотрите на блокчейн (где мы предполагаем, что верификатор видит все подписи, и мы можем включить следующий открытый ключ в подпись (и, конечно, подписываемое сообщение включает следующий открытый ключ), это может работать - это, как вы указываете, требует, чтобы мы запомнили следующий открытый ключ (который будет меняться для каждой подписи), но это выполнимо.
Во многих других контекстах это не работает. Однако существует ряд модификаций подписей на основе хэшей, которые не имеют этих ограничений:
Подписи на основе хэшей с отслеживанием состояния (такие как СУО и XMSS); они работают так же, как Лампорт, за исключением того, что открытый ключ может подписывать большое количество различных сообщений (и мы можем сделать это «большое число» больше, чем количество сообщений, которые мы когда-либо увидим). У них есть требование, чтобы подписывающая сторона отслеживала состояние (которое меняется с каждой подписью).
Подписи без сохранения состояния на основе хэшей (такие как Сфинки+); это устраняет необходимость отслеживать какое-либо состояние во время подписания и поэтому действует так же, как любой другой алгоритм подписи.
И если вы предполагаете, что подписи на основе RSA и хеширования — единственные варианты в таблице, то это не так. Существуют также различные схемы на основе решетки, многомерные схемы, схемы на основе доказательства с нулевым разглашением (Picnic) — существует множество различных вариантов.