Это 100% имеет смысл: на самом деле, концепция была предложена несколькими людьми, но сложность заключается в правильной реализации. Если вы сделаете это неправильно, существует ряд ловушек, наиболее прямой из которых - уязвимость для «передачи хэша», как описывает @ swa66. Чтобы предотвратить это, вам нужно хешировать с обеих сторон. Хеш на стороне клиента должен быть медленным (bcrypt, scrypt, argon2 или pbkdf2), тогда как хеш на стороне сервера должен быть быстрым (sha256).
РЕДАКТИРОВАТЬ : Несколько человек проголосовали против, не понимая, как это работает, поэтому сейчас я включу основные детали здесь (ранее я только ссылался на то, как это работает). Идея состоит в том, чтобы применить медленный хеш, такой как bcrypt на стороне клиента, а затем быстрый хеш, такой как SHA256 на стороне сервера. Быстрое хеширование необходимо для предотвращения атак с использованием хэша. В случае утечки базы данных злоумышленник либо хеширует инвертирование быстрого хеша (невозможно - нарушает одностороннее свойство криптографической хеш-функции), либо грубо форсирует прообраз быстрого хеша (невозможно - размер равен длина вывода из медленного хеша (например, 184 бита для bcrypt), или грубая сила, комбинация медленного хеша и быстрого хеша - что возвращает злоумышленнику обратно в ту же позицию, как если бы выполнялись все вычисления серверная сторона. Поэтому мы не снизили безопасность парольных атак в случае утечки базы данных, перенеся тяжелые вычисления на клиентскую сторону.
Я рассмотрел ряд подобных предложений в Способ защиты паролей в базах данных для веб-приложений . Кроме того, я анализирую плюсы и минусы и выявляю слабые стороны, которые не были выявлены ранее (перечисление учетных записей), и предлагаю уникальный способ сделать это безопасно. Исследование построено на нескольких источниках, в том числе:
Вы привели пример с Twitter, и GitHub сделал то же самое. Когда я писал статью выше, наиболее ярким примером того, как сервер не видел пароли в виде открытого текста, было Heartbleed, о котором я комментирую в статье (нижняя часть Раздела 1.3).
Последующее последующее исследование, проведенное другими, выявляло сходные идеи - Пример: хеширование пароля клиент-плюс-сервер как потенциальный способ повысить безопасность от атак методом перебора без перегрузки сервера . Никто не заслуживает всяческих похвал, но главное - да, это хорошая идея, если вы делаете это безопасно, но вам действительно нужно понимать риски (это легко сделать небезопасно, если вы не читали исследование). * * 1033