Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Andrey Dashkovsky                    2:5002/46.4    19 Nov 2001  20:34:59
 To : Pavel V Reich
 Subject : Re: RSA need
 -------------------------------------------------------------------------------- 
 
 16 Hоя 01 21:55, you wrote to all:
 
  PR> Требуется исходник алгоритма шифрования/дешифрования RSA. Unix sources
  PR> & OpenSSH конечно хорошо, но слишком много лишнего наворочено. URL
  PR> приветствуются.
 
 Как говориться могу на пальцах изложить:
 
 Сам алгоритм простейший
 
 function Crypt_RSA(s:String;p:Boolean):String;
 var a,b,{Число и шифр}
     nn,{Степень n}
     c:tLong;i:Integer;
 begin
  Str2Num(s,a);{переводим в длинное число}
  nn:=One;b:=NULL;
  While not EQ_Z(a) do {проводим операции над цифрами длинного числа}
   begin DivL(a,n^,a,c);
    if p then PowrL(c,e^,n^,c)
         else PowrC(c,d,n^,c);
    MulL(c,nn,c); AddL(b,c,b); MulL(nn,n^,nn);{Собираем из них второе}
   end;
  Crypt_RSA:=Num2Str(b);
 end;
 
 Если текста шифруется много - тогда он бьётся на блоки, и шифруются блоки.
 Также в этом случае могут пригодиться имитовставки.
 
 Самое интересное заключается в выборе ключей.
 
 1) берём 2 числа p,q, которые простые или взаимнопростые. Лучше если простые,
 но для бооольших чисел это может быть затруднительно.
 
 2) Считаем n=p*q, и f=(p-1)(q-1) где n - симметричная часть ключа, а f -
 функция какая-то, из головы вылетело как она называется, но она отвечает след.
 требованию  a^f=1 (mod n) - это математическая запись, которая означает равно 1
 по модулю n.
 В общем случае забыл, вы уж извиняйте
 
 Если p или q - не простые - f - может врать или падает криптостойкость, т.к. в
 формуле должны учавствовать все простые делители числа n
 
 3) берём число e, лучше простое, но тут уже не так выжно как с p и q.
 4) Hаходим число d, такое, что e*d=1 (mod f), причём числа должны быть взаимно
 простые, это уже не помню почему.
 
 5) e,n - ключи одной стороны, d,n - ключи другой стороны.
 Во время шифрования, число, которое меньше n возводим в степень e по модулю n,
 получаем a^e (mod n). Для обратного процесса логарифм уже никто не возьмёт, зная
 e и n.
 Для расшифровки возводим ещё и в степень d, получаем
 (a^e)^d=a^(e*d)=a^(k*f+1), т.е. несколько раз по f и ещё 1 раз надо умножать.
 a^(k*f+1)=a*a^(k*f)=a*a^((k-1)*f)*a^f=a*a^((k-1)*f)*1=...=a*(a^f)=a*1=a, т.о.
 получили то, что было.
 
 Самые перци в этом алгоритме в подборке ключей, т.к. только размеры ключа
 влияют на криптостойкость, т.к. алгоритм получается легко обративый за большое
 время, на столько большое, что при правильной подборке ключа взлом становится не
 актуален.
 
 Andrey
 
 ... Последний тост на вечеpинке: - Пусть салат нам будем пухом!
 --- GoldED+/386 1.1.4.7
  * Origin: Всёфигня кроме пчёл,хотя пчёлы,еслиподумать,тоже фигня (2:5002/46.4)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 RSA need   Pavel V. Reich   16 Nov 2001 22:55:08 
 RSA need   Maxim Lanovoy   21 Nov 2001 23:11:14 
 Re: RSA need   Andrey Dashkovsky   19 Nov 2001 20:34:59 
Архивное /ru.algorithms/143013bf9646f.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional