C/C++ Perl ASM PHP Java
Сети и протоколы Pascal Delphi HTML Криптография
Языки программирования
Алгоритмы
Исходники
Новое
Ожидается
Полезные ссылки
Гостевая книга
Выберите наиболее понравившийся раздел:



Простые алгоритмы шифрования


— Group A (2:469/138.1) ———————————————————————————————————————  RU.ALGORITHMS —
 Msg  : 1559 из  4511 -1540 *1594
 From : Alex Visokov                           2:5026/56.31     Суб 17 Июн 00  21:44
 To   : Stanislav  Aranovsky                                     Пон 19 Июн 00  10:29
 Subj : Ищy алгоpитм  шифpования.
———————————————————————————————————————————————————————————————————————————————
Привет тебе, Stanislav!

17 Jun 00 23:26, you  wrote to О. Л. Мотов:

 ОМ>> Подскаэите, пожалyйста  пpостой алгоpитм шифpования.
 ОМ>> Алгоpитм должен  быть пpостым, пyсть и не  сyпеp защищенным.

 SA> Беpёш и xor'ишь  каким-нибyдь левым числом (  напpимеp 105).
 SA> А пpи дешефpовке  пpосто xor'ишь повтоpно...

   Алгоритм простой  подстановки.

   Перетасовываешь исходный  алфавит  A по RND. Получаешь  алфавит B.
   Запоминаешь B.
   Ставишь в соответствие  символу из A соответствующий  символ из B.
   ABCDEFGHIJIKLMNOPQ...
   QWERTYUIOPASDFGHJK...
   Шифруешь...

   Для дешифрации  надо использовать тот же  алфавит B.

   Сей алгоритм  ( как в принципе и выше  названный ) плох тем, что  весьма легко
   поддается частотному  анализу.

   Если тебе понадобятся  другие ( не поддающиеся ЧА  ), прошу в мыло.


                                                           Покедова,  Alex

--- GoldED/W32 3.0.1
 * Origin: ... no  such shit ... (2:5026/56.31)

— Group A (2:469/138.1)  ———————————————————————————————————————  RU.ALGORITHMS —
 Msg  : 1594 из  4511 -1540 +1606 1813 *1613
 From : Yuri Burger                             2:468/85.3       Пон 19 Июн 00 20:01
 To   : Stanislav  Aranovsky                                     Срд 21 Июн 00  13:02
 Subj : Ищy алгоpитм  шифpования.
———————————————————————————————————————————————————————————————————————————————
      Всего  тебе и привет Stanislav!

18 Jun 00 00:26, Stanislav  Aranovsky wrote to О. Л.  Мотов:

 ОМ>> Подскаэите, пожалyйста  пpостой алгоpитм шифpования.
 ОМ>> Алгоpитм должен  быть пpостым, пyсть и не  сyпеp защищенным.
 SA> Беpёш и xor'ишь  каким-нибyдь левым числом (  напpимеp 105).
 SA> А пpи дешефpовке  пpосто xor'ишь повтоpно...

    А чтоб  похитрее выглядило - можно  каждый последующий байт ксорить  на
предидущий и на левый...
    А можно  ещё умножать на 2 /  делить на 2
                  прибавлять число / вычитать  число
    и уж для  полного щастья - менять соседние  символы местами :)

                      За сим  прощаюсь, K.
---
 * Origin: А хто  тут есть, у кого есть  за что поесть? (2:468/85.3)

— Group A (2:469/138.1)  ———————————————————————————————————————  RU.ALGORITHMS —
 Msg  : 1739 из  4511 -1606 +1745
 From : Michael Teplov                         2:5059/20.62     Втр 27 Июн 00  21:30
 To   : Maxim  Elkin                                              Чтв 29 Июн 00  11:09
 Subj : Ищy алгоpитм  шифpования.
———————————————————————————————————————————————————————————————————————————————
Hello Maxim.

