Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Алгоритмы
Перезагрузить страницу Сети Файтселя
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
vld64 vld64 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.06.2011
По умолчанию Сети Файтселя - 23.06.2011, 23:46

Здравствуйте.
Пишу программу, выполняющую шифрование с помощью сетей Файстеля.

vbnet Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace faistel_net
{
    class Program
    {
        static void Main(string[] args)
        {
            //Начальные данные - могут иметь любые другие допустимые значения
            UInt32 l = 0xAAF140AE;
            UInt32 r = 0xB678A198;
            Byte key = 0xAB;
            //
            UInt32 swap;//Служебная переменная
            Console.WriteLine("Begin Left = {0}, Right = {1}, Key = {2}",l,r,key);
            for (int i = 0; i < 16; i++)//Чем больше раундов, тем лучше шифрование. Или нет?
            {
                swap = l ^ r ^ ((UInt16)key * 0xABCD1234);
                l = r;
                r = swap;
                Console.WriteLine("Iteration {0}: Left = {1}, Right = {2} ", i, l, r);
            }
            Console.WriteLine("Result Left = {0}, Right = {1}, Key = {2}", l, r, key);
            Console.ReadLine();
        }
    }
}

При выполнении программы обнаруживается следующее:


На 3-ем раунде (под номером 2) данные становятся идентичными начальным значениям - и так затем каждые 3 раунда. Хотя по идее так быть не должно - чем больше раундов шифрования, тем лучше.
Компилятор - Visual Studio 2008, Microsoft.Net Framework 3.5

Также пытался найти информацию по алгоритму Файстеля с зацеплением - нигде не нашёл детальное описание самого алгоритма, только неясные намёки как он должен работать. Кто может подсказать, где я могу найти такую информацию, пожалуйста подскажите.
Ответить с цитированием
  (#2 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 24.06.2011, 03:11

У Вас не совсем правильная сеть Фейстеля. Поскольку сам алгоритм сети Фейстеля основан на xor, функция F никак не должна сводиться к голому xor. А у Вас еще и ключ не меняется от раунда к раунду, поэтому все ваши усилия начинают самоуничтожаться.

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

И еще техническое замечание: в последнем раунде обмен половинок блоков не производится, без этого схема дешифровки будет отличаться от схемы шифровки.

Что же касается зацепления, то Вы вероятно, подразумеваете блочное шифрование с зацеплением блоков (Cipher Block Chaining, CBC)? По-моему, даже в Википедии нормально написано: Режим шифрования — Википедия

Ответить с цитированием
  (#3 (permalink)) Старый
vld64 vld64 вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.06.2011
По умолчанию 25.06.2011, 09:00

>>У Вас не совсем правильная сеть Фейстеля
Такая сеть приводится во многих руководствах - вот например: ГЛАВА 4. КАК УСТРОЕНЫ СОВРЕМЕННЫЕ ШИФРЫ
Ответить с цитированием
  (#4 (permalink)) Старый
imported_ErofeiVlad imported_ErofeiVlad вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 28.06.2011
По умолчанию 28.06.2011, 03:14

Спасибо за ссылку. Именно это искал.
Ответить с цитированием
  (#5 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 29.06.2011, 06:05

Цитата:
Сообщение от vld64 Посмотреть сообщение
Такая сеть приводится во многих руководствах
К сожалению, от этого она не становится более правильной..
Видимо, авторы поленились погонять этот пример перед публикацией.
Но они ведь честно пишут:
cpp Код:
// используем какие-либо сложные преобразования
Думаю, это надо читать "используем какие-либо сложные преобразования вместо этого кода"
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Alexiski Alexiski вне форума
Любитель давать советы
 
Сообщений: 4,266
Сказал(а) спасибо: 27
Поблагодарили 54 раз(а) в 54 сообщениях
Регистрация: 16.10.2005
По умолчанию 29.06.2011, 06:12

В конце концов, неужели так сложно проверить? Поменяйте функцию F - и зацикливание исчезнет
cpp Код:
//---------------------------------------------------------------------------
//---- Демонстрационный вариант преобразования
unsigned int F (unsigned int in, unsigned char key)
{
  unsigned int temp = in + key * 0xABCD1234;
  return (temp << 11) + (temp >> 21);        
}
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание Wi-Fi сети Brody Любые вопросы от новичков 7 20.02.2012 18:53
Социальные сети АкуырФззду Опросы и мнения 1 23.12.2011 02:26
Настройка сети Varvert Любые вопросы от новичков 5 10.02.2011 23:04
странности сети sterch Сетевые подключения 2 03.02.2011 17:06
Нет сети pavlyxa Сетевые подключения 10 19.01.2011 19:37
Сети Вильгельм Prolog 5 13.01.2011 02:42
Поможет ли стабилизатор если в сети 160. Требуется подключить ноутбук к сети. DENDENDEN Техническая поддержка 7 03.05.2010 11:03
Как настроить доступ по сети к принтеру другим пользователям сети? Kyber Любые вопросы от новичков 4 01.11.2008 13:35
Разговорник по сети imported_bess Visual Basic 1 04.04.2007 13:58
Надо запретить доступ к сети компьютеру в сети MagiciaN Сетевое программирование 0 20.12.2005 13:58
Apache по сети!!! lestat PHP 14 22.07.2004 01:31



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов