Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Программная инженерия > Безопасность, Шифрование
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2015, 10:59   #1
Boltina
Пользователь
 
Аватар для Boltina
 
Регистрация: 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;
Получается ключ не был изменён, а это не так. Где я ошибаюсь?
Мяу
Boltina вне форума Ответить с цитированием
Старый 23.02.2015, 11:41   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Смотрите описания алгоритма и сверяйте с ним свою реализацию. Возможно, где-то ошиблись.
В помощь:
Схема Эль-Гамаля
Streletz вне форума Ответить с цитированием
Старый 23.02.2015, 11:55   #3
Boltina
Пользователь
 
Аватар для Boltina
 
Регистрация: 27.11.2014
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Boltina Посмотреть сообщение
Собственно проблема: начальные 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 - остался таким же.
Вот как раз мне и не понятно, я по алгоритму проверяю. А получается что ключи верны... мб я где то в вычислениях ошибся? Сам алгоритм уже излазил вдоль и поперек. Что не так при конкретных данных?
Мяу
Boltina вне форума Ответить с цитированием
Старый 23.02.2015, 12:03   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от Boltina Посмотреть сообщение
мб я где то в вычислениях ошибся?
Здесь уже нужно смотреть исходный код. В том числе, в режиме отладки.
Вообще у Вас в качестве исходных данных используются очень маленькие числа. Более того r и s при этом одинаковые.
В своё время коллега по форуму уже делал реализацию алгоритма Эль-Гамаля на C++ (правда, в режиме шифрования). Возможно, это как-то поможет.
Streletz вне форума Ответить с цитированием
Старый 23.02.2015, 12:11   #5
Boltina
Пользователь
 
Аватар для Boltina
 
Регистрация: 27.11.2014
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Здесь уже нужно смотреть исходный код. В том числе, в режиме отладки.
Вообще у Вас в качестве исходных данных используются очень маленькие числа. Более того r и s при этом одинаковые.
В своё время коллега по форуму уже делал реализацию алгоритма Эль-Гамаля на C++ (правда, в режиме шифрования). Возможно, это как-то поможет.
О как, обратил внимание(благодаря Вам) на r s и их величину: чёт совсем не углядел
"Проверяется выполнимость условий: ~0<r<p и ~0<s<p-1. Если хотя бы одно из них не выполняется,то подпись считается неверной." И только потом идёт проверка на равенство выражений...

А я исправляя r на 114 явно нарушал это условие, и не проверял его.
Видимо проблема в этом=) Спасибо)
Мяу
Boltina вне форума Ответить с цитированием
Старый 17.03.2015, 21:26   #6
АлексФорум
Пользователь
 
Аватар для АлексФорум
 
Регистрация: 20.02.2015
Сообщений: 41
По умолчанию

данная тема опубликована на портале Клуб программистов
АлексФорум вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
шифр эль гамаля на 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