Среда Июнь 21 2000 11:22,  Maxim Elkin wrote to Yuri  Burger:

 ОМ>>>> Подскаэите,  пожалyйста пpостой алгоpитм шифpования.
 ОМ>>>> Алгоpитм  должен быть пpостым, пyсть  и не сyпеp защищенным.

 ME> Hасколько я понимаю,  OM нужен алгоpитм, _зная_  котоpый, можно
 ME> закодиpовать данные  только в одну стоpону (обpатно  - только пеpебоpом
 ME> ваpиантов). Существует  что-нибудь такое, но существенно  более быстpое
 ME> (и с меньшим  числом ваpиантов), чем всякие  PGP, RSA, et cetera?

Знание _алгоритма_ шифрования  без ключа не дает расшифровки  для большинства
шифров, исключая самые простейшие.  В криптографии _алгоритм_ шифрования  всегда
_предполагается_ известным. Более  того, при _незнании_ алгоритма  шифрования
расшифровка принципиально невозможна.  А отличие PGP, RSA et  cetera в том, что
они не дают возможности  расшифровки не только если  известен _алгоритм_
шифрования, но и если  известен _ключ_, которым шифровалось  сообщение.

Michael

--- GoldEd 2.0
 * Origin: ВЫХУХОЛЬ Я!!!!!!  (2:5059/20.62)

— Group A (2:469/138.1)  ———————————————————————————————————————  RU.ALGORITHMS —
 Msg  : 1895 из  4511 -1851 +1940 1981
 From : Michael Teplov                         2:5059/20.62     Срд 05 Июл 00  19:36
 To   : Maxim  Elkin                                              Суб 22 Июл 00  13:33
 Subj : Ищy алгоpитм  шифpования.
———————————————————————————————————————————————————————————————————————————————
Hello Maxim.

Вторник Июль 04 2000  20:51, Maxim Elkin wrote  to Michael Teplov:

 MT>> Все равно  - попробуй псевдослучайные последовательности.
 MT>> Стойкость у  такого "шифра" будет, конечно,  никакая, но хотя бы с
 MT>> первого взгляда  нельзя будет раскрыть.
 ME> Мне не нужен  "шифp" с никакой устойчивостью.  См. самую веpхнюю цитату.

Тогда, ИМХО, только с  ключом.

 MT>> А чего бы  не вводить ключ? Обломно  с клавы -
 MT>> запиши в  файле и читай оттуда.
 ME> Да пpи чем  тут ключ? Это все непpинципиально...

Принципиально. Ты же не  собираешься _только_ кодировать  сообщение, тебе надо
еще и _раскодировать_. А  значит должен быть алгоритм  раскодирования. Имея этот
алгоритм мы можем раскодировать  сообщение. Так и должно быть.  А вот того, что
тем же способом его раскодирует  кто-то другой быть не должно.  Поэтому нам кроме
самого алгоритма должно быть  известно еще что-то, чего  этот "другой" не знает.
Это "что-то" и называется  ключом.
Так что если тебе "не  нужен шифр с никакой устойчивостью",  то лучше всего
использовать ключ.
А если тебе не принципиально,  что сообщение сможет прочесть  кто-то кроме тех,
кому оно предназначено, то  можешь использовать любой простейший  шифр. Конечно,
хакер, покопавшись в программе  (или работник ФАПСИ - не  копавшись) его таки
взломает, но глупый юзверь  так запросто в сообщение  уже ничего руками не
запишет.
В качестве вариантов могу  предложить:    1) XOR  на псевдослучайные
последовательности - хорошо  то, что файл после такого  выглядит как полная
мешанина - создается иллюзия  нормального шрифта. Плохо -  XOR обратимая операция
и в принципе выделить  нешифрованное сообщение из нескольких  шифрованных
несложно. Кстати, к ключом  такое уже практически невозможно  - сообщения
шифруются разными последжовательностями.
    2) Многоалфавитная  замена (АКА квадрат Вижинера).  Берем массив V[256][256]
и заполняем каждую его  строку перемешанными символами  от 0 до 255. После этого
кодируем. Допустим, мы считали  байт 167. Берем в первой  строке 167 элемент -
это
буде зашифрованный байт. После  этого идем в 167 строку.  Следующим считали байт
213 - берем 213 элемент  и идем в соответствующую  строку. И т. д. Как
раскодировать - сам догадаешься.  В принципе, "путешествие" по  строкам должно
осуществляться по ключу, но  если он тебе так противен...
    3) "Перетасовка"  исходной последовательности по  хитрому закону. Просто
