Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Алгоритм шифрования DES 
V
    Опции темы
DiMoN_TD
Дата 4.1.2012, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Добрый день.
Решил помучать себя и разобраться в способах и алгоритамх шифрования.
Для начала взял алгоритм шифрования DES
Погуглил, почитал на вики.
После прочтения начали возникать вопросы. Первый вопрос, на который я бы хотел получить ответ:
Что означает "перестановка" и каким образом она вычисляется?
В вики в данной статье указана лишь результирующая таблица после перестановки (начальная перестановка, конечная перестановка, перестановка, применяемая к 32-битовому блоку и т.д.), и в других статьях посвященные этому алгоритму, в принципе, все тоже самое - лишь конечная таблица.
PM MAIL   Вверх
spin2
Дата 4.1.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

Репутация: нет
Всего: 31



DiMoN_TD, перестановка в s-блоках?


--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
DiMoN_TD
Дата 4.1.2012, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



spin2
до S-блоков я еще не дошел.
В описании алгоритма есть вот такая строчка:

Цитата

Начальная перестановка

Исходный текст T (блок 64 бит) преобразуется c помощью начальной перестановки IP которая определяется таблицей 1:


В этой таблице описан результат начальной перестановки:

Цитата

58  50  42  34  26  18  10  2  60  52  44  36  28  20  12  4
62  54  46  38  30  22  14  6  64  56  48  40  32  24  16  8
57  49  41  33  25  17  9  1  59  51  43  35  27  19  11  3
61  53  45  37  29  21  13  5  63  55  47  39  31  23  15  7


Далее описывается:

Цитата

По таблице первые 3 бита результирующего блока IP(T) после начальной перестановки IP являются битами 58, 50, 42 входного блока Т, а его 3 последние бита являются битами 23, 15, 7 входного блока.


А как они это получили - для меня загадка. Или же это стандартная таблица? Или есть какая-то функция, которая определяет перестановку, как в начальной перестановке так и в S-блоках?

Это сообщение отредактировал(а) DiMoN_TD - 4.1.2012, 15:20
PM MAIL   Вверх
DiMoN_TD
Дата 4.1.2012, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Так, закономерность образования Таблицы начальной перестановки я понял, единственное что не понял, почему именно так.
PM MAIL   Вверх
redwhite90
Дата 8.1.2012, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 14.7.2011

Репутация: нет
Всего: нет



это всегда так. входной параметр алгоритма
PM MAIL   Вверх
DiMoN_TD
Дата 9.1.2012, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Кто может объяснить, как формируется ключ?
Первым этапом, как я понял, необходимо преобразовать ключ в 64битный массив.
Из него каждый 8й бит надо исключить, и получим 56битный массив. Из него сделать перестановку по таблице, и разбить на два блока Co и Do по 28 бит.
А вот дальше я не понял, что за циклические сдвиги происходят и почему в конечном итоге получается 48 битный ключ?
PM MAIL   Вверх
DiMoN_TD
Дата 9.1.2012, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Нашел источник, где на "пальцах" показывается, как формируется ключ.
http://orlingrabbe.com/des.htm

Выкладываю, если кто-то вдруг по поиску наткнется на эту же тему.

Это сообщение отредактировал(а) DiMoN_TD - 9.1.2012, 18:43
PM MAIL   Вверх
DiMoN_TD
Дата 12.1.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



В конечном итоге разобрался как это все работает.
Источники, которыми пользовался это:

1. http://orlingrabbe.com/des.htm
2. Wikipedia

Сверялся с онлайн криптатором

Чуть позже выложу исходники на PHP, надо привести в читабельный вид.
PM MAIL   Вверх
DiMoN_TD
Дата 14.1.2012, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Возник еще один вопрос. Теперь по поводу дешифровки. Не получается расшифровать данные.
Везде пишут, что алгоритм дешифровки - это обратный метод шифровки, где:
1. Шифрованный текст преобразуется в 64-битовый блок.
2. Применяется перестановка согласно Конечной перестановки из алгоритма шифрования (IP(-1))
3. Далее идет цикл из 16 шагов, где происходит "дешифровка":
Код

R(i-1) = L(i)
L(i-1) = R(i) xor f(L(i), K(i))

4. Полученные результаты L(0) и R(0) конкатинируются в 64-битный конечный блок.
5. Конечный 64-битный блок подвергается начальной перестановке из алгоритма шифрования (IP(1))

В итоге у меня выходит тарабарщина. Т.е. текст криптуется нормально, а вот применяя описанное правило выше - дешифровка происходит неверно.
Правильно ли я понял алгоритм дешифровки, или же что-то упустил?

