Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Вниз

Алгоритм Диффи-Хелмана   Найти похожие ветки 

 
R2D2   (2006-04-14 22:22) [0]

Помогите пожалуйста реализовать этот самый алгоритм.
http://book.itep.ru/6/difi_646.htm
а то у меня с математическими операциями в делфи никогда нормально не получалось дружить....


 
palva ©   (2006-04-14 22:42) [1]

А модульное возведение в степень вам тоже надо реализовывать?


 
Std ©   (2006-04-14 22:58) [2]

вот оно как раз у меня и не получается :(
var
x,y,a,b,n,q,k1,k2:integer;
begin
n:=12345;
q:=98765;
x:=Random(1000);
y:=Random(1000);
a:=(power(x,q))mod n;
b:=(power(y,q))mod n;

ошибка в последних двух строчка:
[Pascal Error] : E2015 Operator not applicable to this operand type


 
palva ©   (2006-04-14 23:27) [3]

Функция power возвращает тип extended, а операция mod применима только к целым значениям. Поэтому ошибка компиляции. В добавок вы указали аргументы функции power не в том порядке.

Но проблема не в этом. Вам нужно возвести большое число в большую степень, а потом взять остаток от деления. При этом нельзя переходить к типу extended, поскольку при округлениях вы потеряете информацию, а целые типы не позволяют хранить такие большие числа, которые получаются при промежуточных вычислениях.

Чтобы уменьшить промежуточные результаты остаток берется после каждого умножения. Т. е. пусть у вас промежуточный результат будет t: LongInt; Тогда для вычисления power(q, x) mod n мы делаем t:=1; а потом x раз выполняем оператор t := t*q mod n; При этом операцию mod приходится делать многократно, зато промежуточный результат не выйдет за пределы LongInt.


 
Eraser ©   (2006-04-15 00:53) [4]


> R2D2   (14.04.06 22:22)

зачем реализовывать? всё давно реализовано, например в CryptoAPI, начиная с win95.
http://kladovka.net.ru/index.cgi?pid=list&rid=347


 
R2D2   (2006-04-15 18:12) [5]

palva
а как ключ потом находить второму пользователю имея t?
Вот вычислили А
x:=123456;
y:=8765436;
for i:=1 to x do
 begin
   A:=(A*q)mod n;
 end;
Ключ ищется: K= A^y mod n

как вычислять теперь К? а то шото не соображе никак...
k:=1;
for j:=1 to y do
 begin
   k:=(k*A)mod n;
 end;
вот так если делать то ключи не совпадают...


 
palva ©   (2006-04-15 20:27) [6]

Там, куда вы дали ссылку, по-моему, все хорошо описано.
x:=123456;   // x вырабатывает первый партнер как случайное число
y:=8765436; // а вот это не надо, y вырабатывает второй партнер
A:=1; // а вот это вы пропустили
Далее полученное A пересылается второму партнеру, а он вычисляет K по приведенному вами алгоритму. Этот ключ оказался у партнера K

Параллельно ведутся те же вычисления с перестановкой партнеров, т. е. Второй вычисляет случайным образом y, пересылает первому A (уже другое, вычисленное по y), а первый вычисляет ключ. Ключи должны совпасть.


 
TUser ©   (2006-04-16 06:05) [7]

> Eraser ©   (15.04.06 00:53) [4]

Да вообще, зачем программы писать. Все давно написано, начиная с ДОС.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.04.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
15-1144663510
Lamer)N00b
2006-04-10 14:05
2006.04.30
стандартный шрифт блокнота?


2-1144779881
Vasiliy
2006-04-11 22:24
2006.04.30
Если определить форме значение Parent то не работает AlphaBlend


15-1144293995
Rentgen
2006-04-06 07:26
2006.04.30
какой коэффициент счетчика, если известны Ктт и Ктн ???


15-1144309289
Семен Сорокин
2006-04-06 11:41
2006.04.30
Телефонное мошенничество


15-1144522375
kaZaNoVa
2006-04-08 22:52
2006.04.30
Как Вы относитесь к пикаперам?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский