К сожалению, вы не поняли обсуждаемого вопроса.
Точно так же я могу задать встречный вопрос — «Есть хэши, но соль неизвестна. Предлагаю размяться».
Или — «есть база, пароли лежат в открытом виде». Узнайте пароли.
При анализе уязвимости надо всегда предполагать худший сценарий. Тот факт, что я не откадаю пароль в вашей задачке, никак не поможет человеку, у которого скомпрометированным окажется «секретный» параметр.
А игры «отгадай число, которое я задмуал» стоит оставить для детского сада.
Ну, строго говоря, при использовании современных функций хэширования, отдельное поле действительно не нужно — соль генерируется вместе с хэшем, и функция возвращает (и принимает) их единой строкой.
Можно разрешать простые пароли.
Только надо понимать, что никакие алгоритмы с «локальными параметрами» такой пароль не защитят.
И в очередной раз закипая яростью благородной по поводу ламеров, не умеющих солить — о таком важном в звене защиты упоминать надо обязательно. Оговаривая, что при простом пароле все вышеперечисленные методы окажутся неэффективными.
Криптография не строится на допущениях. Рассуждения вида «что требуется взломать, чтобы добраться туда-то» относятся к безопасности приложения в целом. Но если говорить о безопасности конкретно хэшей, то только стойкий пароль (в сочетании с остальными правилами) может действительно её гарантировать.
Рассуждения типа «а вот мы придумаем тайное слово и никому его не скажем» — это детская игра в секретики.
Он добавляется к паролю при хэшировании — то есть, используется, как соль :)
Где она хранится — вопрос десятый. Хранение вместе с хэшем — это просто частный случай.
Предполагать, что «секретная соль» неизвестна атакающему — это ровно то же самое, что предполагать, будто у атакующего нет доступа к хэшам.
Простите, но у вас каша в голове :)
Начиная с того, что для алгоритма хэшированя скорость не достоинство, а недостаток — скорость однократного создания хэша при авторизации не критична, а вот при переборе чем медленнее алгоритм, тем сложнее брутфорс.
И, разумеется, никто не шифрует пароли совсем не потому что это «медленнее».
Автор уповает. Я там ниже вам написал, что вы изобрели себе какой-то «локальный параметр» и по какой-то неведомой причине полагаете, что он чем-то принципиально отличается от соли. Это даже забавно. Такой метод ведения дискуссии — изобрести ничего не значащее слово и ссылаться на него :)
Я не вижу разницы между подходами «мы никому не скажем секрет, который по определению хранится в открытом виде», которые используются и в том и в другом случае.
Вы думаете, что security through obscurity — это защита лажовым алгоритмом, про который никто не знает, Это не так. Про качество защиты там нет ничего. Речь не про конкретный алгоритм, а про предположение о том, что некий ключевой элемент системы неизвестен атакующему. Это предположение ложное.
Если уповать на секретность секретной соли, то можно и не хэшировать, а шифровать с тем же ключом. А что — «ведь она секретная, никто её не узнает! а алгоритм у нас стойкий!». Но так никто не делает. Потому что «секретная» соль на самом не секретная. И предполагается известной взломщику.
Гениальность принципа одностороннего хэширования как раз в том и состоит, что она, при соблюдении всех правил, безопасна даже если у атакующего есть все данные — хэш, соль, алгоритм. Увы, хабрасообщество очередной раз упало в моих глазах, взявшись рьяно обсуждать тему, в которой понимает понаслышке.
Во-первых, этот комментарий иррелевантен моему.
Я писал про стойкость хэша в зависимости от пароля. А комментарий — про «секретную соль».
Во-вторых, про надежды на секретность секретной соли я уже писал. Не буду повторяться. Уповая на неё, вы расписываетесь в непонимании принципа защиты хэшированием. Который предполагает, что соль известна атакающему. Что при правильном применении никак не сказывается на стойкости.
Здесь абсолютно то же самое.
«Мы хэшируем пароль с солью 23145. Да, если соль будет известна злоумышленнику, это облегчит брутфорс. Кроме того, мы никому не скажем свой алгоритм хеширования.»
Судя по всему, людей, понимающих смысл защиты хэшированием, в комментах очень мало.
Нет, не нахожу. Пароль — это часть «руля». Стойкость хэша, о которой нам пишет автор, зависит от трёх элементов, а не от двух. Поэтому надо говорить про все три.
Но для тех, кому рассказ про соль явился небесным откровением, возможно, стойкость пароля действително кажется неважным параметром.
Дело не в том, что где запрещено.
А в том, что пароль — ключевое звено. Не менее важное, чем алгоритм или соль. Это критический элемент, который сводит последние два на нет.
Стойкость хэша зависит от трёх элементов, а не двух.
Но по какой-то причине про соль и алгоритм кричат на каждом углу, а про пароль начинают рассказывать сказки о вечном противостоянии. Нелогичненько получается.
Всегда приятно получить развёрнутый комментарий — сразу становится ясно, что именно не понимает собеседник.
К сожалению, стойкость пароля — это важно.
Соль, по определению атакующему известна. алгоритм — тоже.
Он берет словарь, и в цикле производит ту же самую «операцию конкатенации», подставляя пароли из словаря. И получает все слабые пароли за считанные секунды.
Перебор по словарю — это первое, что делает атакующий. ДО брутфорса.
Об этом и речь. Сложность проля — никакая не организационная, а самая что ни на есть техническая мера.
Которая, если не соблюдается, то делает все эти пляски с бубном, солью и хэшем бесполезными.
Если пароль выбирается из словаря в тыщу слов, то ни соль, прицепленная с правильного конца, ни супер-пупер алгоритм хэширования не помогут.
Но про определения я понял.
Это заметка про защиту сферического пароля в вакууме при комнатной температуре и 80%-й влажности. Очень, очень познавательно, спасибо.
Точно так же я могу задать встречный вопрос — «Есть хэши, но соль неизвестна. Предлагаю размяться».
Или — «есть база, пароли лежат в открытом виде». Узнайте пароли.
При анализе уязвимости надо всегда предполагать худший сценарий. Тот факт, что я не откадаю пароль в вашей задачке, никак не поможет человеку, у которого скомпрометированным окажется «секретный» параметр.
А игры «отгадай число, которое я задмуал» стоит оставить для детского сада.
— В контексте моей модели задача решена не для скачек вообще, а для случая сферического коня в вакууме.
=)
Другая история про перебор по словарю — это очень, очень смешно.
Как алгоритмы, так и «соль» — открытый ключ — заведомо известны и даже по возможности широко распространяются.
Только надо понимать, что никакие алгоритмы с «локальными параметрами» такой пароль не защитят.
И в очередной раз закипая яростью благородной по поводу ламеров, не умеющих солить — о таком важном в звене защиты упоминать надо обязательно. Оговаривая, что при простом пароле все вышеперечисленные методы окажутся неэффективными.
Рассуждения типа «а вот мы придумаем тайное слово и никому его не скажем» — это детская игра в секретики.
Где она хранится — вопрос десятый. Хранение вместе с хэшем — это просто частный случай.
Предполагать, что «секретная соль» неизвестна атакающему — это ровно то же самое, что предполагать, будто у атакующего нет доступа к хэшам.
И это. Нет никакой «глобальной», «локальной» или «специальной» соли. Есть просто соль. Она заведомо известна атакующему. Это азы.
Начиная с того, что для алгоритма хэшированя скорость не достоинство, а недостаток — скорость однократного создания хэша при авторизации не критична, а вот при переборе чем медленнее алгоритм, тем сложнее брутфорс.
И, разумеется, никто не шифрует пароли совсем не потому что это «медленнее».
Автор уповает. Я там ниже вам написал, что вы изобрели себе какой-то «локальный параметр» и по какой-то неведомой причине полагаете, что он чем-то принципиально отличается от соли. Это даже забавно. Такой метод ведения дискуссии — изобрести ничего не значащее слово и ссылаться на него :)
С точки зрения алгоритма хэширования никаких «локальных параметров» не существует. Это та же соль.
Автор статьи уповает на то, что «секретная» соль так и останется неизвеcтной взломщику. Это security through obscurity.
Вы думаете, что security through obscurity — это защита лажовым алгоритмом, про который никто не знает, Это не так. Про качество защиты там нет ничего. Речь не про конкретный алгоритм, а про предположение о том, что некий ключевой элемент системы неизвестен атакующему. Это предположение ложное.
Если уповать на секретность секретной соли, то можно и не хэшировать, а шифровать с тем же ключом. А что — «ведь она секретная, никто её не узнает! а алгоритм у нас стойкий!». Но так никто не делает. Потому что «секретная» соль на самом не секретная. И предполагается известной взломщику.
Гениальность принципа одностороннего хэширования как раз в том и состоит, что она, при соблюдении всех правил, безопасна даже если у атакующего есть все данные — хэш, соль, алгоритм. Увы, хабрасообщество очередной раз упало в моих глазах, взявшись рьяно обсуждать тему, в которой понимает понаслышке.
Я писал про стойкость хэша в зависимости от пароля. А комментарий — про «секретную соль».
Во-вторых, про надежды на секретность секретной соли я уже писал. Не буду повторяться. Уповая на неё, вы расписываетесь в непонимании принципа защиты хэшированием. Который предполагает, что соль известна атакающему. Что при правильном применении никак не сказывается на стойкости.
«Мы хэшируем пароль с солью 23145. Да, если соль будет известна злоумышленнику, это облегчит брутфорс. Кроме того, мы никому не скажем свой алгоритм хеширования.»
Судя по всему, людей, понимающих смысл защиты хэшированием, в комментах очень мало.
Но для тех, кому рассказ про соль явился небесным откровением, возможно, стойкость пароля действително кажется неважным параметром.
А в том, что пароль — ключевое звено. Не менее важное, чем алгоритм или соль. Это критический элемент, который сводит последние два на нет.
Стойкость хэша зависит от трёх элементов, а не двух.
Но по какой-то причине про соль и алгоритм кричат на каждом углу, а про пароль начинают рассказывать сказки о вечном противостоянии. Нелогичненько получается.
К сожалению, стойкость пароля — это важно.
Соль, по определению атакующему известна. алгоритм — тоже.
Он берет словарь, и в цикле производит ту же самую «операцию конкатенации», подставляя пароли из словаря. И получает все слабые пароли за считанные секунды.
Перебор по словарю — это первое, что делает атакующий. ДО брутфорса.
Теперь понятно?
Которая, если не соблюдается, то делает все эти пляски с бубном, солью и хэшем бесполезными.
Если пароль выбирается из словаря в тыщу слов, то ни соль, прицепленная с правильного конца, ни супер-пупер алгоритм хэширования не помогут.
Но про определения я понял.
Это заметка про защиту сферического пароля в вакууме при комнатной температуре и 80%-й влажности. Очень, очень познавательно, спасибо.