найдите ошибку в коде
В целом, имхо, понятно что делается.
Сгенерили хэши, порезали каждый, слили первые 10 в утиль. выбрали первый, который подошел под формат.
если просто рандом нужен, то зачем master читать?
странным кажется то, что кто-то написал что-то для сайта на шелле
#!/bin/bash
read -srp 'Password: ' master
domain=$(echo $1 | tr A-Z a-z)
length=${2:-10}
hash=$master:$domain
echo $hash | md5sum | base64 | head -c $length
echo
Ну видишь ли, у человека подсознательно есть ощущение, что чем через большее число запутанных преобразований он прогонит данные, тем более стойким будет его метод. Это ощущение, конечно, ничем не обоснованно, но... ну ты и сам видишь.
и зачем base64 после md5sum (вывод которого и так весь из печатных символов)?
Увеличить алфавит символов с 16 до 64. Впрочем с точки зрения подбора пароля по символам это будет только видимость улучшения надежности (если знаешь первые K симовлов, то K+1 уже может быть не любым). Собственно поэтому в оригинальной генерилки используется бинарный вывод.
там ещё убираются спецсимволыmd5 сумма в шестнадцатричной записи не может дать спецсимволов при переводе в base64.
Я правда никогда не видел чтобы плюсик, слэш или равно запрещали в паролях.
Впрочем с точки зрения подбора пароля по символам это будет только видимость улучшения надежности (если знаешь первые K симовлов, то K+1 уже может быть не любым).Ну не совсем так. Оно улучшает надёжность, если взломщик не знает что в качестве пароля используется base64, тоесть в 99% случаев.
Я правда никогда не видел чтобы плюсик, слэш или равно запрещали в паролях.представь что его передают как часть URL.
Ну не совсем так. Оно улучшает надёжность, если взломщик не знает что в качестве пароля используется base64, тоесть в 99% случаев.security from obscurity. Фуууууууу.
Но с другой стороны все это не важно. Тут мы защищаемся от случая когда по раздолбайству админов ресурса твоя и не только пара логин-пароль утекли к злоумышленнику. Теперь злоумышленник выполняет простейшие атаки на эту базу с целью нарыбачить себе немножко паролей незадачливых пользователей. Под простейшие атаки я понимаю следующее:
1) Если пароли хранятся в хэшированном виде - то словарная атака с целью восстановления текстового значения пароля.
2) После идем с логином и текстовым паролем на другие ресурсы и пытаемся угнать там аккаунты.
Любая разумная хэш-функция от пары пароль-домен защищает от этой атаки. Так что можно даже base64 не делать. Но с ней результирующий пароль выглядит солиднее.
PS: анализировать более сложные атаки мне компетенции в вопросе не хватает; да и кому я нафиг сдался, чтобы против меня что-то серьезное затевать.
язык дурацкий, убивает читабельностькак это будет на powershell или что там сейчас в моде?
представь что его передают как часть URLПиздить.
В криптографии как-то не принято полагаться на то, что злоумышленник не знает алгоритм.спасибо, капитан. Айвенго вон уже предсказуемо срегировал (перепутав from и through правда)
Только в данной ситуации безопасность через неизвестность не выступает основным фактором безопасности, а просто усложняет жизнь взломщику, который будет работать брутфорсом и не знает алгоритм и упрощает жизнь взломщику, который работает брутфорсом и знает алгоритм. Учитывая вероятность попасть на второго я за base64.
ты исходишь из предположения, что тулза никогда не станет популярной. Зачем такие пораженческие мысли?
Это потому что я не эльф, потому что это херня под баш а значит для полутора калек ну и потому что я уже объяснял почему генерация паролей на основании домена - говно. Хотя последнее скорее наоборот в пользу "стать популярным".
1) Если пароли хранятся в хэшированном виде - то словарная атака с целью восстановления текстового значения пароля.только надо иметь в виду, что в данном контексте md5 не является разумной
Любая разумная хэш-функция от пары пароль-домен защищает от этой атаки.
На самом деле ошибка в строчке hash=$master:$domain. Нельзя просто взять конкатенировать мастер пароль с доменом. Пароль становится частью каждого сообщения, что снижает общую стойкость их хешей. Более того, хеш функция, которая потом применяется на эту строчку, имеет состояние, и после кодирования парольной части, это состояние будет общим для всех остальных сообщений. Станет гораздо проще построить коллизии.
Надо было не изобретать собственные криптографические примитивы, а использовать готовые. Эта задача хорошо известна и описана в вики. Там же приведено решение, ссылка на RFC 2104 и объяснение, почему простая конкатенация не канает.
Автор этого криптографического софта не знал основ, изобретал велосипед, и изобрёл хреновый. Я тоже не знал, и полагал, что всё работает. Это несколько смущает, когда думаешь о преимуществе открытого софта, позволяющего вычитывать исходники. Правда тот факт, что кто-то другой нашёл, всё же обнадёживает.
В любом случае, опасайтесь криптографии! Избежать всё равно не выйдет, но можно попробовать придумывать как можно меньше отсебятины.
Зачем вообще искать криптографические ошибки в уебищной по свой природе системе генерации паролей на основании доменов?
а что такого уебищного в этой системе?
Шифруй дважды. Один раз - номером версии, второй раз - паролем.
я понимаю что у тебя как у нормального эльфа в голове база данных всех посещёных ресурсов с номером версии пароля на этом ресурсе, списком ограничений этого ресурса на пароль. А как ты хранишь список логинов для этого ресурса? Или у всех ботов на форуме один пароль?
вот список логинов - это проблема. Можно тоже генерировать. Был такой сервис, который поставлял пустые логины для разных сайтов, как способ бороться против сайтов, прочитать информацию с которых можно только зарегистрированным пользователям. Вот у тебя будет локальная версия. Зашёл на сайт, нужен логин-пароль - пробуешь подставить генерированные. Если не подошли - пробуешь создать. Для форума и прочих критичных паролей не очень. Но в вебе есть очень много некритичных паролей.
Таким образом мы приходим к тому что нам надо хранить где-то информацию о логинах и о том что пароль был скомпрометирован (или например ежегодно сменен по правилам безопасности как например в альфабанке) и номер версии. Если у нас есть хранилище, тогда почему бы не выкинуть всю эту хрень с генерацией паролей и просто не пользоваться нормально сгенерёными на основании /дев/рандом паролями. Мы получаем в стопицот раз большую гибкость. Например можно хранить пароли которые тебе дали на попользоваться, можно хранить пинкоды к банковским картам, можно хранить ключи от btsync и т.п.
На самом деле ошибка в строчке hash=$master:$domain. Нельзя просто взять конкатенировать мастер пароль с доменом. Пароль становится частью каждого сообщения, что снижает общую стойкость их хешей. Более того, хеш функция, которая потом применяется на эту строчку, имеет состояние, и после кодирования парольной части, это состояние будет общим для всех остальных сообщений. Станет гораздо проще построить коллизии.поясни, чем злоумышленнику помогут коллизии
Был такой сервис, который поставлял пустые логины для разных сайтов, как способ бороться против сайтов, прочитать информацию с которых можно только зарегистрированным пользователямbugmenot.com , но в 90% случаев логины оттуда уже забанены.
В любом случае, опасайтесь криптографии! Избежать всё равно не выйдет, но можно попробовать придумывать как можно меньше отсебятины.Сколько раз было сказано, что в большинстве случаев, когда в криптографии изобретается велосипед - этим велосипедом потом прилетит больно в лоб пользователю. Странно, что ты с этим только сейчас столкнулся.
Вот мне понравилось ещё, например.
Update. А сейчас таковые в МГУ читаются где-нибудь?
Оставить комментарий
yroslavasako
Тут рекламировали однутулзу для генерации паролей для сайтов
Вам ничего странным не кажется?