Суббота, 20.04.2024
Мой сайт
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Главная » Гостевая книга [ Добавить запись ]

Страницы: 1 2 3 »
Показано 1-15 из 35 сообщений
35. Андрей   (14.03.2012 10:02)
0  
День добрый. Проверил Вашу новую версию. Вот мои комментарии.
Выполняем:
D:WORKGOST28147_89SoftPr>ГОСТ2814789Пр.exe /У 3 /Т tz /О 1122334455667788 1A2B3C4D /Х

Таблица замен:
4 A 9 2 D 8 0 E 6 B 1 C 7 F 5 3
E B 4 C 6 D F A 2 3 8 1 0 7 5 9
5 8 1 D A 3 4 2 E F C 7 6 0 9 B
7 D A 1 0 8 9 F E 4 6 C B 2 5 3
6 C 7 1 5 F D 8 4 A 9 E 0 3 B 2
4 B A 0 7 2 1 D 3 6 8 5 9 C F E
D B 4 1 3 F 5 9 0 A E 7 6 8 2 C
1 F D 0 5 7 A 4 9 2 3 E 6 B 8 C

основной шаг:
| N: [88][77][66][55][44][33][22][11]; X: [4D][3C][2B][1A]
| ∙ действие: (N1, N2) = N;
| N1: [88][77][66][55]; N2:[44][33][22][11]
| ∙ действие: S = N1 [+] X;
| S: [D5][B3][91][6F]
| ∙ действие: замена:
| ∙ m = 0; S[m]: [D]; ТЗ[m, S[m]]: [7]; S[m] = ТЗ[m, S[m]];
| ∙ m = 1; S[m]: [5]; ТЗ[m, S[m]]: [8]; S[m] = ТЗ[m, S[m]];
| ∙ m = 2; S[m]: [B]; ТЗ[m, S[m]]: [C]; S[m] = ТЗ[m, S[m]];
| ∙ m = 3; S[m]: [3]; ТЗ[m, S[m]]: [D]; S[m] = ТЗ[m, S[m]];
| ∙ m = 4; S[m]: [9]; ТЗ[m, S[m]]: [6]; S[m] = ТЗ[m, S[m]];
| ∙ m = 5; S[m]: [1]; ТЗ[m, S[m]]: [C]; S[m] = ТЗ[m, S[m]];
| ∙ m = 6; S[m]: [6]; ТЗ[m, S[m]]: [A]; S[m] = ТЗ[m, S[m]];
| ∙ m = 7; S[m]: [F]; ТЗ[m, S[m]]: [C]; S[m] = ТЗ[m, S[m]];
| S: [78][CD][6C][AC]
| ∙ действие: S = Вращение(S, 11);
| S: [63][C5][6B][66]
| ∙ действие: S = S (+) N2;
| S: [27][F6][49][77]
| ∙ действие: N2 = N1; N1 = S;
| N1: [27][F6][49][77]; N2:[88][77][66][55]
| ∙ действие: результат = (N1, N2);
| результат: [27][F6][49][77][88][77][66][55]

Шаг выполнен.

Если m это номер строки таблицы замен, тогда результат замены должен быть таким:
∙ m = 0; S[m]: [D]; ТЗ[m, S[m]]: [F]; S[m] = ТЗ[m, S[m]];
∙ m = 1; S[m]: [5]; ТЗ[m, S[m]]: [D]; S[m] = ТЗ[m, S[m]];
∙ m = 2; S[m]: [B]; ТЗ[m, S[m]]: [7]; S[m] = ТЗ[m, S[m]];
∙ m = 3; S[m]: [3]; ТЗ[m, S[m]]: [1]; S[m] = ТЗ[m, S[m]];
∙ m = 4; S[m]: [9]; ТЗ[m, S[m]]: [A]; S[m] = ТЗ[m, S[m]];
∙ m = 5; S[m]: [1]; ТЗ[m, S[m]]: [4]; S[m] = ТЗ[m, S[m]];
∙ m = 6; S[m]: [6]; ТЗ[m, S[m]]: [5]; S[m] = ТЗ[m, S[m]];
∙ m = 7; S[m]: [F]; ТЗ[m, S[m]]: [4]; S[m] = ТЗ[m, S[m]];

Получаем [FD][71][A4][54]
Ну вот как-то так.
Ответ: Вы всецело правы. Я, писав эту программку лет 6 назад, вынужден вновь разбираться в тонкостях её работы, вследствие чего бессмысленно поспешил привести вывод данных в более наглядный вид: воистину, порядок использования элементов ТЗ остаётся тот же. В общем виде замена происходит следующим образом:

