|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
23.02.2015, 10:59 | #1 |
Пользователь
Регистрация: 27.11.2014
Сообщений: 30
|
ЭЦП Эль-Гамаля
Доброго времени суток, возникла проблема в реализации эцп на с++, подключил большие числа и тд и тп, тестируя заметил что иногда программа выдаёт результат как будто подпись не изменена, хотя на самом деле я её изменил.
Посчитав на калькуляторе понял что вроде программа то работает верно, что тогда не так... не понимаю. Отправитель работает с числами: P-простое, G-целое, X - секретный ключ, Y - открытый ключ, m - результат хеширования, K-целое(k и p-1 взаимно простые) и тд... в результате отправляется <сообщение, r,s> (r и s ключи полученные по формулам) Получатель: хеширует сообщение по тем же правилам, получая такое же m (если не было изменений) проверяет следующее равенство: Y^r * r^s (mod P) = G^m (mod P). Если данное равенство верно, то подпись не была изменена. Собственно проблема: начальные r = 11, s = 11; меняем и даём получателю r= 114 s = 11; Также m = 4, G = 7, P=13, Y = 5; Проверка при обычном ключе: a = 5^11 * 11^11 (mod 13) = ( 5^11(mod 13) * 11^11 (mod 13))(mod 13) =8*6(mod 13) a = 48(mod 13) = 9 b = 7^4(mod 13)=9 Проверка при измененном ключе: a = 5^114 * 114^11 (mod 13) = (5^114(mod 13)*114^11 (mod 13))(mod 13) =12*4(mod 13)=48(mod 13) b - остался таким же. Помогите мне разобраться, почему при r = 11, s = 11: a = 9. И при неправильном ключе r= 114 s = 11: a = 9; Получается ключ не был изменён, а это не так. Где я ошибаюсь?
Мяу
|
23.02.2015, 11:41 | #2 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Смотрите описания алгоритма и сверяйте с ним свою реализацию. Возможно, где-то ошиблись.
В помощь: Схема Эль-Гамаля |
23.02.2015, 11:55 | #3 | |
Пользователь
Регистрация: 27.11.2014
Сообщений: 30
|
Цитата:
Мяу
|
|
23.02.2015, 12:03 | #4 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Здесь уже нужно смотреть исходный код. В том числе, в режиме отладки.
Вообще у Вас в качестве исходных данных используются очень маленькие числа. Более того r и s при этом одинаковые. В своё время коллега по форуму уже делал реализацию алгоритма Эль-Гамаля на C++ (правда, в режиме шифрования). Возможно, это как-то поможет. |
23.02.2015, 12:11 | #5 | |
Пользователь
Регистрация: 27.11.2014
Сообщений: 30
|
Цитата:
"Проверяется выполнимость условий: ~0<r<p и ~0<s<p-1. Если хотя бы одно из них не выполняется,то подпись считается неверной." И только потом идёт проверка на равенство выражений... А я исправляя r на 114 явно нарушал это условие, и не проверял его. Видимо проблема в этом=) Спасибо)
Мяу
|
|
17.03.2015, 21:26 | #6 |
Пользователь
Регистрация: 20.02.2015
Сообщений: 41
|
данная тема опубликована на портале Клуб программистов
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
шифр эль гамаля на Delphi | Athen | Помощь студентам | 9 | 04.03.2014 12:03 |
криптосистема эль-гамаля C# | AL_LORD | Помощь студентам | 3 | 03.10.2012 01:20 |
Генерация параметров (p и g ).Для ЭЦП Эль-Гамаля | Mirrok | Помощь студентам | 0 | 21.05.2012 23:14 |
криптосистема Эль-Гамаля | Nanochka | Помощь студентам | 16 | 21.04.2012 10:53 |