Оцените кустарный алгоритм шифрования текста
Написал небольшую программу для хранения паролей. Прикрутил самодельный алгоритм кодирования. Программа написана на HTA(VBS)т.е. исполняемый файл по сути является листингом программы. Взять можно здесь: http://code.google.com/p/guard-cat-password-manager/
В программу вшита справка с описанием алгоритма. Может и сама программа кому-то покажется интересной для повседневного использования =).
Об алгоритме:
GC3+.Простой алгоритм кодирования текста. Оценка сложности и надёжности алгоритма не проводилась, однако автор программы сам не сможет расшифровать данные, не имея правильного пароля. Предупреждение: алгоритм увеличивает размер данных, которые кодирует. Раз в четыре-пять. Однако, учитывая, что хранятся в программе текстовые данные, а не видео или музыка, то это будет плюс-минус пять килобайт что не слишком повлияет на портабельность программы. Логика кодирования:
1. Взять первый символ шифруемого текста и первый символ пароля.
2. К ASCII-коду текущего символа текста прибавить код текущего символа пароля.
3. Прибавить к получившемуся среднее арифметическое (не совсем оно, но близко, если интересно — см. листинг программы) кодов всех символов пароля.
4. Полученное число добавить к возвращаемой строке и приписать разделитель.
5. Если код текущего символа пароля чётный, то добавить код, похожий на результат кодирования реального символа (ложный код) и приписать разделитель. Повторить столько раз, чему равна вторая цифра ASCII-кода текущего символа пароля. Считаю, что этот пункт делает сложным выведение формулы.
6. Взять следующий символ текста и следующий символ пароля.
7. Если достигнут конец пароля, перейти к его началу и взять первый символ.
8. Повторять, начиная с пункта 2, вплоть до конца кодируемого текста.
9. Вернуть на выход то, что получилось. А получится что-то вроде: «330/414/288/278/353/366/281/265/265/292/148/346/143/354/353/249/291»
FAQ приносит плоды :)
/faq/kriptografijaobschievoprosy#h37247-12
/faq/kriptografijaobschievoprosy#h37247-13
/faq/kriptografijaobschievoprosy
комментариев: 4 документов: 1 редакций: 0
В чём прикол: интересно, насколько стойким может быть такой алгоритм.
За ссылки спасибо!
комментариев: 9796 документов: 488 редакций: 5664
сильное утверждение.
То можно было бы использовать и AES на скриптовом языке — скорости то не важны.
Алгоритм не рэндомизирован — одинаковые сообщение будут давать одинаковые шифртексты, а случайные дописывания из пункта "5" будут торчать, как ослиные уши. Среднее арифметическое пароля предсказуемо, ну усложнили его как-то.
Вот п.4 неясен. Если он не вносит чего-то принципиального, то получается, что шифрование зависит только от пароля, а не от шифруемого текста. То есть из пароля получается гамма неизвестной длины, которая складывается с текстом. С таким же успехом можно было бы использовать многократный XOR одного и того же ключа вместо шифрования.
комментариев: 4 документов: 1 редакций: 0
Пункт 5 рэндомизирован. Остальное нет. Однако, при смене даже одного символа пароля, один и тот же текст даст разные варианты, потому "ослиные уши" окажутся несколько припудрены =).
Похоже, это действительно наилучший вариант. Спасибо за разбор и советы.
комментариев: 9796 документов: 488 редакций: 5664
Речь шла про смену текста при одном и том же пароле.
Про режимы шифрования посмотрите, пароль ещё нужно хэшировать.
комментариев: 90 документов: 0 редакций: 0
О mod слышал? похоже что нет.
далее – это просто шифр виженера с добавлением сл. данных.
Такой шифр – не стойкий.
Например,
допустим пароль 12334
текст
11111-11111
плочим
23[423534600]445[12344500]-2[32534500]344[342432400]5
текст
22222-22222
плочим
34[423534600]556[32300]-3[35544300]455[33200]6
текст
33333-33333
плочим
45[423534600]667[56600]-4[34554500]566[76700]7
Первые символы 2->3->4... Уличная магия.
комментариев: 4 документов: 1 редакций: 0
А если модифицировать вот так:
1. Рассчитать xor сумму ascii-кодов всех символов пароля (XorSum).
2. Сделать текущим первый символ пароля и первый символ текста.
3. К ASCII-коду текущего символа текста прибавить по Xor код текущего символа пароля.
4. Прибавить к получившемуся (по Xor) XorSum.
5. Полученное число добавить к результату кодирования и приписать разделитель.
6. Добавить к результату кодирования код, похожий на результат кодирования реального символа (лишний символ), полученный рандомно и приписать разделитель. Повторить столько раз, чему равна вторая цифра ASCII-кода текущего символа пароля.
7. Взять следующий символ текста и следующий символ пароля.
8. Если достигнут конец пароля, перейти к его началу и взять первый символ.
9. Повторять, начиная с пункта 3, вплоть до конца кодируемого текста.
10. Вернуть результат кодирования.
Этакий усложнённый вариант Xor-шифрования с добавлением мусорных символов.
комментариев: 9796 документов: 488 редакций: 5664
Сейчас, по мере ещё большей формализации в создании алгоритмов, эта заметка Шнайера должна быть наполнена ещё более жёсткими аргументами.
комментариев: 90 документов: 0 редакций: 0
если выкладываете алгоритм – приведите развернутый пример шифрования короткого текста, скажем "00000000".
Так как по туманному описанию сложно что-то говорить, и 90% времени уходит не на собственно анализ, а на перевод творения в читабельный вид.
Собственно по алгоритму ( без формул, максимально доступным языком):
Допустим есть текст, "00000000".
Пароль "1234"
1. Рассчитать xor сумму ascii-кодов всех символов пароля (XorSum).
допустим она равна 5 (лень считать).
2. Сделать текущим первый символ пароля и первый символ текста.
сделали.
3. К ASCII-коду текущего символа текста прибавить по Xor код текущего символа пароля.
сделали, допустим получили "0" XOR "1" = "1".
4. Прибавить к получившемуся (по Xor) XorSum.
Прибавили, получили 1+5=6.
Но
если допустим взять пасс "6789" и не использовать XorSum получим тот же шифр текст.
Другими словами,
1+1+1+1+1+10=15
5+10=15
15=15. :)
Никто не будет находить (хотя его и можно найти) пасс 1234, будет найден 6789 и расшифровано сообщение.
5. Полученное число добавить к результату кодирования и приписать разделитель.
Что за разделитель? ","?
Возвращайся к моему преведущему посту и прочитай еще раз.
6. Добавить к результату кодирования код, похожий на результат кодирования реального символа (лишний символ), полученный рандомно и приписать разделитель. Повторить столько раз, чему равна вторая цифра ASCII-кода текущего символа пароля.
Тоесть если вторая цифра пароля 2 то к каждому символу добавлять 2?
Если шифртекст после ХОR скажем 5555 то на выходе получим?-
5[45]5[26]5[13]5[66]
И опять же что это нам даст? Кроме несколькократного увеличения текста на выходе?
Для первого символа получим ту же цепочку 5-6-7-8-9...
Далее перебирая возможные значения второго символа пароля, а он не сможет быть более некоторой псих-границы, отбрасываем мусор, и снова выходим на шифр виженера.
Кстати, а если второй символ пароля будет 9?))) в 9 ть раз увеличим шифр текст?
на входе 8
на выходе 134,32,342,35,5,67,6778,54,3524,12432,34,54?
Макс Клаузен наверное бы сошел сума. задолго до того как его взяли япошки.
Я уже молчу о РТА...и д.р.
комментариев: 4 документов: 1 редакций: 0
Привожу пример шифротекста при том, что текст последовательно равен:
Ключ во всех случаях равен 1234.
7/6/6/5/5/5/3/4/3/1/4/5/0/2/0/1/7/0/0/5/3/0/5/3/6/1/4
4/2/0/3/0/3/2/2/0/2/7/6/5/1/0/0/4/3/0/2/3/3/2/0/1/1/7
5/1/4/4/1/3/3/3/3/4/6/7/5/0/0/0/5/3/1/2/3/2/2/0/0/0/6
Очевидна ли закономерность? Мусорные символы рассчитываются по рандому, их максимальная величина ограничена величиной ближайшего реального символа. Однако, если мы возьмём текст, состоящий из разных символов и 7-символьный (или более длинный) пароль из букв разного регистра, цифр и спецсимволов, то будет ещё сложнее.
Например, семисимвольный пароль Cba-123 и последовательно меняющийся текст:
Дают три таких варианта:
"44/9/15/26/12/33/28/5/13/9/9/2/1/10/5/6/5/14/11/7/11/13/0/12/10/66/7/55/0/23/55/94/22/18/78/55/73/45/40/57/42/93/92/46/44/27/27/41/29/18/25/10/13/8/1/9/3/1/0/0/1/14/8/12/9/13/12/12/12/66/1/4/41/2/59/94/70/77/90/84/64/49/54/12/4"
"47/17/36/6/32/34/21/1/14/8/11/6/7/8/5/10/13/13/7/0/10/0/2/9/3/65/45/32/11/59/37/93/35/20/83/48/8/64/83/43/62/94/95/4/47/43/22/33/45/6/3/21/14/5/0/11/13/10/11/3/8/13/3/0/9/0/9/6/11/65/63/38/23/27/34/93/86/50/44/74/8/38/8/52/26"
"46/0/35/22/32/32/32/39/15/5/8/7/5/9/12/1/2/12/8/3/11/9/0/1/0/64/59/5/38/1/5/92/35/63/11/83/64/54/10/13/59/95/94/4/46/2/30/19/4/7/36/34/15/14/0/14/4/5/13/6/0/12/10/4/5/1/7/3/5/64/57/18/57/55/61/92/30/21/68/2/35/61/82/37/89"
Как вы полагаете, очевидно ли какие символы реальные, а какие мусорные? Если интересно, привожу реальные символы для текста равного двенадцати нулям (последняя строка) и пароля Cba-123. 46/15/12/64/92/95/94/46/15/12/64/92
Второй символ кода текущего символа пароля (например, символ
пробел. Его код 32. 2 ложных символа.) Ага. В 9 раз и увеличим, нуачо?
Не молчите. Дайте нубу ссылку на статьи, буду очень благодарен. Также и о mod, упоминавшемся в предыдущем вашем посте.
и так для каждого текста.
При том расстояние между первм 46 и вторм 46, и между 15 и 15 будет равнм.
Если длина сообщения будет равня нескольким периодам –
виделить текст исходя из повторений – не составит никакого труда.
комментариев: 90 документов: 0 редакций: 0
Для первого примера, не случайные данные:
7 4 5
4 7 6
7 4 5
4 7 6
При том что я даже не смотрел что там за пароль.
о mod: "mod число" в гугле.
О PТА – рановато тебе.