id: Гость   вход   регистрация
текущее время 02:09 09/12/2024
Автор темы: felifaov, тема открыта 04/03/2019 14:57 Печать
Категории: криптография, алгоритмы, симметричное шифрование
создать
просмотр
ссылки

Новый шифр "GAMMA"


Здравствуйте!


Ниже информация по шифру "GAMMA", пожалуйста прокомментируйте и критикуйте.
Алгоритм очень прост, на мой взгляд теоретическая стойкость определяется только ГСЧ и размером блока.


Сделана тестовая реализация (написана кроссплатформенная программа).


Работа программы.
Программа работает поблочно. Длина блока составляет 64 байта.
Для генерации случайных чисел замеряются интервалы времени между вводом символов с клавиатуры.
    1. Шифрование.

Вводится символьный пароль. Формируется блок P, в начале которого идут символы введённого пароля, далее нули.
Генерируется блок случайных чисел R.
Вычисляется ключ K = R xor P. К сохраняется в выходной файл.
Каждый блок входного файла (S) преобразуется в блок выходного файла E. E = S xor R. При этом при каждой итерации блок R преобразуется следующим образом:


Для простоты возьмём длину блока 4 бита: R = r3 r2 r1 r0
Следующий (преобразованный) R будет иметь вид

bit 3 bit 2 bit 1 bit 0
(r3 xor r0) (r2 xor r3) (r1 xor r2) (r0 xor r1)
    1. Дешифрование.

Вводится символьный пароль P.
Считывается блок ключа K.
Вычисляется блок R = K xor P.
Каждый блок входного файла (E) преобразуется в блок выходного файла S. S = E xor R.
Блок R преобразуется таким же образом как в п.2.


Здесьhttps://hostingkartinok.com/show-image.php?id=7b34c14c21b7de2330a455c9bb370200)) лежит графическая схема генерации подблоков R и пример шифрования одного блока.


 
Комментарии
— Morfeys (05/03/2019 01:03, исправлен 05/03/2019 17:11)   профиль/связь   <#>
комментариев: 20   документов: 3   редакций: 0

1 Я так понял, что вы считаете, что можно блок (64 байт) сделать "случайным" и не зависимым, просто схорив его с 64 байтами текста (файла)? И пустив в следующий цикл дальше.
Но вот к примеру простой файл rtf служебная информация в начале больше 64 байт, т. е. я могу таким способом узнать-
-
а) начальный ваш блок 64 (а из него может и блок случайных чисел- пароль быстрым перебором?)
б) второй блок 64, т к первый то мне известен из за открытого текста rtf в начале.
-
2 Как там с изменением всей гаммы полностью при изменении пароля в 1 бит? Это если предположить, что ваш сгенерированный блок один и тот же (ну или частично совпадает, смотрим п.3).
-
3 Как там с вашим супер случайным блоком "от нажатия клавиш", почитайте про проблемы создания случайных чисел и данных.
-
И это только на вскидку. Пожалуйста, не пробуйте в крипте создавать свои велосипеды.
Используйте проверенные крипто примитивы, если уж захотели.
-
Сделайте связку на хэшах SHA2+SHA3 от вашего пароля и номера блока.
И будет вам счастье, перебирать такое никто не будет, легче паяльник.

— felifaov (11/03/2019 21:36, исправлен 12/03/2019 01:09)   профиль/связь   <#>
комментариев: 10   документов: 4   редакций: 0

Благодарю г-на "Morfeys" за конкретных и развёрнутый комментарий.


Morfeys:
что вы считаете, что можно предыдущий блок сделать "случайным" и не зависимым, просто схорив его с предыдущими 64 байтами текста (файла)?

Я думаю что если сксорить исходный блок с случайными данными – получаются случайные данные (по примеру шифра Вермана). Но конечно же утверждение верно только для одного блока, т.к. для остальных по сути применяется
ГПСЧ.


Morfeys:
И пустив в следующий цикл дальше.

В следующий "цикл" он же блок применяется другое значение R (см. первые две строчки графической блок-схемы) т.е. для каждого блока свой "независимый (ПГСЧ)" R.


Morfeys:
а)начальный ваш блок 64 (а из него может и блок случайных чисел- пароль быстрым перебором?)

Перебрать 512 (64Кбайта) бит чтобы получить R (по сути ключ шифрования) нереально ни сейчас ни с будущими мощностями (даже на гипотетическом квантовом компьютере).


Morfeys:
б) второй блок 64, т.к первый то мне известен из за открытого текста rtf в начале.

Атаки на блочный шифр с известным открытым текстом и все их разновидности кажутся нереализуемы и вот почему: если шифровать "нули" с "нулевым" паролем никакой статической зависимости на выходе обнаружить не удалось. И если даже знать что зашифрованы нули ключ не получить т.к. алгоритм прогоняется 3 раза (1-й и 3-й проход похож на приём на "отбеливания"), и все на независимом ключе, т.е. каждый новый проход использует свой изначальный ГСЧ блок.


Morfeys:
Как там с изменением всей гаммы полностью при изменении пароля в 1 бит?

Если мы изменим пароль на 1 бит нам придется перешифровать все данные. (возможно это можно облегчить). Были мысли применять хеш-функции, но хочется сохранить простоту и элегантность. Каждое действие должно быть конкретно и обосновано, т.е. достигать конкретный доказуемый эффект.


Morfeys:
Как там с вашим супер случайным блоком "от нажатия клавиш",]

С энтропией всё в порядке. Проблема скорее в другом, при шифровании очень больших данных нужно очень долго >1000 нажатий.


По поводу генерации энтропии вооружен информацией от Б. Шнаера и Н. Фергюсона.


P.S. кстати извиняюсь за скудную документацию (когда все будет закончено будет полное описание). Хотелось добавить что в программной реализации размер блока прямо пропорционален размер шифруемых данных (чем больше входных данных, тем больше блок и соответственно пул ГСЧ.)

— ВасВас (13/03/2019 15:23)   профиль/связь   <#>
комментариев: 6   документов: 0   редакций: 0
Стойкость этого шифра = 0.
Один любой известный блок открывает все остальные. Ключ нафиг не нужен.
— felifaov (15/03/2019 13:47)   профиль/связь   <#>
комментариев: 10   документов: 4   редакций: 0
Углубившись в алгебру логики, познал что шифр GAMMA нестойкий.
Всем спасибо за внимание и комментарии.
Ваша оценка документа [показать результаты]
-3-2-1 0+1+2+3