Обнулить [п1];
00000000000000000000000000000000
Обнулить [п2];
00000000000000000000000000000000
Записать [ячейку] в младший разряд [п1];
00000000000000000000000011000011
Сдвинуть [п1] на 4 двоичных разряда влево;
00000000000000000000110000110000
Записать в младший разряд [п2] младший разряд [п1];
00000000000000000000000000110000
Сдвинуть [п2] на 4 двоичных разряда вправо;
00000000000000000000000000000011
Сдвинуть [п1] на 8 двоичных разрядов вправо;
00000000000000000000000000001100
Записать в [п3] элемент ТЗ с номером строки N и номером элемента [п2];
00000000000000000000000000000010
Сдвинуть значение элемента ТЗ с номером строки N+1 и номером элемента[п1] на 4 двоичных разряда влево;
00000000000000000000000000010000
Прибавить полученное значение к [п3];
00000000000000000000000000010010
Записать в младший разряд [результата] младший разряд [п3].
00010010

Короче говоря, преобразование имеет вид:
YYYYXXXX
ТЗ[N+1, YYYY] = BBBB;
ТЗ[N, XXXX] = AAAA;
BBBBAAAA

Такой же порядок отношения номера элемента ТЗ к порядку использования разрядов имеется и в реализации А. Винокурова, на работы которого я в некоторой степени ориентировался при написании своей реализации. Вот его код:

; 1. Начало цикла и сохранение старого N1
iloop: mov EBP,EAX
; 2. Добавление к S ключа по модулю 2^32
add EAX,[ESI] ; добавить ключ
add ESI,4 ; следующий эл. ключа
; 3. Поблочная замена в S с вращением на 8 бит влево
REPT 3
xlat ; перекодировка байта
ror EAX,8 ; AL <- следующий байт
add EBX,100h; следующий узел замен
ENDM
xlat ; перекодировка байта
sub EBX,300h; BX -> 1-й узел замен
; 4. Доворот S на 3 бита влево
rol EAX,3
; 5. Вычисление новых значений N1,N2
xor EAX,EDX
mov EDX,EBP
; Завершение внутреннего цикла
loop iloop
ret

Всё сделано очень красиво, код максимально оптимизирован, хотя и не так нагляден, но алгоритм по сути тот же. Что касается стандарта, но он не даёт однозначных указаний на этот счёт, рассматривая ТЗ как 8 узлов замен по 64 бита (страница 4, а также чертёж на странице 5).

34. Антон   (13.03.2012 17:08)
0  
Спасибо за сайт,очень помог в реализации алгоритма для лабораторной работы.Теперь еще писать будут хэш-функцию ГОСТ Р 34.11-94 которая основаная также на ГОСТ 28147—89.Если автору будет не сложно то хотелось бы чтобы он взглянул на мой скромный код на C++ и указал возможные ощибки и пути к оптимизации.
Ссылка для скачивания http://ifolder.ru/29266894
В архиве полные исходники на систему,основной алгоритм в GOST.cpp и GOST.h
Ответ: Спасибо за оценку, рад, что сайт оказался полезен. Пример реализации хэш-функции ГОСТ Р 34.11-94 можете взять тут: http://glagol.tut.su/?section=i&cat=g&num=2

Что касается Вашей реализации, то меня в первую очередь смутили иностранная терминология, наименования элементов программы, а также иноязычный вывод сообщений. Это портит всё впечатление о программе, реализующей всё-таки русский алгоритм шифрования.

33. Андрей   (12.03.2012 22:00)
0  
День добрый. Согласно ГОСТ числа обрабатываются как целые беззнаковые числа. Разряды записываются слева направо в порядке убывания веса. Как можно из [07][6C][34][A5] при разбивании на тетрады получить [7][0][C][6][4][3][5][A]. Я думаю что получится [0][7][6][C][3][4][A][5]. Причем при сдвиге влево (в сторону старших разрядов как говорит ГОСТ) этих двух интерпретаций - получится различный результат.
P.S. я аппаратчик и мыслю на уровне регистров и разрядов. Поясните где я не прав.
Ответ: Числа - да. Но блок данных, кусок ключа и т. п. - это не числа. Хотя в программу они могут подаваться как числа. Но насчёт тетрад Вы правы: я не совсем точно написал в сообщении про них. Я имел в виду, что в таком порядке они обрабатываются программой, а при собирании в байты (задача "Замена") дают тот же результат. При реализации описания хода преобразования я предпочёл использовать традиционный порядок, принятый в адресации ячеек памяти ЭВМ - от младшего к старшему. Но это, действительно, вносит путаницу в понимание, поэтому я теперь исправил это в программе. Благодарю за внимательность.

