Последние записи
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
- Вывод на печать графического файла
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
17th
Мар
ЭЦП Эль-Гамаля
Posted by key under c/c++, Безопасность
Доброго времени суток, возникла проблема в реализации эцп на с++, подключил большие числа и тд и тп, тестируя заметил что иногда программа выдаёт результат как будто подпись не изменена, хотя на самом деле я её изменил.
Посчитав на калькуляторе понял что вроде программа то работает верно, что тогда не так… не понимаю.
Отправитель работает с числами: 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;
Получается ключ не был изменён, а это не так. Где я ошибаюсь?
Streletz
Смотрите описания алгоритма и сверяйте с ним свою реализацию. Возможно, где-то ошиблись.
В помощь:
Схема Эль-Гамаля
Здесь уже нужно смотреть исходный код. В том числе, в режиме отладки.
Вообще у Вас в качестве исходных данных используются очень маленькие числа. Более того r и s при этом одинаковые.
В своё время коллега по форуму уже делал реализацию алгоритма Эль-Гамаля на C++ (правда, в режиме шифрования). Возможно, это как-то поможет.
О как, обратил внимание(благодаря Вам) на r s и их величину: чёт совсем не углядел
«Проверяется выполнимость условий: ~0<r<p и ~0<s<p-1. Если хотя бы одно из них не выполняется,то подпись считается неверной.» И только потом идёт проверка на равенство выражений…
А я исправляя r на 114 явно нарушал это условие, и не проверял его.
Видимо проблема в этом=) Спасибо)
Случайные статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)