Доброго времени суток!
Я понимаю, что вопрос звучит максимально странно, но такова поставленная задача. Это как бы проверка целостности сообщения, но без использования ЭЦП. Просто шифруем сообщение закрытым, а расшифровываем открытым. Алгоритм RSA отлично срабатывает таким образом, и как я понял вообще, то способ должен быть аналогичен RSA (т.е. шифруем закрытым и расшифровываем открытым).
Я использовал стандартную схему генерации ключей:
- p (модуль) - простое число
- g (генератор) - первообразный корень по p
- x (закрытый ключ) - случайное число в отрезке [2; p - 1]
- y (часть открытого ключа) -
g^x mod p
Значение
a для символа
M считаю таким же способом, как и при обычной операции шифрования октрытым ключом:
a = g^k mod p
Однако значение
b для символа
M рассчитываю с использованием закрытого ключа:
b = M * x^k mod p
При этом расшифрование идёт следующим образом (с использованием открытого ключа):
M = b * a ^ (p - y - 1) mod p
Но такой способ не всегда даёт то же M, что было изначально.
Для примера возьмём следующие значения:
- p = 23
- g = 5
- x = 7
- y = 17
- M = 22
Таким образом я получаю значения
a и
b равные 17 и 18 соответсвенно, но расшифрованный символ
M уже получается 10, а не ожидаемые 22.
Елси кто понимает как конкретно в описанной мной задаче должны выглядеть формулы, или есть иной способ без использования ЭЦП, то прошу объяснить это.