примечание: я не криптограф
Я хочу проверить, безопасна ли моя реализация слепых подписей RSA для использования в приложении на стадии производства, а также у меня есть несколько вопросов, на которые я был бы очень признателен, если бы на них были даны ответы.
Извините, но когда я слышу подобные вопросы, это звучит так:
Я не хирург, но я хочу сделать операцию на сердце. Я провел много исследований в течение нескольких дней, и я хочу убедиться, что понимаю основы, прежде чем начать...
Хорошо, я бы не что плохо, но звучит несколько похоже (и если это действительно для «приложения на стадии производства», это может быть не так уж и далеко. По крайней мере, если вы ошибетесь при операции на сердце, вы сразу узнаете об этом). это не сработало...
С этим от моей груди, вот несколько ответов:
Вопрос 1: Как умножить $ч(м)$ и $r^e \bmod n$ ? Не будет результат больше, чем $n$ ?
На самом деле, вы умножаете их по модулю $n$.
Вопрос 2: Могу ли я просто использовать любой хеш-алгоритм на m, например SHA-256?
Вопрос 4: Как реализовать схему заполнения, чтобы предотвратить подделку подписи из-за гомоморфного свойства RSA?
Я беру эти два вопроса вместе, потому что у них один и тот же ответ. Какие $ч$ должен быть не прямой SHA-256, а тот, в котором вы выполняете хеширование (например, SHA-256), а затем дополняете результат, используя, возможно, PKCS 1.5 SSA или PSS (в зависимости от того, что ожидает верификатор).
Вопрос 3: Сервер не будет хешировать или дополнять слепое сообщение перед его подписью. Это правильно и безопасно?
В данном случае это правильно и безопасно — если бы сервер либо хэшировал, либо дополнял сообщение, это все бы испортило. Помните, вы сделали хеширование/заполнение на шаге 4.
С другой стороны (чтобы вернуться к моим первоначальным комментариям), если вам нужно задать эти вопросы, возможно, вы не готовы реализовать это самостоятельно...