Новый шифр "GAMMA"
Здравствуйте!
Ниже информация по шифру "GAMMA", пожалуйста прокомментируйте и критикуйте.
Алгоритм очень прост, на мой взгляд теоретическая стойкость определяется только ГСЧ и размером блока.
Сделана тестовая реализация (написана кроссплатформенная программа).
Работа программы.
Для генерации случайных чисел замеряются интервалы времени между вводом символов с клавиатуры.
- Шифрование.
Вводится символьный пароль. Формируется блок P, в начале которого идут символы введённого пароля, далее нули.
Генерируется блок случайных чисел R.
Вычисляется ключ K = R xor P. К сохраняется в выходной файл.
Каждый блок входного файла (S) преобразуется в блок выходного файла E. E = S xor R. При этом при каждой итерации блок R преобразуется следующим образом:
Для простоты возьмём длину блока 4 бита: R = r3 r2 r1 r0
Следующий (преобразованный) R будет иметь вид
- Дешифрование.
Вводится символьный пароль P.
Считывается блок ключа K.
Вычисляется блок R = K xor P.
Каждый блок входного файла (E) преобразуется в блок выходного файла S. S = E xor R.
Блок R преобразуется таким же образом как в п.2.
Здесьhttps://hostingkartinok.com/show-image.php?id=7b34c14c21b7de2330a455c9bb370200)) лежит графическая схема генерации подблоков R и пример шифрования одного блока.
комментариев: 20 документов: 3 редакций: 0
1 Я так понял, что вы считаете, что можно блок (64 байт) сделать "случайным" и не зависимым, просто схорив его с 64 байтами текста (файла)? И пустив в следующий цикл дальше.
Но вот к примеру простой файл rtf служебная информация в начале больше 64 байт, т. е. я могу таким способом узнать-
-
а) начальный ваш блок 64 (а из него может и блок случайных чисел- пароль быстрым перебором?)
б) второй блок 64, т к первый то мне известен из за открытого текста rtf в начале.
-
2 Как там с изменением всей гаммы полностью при изменении пароля в 1 бит? Это если предположить, что ваш сгенерированный блок один и тот же (ну или частично совпадает, смотрим п.3).
-
3 Как там с вашим супер случайным блоком "от нажатия клавиш", почитайте про проблемы создания случайных чисел и данных.
-
И это только на вскидку. Пожалуйста, не пробуйте в крипте создавать свои велосипеды.
Используйте проверенные крипто примитивы, если уж захотели.
-
Сделайте связку на хэшах SHA2+SHA3 от вашего пароля и номера блока.
И будет вам счастье, перебирать такое никто не будет, легче паяльник.
комментариев: 10 документов: 4 редакций: 0
Благодарю г-на "Morfeys" за конкретных и развёрнутый комментарий.
Я думаю что если сксорить исходный блок с случайными данными – получаются случайные данные (по примеру шифра Вермана). Но конечно же утверждение верно только для одного блока, т.к. для остальных по сути применяется
ГПСЧ.
В следующий "цикл" он же блок применяется другое значение R (см. первые две строчки графической блок-схемы) т.е. для каждого блока свой "независимый (ПГСЧ)" R.
Перебрать 512 (64Кбайта) бит чтобы получить R (по сути ключ шифрования) нереально ни сейчас ни с будущими мощностями (даже на гипотетическом квантовом компьютере).
Атаки на блочный шифр с известным открытым текстом и все их разновидности кажутся нереализуемы и вот почему: если шифровать "нули" с "нулевым" паролем никакой статической зависимости на выходе обнаружить не удалось. И если даже знать что зашифрованы нули ключ не получить т.к. алгоритм прогоняется 3 раза (1-й и 3-й проход похож на приём на "отбеливания"), и все на независимом ключе, т.е. каждый новый проход использует свой изначальный ГСЧ блок.
Если мы изменим пароль на 1 бит нам придется перешифровать все данные. (возможно это можно облегчить). Были мысли применять хеш-функции, но хочется сохранить простоту и элегантность. Каждое действие должно быть конкретно и обосновано, т.е. достигать конкретный доказуемый эффект.
С энтропией всё в порядке. Проблема скорее в другом, при шифровании очень больших данных нужно очень долго >1000 нажатий.
По поводу генерации энтропии вооружен информацией от Б. Шнаера и Н. Фергюсона.
P.S. кстати извиняюсь за скудную документацию (когда все будет закончено будет полное описание). Хотелось добавить что в программной реализации размер блока прямо пропорционален размер шифруемых данных (чем больше входных данных, тем больше блок и соответственно пул ГСЧ.)
комментариев: 6 документов: 0 редакций: 0
Один любой известный блок открывает все остальные. Ключ нафиг не нужен.
комментариев: 10 документов: 4 редакций: 0
Всем спасибо за внимание и комментарии.