kapger http://www.wasm.ru/forum/viewtopic.php?id=28853&p=3 сообщение 68 3 разных результата. Теперь у нас одинаковые. У Винокурова как? ещё, где в официльном ГОСТе, кот. я выкачал из 218 сообщ. при цикле 32-3 вконце есть перестановка нибблов местами? Согласен что нужна, но где она там? По гаммированию. Там ещё больше запутано все. Надо взять 64 синхропосылки, первую разбить на N1 N2, зашифровать, скопировать в N3 N4, ... потом эти N3 N4 зашифровать, скопировать в N5 N6... В общем, можешь доступным языком объяснить как ты это понимаешь и что надо делать?
metcenger А у Винокурова также и осталось - отличное от нашего... Дело в том, что я не знаю в каком порядке расположены ключи в его файлах и элементы в его таблице замен! Если кто-либо сможет разобраться в его файлах на асме и сможет рассказать в каком порядке расположены ключевые элементы в его файлах, то тогда можно и сравнивать... Так что этот вопрос пока открыт.
metcenger А слабо распечатать чертеж номер 2 на страничке 5 и почеркаться на нем, внимательно читая текст? Ну ведь сразу становится всё понятно! Ответ: Смотрим на странице 6 в самом верху самый первый абзац: Если бы вот так почеркались на чертеже, то было бы видно, что в каждом из циклов (кроме 32-го) : - это цитата со страницы 4, два последних предложения из предпоследнего абзаца. Теперь видно?
metcenger Не, не так... Там одна синхропосылка, просто она так описана так - отдельными 64-мя битами. Так что тут все в порядке! У Винокурова очень все понятно описано, но вот только "первый цикл" выработки гаммы из его чертежа понятен, а дальше - неоднозначность... Тогда берем ГОСТ, распечатываем чертеж номер 3 и черкаемся, читая либо текст самого ГОСТа, либо текст с пояснениями из сообщения №205 http://wasm.ru/forum/viewtopic.php?pid=323952#p323952 Ну я для кого старался и расписывал, если никто и не читал?
kapger не злись ))) Я все читаю, только проверить не всегда есть время. цитата Ответ: Смотрим на странице 6 в самом верху самый первый абзац: В 32 цикле результат из сумматора СМ2 вводится в накопитель N2, а в накопителе N1 сохраняется старое заполнение. Корректней было бы, после цикла 32... В общем написано по -татарски, можно было бы просто сказать- меняем местами части. Завтра уже буду пробовать из сообщ. 205 составить картину что делать. У тебя это понятней расписано все- таки )))
OLS Проблема в том, что я пытался сравнивать свой вариант простой замены, с реализованной в файлах Винокурова, например, в GOST32.EXE. В комплекте файлов Винокурова есть исходники на асме (в котором я все-равно ничего не понимаю, разве что add и adc, да и то благодаря Вашему разъяснению...), есть пример таблицы замен, есть пример ключевого файла. Причем неизвестно в каком порядке в ключевых файлах Винокурова расположены ключевые элементы, чтобы можно было бы их подать в свою функцию и получить аналогичный своему (или отличный) результат. В идеале было бы хорошо, если бы кто смог с этими файлами поработать в режиме отладчика, чтобы можно было найти то место, начиная с которого у нас расхождения в результатах (если итоговый результат разный)... И то же самое относится к режиму гаммирования... Вот только при опытах с GOST32.EXE в режиме гаммирования без обратной связи обранужена такая странность: если подавать в командной строке синхропосылку в 16-ричном виде длиной четыре 16-ричных символа и менее, то результат шифрования не изменяется. Также если подавать в командной строке синхропосылку в 16-ричном виде длиной девять 16-ричных символов и более, то результат шифрования не изменяется. Может быть имеет место ошибка в файле GOST32.EXE?
я не видел этих исходников в оригинале - только обработка если не трудно - скомпонуй с exe в один архив и залей куда-нибудь ?
Можно вопрос : где-то на прошлой странице мне показалось, что вы после прибавления констант шифруете сам счетчик генератора ПСЧ, т.е. в S у вас там например при IV=0 01010101 01010104 56DE7A45 06AF73DE 982BC5A3 4FA9056E ... а не 01010101 01010104 02020202 02020208 03030303 0303030С как должно быть ?
OLS Или вопрос по промежуточным вычислениям в примере из сообщения №200 http://www.wasm.ru/forum/viewtopic.php?pid=323873#p323873 ? Давайте проверимся по шагам более подробно...
Мне не понравился в сообщении 204 шаг 6 3. Разбиваем S на две 32-х разрядные части: S0 (младшая часть) и S1 (старшая). 4. Каждую часть вычисляем отдельно, используя вышеуказанные константы: S0=S0+C1 (mod 2^32) S1=S1+C2-1 (mod (2^32)-1) + 1 5. Склеиваем S0 и S1 обратно в S. 6. Шифруем S методом простой замены S=Ц32-з(S). 7. Читаем 64 бит входных данных и делаем поразрядный xor с нашим S. Должно быть так : 6. TMP=Ц32з(S) 7. Читаем 64 бит входных данных и делаем поразрядный xor с нашим TMP То есть сам вектор S на шаге 6 не должен изменяться
OLS Согласен. Мне тоже этот шаг был непонятен, как противоречащий ГОСТу. Но, сообщение 204 не я писал... К тому же в этом сообщении цитировано сообщение olegras №7 http://www.wasm.ru/forum/viewtopic.php?pid=267083#p267083 И полновстью с Вами согласен, что: За это я и сам бьюсь, например в сообщении №205 http://www.wasm.ru/forum/viewtopic.php?pid=323952#p323952
kapger http://www.wasm.ru/forum/viewtopic.php?id=28853&p=8 сообщ. 200 теперь моя вторая гамма тоже совпадает проверяемся ещё? из всего многообразия описанного в с. 205- надо было просто зациклить кусок кода, начиная с ... for(i = 0; i < HMBlocks; i++) { S0= S0 + C1; //(mod 2^32) S1 = ((S1 + C2 - 1) % 0xFFFFFFFF) + 1; //(mod (2^32)-1) + 1 ... вот по сути и весь смысл гаммирования. Никакие переменные N3 N4 вводить не надо, т.к. S0 S1 не изменяются в ходе обратного сложения их в S.
metcenger Вот это многообразие и подробное описание и должно было помочь Вам найти у себя ошибку, а мне - убедиться, что я прав... Ну или наоборот Но в итоге прийти к единому мнению! И переменные N3 N4 не нужно было вводить, они были приведены по тексту ГОСТа и нужны были для понимания...
metcenger Проверяем две первые гаммы для ВТОРОГО варианта синхропосылки. Таблица замен берется из сообщения №79 данной темы. Ключ шифрования используем один из тех, что описаны в этом же сообщении №79, а именно: K1=0x733D2C20 65686573 74746769 79676120 626E7373 20657369 326C6568 33206D54 (порядок расположения элементов в ключе: k7, k6, ... ,k0) Синхропосылка в открытом виде 0x3C934975C61C34AD. Шаги по выработке гаммы №1: 1. Шифруем синхропосылку по циклу 32-З с указанными ключевыми данными, результат равен FEFEFEFC4DA15E7C. 2. Входное значение для генерации гаммы FEFEFEFC4DA15E7C 3. Выходное значение полученной гаммы 000000014EA25F7D 4. Зашифрованное значение полученной гаммы, которое и используется для наложения гаммы на открытые данные - гамма равна BB1B2F0FAEFEA452 Шаги по выработке гаммы №2: 1. Входное значение для генерации гаммы 000000014EA25F7D 2. Выходное значение полученной гаммы 010101054FA3607E 3. Зашифрованное значение полученной гаммы, которое и используется для наложения гаммы на открытые данные - гамма равна 5B9491C626C5ABCF