Вполне достаточно, только один момент.
Мне нужно это запрограммировать. Попробую сегодня вечером, выложу реализацию.
Выбирается число, взаимно простое с p-1
Потом генератор возводится в эту степень и происходит деление по модулю, это понятно вполне.
на счёт b не совсем понятно, там b=y^k * M mod p
M я так понял это незашифрованное сообщение или уже зашифрованное по генератору g и p?
игрик у на сколько я понял это что-то типа публичного ключа?
получается feature этого сессионного ключа и ре-рандомизации в целом это то, что можно одно и то же сообщение зашифровать одним и тем же приватным ключём, но зашифрованное сообщение будет иным, причём секретный ключ и публичный не меняется?
даёт возможность шифровать одни и те же данные, которые не подвержены сравнению?
Я просто изучаю один протокол небольшой, там это центральная тема + ещё zero knowledge proof.
Объясню ещё проще. Как вырабатывается общий ключ для симметричного шифрования по протоколу Диффи-Хеллмана(-Меркла), понимаете? Так вот, отправитель генерирует случайное число - свой закрытый ключ, - на основании которого генерируется случайный открытый ключ. Этот случайный открытый ключ - первая половина зашифрованного сообщения. На основании постоянного открытого ключа получателя и одноразового случайного сессионного открытого ключа отправителя по Диффи-Хеллману генерируется случайный общий ключ, который в свою очередь (вот тут начинается собственно шифрование) умножается по модулю на открытый текст. Это произведение - вторая часть зашифрованного сообщения.
ПС: у меня сейчас запара на работе, потому отвечаю очень медленно.