меняешь последовательность байт  в последовательности по какому-то  закону. Лучше
всего - опять же по  псевдослучайной последовательности.
     Думаю,  сочетание этих методов даст  тебе вполне приемлимый результат.  Hо,
повторяю, _только_ до того  момента, пока взломщикам неизвестен  алгоритм. Потом
они используют для вскрытия  кусок твоей же программы.

Michael

--- GoldEd 2.0
 * Origin: ВЫХУХОЛЬ Я!!!!!!  (2:5059/20.62)

— Group A (2:469/138.1)  ———————————————————————————————————————  RU.ALGORITHMS —
 Msg  : 2007 из  4511 -1940 +2043
 From : Michael Teplov                         2:5059/20.62     Вск 09 Июл 00  22:22
 To   : Maxim  Elkin                                              Вск 23 Июл 00  10:12
 Subj : Ищy алгоpитм  шифpования.
———————————————————————————————————————————————————————————————————————————————
Hello Maxim.

Воскресенье Июль 09 2000  10:33, Maxim Elkin wrote  to Michael Teplov:

 ME>>> Да пpи  чем тут ключ? Это все  непpинципиально...
 MT>> Принципиально.  Ты же не собираешься _только_  кодировать
 MT>> сообщение, тебе  надо еще и _раскодировать_.

Слушай, все-таки я не  до конца понимаю что тебе  нужно.

 ME> Hет. Мне надо  только закодиpовать. А на  дpугом конце - пpовеpить,
 ME> будет ли закодиpованное  "пользователем" слово кодиpоваться  так же.

Ты кодируешь слово на  своем конце и отсылаешь его  пользователю - это понятно.
Другое непонятно - как  ты хочешь определить, _кто_  на другом конце -
пользователь или хакер. Слово  постоянно используется *одно и  то же* (логичный
вывод из того, что ты  отвергаешь ключи - если бы  слово постоянно менялось, то
оно и было бы _ключом_).  Алгоритм кодирования *не меняется*  (по твоим словам).
Соответственно, и хакер, и  пользователь получат в результате  кодирования одну и
ту же /правильную/ последовательность.

Или подразумевается, что хакер  не может знать исходного  слова? Тогда оно
представляет собой не что  иное, как _ключ_ шифра, только  меняется он раз в
тысячелетие. При таком раскладе  используй любой более-менее устойчивый  алгоритм
и шифруй им что-нибудь,  взяв твое слово в качестве  ключа. Hа другом конце будут
производить те же манипуляции  и сравнивать результат.

Если алгоритм нужен простой  и быстрый, то вот примеры:
    1) Псевдослучайные  последовательности
    2) Шифр  Энигмы
    3) Взбивание
    4) Многоалфавитная  замена
    5) Сочетание  этих методов

 ME> Пpи условии,  что исходник кодеpа и закодиpованное  сообщение лежит
 ME> пеpед "хакеpом".

В общем-то в криптологии  обычно так и предполагают  по умолчанию

 ME> Фактически, возможно,  _мне_ подойдет какой-нибудь CRC-128,
 ME> если он будет  действительно быстpым и я  не смогу пpидумать способ  для
 ME> его обpащения/подбоpа  за pазумное вpемя.

А он разве однозначно  отображает исходное сообщение  в результат? А то ведь
может получиться, что кроме  твоего слова будут еще десятков  несколько, которые
в
результате будут давать ту  же последовательность. ИМХО зашифровать  что-нибудь,
взяв твое слово в качестве  ключа - более хорошая идея.  Или я чего-то не понял.
Тогда объясни подробнее, чего  ты хочешь и для чего  тебе это нужно.

Кстати, по поводу другого  сабжа, "безвозвратное преобразование  строки":
-Если одно множество однозначно  отображается в другое, то  такое преобразование
обратимо.
-Если не отображается (при  разных источниках получаем одинаковый  результат), то
лучшим способом "кодирования"  будет забить всю строку нулями  (никогда оригинал
не восстановишь) :)

Michael

--- GoldEd 2.0
 * Origin: ВЫХУХОЛЬ Я!!!!!!  (2:5059/20.62)

Kubinets, 2002
kubinets@mailru.com