32. Андрей   (10.03.2012 18:29)
0  
И ключ почему-то развернут?
Ответ: Это особенность представления чисел в ЭВМ. Вы вводите ключ как число. Программа же выводит его как ряд байтов. Т. е., причина та же, что и в случае с тетрадами: это отличие возникает в отображении одних и тех же данных, а не в них самих.

31. Андрей   (10.03.2012 17:58)
0  
День добрый. Прошу прощения, может уже замучил. Вопрос у меня снова.
Программу ГОСТ2814789Пр.exe не вы писали? Вот что она выдает:
D:WORKGOST28147_89SoftPr>ГОСТ2814789Пр.exe /Т tz /О 1122334455667788 11223344 /Х

Таблица замен:
4 A 9 2 D 8 0 E 6 B 1 C 7 F 5 3
E B 4 C 6 D F A 2 3 8 1 0 7 5 9
5 8 1 D A 3 4 2 E F C 7 6 0 9 B
7 D A 1 0 8 9 F E 4 6 C B 2 5 3
6 C 7 1 5 F D 8 4 A 9 E 0 3 B 2
4 B A 0 7 2 1 D 3 6 8 5 9 C F E
D B 4 1 3 F 5 9 0 A E 7 6 8 2 C
1 F D 0 5 7 A 4 9 2 3 E 6 B 8 C

основной шаг:
| N: [88][77][66][55][44][33][22][11]; X: [44][33][22][11]
| &#8729; действие: (N1, N2) = N;
| N1: [88][77][66][55]; N2:[44][33][22][11]
| &#8729; действие: S = N1 [+] X;
| S: [CC][AA][88][66]
| &#8729; действие: замена:
| &#8729; m = 0; S[m]: [C]; ТЗ[m, S[m]]: [7]; S[m] = ТЗ[m, S[m]];
| &#8729; m = 1; S[m]: [C]; ТЗ[m, S[m]]: [0]; S[m] = ТЗ[m, S[m]];
| &#8729; m = 2; S[m]: [A]; ТЗ[m, S[m]]: [C]; S[m] = ТЗ[m, S[m]];
| &#8729; m = 3; S[m]: [A]; ТЗ[m, S[m]]: [6]; S[m] = ТЗ[m, S[m]];
| &#8729; m = 4; S[m]: [8]; ТЗ[m, S[m]]: [4]; S[m] = ТЗ[m, S[m]];
| &#8729; m = 5; S[m]: [8]; ТЗ[m, S[m]]: [3]; S[m] = ТЗ[m, S[m]];
| &#8729; m = 6; S[m]: [6]; ТЗ[m, S[m]]: [5]; S[m] = ТЗ[m, S[m]];
| &#8729; m = 7; S[m]: [6]; ТЗ[m, S[m]]: [A]; S[m] = ТЗ[m, S[m]];
| S: [07][6C][34][A5]
| &#8729; действие: S = Вращение(S, 11);
| S: [29][3D][60][A3]
| &#8729; действие: S = S (+) N2;
| S: [6D][0E][42][B2]
| &#8729; действие: N2 = N1; N1 = S;
| N1: [6D][0E][42][B2]; N2:[88][77][66][55]
| &#8729; действие: результат = (N1, N2);
| результат: [6D][0E][42][B2][88][77][66][55]

Шаг выполнен.


Почему после действия замены тетрады в байтах переставлены?
Ответ: Наоборот, это хорошо, что у людей возникает интерес к отечественному алгоритму шифрования.

Да, программку эту я писал. Тетрады не переставлены. Просто так показан порядок обработки тетрад в байте.

30. Андрей   (10.03.2012 13:46)
0  
День добрый.
Согласен строгое соответствие стандарту - это необходимое условие, однако возникают некоторые сложности с реализацией. Но я думаю их удастся решить.
В стандарте отсутствует ответ на один вопрос. После какого объема переданной зашифрованной информации необходима смена ключей?
Ответ: Это практически полностью зависит от надёжности канала связи, условий передачи и прочего. То есть, ключ следует сменить тогда, когда вероятность его захвата/взлома противником повышается до недопустимого уровня.

29. Андрей   (09.03.2012 15:05)
0  
День добрый. В продолжение нашего разговора.
По стандарту начальным значением генератора РГПЧ является результат шифрования синхропосылки S в режиме простой замены. После чего получается значение
A(S)=Y0,Z0. В вашей статье S=Ц32-З(S). Разночтение?
Представим ситуацию, когда необходимо зашифровать различные текстовые сообщения для различных адресатов. Так вот с каждым текстом необходимо отсылать различные синхропосылки или вместо них можно использовать текущее значение РГПЧ? Во втором варианте исключается этап подготовки начального значения РГПЧ из синхропосылки, что сократит время обработки шифрованного сообщения.
Ответ: Всё верно, синхропосылка, определяющая начальное значение РГПЧ, предварительно шифруется в цикле 32-З, после чего обрабатывается текст: сперва срабатывает шаг РГПЧ, после чего результат его работы суётся в цикл 32-З, а уже его результат есть гамма. При этом для следующего шага работы РГПЧ сохраняется не результат цикла зашифрования, а собственно результат предыдущего шага РГПЧ.

Насчёт Вашей идеи с синхропосылкой. Мне думается, что исключение шага подготовки начального значения РГПЧ (т. е. одного выполнения цикла 32-З) будет отходом от стандарта. Кроме того, как Вы представляете себе процесс расшифровки сообщения? Ведь текущее значение РГПЧ имеется только у Вас (оно определяется двумя факторами: во-первых, начальным значением, с которым генератор начал работать (если следовать стандарту, то оно предварительно шифруется с определёнными ключом и ТЗ), во-вторых, числом шагов, которое он отработал), но никак не у получателя сообщения; придётся передавать его получателю, а это по сути та же синхропосылка - так почему бы не последовать стандарту, предварительно запихав её в 32-З.

Другой вопрос, что не обязательно каждый раз передавать разную синхропосылку. Можно для множества сообщений передавать одну и ту же, например, нулевую - это не повлияет существенно на стойкость сообщений.

28. Андрей   (07.03.2012 16:49)
0  
День добрый.
В режиме гаммирования вместе с зашифрованным блоком должна быть передана синхропосылка. Допускается ли для последующих блоков информации передача не исходной синхропосылки, а результат работы генератора РГПЧ?
Ответ: По стандарту, на уровне режима шифрования обрабатывается не отдельный блок данных, а весь текст. Соответственно, реализующей этот режим подпрограмме синхропосылка подаётся однократно для всех блоков. Синхропосылка — это и есть начальное значение РГПЧ, вырабатывающего гамму, которая накладывается на текст в режиме гаммирования. Но никак не сама синхропосылка, тем более, многократно.

27. Intsystem   (24.12.2011 14:12)
0  
Здравствуйте! Я реализовал этот алгоритм на PHP

Вот ссылка:
http://intsystem.org/19/gost-28147-89-php/

Добавите ее в ваш обзор?
Ответ: Зачем? Вместе с PHP поставляется библиотека "mcrypt". В итоге шифрование по ГОСТу на PHP выглядит примерно так:

$шифротекст = mcrypt_encrypt(MCRYPT_GOST, $ключ, $текст, MCRYPT_MODE_CFB, $имитовставка);

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

К тому же, Вы реализовали только режим простой замены. А остальные три режима где?

26. Макс   (08.08.2011 21:29)
0  
есть огромный интерес к вашей программе не без возмездно.
Ответ: Что Вы имеете в виду?

25. Николай   (03.07.2011 20:36)
0  
скажите как встроить в виндоус 7 Гост на уровне crypto API с использованием вижуал СИ++ (также установлен Крипто ПРО 3.6)??? я чайник в этом деле.как это реализуется вообще и как проверяется??
Ответ: К сожалению, это мне неведомо. Попробуйте за разъяснениями обратиться к разработчикам соответствующих систем.

24. илья   (15.05.2011 15:10)
0  
спасибо за отличный сайт!прочитал тут в комментариях, что есть какая-то версия шифровальщика на С, это так? Не могли бы Вы скинуть на почту?
Ответ: Спасибо. Отправил письмо с ссылками на исходники.

23. Dmitry Banschikov   (31.01.2011 11:17)
0  
Реализация алгоритмов ГОСТ была добавлени в библиотеку openssl, начиная с версии 1.0.0. Поэтому, все те, кто хочет реализацию этого алгоритма для языков C и C++ - могут использовать эту библиотеку.
Ответ: Тоже верно. Спасибо за информацию.

22. Александр   (29.10.2010 09:58)
0  
Спасибо за текст ГОСТа!
Ответ: Пожалуйста.

21. Павел   (07.06.2010 17:46)
0  
Где-нибудь есть реализация алгоритмя на языке Java?
Ответ: К сожалению, пока не встречал таковой (хотя не отрицаю, что она может существовать). Впрочем, переписать на Java с имеющихся исходников, например, на C#, - не слишком трудоёмкая работа.

1-15 16-30 31-35

Имя *:
Email *:
WWW:
Код *:
Поиск
Друзья сайта
  • Создать сайт
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Все проекты компании
  • Copyright MyCorp © 2024
    Сделать бесплатный сайт с uCoz