![]() |
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]() ![]() ![]() |
|
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Пример шифрования данных на Дельфи
![]() ![]() ![]() ![]()
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Мне кажется, у этого алгоритма есть два недостатка:
1) Код, сильно зависимый от компилятора. Далеко не всегда регистр EAX будет указывать на ячейку с адресом Source, а регистр EDX - на пароль(Key). Но это мелочь. 2) Единственный байт гаммы(или ксорирующей последовательности), который меняется при шифровании - это длина пароля. Остальные символы пароля НИКАК НЕ ПЕРЕМЕШИВАЮТСЯ в ходе шифрования. Алгоритм шифрования примерно такой: Len:=Lengh(Key); Index:=Lengh(Key)-1; i:=1; repeat Len:=func1(Len); Source[i]:=(Key[Index] xor Len) xor Source[i]; dec(Index); if Index:=0 then Index:=Lengh(Key)-1; until i<Lenght(Source); Нетрудно видеть, что основной для тупого подбора является длина пароля. Пусть она равна 10. Очевидно, что 1-ый,11,21.. символы будут зашифрованы ОДИНАКОВЫМ значением Key[Index], но разными значениями Len. Казалось бы, Len для 1,11,21... будет разным, но это ерунда - ведь Len вычисляется однозначно на ЛЮБОМ шаге через реккурентный закон func1 ! И это - фатальный недостаток. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Спасибо, Chingachguk, именно это я хотел бы и услышать. Естественно это код не мой - я в асемблере совсем не очень, но я его нашел где-то, уже не помню где, и использую совместно с контрольной суммой - т.е. примерно это выглядит как:
1. Вычисляется контрольная сумма 2. Контрольная сумма дописывается к данным 3. Все это шифруется этим алгоритмом {по условиям задачи мне нужны в зашифрованном виде только латинские буквы и цифры, никаких спец-символов отсюда следующий шаг} 4. Массив я разбиваю по 5 бит, каждая комбинация из 5ти битв имеет значение "Большие латинские буквы+Малые латинские буквы+цифры+пара знаков" Расшифровка проводится в обратном порядке + я сравниваю значение повторно вычисленной контрольной суммы с прочитанным... Ты не мог бы подумать как исправить/дополнить алгоритм для улучшения степени защиты? Мне это в общем не обязательно - здесь у меня защита от чайника, чтоб просто предупредить изменение в ручную некоторых параметров, собственно для внутреннего пользования, так что о настоящей защите от взлома речь не идет, но может кому надобна и более суровая защита. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Вообще-то лучше использовать известные алгоритмы шифрования. Это не только мое мнение, самое главное - таких людей, как Крис Касперски
![]() Я не особо разбираюсь в этой области. Лично могу порекомендовать RC4 - он прост, легко реализуется(не более экрана на Паскале), быстр. Разумеется, есть более современные и улучшенные алгоритмы - ну там DES или что-то в этом духе. А как улучшить данный алгоритм - так надо ПЕРЕМЕШИВАТЬ ВСЕ символы пароля в ходе шифрования. Необходимо, чтобы КАЖДЫЙ символ пароля по возможности участвовал в зашифровке каждого символа шифруемой последовательности. Тогда число вариантов для перебора резко увеличится. -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Over G |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 57 Регистрация: 30.3.2002 Репутация: нет Всего: нет |
А вы не скажите, как потом шифрованный текст или ещё что РАШИФРОВАТЬ?
|
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Каким именно алгоритмом зашифрованный ? Стандартные ведут себя так:
Зашифрованный текст = RC4(текст, пароль); Расшифрованный текст = текст = RC4(Зашифрованный текст, пароль); Одна и та же функция ! ![]() -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
А где его взять этот RC4? Может можешь на форум бросить процедурку?
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Вот ниже отрывок из моей статьи по защите файлов в Excel. Статья была не совсем на тему RC4 и я не спец, так что извините, если что не так:
-------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Кто нибудь может ответить на такой вопрос. На сколько хорош следуюший алгоритм шифровки:
1) пользуясь определенным методом мешаем таблицу текстових символов (их всего 224) 2) исходный текст воспримем как число в 225-ричной системе счисления и используя перемешанную таблицу (скажем на первом месте - символ $, значит это нуль и.т.д.) переведем это число в 224-х ричную систему счисления. За 225 возьмем какои-нить символ, который в тексте встретиться не может (например код ESCAPE) Как этот шифр можно взломать? Спасибо. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Очень плох. (На мой взгляд ! ![]() Насколько я понял, речь идет о табличной замене. Пусть Alpha[1..224] - таблица перемешанных симолов, Text[1..N] - шифруемая последовательность. Если я правильно понимаю, алгоритм шифровки i-ого символа сведется к: CurrChar:=Text[i]; for j:=1 to 224 do begin if CurrChar=Alpha[j] then break; end; Text[i]:=Alpha[j]; Ну или что-то в этом роде. Я правильно понял ? 1) Если я знаю таблицу замены, те Alpha, то ЛЮБОЙ зашифрованный этим алгоритмом текст прозрачен; 2) Если я не знаю таблицу, но знаю способ шифрования. Тогда взломщик может поступить так. Предположим, это - английский текст. Тогда в нем почти наверняка встретятся такие сочетания, как "the", "is"... Как преобразуется "the" ? Очень просто: t -> Alpha[k1]; h -> Alpha[k2]; e -> Alpha[k3]; Т.е. полагаем неизвестными эти три Alpha[k1..3]; Далее ПЕРЕБОРОМ этих трех неизвестных (всего не более 254 x 254 x 254 вариантов) делаем обратную расшифровку текста. Например, предполагая на очередном шаге: Alpha[k1..3] = "a","b","c"; Делаем замену в шифруемом тексте: "a" -> "t", "b" -> "h", "c" -> "e", И анализируем такой текст. Если мы видим в нем эти самые "the", то мы ПОДОБРАЛИ три символа из таблицы замены(с некоторой вероятностью, конечно, но есть и другие сочетания)... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Нет, ты не правильно меня понял. Ты не должен заменять какие-то буквы на другие в тексте. Надо перемешать как бы сами цыфры. Например, примем, что в десятичной системе не будет (по возростанию) цифр в таком порядке: 0123456789, а допустим: 0594837261. Теперь тебе надо зашифровать текст: "938", ты берешь всю эту строку и думаешь, что она в 11-ричной (в этом примере) системе счисления. и переводишь ее в 10-ричную (10 пускай будет - "#", он не встречается в исходном тексте):
твои новые цыфры: 0 - 0 1 - 5 2 - 9 3 - 4 4 - 8 5 - 3 6 - 7 7 - 2 8 - 6 9 - 1 теперь, у тебя есть текст: "938", ты знаешь, что, например 9 - это 1, 3-4 и 8-6. значит эта строка равна 146 (в 11-ричной системе) и ты ее переводишь в 10-ричную: (146=1*11^2+4*11^1+6*11^0=171) Ну конечно с десятиричной системой плохой пример ![]() Это все конечно применимо только к текстовым данным. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
Все равно не понял до конца !
![]() И чем это отличается от табличной замены ? ![]() Ты это имел в виду: Пусть есть 224 символа: a,b,c... = Alpha0[1..224]; Сначала перемешиваем Alpha0 -> Alpha[1..224]; Выполняем табличную замену символов шифруемого текста по Alpha; А дальше ?!... -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
neutrino |
|
|||
Unregistered |
Нет. Короче я тебе в приват напишу поподробнее. То что этот метод работает (шифрует и расшифровывает) это точно. Мне было бы очень интересно знать как его можно взломать. Если тебя не затруднит конечно. Пиво не поставлю, но спасибо скажу
![]() |
|||
|
||||
Chingachguk |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1232 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 18 |
О'кей !
Можно даже так сделать: Ты высылаешь мне: - зашифрованный текст; - алгоритм шифрования; Я не знаю: - исходного текста; - ключа шифрования(таблицу замен или что там еще); И я пытаюсь открыть его. Если я это сделаю, то алгоритм не очень ... Неплохо было бы, если в исходном тексте будут русские буквы, то хотелось бы, чтоб они были в виндовой кодировке>... ЗЫ А почему вдруг речь зашла о пиве ? ![]() -------------------- I don't like the drugs (but the drugs like me). M.Manson. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Поверь мне, я не капельки не сомневаюсь в твоем проффесионализме, ибо я помню как ты "сделал" программу етого, помнишь, "Кто взломает мой шифр, тому пиво!" (кстати про пиво я отсюда взял). И совсем не претендую на то чтобы этим алгоритмом пользовались в КГБ, ФБР, Мосаде или еше где нибудь. Я просто хотел узнать твоего мнения. Я могу послать тебе зашифрованний текст (но не большой, мне самому будет очень трудно его вручную зашифровать), но что ты имеешь ввиду под словом алгоритм? Программу? У меня ее нет. Все на чистом листе бумаги. Я тебе могу послать описание алгоритма (идею). Так ты согласен? Если да кинь мне сообшение в приват форума. Я тебе очень благодарен за отзыв. До этого никто не брался разбирать мой алгоритм.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Общие вопросы" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |