Если можно, проверьте в своих программах результат шифрования в режиме простой замены абстрактной строки, например, 0x1F1F1F1F2B2B2B2B со следующими ключевыми элементами: Ключ: 0x931A21D5 key0 0xDB56279F key1 0x8E9A6321 key2 0xFE3087A3 key3 0xF5A68268 key4 0x2255452B key5 0xA179C1AB key6 0xACDDFDC4 key7 Таблица замен (в 16-ричном виде): k1 1 2 3 4 5 6 7 8 9 A B C D E F 0 k2 2 3 4 5 6 7 8 9 A B C D E F 0 1 k3 3 4 5 6 7 8 9 A B C D E F 0 1 2 k4 4 5 6 7 8 9 A B C D E F 0 1 2 3 k5 5 6 7 8 9 A B C D E F 0 1 2 3 4 k6 6 7 8 9 A B C D E F 0 1 2 3 4 5 k7 7 8 9 A B C D E F 0 1 2 3 4 5 6 k8 8 9 A B C D E F 0 1 2 3 4 5 6 7 Эти значения взяты из файлов Винокурова KEY.KEY и CHANGTBL.CHT. Будем считать, что порядковая нумерация элементов в его файлах именно такая, как приведена здесь (ключ key0-key7, таблица замен k1-k8). У Винокурова при выполнении строки GOST32.EXE /kkey.key /cCHANGTBL.CHT es 1.txt 2.txt результат равен 0x273B85ED861E01BA Если у кого получился такой же результат, то можно попросить в режиме отладки выписать все промежуточные результаты вплоть до основных шагов?
kapger участвую в эксперименте. Мне тоже интересна моя реализация. Тест Винокура не смог запустить- может не очень старался. Сейчас введу твои данные, скажу, что на выходе. Я- автор этого топика, и мне уважаемый olegras разъяснял что и как там. Так я и сделал. Это соответствует чему? Что у Винокура? Просто мысль немного потерял уже.
С данными вводными, вроде не ошибся при вводе результат другой- F900E2B51D1421D9 обратно этот же результат расшифровывается к исходному как надо.
Вообще, глобальный вопрос такой: любая собственная реализация алгоритма ГОСТ 28147 должна на выходе давать то же самое, что и реализация Винокурова (его реализацию считаем за стандарт де-факто) при одинаковых начальных условиях: входное значение для шифрования, ключ и таблица замен. Но, так как я не понял в какой последовательности расположены ключевые элементы в файлах Винокурова, то для решения этого глобального вопроса нужно просить кого-либо, хорошо разбирающегося в ассемблере, рассказать этот вопрос нам всем... Считаем, что ответ на этот глобальный вопрос мы пока получить не в состоянии. Локальный вопрос следующий: любая собственная реализация алгоритма ГОСТ 28147 (например, Ваша) должна на выходе давать то же самое, что и другая реализация (например, моя или любого другого человека) при одинаковых начальных условиях: входное значение для шифрования, ключ и таблица замен. Давайте, чтобы не выдумывать лишнего, берем за входное значение для шифрования, ключ и таблицу замен значения, указанные в предыдущем посте. Режим - простая замена. Причем, даже если выходные значения у нас с Вами и совпадут, то можно ли быть уверенными в том, что мы с Вами не сделали одну и ту же ошибку по тексту программы? Так что жду Вашего значения, полученного на выходе простой замены...
kapger Я так полагаю, последний абзац- это ко мне относился? На этом сайте был прекрасный пример от Evil's interrupt по реализации ГОСТА по шагам. У меня с ним все совпало. У Винокура все не так очевидно и наглядно как там. Для начинающего. Я же вроде остаивл своё значение по простой замене? Не понял вопроса.
вот например первые 4 тестовых вектора : все 4 раза шифруем блок из всех 000000000000... K1=0x733D2C20 65686573 74746769 79676120 626E7373 20657369 326C6568 33206D54 K2=0x110C733D 0D166568 130E7474 06417967 1D00626E 161A2065 090D326C 4D393320 K3=0x80B111F3 730DF216 850013F1 C7E1F941 620C1DFF 3ABAE91A 3FA109F2 F513B239 K4=0xA0E2804E FF1B73F2 ECE27A00 E7B8C7E1 EE1D620C AC0CC5BA A804C05E A18B0AEC R1=0x42ABBCCE 32BC0B1B R2=0x5203EBC8 5D9BCFFD R3=0x8D345899 00FF0E28 R4=0xE7860419 0D2A562D другие в тексте ГОСТа 34.11 дальше
metcenger Да, к Вам относился... Когда я начал писать тот ответ, то еще не видел Вашего ответа про итоговое значение... Ваш итог F900E2B51D1421D9 Мой итог E9E99D391CE5E699 А у Винокурова 273B85ED861E01BA Где правда? И у меня тоже совпала обратная расшифровка и получилось исходное 1F1F1F1F2B2B2B2B...
OLS А можно поподробнее про векторы данных из реализации ГОСТ 28147-89 в ГОСТ 34.11-94 и где их взять?
kapger там 32 раза прогоняется от 1-8 1-8 1-8, потом от 8-1 ключи. Так оно? Или это полсе первого цикла прогона? Может имеет смысл сравнить результат после первого прогона?
kapger В самом стандарте ГОСТ 34.11-94, т.к. там применяется ГОСТ 28147-89 и есть пошаговые вектора данных (я привел первые 4 из них выше). Если нет официальных сканов - можно посмотреть в Википедии : http://ru.wikipedia.org/wiki/%D0%93%D0%9E%D0%A1%D0%A2_%D0%A0_34.11-94 (см. раздел "Шифрующее преобразование E")
OLS Где взять - это дурацкий, конечно, вопрос с моей стороны... Нашел этот ГОСТ для начала в Википедии. Почитал... То есть если мы будем шифровать исходное значение 0x00000000 00000000 с ключом K1=0x733D2C20 65686573 74746769 79676120 626E7373 20657369 326C6568 33206D54 (элементы в нем расположены как k0, k1... k7 или наоборот?) то в итоге должны получить R4=0xE7860419 0D2A562D ? А какая таблица замен в этом случае? Или я чего то не понимаю?
Итак, цикл 32-3 ключ к [0] один раз прошелся по алгоритму. результат 4B1E16B21F1F1F1F Теперь результат прогнал ещё 7 раз с оставшимися ключами, т.е. исходные данные прогнал последовательно с ключами 0-7 22B20B62C23048E0 ЧТО сошлось из этого?
kapger Возьмите сканы официальной версии : http://slil.ru/27745916 Там есть узлы замен и некоторые другие подробности
metcenger цикл 32-3 ключ k0=931A21D5 один раз прошелся по алгоритму. результат 2B2B2B2B4B1E16B2 Кто не прав?
сразу видна твоя ошибка- у нас данные 0x1F1F1F1F, // L 0x2B2B2B2B, // R согласен? преобразование начинается с правой части. Согласен? тогда почему в твоем результате она не преобразована? исправь это. может дальше ещё что будет.
OLS Спасибо! Сканы взял и почитал... Итак... ========================================================================= "ТЕСТ реализации ГОСТ 28147-89 (В РЕЖИМЕ ПРОСТОЙ ЗАМЕНЫ)"! В "Приложении А" к ГОСТ 34.11-94 указано, что таблица замен для тестовых целей такова: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ---------------------------------------------------------------------------------------------- k1 4 A 9 2 D 8 0 E 6 B 1 C 7 F 5 3 k2 E B 4 C 6 D F A 2 3 8 1 0 7 5 9 k3 5 8 1 D A 3 4 2 E F C 7 6 0 9 B k4 7 D A 1 0 8 9 F E 4 6 C B 2 5 3 k5 6 C 7 1 5 F D 8 4 A 9 E 0 3 B 2 k6 4 B A 0 7 2 1 D 3 6 8 5 9 C F E k7 D B 4 1 3 F 5 9 0 A E 7 6 8 2 C k8 1 F D 0 5 7 A 4 9 2 3 E 6 B 8 C Тестовые ключи таковы: (причем порядок расположения элементов в каждом из этих ключей: k7, k6, ... ,k0 - это я понял экспериментально) K1=0x733D2C20 65686573 74746769 79676120 626E7373 20657369 326C6568 33206D54 K2=0x110C733D 0D166568 130E7474 06417967 1D00626E 161A2065 090D326C 4D393320 K3=0x80B111F3 730DF216 850013F1 C7E1F941 620C1DFF 3ABAE91A 3FA109F2 F513B239 K4=0xA0E2804E FF1B73F2 ECE27A00 E7B8C7E1 EE1D620C AC0CC5BA A804C05E A18B0AEC Теперь с помощью этой таблицы замен и (по очереди) каждого из четырех ключей шифруем одну и ту же исходную последовательность, состоящую из одних нолей: 0x00000000 00000000 В результате должны получить (в соответствии с каждым из ключей) следующее зашифрованное значение (В РЕЖИМЕ ПРОСТОЙ ЗАМЕНЫ): R1=0x42ABBCCE 32BC0B1B R2=0x5203EBC8 5D9BCFFD R3=0x8D345899 00FF0E28 R4=0xE7860419 0D2A562D Конец теста режима простой замены. ========================================================================= У меня именно это и получилось!
metcenger у нас данные 0x1F1F1F1F, // L - согласен (в тексте Винокурова это N2) 0x2B2B2B2B, // R - согласен (в тексте Винокурова это N1) А дальше должно быть вот так: вход: 1F1F1F1F 2B2B2B2B, ключ k0=931A21D5 N2=1F1F1F1F, N1=2B2B2B2B S=(N1+k)mod2^32=2B2B2B2B+931A21D5=BE454D00 S= замена BE454D00 на 35AA8021 S=ROL11(35AA8021) = ROL11(00110101101010101000000000100001) = 01010100000000010000100110101101 =540109AD S=(S+N2)mod2=540109AD+1F1F1F1F=4B1E16B2 N2=N1=2B2B2B2B, N1=S= 4B1E16B2 выход: 2B2B2B2B 4B1E16B2 Проверяй...