Встречал в некоторых программах такую опцию при шифровании, например как: пароль шифруется несколько раз до получения окончательного ключа шифрования. Это затрудняет использование оценочных атак и атак по словарю. И пользователем указывается количество циклов шифрования. Как это работает? Я так и не смог додуматься. Я чисто из своего любопытства пытаюсь это понять, фундаментальные книги читать пока нет времени.
Для преобразования пароля в ключ применяются хеш функции. В простейшем случае на входе пароль на выходе - хеш значение, которые используется в качестве ключа. Можно к этому значению еще раз прменит хеш функцию и т.д. При этом при расшифровке (подборе) к каждому паролю необходимо столько же раз применить хеш функцию, чтобы получить ключ, что резко замедляет скорость перебора. На практике, в хеш функциях есть количество итераций, которое и увеличивается до нужного значения.
вообще кроме этого в некоторых алгоритмах, чем больше итераций произошло, тем больше зашифрованное сообщение похоже на последовательность равновероятных бит...
Одна из причин, почему осуществляют преобразование пароля в ключ состоит в следующем : Большая часть алгоритмов шифрования требуют ключи фиксированного размера ( 64, 128, 256, 513, ... бит ). Пароль же, как правило представляет собой обычную строку вроде k93eKJ-d=a. Если преобразование не производить, то перебор заметно сокращается, т.к. значительная часть ключа будет содержать нули. Поэтому применяется хэш-функция к паролю, для получения ключа. Применяют несколько раз, по причине, уже сказанной выше. Это увеличивает стойкость ключа и увеличивает время перебора.
Forever Поправлю, увеличивает не стойкость ключа (размер ключа постоянный), а стойкость коротких(слабых) паролей к перебору.
stellaco Найди книгу Шнайера "Практическая криптография" и почитай на досуге. Все, что ты написал - полный бред...
K10 Как я и думал ).с памятью у меня..всё в порядке... Книга, Венбо Мао "современная криптография".......... почитай...
зачем так сложно? у тебя пароль x = "dog"; есть функция шифрования y = f(x) = sin(x[0])*100 % 10 + sin(x[1]) *100 % 100 + sin[x[2]] * 100 % 10; вот несколько циклов и есть y' = f(f(f(x))) в базе хранишь это y' если юзер введет свое значение x' сравшнишь f(f(f(x'))) со своим хэшем. причем админ пароля не знает. все честно. это даже не шифрование а хэширование. одностороннее, необратимое... хотя это еще вопрос. === все. ты прочитал все свои книги)))
ltshck Немного дополню, опять по своей памяти. y = f(x) и y' = f(f(f(x))) приводятся потому, что..чтоб стойкость шифра увеличить в 2 раза, надо функцию шифрования использовать не 2 а три раза =) Угу.. теоритически можно найти коллизию. тоесть, если у вас пароль "Мой пароль" в хешированном виде = "gfmj616919fnm19sf1h" то есть вероятность, то что, какоето слово... наподобии "Зелибоба" в хешированном виде будет тоже равно "gfmj616919fnm19sf1h" или слово "df54gh5sdfh6" в хеше равно "gfmj616919fnm19sf1h" Тоесть, в таком случаи, любые из этих трёх паролей будут верными. (так как хеши,всегда сверяются после шифрования, с эталонным паролем (записанным куда либо..например в БД)) Админ легко может узнать пароль, если перехватчик поставит, и получит пароль до начала шифрования).. а вообще если доступна большая база с хешированными паролями. То можно легко применить простой перебор. И будет расшифрованно куча паролей. (парадокс дней рождений)
Парадо́кс дней рожде́ния — утверждение, что если дана группа из 23 или более человек, то вероятность того, что хотя бы у двух из них дни рождения (число и месяц) совпадут, превышает 50 %. Для группы из 60 или более человек вероятность совпадения дней рождения хотя бы у двух её членов составляет более 99 %, хотя 100 % она достигает, только когда в группе не менее 366 человек (с учётом високосных лет — 367). Такое утверждение может показаться противоречащим здравому смыслу, так как вероятность одному родиться в определённый день года довольно мала, а вероятность того, что двое родились в конкретный день — ещё меньше, но является верным в соответствии с теорией вероятностей. Таким образом, оно не является парадоксом в строгом научном смысле — логического противоречия в нём нет, а парадокс заключается лишь в различиях между интуитивным восприятием ситуации человеком и результатами математического расчёта.
stellaco Тема об увеличении количества итераций при разворачивании пароля. Если у тебя пароли будут проверяться со скоростью несколько паролей в секунду, то посчитай, насколько
RAR-архив простым перебором со скорость примерно 30 паролей в секунду я взламывал примерно за полторы недели... за это время дошло до 6тизначного пароля... хеш-функцию нормальную тоже подобрать сложно... перебор - самая бредовая атака на пароль, надо дыры в математике алгоритма искать, чтобы его грамотно сломать)))) а про парадокс дней рождений правильно сказал, что разница в восприятии... в реальной жизни нет ничего идеального, редко встретишь монету с распределением близким 50 на 50)))... а про игральные кости я ваще молчу))))
Господи...тут кажется никто не понял что я имел ввиду. И про парадокс дней рождений.я говорил не про восприятие).. хотя нет..можно сейчас именно на это и обратить Ваше внимание.. То как говорит K10..вот пример именно такого..восприятия)))...где кажется что-то ООЧЕНЬ трудным..а на самом деле...это проще в тысячи и больше раз ....... математика знаете ли...
K10 Так как не расписываю, что именно имею ввиду... произнесу наводящую информацию. Алгоритм шифрования известен.... что мешает записать чему равны пароли в хешированном виде от 1 - 9999999999999 .. а затем, ..просто сравнить эти хеши с другими хешами из базы данных........ .. шифровать каждый раз пароль?...вы что? больны? )))
группа из 23 человек? 50%? а разве надо не 356/2 = 178+1 человек чтобы было 50? если у каждого из них д.р. по номеру дня то для заполнения половины надо 178 и еще 1 который либо за пол года перевалит либо нет. и будет решаться не совпадение дней рождений. а в каком полугодии родился последний... итого 179 а не 23? я не прав?
stellaco Я ведь не зря советовал тебе почитать основы криптографии... То, что ты описал есть rainbow таблицы. Похеривается такой способ элементарно использованием salt значений.
в этом и заключается парадокс... блин... это тоже самое, что и атака грубой силой... тупо взять и подобрать все значения хеш-функции... не один алгоритм не выдержит атаку грубой силой (ну кроме того, о чем Ден Браун писал, однако это - фантастика), вопрос лишь в том, хватит ли ресурсов, чтобы перебрать все хеш-значения в удобоваримое время... поэтому я тебе про брутфорс раровского архива и писал... это кстати один из способов противодействия подобным атакам... однако, если все алгоритмы преобразования известны, он не спасает...
Rel Тоже почитай про радужные таблицы и salt. При некоторой длине salt, выгоднее окажется полный перебор ключа шифрования, к этому и требуется все свести, т.к. многократное хеширование пароля в процессе разворачивания направлено на повышение стойкости слабых(легкоподбираемых) паролей.