Заранее спасибо.
PM MAIL   Вверх
spin2
Дата 15.1.2012, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 15.12.2005
Где: Москва-Одесса

Репутация: нет
Всего: 31



DiMoN_TD, Там просто в обратную сторону идешь и все. Раз у тебя уже прога есть, отсекай по одному элементу и смотри, совпадают ли результаты.


--------------------
"С кем тяжело молчать, с тем не о чем говорить" (Метерлинк)
блог
Все об ICQ-ботах
PM MAIL WWW ICQ Skype Jabber   Вверх
DiMoN_TD
Дата 15.1.2012, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Выкладываю класс, написанный на PHP:

http://pastebin.com/vNM9UVaR

Пример использования:

Код

$DEC_alg = new DEC_algorithm("plainText","theKey",true);
echo $encryptText = $DEC_alg->encrypt();
echo "<br>";
echo $decryptText = $DEC_alg->decrypt($encryptText);


Как я и говорил выше - проблема с дешифровкой. Использую обратный метод шифрования, но в итоге не получается исходного текста.
Глаз уже замылен, возможно кто-то из просматривающих эту тему посмотрит более свежим взглядом, и подскажет где я мог ошибиться.
Более конкретно в методе decrypt();

PM MAIL   Вверх
DiMoN_TD
Дата 15.1.2012, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Цитата(spin2 @  15.1.2012,  13:07 Найти цитируемый пост)
DiMoN_TD, Там просто в обратную сторону идешь и все. Раз у тебя уже прога есть, отсекай по одному элементу и смотри, совпадают ли результаты. 


Ну смотри. Алгоритм шифрования:

1. P = Plaintext 64bit block.
2. IP1 (P)
4. L(0) R(0).
3. 1...16 итераций, шифровка. На выходе L(16) R(16). Конкатинируем R(16) и L(16) = RL.
4. IP2 (RL)
5 C = Chipertext 64bit block

Теперь алгоритм расшифровки должен быть следующим методом:
1. C = Chipertext 64bit block
2. IP2 ( С )
3. 16...1 итераций, дешифровка. На выходе L(0) R(0). Конкатинируем L(0) и R(0) = LR.
4. IP1 (LR)
5. P = Plaintext 64bit block.

Но на практике совершенно не получается.

И еще, если отсекать по одному элементу, как ты утверждаешь, не мог бы ты указать, что с чем должно "совпадать" при шифровке и дешифровке?

Это сообщение отредактировал(а) DiMoN_TD - 15.1.2012, 16:15
PM MAIL   Вверх
DiMoN_TD
Дата 15.1.2012, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



spin2, все, разобрался. Я, видимо, неправильно понял описанный метод дешифровки в этой статье:
http://protect.htmlweb.ru/des.htm
описано:
Цитата

Все действия должны быть выполнены в обратном порядке. Это означает, что расшифровываемые данные сначала переставляются в соответствии с матрицей IP-1


Ну я и начал применять таблицу конечной перестановки в начале дешифровки. А оказывается, что надо было применить таблицу начальной перестановки.
Спасибо за указание на пошаговое сравнение шифровки\дешифровки. Так бы еще долго ломал голову, в каком месте и ошибся.

Допилю код - выложу на конечное обозрение.
PM MAIL   Вверх
DiMoN_TD
Дата 18.1.2012, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Как и обещал.
Выкладываю класс на php для криптования и декриптования текста алгоритмом DES методом ECB (в инете так и не нашел ни одного исходника):

http://pastebin.com/ARYsde8g

Пример использования:

Код

$DEC_alg = new DEC_algorithm();
$DEC_alg->setParameters("plainText","theKey",true);
$encryptText = $DEC_alg->encrypt();
$decryptText = $DEC_alg->decrypt($encryptText);

echo "<b>Plaintext:</b> ".$DEC_alg->plainText." (len = ".strlen($DEC_alg->plainText).")<br>";
echo "<b>The key:</b> ".$DEC_alg->theKey."<br>";
echo "<b>Encrypted:</b> ".$encryptText."<br>";
echo "<b>Decrypted:</b> ".$decryptText."<br>";


Спасибо за помощь. Задача решена smile



PM MAIL   Вверх
DiMoN_TD
Дата 30.1.2012, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 132
Регистрация: 16.12.2007

Репутация: нет
Всего: нет



Данный скрипт реализовал и опубликовал Тупалов Дмитрий.

[Доказательство того, что этот аккаунт принадлежит Тупалову Дмитрию.]

 smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.