Как мне этично подойти к хранению паролей пользователей для последующего извлечения открытого текста?

По мере того, как я продолжаю создавать все больше и больше веб-сайтов и веб-приложений, меня часто просят хранить пароли пользователей таким образом, чтобы их можно было получить, если / когда у пользователя возникнет проблема (либо отправить по электронной почте ссылку на забытый пароль, либо пройти их через телефон и т. д.) Когда я могу яростно бороться с этой практикой, я делаю много «дополнительного» программирования, чтобы сделать возможными сброс пароля и административную помощь без сохранения их фактического пароля.

Когда я не могу с ним бороться (или не могу победить), я всегда кодирую пароль так, чтобы он, по крайней мере, не сохранялся в виде открытого текста в базе данных, хотя я знаю, что если моя БД будет взломана злоумышленнику не потребуется много времени, чтобы взломать пароли, так что мне это неудобно.

В идеальном мире люди будут часто обновлять пароли и не дублировать их на разных сайтах - к сожалению, я знаю МНОГИХ людей, у которых одинаковый рабочий / домашний / электронный / банковский пароль, и они даже бесплатно давали его мне, когда им нужна была помощь. Я не хочу быть ответственным за их финансовую кончину, если по какой-то причине мои процедуры безопасности БД не сработают.

Морально и этически я чувствую себя ответственным за защиту того, что может быть для некоторых пользователей их средствами к существованию, даже если они относятся к этому с гораздо меньшим уважением. Я уверен, что есть много подходов и аргументов в пользу использования хэшей и различных вариантов кодирования, но есть ли какой-то один «лучший способ», когда вам нужно их хранить? Почти во всех случаях я использую PHP и MySQL, если это имеет какое-либо значение в том, как я должен обращаться с особенностями.

Дополнительная информация для Bounty

Я хочу пояснить, что я знаю, что это не то, что вы хотите делать, и что в большинстве случаев лучше всего отказаться от этого. Я, однако, не ищу лекции о достоинствах такого подхода. Я ищу наилучшие шаги, которые нужно предпринять, если вы действительно воспользуетесь этим подходом.

В примечании ниже я отметил, что веб-сайты, ориентированные в основном на пожилых людей, умственно отсталых или очень молодых, могут сбивать с толку людей, когда их просят выполнить процедуру безопасного восстановления пароля. Хотя в таких случаях мы можем счесть это простым и обыденным, некоторым пользователям потребуется дополнительная помощь в виде предоставления технической поддержки в систему или отправки по электронной почте / отображения непосредственно для них.

В таких системах показатель отсева из-за этих демографических данных может затруднить работу приложения, если пользователям не будет предоставлен такой уровень помощи при доступе, поэтому, пожалуйста, ответьте, имея в виду такую ​​настройку.

Спасибо всем

Это был забавный вопрос, вызвавший множество споров, и мне он понравился. В итоге я выбрал ответ, который сохраняет безопасность паролей (мне не нужно будет хранить обычный текст или пароли с возможностью восстановления), но также позволяет указанной мной базе пользователей войти в систему без основных недостатков, которые я обнаружил. нормальное восстановление пароля.

Как всегда было около 5 ответов, которые я хотел бы отметить как правильные по разным причинам, но мне пришлось выбрать лучший - все остальные получили +1. Спасибо всем!

Также спасибо всем участникам сообщества Stack, которые проголосовали за этот вопрос и / или отметили его как избранный. Я воспринимаю получение 100 голосов за комплимент и надеюсь, что это обсуждение помогло кому-то еще с той же проблемой, что и я.


person Shane    schedule 17.02.2010    source источник
comment
Я думаю, он знает, что это нехорошо. Он все еще ищет лучшее решение в соответствии с заявленными требованиями.   -  person stefanw    schedule 18.02.2010
comment
В конце концов, все, что вам нужно сделать, это тщательно реализовать уязвимость, которой можно избежать.   -  person rook    schedule 18.02.2010
comment
Верно, но вопрос был в том, как это сделать максимально ответственно;)   -  person stefanw    schedule 18.02.2010
comment
@Michael Brooks - я хочу, чтобы вы знали, что я полностью согласен с CWE-257 и хотел бы просто цитировать это дословно каждый раз, когда меня просят восстановить пароли в виде открытого текста. Однако в действительности клиенты и пользователи редко интересуются правилами NIST и все равно хотят, чтобы я это делал. В 90% случаев я могу убедить их в обратном, но в тех 10% случаев, когда я не могу, я пытаюсь определить лучший курс действий - в этих случаях CWE-257 - это пепел в моих руках (к сожалению).   -  person Shane    schedule 18.02.2010
comment
@Shane, Возможно, вам стоит спросить, как можно безопасно реализовать уязвимость переполнения буфера. Ничто не мешает вам внедрить безопасную систему. Используйте сброс пароля, если они не знают свой пароль, им следует создать новый.   -  person rook    schedule 18.02.2010
comment
@Michael Brooks - я не спорю - ВООБЩЕ - что ваше предложение - лучший способ сделать это. Но определенные пользовательские базы (например, пожилые люди или обычные пользователи, не использующие компьютер), на которые нацелены сайты, над которыми я работал, сбиты с толку тем, что мы считаем стандартными процедурами сброса пароля. В этих случаях функциональность (не безопасность) требует напоминания пароля, а не сброса. Это те моменты, когда я сталкиваюсь с этим - клиенты не хотят отказываться от ценных пользователей в определенных демографических группах, прося их выполнить то, что для них является высокотехнологичной задачей. Я надеюсь, что в этом есть смысл.   -  person Shane    schedule 18.02.2010
comment
@ Шейн / Майкл: По умолчанию позволяет пользователю восстанавливать пароль в виде обычного текста. Затем имейте пользовательские настройки, которые позволяют пользователю сделать безопасный выбор, чтобы не иметь возможности восстановить пароль в виде обычного текста. Опытные пользователи, которые могут это сделать, выберут этот параметр.   -  person Gladwin Burboz    schedule 22.02.2010
comment
Обожаю это обсуждение! Однако один важный момент был упущен почти всеми ... Моя первоначальная реакция была очень похожа на @Michael Brooks, пока я не понял, как @stefanw, что проблема здесь в нарушенных требованиях, но это то, что они есть. Но потом мне пришло в голову, что это может быть даже не так! Отсутствует здесь невысказанное значение ресурсов приложения. Проще говоря, для недорогой системы полностью безопасный механизм аутентификации со всеми задействованными процессами был бы излишним и был бы неправильным выбором безопасности.   -  person AviD    schedule 23.02.2010
comment
(продолжение) Очевидно, что для банка передовой опыт является обязательным, и нет никакого способа этически нарушить CWE-257. Но легко представить себе системы с низкой стоимостью, в которых оно того не стоит (но простой пароль все равно требуется). Важно помнить, что настоящий опыт в области безопасности заключается в поиске подходящих компромиссов, а НЕ в догматическом распространении передовых практик, которые каждый может прочитать в Интернете.   -  person AviD    schedule 23.02.2010
comment
@AviD: Низкая ценность системы не имеет абсолютно никакого отношения к этой проблеме, потому что люди повторно используют свои пароли. Почему люди не могут понять этот простой факт? Если вы взломаете пароли в какой-либо системе с низким значением, у вас, вероятно, будет несколько действительных паролей для других систем с высокой стоимостью.   -  person Aaronaught    schedule 24.02.2010
comment
Замалчивается еще один момент, который я только что упомянул в ленте комментариев к моему ответу: как вы знаете, что человек, запрашивающий эти требования, заслуживает доверия? Что, если оправдание юзабилити - это всего лишь фасад, скрывающий реальное намерение украсть пароли в какой-то момент в будущем? Ваша наивность может стоить клиентам и акционерам миллионов. Сколько раз специалисты по безопасности должны повторить это, прежде чем все поймет: Самые распространенные и самые серьезные угрозы безопасности всегда ВНУТРЕННИЕ.   -  person Aaronaught    schedule 24.02.2010
comment
Это иронично, что наиболее этичным решением здесь является лгать и сообщать, что пароли клиентов не могут быть надежно сохранены и не могут быть восстановлены? В то же время предложите более безопасное решение, и, возможно, вы убедите кого-нибудь в том, что пароли должны быть необратимо зашифрованы.   -  person ehdv    schedule 26.02.2010
comment
Я ответил на комментарии здесь, внизу в моем ответе, поскольку он был довольно длинным - я считаю важным пересмотреть анализ и обсуждение поднятых вопросов. stackoverflow.com/questions/2283937/   -  person AviD    schedule 01.03.2010
comment
Помимо всего обсуждения безопасности, я действительно ускользаю от меня, зачем вам нужна такая система, даже для определенной аудитории. Если вашим пользователям уже приходится полагаться на поддержку для восстановления утерянного пароля, то почему у вас в первую очередь нет поддержки для сброса пароля для ваших пользователей? Позвольте службе поддержки сгенерировать OTP, отправить письмо пользователю со ссылкой (или паролем), которая позволит ему / ей войти в систему и изменить свой пароль на что-то разумное, и никому не нужно видеть, какой был пароль. ..   -  person wimvds    schedule 01.03.2010
comment
Вы можете сохранить их как зашифрованные md5sums и настроить сеть ЦП на 10 миллиардов долларов, чтобы позже взломать зашифрованный хэш и получить пароль в виде обычного текста, когда это необходимо ... Просто ..   -  person user3459110    schedule 07.05.2014
comment
Простым решением может быть использование провайдера OpenID (или более одного), такого как Google, Facebook и т. Д. Таким образом вы можете хотя бы сказать: «Эй, это их система безопасности, спросите их!», Избегая при этом самостоятельно реализовывать функции сброса пароля. .   -  person Tuncay Göncüoğlu    schedule 13.01.2015


Ответы (26)


Как насчет того, чтобы подойти к этой проблеме с другой точки зрения? Спросите, почему пароль должен быть открытым текстом: если это так, чтобы пользователь мог получить пароль, то, строго говоря, вам действительно не нужно извлекать пароль, который они установили (они все равно не помнят, что это такое), вы необходимо предоставить им пароль, который они могут использовать.

Подумайте об этом: если пользователю нужно восстановить пароль, это потому, что он его забыл. В этом случае новый пароль ничем не хуже старого. Но один из недостатков обычных механизмов сброса паролей, используемых сегодня, заключается в том, что сгенерированные пароли, созданные в операции сброса, обычно представляют собой набор случайных символов, поэтому пользователю сложно просто правильно ввести их, если они не скопируют-n- вставить. Это может стать проблемой для менее опытных пользователей компьютеров.

Один из способов решения этой проблемы - предоставить автоматически сгенерированные пароли, которые представляют собой текст на более или менее естественном языке. Хотя строки на естественном языке могут не иметь энтропии, которой обладает строка случайных символов одинаковой длины, ничто не говорит о том, что ваш автоматически сгенерированный пароль должен содержать только 8 (или 10 или 12) символов. Получите автоматически сгенерированную парольную фразу с высокой энтропией, соединив несколько случайных слов (оставьте между ними пробел, чтобы их по-прежнему узнавал и печатал любой, кто умеет читать). Шесть случайных слов разной длины, вероятно, легче набрать правильно и с уверенностью, чем 10 случайных символов, и они также могут иметь более высокую энтропию. Например, энтропия пароля из 10 символов, полученного случайным образом из прописных и строчных букв, цифр и 10 знаков пунктуации (всего 72 действительных символа), будет иметь энтропию 61,7 бит. Используя словарь из 7776 слов (как использует Diceware), который может быть выбран случайным образом для ключевой фразы из шести слов, парольная фраза будет иметь энтропию 77,4 бита. Дополнительную информацию см. В часто задаваемых вопросах по Diceware.

  • кодовая фраза с примерно 77 битами энтропии: "допустить острое чутье прозаической таблицы"

  • пароль с примерно 74 битами энтропии: "K: & $ R ^ tt ~ qkD"

Я знаю, что предпочел бы набрать фразу, а с копированием и вставкой фраза не менее проста в использовании, чем пароль, так что никаких потерь. Конечно, если вашему веб-сайту (или другому защищенному активу) не требуется 77 бит энтропии для автоматически сгенерированной ключевой фразы, генерируйте меньше слов (что, я уверен, ваши пользователи оценят).

Я понимаю аргументы в пользу того, что существуют защищенные паролем активы, которые на самом деле не имеют высокой ценности, поэтому нарушение пароля может не стать концом света. Например, меня, вероятно, не будет волновать, если 80% паролей, которые я использую на различных веб-сайтах, будут взломаны: все, что может произойти, - это кто-то на какое-то время рассылает спам или публикует сообщения от моего имени. Это было бы не здорово, но они не взламывают мой банковский счет. Однако, учитывая тот факт, что многие люди используют тот же пароль для своих веб-форумов, что и для своих банковских счетов (и, возможно, баз данных национальной безопасности), я думаю, что было бы лучше обрабатывать даже эти «малоценные» пароли как недействительные. -восстанавливаемый.

person Michael Burr    schedule 28.02.2010
comment
+1 за парольные фразы, которые в настоящее время, кажется, предлагают лучший баланс надежности пароля и запоминания пользователя. - person Aaronaught; 28.02.2010
comment
(+1 + Bounty) - @Michael Burr, я чувствую, что это решение лучше всего соответствует поставленному вопросу, а также информации о награде. Парольные фразы позволят указанной мной базе пользователей самый простой способ входа на сайт, чтобы оставить пароли от системы электронной почты. Я буду использовать это в сочетании с телефонной поддержкой аналогичного метода (возможно, парольной фразы из одного слова), когда это необходимо. Хороший ответ. - person Shane; 01.03.2010
comment
Также вы можете составить полное предложение, например ‹Adjective› ‹noun› - это ‹verb› ‹adverb›. Зеленый кот бешено прыгает. есть списки категорий. с 1024 вариантами для каждого у вас есть 40 бит энтропии. - person Dominik Weber; 25.08.2010
comment
+1 за то, что рассматривает повторное использование пароля как критическую проблему для его предотвращения - person lurscher; 13.10.2010
comment
Это одна из тех ситуаций, когда я чувствую себя глупо, потому что не думал об этом. Красивое и хорошо объясненное решение! - person Jon Smock; 13.10.2010
comment
Как вы относитесь к ссылкам для сброса пароля, срок действия которых истекает, если их не использовать в разумные сроки? - person jason saldo; 13.10.2010
comment
Я просто модернизирую механизм поиска пароля унаследованной системы и вместо случайного цифрового кода я собираюсь использовать короткую случайную фразу. Мне он больше нравится, даже если люди его, скорее всего, будут вырезать и вставлять. - person Hans; 14.10.2010
comment
@jms: Я думаю, что ссылка для сброса пароля с ограниченным сроком действия - хорошая идея - просто убедитесь, что она включает случайный, не поддающийся угадыванию случайный номер. Это автоматически сгенерированный пароль, который людям не нужно вводить или копировать и вставлять. Кстати, вчера эта страница привлекла к себе много внимания - в какой статье об этом говорилось? - person Michael Burr; 14.10.2010
comment
@ Майкл Бёрр согласен. re: внимание twitter.com/#!/spolsky/status/27244187286 - person jason saldo; 15.10.2010
comment
Подумайте об этом - если пользователю нужно восстановить пароль, это потому, что он его забыл - не обязательно верно! Я часто хочу получить свой пароль, потому что я нахожусь на ноутбуке, и я ЗНАЮ, что моя машина дома хранит мой пароль или он записан в безопасном месте, и я не хочу нарушать его, получая новый. . - person joachim; 10.12.2010
comment
Ссылка для сброса пароля с ограниченным сроком действия на самом деле более удобна для пользователя, чем отправка нового пароля. @joachim - вы пробовали KeePass? (keepass.info) Мне нравится описывать его как DVCS для ваших паролей - идеально подходит для вашего типа использования. . - person jammycakes; 28.04.2011
comment
Самый результативный вопрос на новом сайте IT Security SE имеет дело с правомерностью этого вычисления энтропии. (Ну, технически это касается xkcd, на который ссылается @Pieter.) - person Pops; 15.11.2011
comment
О парольных фразах, должны они содержать пробелы или нет? Заранее спасибо. - person James P.; 29.06.2013
comment
Этот вводный абзац - логика, которую я использую снова и снова, чтобы упрекнуть тех, кто настаивает, что им нужна система, в которой они могут получать пароль, не меняя его. Если вы не можете его вспомнить, почему вас волнует, что он изменился? - person crush; 16.01.2014
comment
@jammycakes KeePass имеет один критический недостаток: если вы забыли свой основной пароль для разблокировки своей БД (да, я так и сделал), вы облажались. - person Agi Hammerthief; 10.03.2014
comment
В предлагаемом решении используйте большой список слов, а не составленный вручную. В противном случае злоумышленнику может быть довольно легко получить все слова, а затем подобрать их со скоростью света. - person Gras Double; 17.03.2014
comment
все, что может произойти, - это спам или публикация от моего имени в течение некоторого времени, что вполне может включать в себя клевету на публичных лиц или ложные обвинения в адрес компании или ее продуктов. Не говоря уже о нарушении авторских прав от вашего имени. Это, в свою очередь, может легко повлечь за собой дорогостоящий судебный процесс. Что касается ваших финансов, то при некоторой неудаче, которая может быть столь же плохой, как взлом вашего банковского счета. - person O. R. Mapper; 27.04.2014
comment
@AwalGarg: Энтропия паролей работает не так. Расчеты энтропии в вопросе уже измеряют энтропию по тому, как генерируется пароль, а не по тому, как злоумышленник может попытаться его угадать. Злоумышленнику, который знает структуру пароля, еще нужно пройти 77 бит энтропии. - person user2357112 supports Monica; 26.05.2014
comment
Никто больше не слышал о словарных атаках? Вот почему мы начали использовать случайные символы для паролей в первую очередь, люди. - person Codefun64; 20.06.2014
comment
@ Codefun64 Даже если бы вы знали, что все пароли будут состоять из 6 словарных слов, это все равно эквивалентно 6-символьному паролю на языке с десятками тысяч символов (есть сотни тысяч, возможно, даже миллионы слов, но предположительно это выбирал бы только относительно общие слова, из которых можно выбрать из десятков тысяч). Получайте удовольствие от атаки по словарю. - person neminem; 23.10.2014
comment
@neminem На самом деле, в паролях есть от нескольких сотен до пары тысяч часто используемых слов, которые являются английскими словами, здравый смысл подсказывает вам это, проверьте самые распространенные пароли (которые действительно смешны) на www.cbsnews.com/ news / the-25-most-common-passwords-of-2013 /, чтобы понять, что я имею в виду. Итак, предположим, что пользователь выбирает три слова (примечание: нормальный, средний человек НЕ выбрал бы три слова, это слишком много, чтобы его волновать и запоминать), и у него есть 2000 общих слов, из которых он обычно выбирает. Это всего восемь миллиардов циклов. Я могу запустить это на своем ноутбуке за ‹1 день. - person Codefun64; 24.10.2014
comment
Просто сделал базовый сценарий атаки по словарю и запустил его локально. Закончено за час 32 минуты. Пароль, который я дал ему для взлома, был тихим кроличьим шариком. - person Codefun64; 24.10.2014
comment
@ Codefun64 Но этот ответ не говорит о словах, которые обычно используются в паролях, и не о том, что пользователь выбирает их, а выбирает только ‹= ​​3. Quoth, Один из способов решения этой проблемы - предоставить автоматически сгенерированные пароли, которые представляют собой более или менее естественный текст: то есть создание полного грамматического предложения на английском языке и предоставление его пользователю для запоминания (и если они забывают это - хорошо, генерируя им новый). Маловероятно, что слишком много паролей используют, например, слово «острый» (как в примере в ответе), но это не архаично или что-то в этом роде. - person neminem; 24.10.2014
comment
Замечу, что нет причин ограничиваться словарем 7776 (6⁵). Достаточно легко составить словарь из 2 ^ 15 слов и получить 75 бит энтропии всего из 5 слов. - person Emmet; 22.03.2016

Представьте, что кто-то заказал строительство большого здания, скажем, бара, и происходит следующий разговор:

Архитектор: Для здания такого размера и вместимости вам потребуются противопожарные выходы здесь, здесь и здесь.
Клиент: < em> Нет, это слишком сложно и дорого в обслуживании, мне не нужны боковые или задние двери.
Архитектор: Сэр, пожарные выходы не являются обязательными , они необходимы в соответствии с городским пожарным кодексом.
Клиент: Я плачу вам не за то, чтобы спорить. Просто сделай то, что я просил.

Тогда спрашивает архитектор, как этично построить это здание без пожарных выходов?

В сфере строительства и машиностроения разговор, скорее всего, закончится так:

Архитектор: Это здание нельзя построить без пожарных выходов. Вы можете обратиться к любому другому лицензированному профессионалу, и он скажет вам то же самое. Я сейчас ухожу; перезвоните мне, когда будете готовы к сотрудничеству.

Возможно, компьютерное программирование не является лицензированной профессией, но люди часто задаются вопросом, почему наша профессия не пользуется таким же уважением, как инженер-строитель или инженер-механик - ну, не смотрите дальше. Те профессии, которым предъявят мусорные (или откровенно опасные) требования, просто откажутся. Они знают, что это не оправдание, чтобы сказать: «Ну, я старался изо всех сил, но он настоял, и я должен делать то, что он говорит». Они могут потерять лицензию из-за этого предлога.

Я не знаю, являетесь ли вы или ваши клиенты частью какой-либо публичной компании, но хранение паролей в любой восстанавливаемой форме может привести к провалу нескольких различных типов аудита безопасности. Проблема не в том, насколько сложно для какого-нибудь «хакера», получившего доступ к вашей базе данных, восстановить пароли. Подавляющее большинство угроз безопасности являются внутренними. Что вам нужно защитить, так это того, что какой-нибудь недовольный сотрудник уйдет со всеми паролями и продаст их тому, кто предложит самую высокую цену. Использование асимметричного шифрования и хранение закрытого ключа в отдельной базе данных абсолютно ничего не делает для предотвращения этого сценария; всегда будет кто-то с доступом к частной базе данных, а это серьезная угроза безопасности.

Не существует этичного или ответственного способа хранения паролей в восстанавливаемой форме. Период.

person Aaronaught    schedule 18.02.2010
comment
@Aaronaught - я думаю, что это справедливый и обоснованный аргумент, но позвольте мне сказать вам это. Вы работаете над проектом для компании в качестве сотрудника, и ваш начальник говорит: «Это требование нашей системы» (по какой-то причине). Вы уходите с работы, полный праведного негодования? Я знаю, что есть обязанность, когда я полностью контролирую свою ответственность, - но если компания решает рискнуть провалом аудита или ответственности, то мой долг - пожертвовать своей работой, чтобы доказать свою точку зрения, или я ищу ЛУЧШЕЕ и САМЫЙ БЕЗОПАСНЫЙ способ делать то, что они говорят? Просто играю в адвоката дьявола .. - person Shane; 18.02.2010
comment
@Shane: Я полагаю, это зависит от того, считаете ли вы себя профессионалом или нет. Профессионалы обязаны соблюдать определенные стандарты, независимо от того, контролируют они или нет. Я не говорю, что выйду из офиса и никогда не вернусь, но я отвечу на это: Нет, это не требование вашей системы, больше нет. Позвольте мне обратить ваше внимание на это - если бы ваш работодатель попросил вас начать принимать пароли регистрации и использовать их, чтобы попытаться захватить зарегистрированные адреса электронной почты для рассылки спама, вы бы это сделали? - person Aaronaught; 18.02.2010
comment
Конечно, нет, и если бы я знал кого-нибудь, кто это делал, я бы их снял. Я не считаю, что это сравнение один к одному - есть разница между защитой от возможных нарушений безопасности и их использованием самостоятельно. Хотя я думаю, что с философской точки зрения мы немного уходим от этого вопроса, с вашим заявлением здесь я чувствую, что должен предположить, что любой веб-сайт, запрашивающий мое имя пользователя и пароль без сертификата SSL, является таким же злом, как и тот, кто только что взломал мой учетной записи электронной почты, потому что они разрешили возможность прослушивания моих учетных данных? - person Shane; 18.02.2010
comment
Я не юрист, но учтите это. Если ваш руководитель приказывает вам сделать что-то против интересов компании, например, подвергнуть их ответственности, которую легко избежать, ваша работа - подчиняться или вежливо отказать? Да, они ваш начальник, но у них есть собственный начальник, даже если это инвесторы. Если вы не прыгнете через их головы, чья голова будет катиться, когда ваша дыра в безопасности будет использована? Просто надо подумать. - person Steven Sudit; 18.02.2010
comment
@Shane: Я не собирался приравнивать злобу сбора адресов электронной почты / паролей к их хранению в восстанавливаемой форме; Я просто указывал на то, что ваши обязанности как ИТ-специалиста выходят за рамки простого выполнения приказов. В какой-то момент вам придется остановиться и сказать, что это неэтичное поведение, и для того, чтобы это произошло, не должно быть так плохо, как в приведенном выше примере. Нельзя позволять людям, которые ничего не знают о безопасности, диктовать политику безопасности для общедоступной службы. - person Aaronaught; 18.02.2010
comment
@Aaronnaught - В целом я согласен с вами, и я отношусь к своим обязанностям профессионально, поэтому я довольно ожесточенно ссорюсь, когда кто-то делает такую ​​просьбу (что я заявляю в своем вопросе). Однако были времена, когда у меня не было реального выбора, кроме как уйти, а это не всегда возможно. Меня действительно беспокоит то, как с этим можно было бы справиться, если бы вы это сделали, я действительно не спорю о достоинствах этого, поскольку их нет. И в прошлом люди из «службы безопасности» наставляли меня, что риск необходим - иногда действительно нет выигрыша. - person Shane; 18.02.2010
comment
@Shane: Полагаю, если бы это был я, если бы они приставили мне к голове пресловутый пистолет, я бы, наверное, ушел. Может быть, это звучит надуманным или идеалистичным, но когда одно действие предпринимается, чтобы подорвать доверие общества, другие обязательно последуют за ним. Генеральный директор или ИТ-директор не является экспертом в этом вопросе; Да, и если я скажу, что что-то не может быть сделано безопасно / ответственно, это конец обсуждения, если не будет доказано, что я ошибаюсь с фактами. Ни один из ответов на этот вопрос не дает никаких гарантий защиты от злонамеренных инсайдеров, которые повсеместно считаются наиболее серьезной угрозой безопасности. - person Aaronaught; 18.02.2010
comment
@Aaronaught Итак, есть правительственное агентство, которое проводит обязательную проверку паролей, которые можно восстановить? А если есть, вам не разрешено легально построить эту систему? ... Неа. Кроме того, зачем злоумышленнику беспокоиться о паролях, если он может просто уйти со всеми остальными данными? Номера кредитных карт? Это слабость (правда, серьезная), которую покупатель должен понять и оценить. Не больше, не меньше. Период. - person sfussenegger; 23.02.2010
comment
@sfussenegger: Чрезвычайно слабый аргумент. Восстанавливаемые пароли не подразумевают восстанавливаемые номера кредитных карт, и даже если бы это было так, тот, кто украл номера кредитных карт, с гораздо большей вероятностью будет пойман и сможет нанести ограниченный ущерб только после того, как кредитные союзы будут уведомлены. И я никогда не утверждал, что эти аудиты безопасности проводило государственное агентство - разве вы не понимаете, что аудиты могут быть принудительными со стороны инвесторов, совета директоров или даже деловых партнеров или клиентов, в зависимости от контракта? - person Aaronaught; 23.02.2010
comment
@Aaronaught Он был ничуть не слабее твоего ответа. Федеральный закон - это совершенно иное требование, чем потенциальные аудиты, с которыми клиент может столкнуться в будущем. Если у клиента есть это требование и он понимает потенциальные угрозы (полностью!), Ничто не мешает вам его реализовать. В конце концов, у нас даже нет полного фона; это затрудняет оценку любых потенциальных угроз. Тем не менее я согласен с вами. Это очень плохая идея, и вы должны настаивать на том, чтобы избегать восстанавливаемых паролей. Но, в конце концов, есть другие, которые должны решать, а другие должны нести ответственность. - person sfussenegger; 24.02.2010
comment
@sfussenegger: То, что вы пытаетесь сказать, на самом деле было сутью моего ответа. Инженеры, врачи и представители других профессий также не связаны федеральными законами, они связаны профессиональной этикой и стандартами. Если мы хотим, чтобы к нам относились как к профессионалам, мы должны начать действовать как профессионалы. Мы не дети, нам не нужно выполнять все инструкции, данные клиентом, который, как мы знаем, не понимает масштаб потенциальных угроз, независимо от того, сколько раз он говорит да, да, как бы то ни было, просто сделай это. - person Aaronaught; 24.02.2010
comment
Разработчики всегда пытаются сказать, что наша работа намного сложнее, чем у других, потому что мы получаем мусорные требования, которые все время меняются. Что ж, это прекрасный пример того, почему; наша профессия остро нуждается в опоре. Наша профессия отчаянно нуждается в возможности сказать нет, это неприемлемое требование, это не то, что я могу добросовестно развивать, вы можете быть моим клиентом / работодателем, но у меня есть профессиональные обязанности перед вашими клиентами и общественностью, и если вы хотите, чтобы это было сделано, вам придется поискать в другом месте. - person Aaronaught; 24.02.2010
comment
@Aaronaught Как я уже сказал, невозможно судить о том, является ли это неприемлемым требованием, не зная какой-либо предыстории. Я разработал программное обеспечение, которое используется для автоматизированного аудита безопасности. Там я узнал, что иногда некоторые ограничения безопасности можно ослабить, введя другие (но никогда не игнорируйте их полностью). Нет необходимости настаивать на таких вещах, как будто они высечены в камне. Просто объясните своему клиенту, что нужно сделать, чтобы его требования были надежно защищены. И если он не говорит о безопасности, он обязательно будет говорить о деньгах - все говорят;) - person sfussenegger; 24.02.2010
comment
@sfussenegger: Вам не нужно знать предысторию. Это недопустимо. Вы предполагаете, что клиент заслуживает 100% доверия - что, если он требует именно этого требования, чтобы он мог уйти с паролями позже? Безопасность - один из немногих разрабатываемых элементов, который высечен в камне. Есть некоторые вещи, которые вы просто не делаете, и сохранение восстанавливаемых паролей - это десять из них. - person Aaronaught; 24.02.2010
comment
@Aaronaught Приведу пример: на заре Twitter сторонним службам требовался пароль пользователя, чтобы действовать от его имени (сама мысль вызывает у меня мурашки по спине). В настоящее время я был бы признателен любому разработчику, который потратит на эту проблему столько же времени, сколько @Shane. На самом деле, многие службы с благими намерениями наверняка хранят пароль в виде простого текста. В любом случае, дело в том, что хранение восстанавливаемых паролей было обязательным требованием для этих вариантов использования. Единственной альтернативой было бы уйти на этот процветающий рынок. - person sfussenegger; 24.02.2010
comment
@sfusseneger: Это похоже на многие существующие программы управления паролями; вторичные пароли могут быть зашифрованы первичным паролем пользователя, и это нормально, потому что он не может быть восстановлен кем-либо кроме пользователя, который знает первичный пароль. Когда каждый пользователь имеет уникальный ключ шифрования, известный только ему самому, это фактически невосстановимо и полностью отличается от того, что один ключ принадлежит какому-то администратору / сотруднику. - person Aaronaught; 24.02.2010
comment
@Aaronaught для этого потребуется, чтобы пользователь вводил свой пароль каждый раз, когда служба хотела бы опубликовать что-то от его имени. Но что, если это невозможно, то есть какой-то бот, который публикует обновления? Просто представьте себе службу, которая получает RSS-канал блога и автоматически публикует новые записи в Twitter. Вам обязательно понадобится пароль пользователя в виде обычного текста для этого вызова API. Так как бы вы это сделали? - person sfussenegger; 25.02.2010
comment
@sfussenegger, это именно то, что, например, OAuth предназначен для. - person molf; 25.02.2010
comment
@sfussenegger: Откровенно говоря, я бы не стал разрабатывать и использовать какие-либо службы, которые претендуют на использование чьих-либо учетных данных без их явного разрешения, каждый раз. Это огромная банка червей, технологически, этически и юридически. Системы, которые действительно должны разрешать такое поведение, будут иметь подсистему олицетворения или делегирования, где пользователи или службы могут входить в суррогатные учетные записи, которым предоставлены определенные разрешения, чтобы действовать как другие Пользователь. Электронная почта (например, Microsoft Exchange) - простой пример этого. Делегирование существует специально для предотвращения использования общих паролей. - person Aaronaught; 25.02.2010
comment
@molf Конечно, да, но я имел в виду первые дни Twitter, когда OAuth не подходил. Конечно, есть и другие примеры, но Twitter по-прежнему хорошо известен. Что бы вы сделали, если поставщик услуг не поддерживает OAuth или аналогичные методы (чего не было в Твиттере вначале)? - person sfussenegger; 25.02.2010
comment
@Aaronaught, чтобы вы сказали клиенту / начальнику, который хотел использовать RSS-to-Twitter (первые дни, как упоминалось выше), что вы не можете этого сделать, пока не будет создана подсистема олицетворения или делегирования. Но что бы вы ответили, если бы он спросил, что делают другие в этой области? Что они действуют не так этично, как вы? Верите ли вы, что помогли бы улучшить положение потенциальных пользователей, отправив вашего клиента к неэтичному инженеру? Я мог бы отдыхать легче, если бы знал, что сделал все возможное, чтобы сохранить это как можно более безопасным, вместо того, чтобы просто отводить взгляд, это точно. - person sfussenegger; 25.02.2010
comment
@Aaronaught ... но давайте остановимся на этом. Мне понравилось обсуждение с вами. Вы точно относитесь к своей работе с восхитительным энтузиазмом. Надеюсь, вы не возражали, что я здесь немного провокационировал;) - person sfussenegger; 25.02.2010
comment
Это ложная аналогия. Это приравнивает снижение уровня безопасности к опасному для жизни отсутствию пожарных выходов. Нонсенс думать, что все системы требуют мер безопасности АНБ. Более близкая, хотя и ошибочная, аналогия требует, чтобы все двери имели засовы вместо простых ручных замков и что установка чего-либо, кроме засовов, неэтична. - person Thomas; 27.02.2010
comment
@Thomas: Все всегда используют один и тот же предлог для слабой защиты паролей, а именно некритичность данных. Вы, как и любой другой апологет, игнорируете тот факт, что пароли используются повторно, а это означает, что ваша более близкая аналогия на самом деле бесполезна. Измените его на требование, чтобы кто-то дал вам свой код тревоги и весь брелок для хранения, а затем иметь на нем что-то меньшее, чем безопасность военного уровня; вы можете не убить этого человека, но легко можете разрушить его жизнь. - person Aaronaught; 28.02.2010
comment
@Aaronnaugh: Каждый сотрудник службы безопасности использует один и тот же слабый предлог для принятия крайних мер безопасности. Безопасность основана на оценке риска. Вы хотите поместить код будильника в банку с печеньем и ужасаетесь, когда все используют 12345 в качестве кода будильника. То, как вы храните пароль, ничего не значит, если вы также не обеспечиваете соблюдение требований к надежному паролю и не ограничиваете повторное использование пароля, и так далее. Утверждать, что слабая защита паролей в несоответствующей системе разрушит чью-то жизнь, снова является чрезмерным. Речь идет о жизни в реальном мире: звонит человек, выплачивающий чеки, а не разработчик. - person Thomas; 28.02.2010
comment
@ Томас: Я не знаю, что вы здесь хотите сказать. Сначала вы говорите, что односторонние хэши не исключают требований к надежности пароля. Я согласен. Затем вы повторяете тот же несущественный системный аргумент, который сам по себе не имеет значения, потому что тот же пароль может и будет использоваться для других систем. Наконец, вы прибегаете к аргументу человека, выплачивающему чеки, который не является основанием для начала, потому что вы не можете гарантировать, что этот человек и те, кому он доверяет, заслуживают доверия. Ваша главная ответственность здесь - перед клиентами. Все эти моменты уже обсуждались. - person Aaronaught; 28.02.2010
comment
Нерелевантный системный аргумент, как вы его выразили, является Фундаментальной проблемой: оценка риска. Вы хотите относиться к каждой системе, как к базе данных о преступлениях ФБР. Слабые пароли и их повторное использование - вина пользователя; не система, и это само по себе не оправдывает какие-либо меры безопасности в отношении учетных данных. Ошибка в вашем аргументе, на которую я указал, заключается в том, что 1-хешей недостаточно. Для вас, чтобы быть этичными, вам потребуются требования к длине pwd, требованиям к сложности pwd, ограничениям на повторное использование pwd и так далее. Все это не может быть оправдано, если система неактуальна. - person Thomas; 28.02.2010
comment
@Thomas: Односторонние хэши являются частью полной политики паролей; они также являются наиболее важной частью с большим отрывом. Если вы приравняете односторонние хэши к базе данных о преступлениях ФБР, то вы не имеете права работать над каким-либо кодом безопасности где бы то ни было. Вы идете и разглагольствуете; Я закончил спорить с этой чепухой. - person Aaronaught; 28.02.2010
comment
Вы прямо сказали, что все, кроме односторонних хешей, небезопасно. Это экстремистский вздор. Это все равно, что сказать, что без сигнализации дом небезопасен. Я использовал базу данных ФБР как пример скользкой дорожки, которую берут нацисты по безопасности: у нас должны быть односторонние хэши, минимальная длина пароля, требования к сложности, срок действия пароля и ... Без разумной оценки риска любое оправдание становится невыгодным. один основан на страхе. - person Thomas; 28.02.2010
comment
Хорошо, давайте проведем оценку рисков прямо здесь и сейчас. Если вы храните пароли в восстанавливаемой форме, вы создаете нетривиальный риск кражи паролей. Также вероятно, что по крайней мере некоторые пользователи будут использовать одни и те же пароли для своей электронной почты и банковских счетов. Если пароли украдены, а банковские счета опустошены, это, вероятно, попадет в заголовки газет, никто больше никогда не будет иметь с вами дела, и вы, вероятно, прекратите существование. Можем ли мы сейчас избавиться от дерьма? Тот факт, что вы использовали слово «нацисты», ясно показывает, что у вас нет здравого смысла. - person Aaronaught; 28.02.2010
comment
Кстати, думать, что архитекторы, строители и другие люди всегда ведут себя этично, - это чепуха, есть много людей, которые будут работать с украденным материалом или ухудшать качество цемента (добавляя больше песка) и так далее. В любом случае это совершенно не связано с рассматриваемой проблемой, но всегда предполагать, что другие профессии имеют больше возможностей отказаться от вещей, наивно ... [Продолжение] - person Vinko Vrsalovic; 01.03.2010
comment
... Что касается рассматриваемой проблемы, я думаю, что лучший способ уже упоминался, а именно, чтобы полностью обойти проблему, попросив специалиста технической поддержки предоставить им новый пароль, убедившись, что это хотя бы произносимые пароли. Если это невозможно, то покупатель очень мало верит в пожилых людей или умственно отсталых :) - person Vinko Vrsalovic; 01.03.2010
comment
@ Винко Врсалович: Достаточно верно насчет неэтичного поведения других профессий. Вопрос действительно спрашивал, как это сделать с этической точки зрения, и мой ответ был / по существу, что это неэтично, независимо от того, как вы к этому относитесь. Если вас не волнует профессиональная этика, то все ставки отменены! - person Aaronaught; 01.03.2010
comment
@Aaronaught Проблема в том, что у вас нет чувства перспективы. Опять же, приведенный вами пример экстремален. Если существовала реальная, материально задокументированная проблема ответственности с системой, которую вы создавали, и с ее безопасностью, которая могла бы отличаться, но это совсем не ясно, не всегда так. - person Thomas; 01.03.2010
comment
@Aaronaught: если вы храните пароли в восстанавливаемой форме, вы создаете нетривиальный риск кражи паролей. Ошибочное предположение. Да, вы создаете риск того, что пароли могут быть украдены, но степень риска полностью связана с защитой ключа (ключей) дешифрования. Я согласен с тем, что поиск способов убедить клиентов в использовании односторонних хешей и сброса пароля - безусловно, лучшее решение. Однако, в конце концов, если клиент откажется, даже если это будет стоить дороже, профессионал задокументирует свое возражение и сделает все возможное, чтобы снизить риск своего клиента. - person Thomas; 01.03.2010
comment
Да, степень риска связана с защитой ключей дешифрования, но этот риск по-прежнему всегда нетривиален. Ключи всегда будут доступны для чтения кем-либо в организации (в противном случае вы также можете использовать односторонние хеши), а это значит, что они могут быть украдены. У компаний есть планы аварийного восстановления по одной причине - важна не вероятность того, что что-то случится, а последствия. И для человека, утверждающего, что у меня нет перспективы, вы продемонстрировали шокирующе плохое понимание того, насколько широк масштаб этой проблемы. Кража пароля невозможна. - person Aaronaught; 01.03.2010
comment
Вы можете снизить риск, разделив ключ (и) между несколькими людьми, чтобы никто не имел доступа к ключам. Есть решения для управления ключами. Вы продолжаете упрекать людей, использующих один и тот же пароль повсюду. Откровенно говоря, ЭТО больший риск, созданный и порожденный пользователем, чем любая реализация может когда-либо надеяться, и сказать, что каждый разработчик каждой системы, независимо от того, насколько она незначительна, должен учитывать этот риск, чтобы они не считались неэтичными, просто не все разделяют. - person Thomas; 02.03.2010
comment
Кстати, исходный вопрос касался аргументов, чтобы убедить клиента использовать односторонние хэши. Хорошим аргументом в пользу этого была бы стоимость громоздких протоколов, необходимых для обеспечения защиты ключа (ключей) дешифрования и защиты паролей. Они не смогут расшифровать пароль, если держатели ключей находятся на Таити. Использование односторонних хешей и сброса пароля устранит эту проблему. Тем не менее, я думаю, что установление судебного приоритета с точки зрения ответственности - безусловно, лучшая амуниция. - person Thomas; 02.03.2010
comment
Честно говоря, единственное, что я предлагаю, - это то, что есть решения. Каждый предложенный вами риск можно снизить, но вы не хотите слышать об этом. Если риск не равен нулю, это неприемлемо для вас. Реальный мир редко работает в таких условиях. Наконец, сказать, что я не добавил ничего существенного, будет хуже, чем чайник, назвавший горшок черным. Ваш единственный ответ был: вы не можете. Мир не перестанет вращаться вокруг своей оси, потому что кто-то использовал асимметричное шифрование вместо одностороннего хеширования для несущественной системы. - person Thomas; 02.03.2010
comment
Нас выкопали или что-то в этом роде? Не то чтобы я жалуюсь, но что за внезапное внимание? - person Aaronaught; 13.10.2010
comment
@Aaronaught spolsky твитнул тебе. - person San Jacinto; 13.10.2010
comment
@Aaronaught ну не ТЫ конкретно .. а вопрос. - person San Jacinto; 13.10.2010
comment
Я работаю над рядом систем интеграции, которые требуют хранения паролей таким образом, чтобы система могла автоматически возвращать версию с открытым текстом. Честно говоря, это никогда не приносит удовольствия, и обычно нам удается получить полностью отдельную настройку учетной записи, уникальную для интеграции, но в случаях, когда это невозможно, вы не можете просто сказать «нет», особенно для функций, которые нужны клиентам. Для этого мы обычно используем GPG с ключами, не закодированными в приложении или db. - person Ryaner; 28.12.2011
comment
Ха-ха, молодец! Как архитектор могу сказать, что это действительно так. Не в этом измерении, но на самом деле клиенты пытаются вас поправить, даже если они совершенно не представляют ... Странный мир. - person Sliq; 27.04.2013
comment
@Aaronaught: не существует этичного или ответственного способа хранить пароли в восстанавливаемой форме. Период. Да, технически существует множество способов хранения конфиденциальной восстанавливаемой информации таким образом, чтобы ее мог видеть и / или изменять только владелец. Например, биткойн (виртуальная валюта) - это, по сути, общая публичная таблица p2p. Но даже будучи публичным, это безопасно - только владелец каждого биткойна может видеть / изменять вашу запись. Так что да, есть. Период (: P). Хотя я не согласен с вашим ответом (я буду считать, что это было просто нехваткой технических знаний в то время), я благодарю вас за то, что вы зажгли дискуссию об этике. - person Daniel Loureiro; 22.01.2014
comment
Цитата из первой части этого ответа. Для здания такого размера и мощности вам понадобится ... То же самое и с ИТ-безопасностью. Это зависит от размера и емкости, то есть от того, что делает система, для чего и кем она используется. Какие риски. Сайт-форум цветочного клуба, вероятно, можно хранить в виде обычного текста, состоящего всего из 4-6 символов. Если мы говорим об электронной почте или банке, это совсем другая история. Так что я не могу согласиться с общими заявлениями, в которых говорится, что вы должны делать ... по всем направлениям. - person Trevor; 29.12.2015
comment
Совершенно ложная эквивалентность. В вашем примере, как только архитектор говорит, что пожарные выходы являются юридическим требованием, и здание будет осуждено или снесено без них (даже если оно было изначально построено, чего, вероятно, не было бы), клиент говорит: «Черт возьми, черт возьми». , это отстой. Отлично. До тех пор, пока не появятся требования закона о надлежащем хранении и хешировании паролей, это аналогия дерьма. - person Phillip Copley; 19.02.2016
comment
Его поздний комментарий по этому вопросу, согласно моему опыту, кто когда-либо может получить доступ к базе данных, тогда нет способа сохранить вещи в безопасности, рассмотрите этот пример, который произошел со мной !!, я использовал хеширование md5 для хранения паролей клиентов, и я сделал страницу, чтобы позволить им сбросить свои пароли, пока все хорошо, я обнаружил, что однажды потерял доступ к веб-сайту, потратив 8 часов на просмотр кода, я обнаружил, что мой босс заменяет значение поля пароля своей записи на другие записи и доступ к другим учетным записям !!! нет никакого способа быть в безопасности, пока БД доступна любому! - person Monah; 23.04.2017

Вы можете зашифровать пароль + соль с помощью открытого ключа. Для входа в систему просто проверьте, совпадает ли сохраненное значение со значением, вычисленным на основе пользовательского ввода + соль. Если наступит время, когда потребуется восстановить пароль в виде открытого текста, вы можете расшифровать вручную или полуавтоматически с помощью закрытого ключа. Закрытый ключ может храниться в другом месте и может быть дополнительно зашифрован симметрично (что потребует участия человека для расшифровки пароля).

Я думаю, что на самом деле это похоже на то, как работает агент восстановления Windows.

  • Пароли хранятся в зашифрованном виде
  • Люди могут входить в систему без расшифровки в открытый текст
  • Пароли можно восстановить в виде открытого текста, но только с помощью закрытого ключа, который можно хранить вне системы (в банковском сейфе, если хотите).
person stefanw    schedule 17.02.2010
comment
-1 пароли никогда не должны быть зашифрованы. Это нарушение CWE-257 cwe.mitre.org /data/definitions/257.html - person rook; 18.02.2010
comment
1. В вопросе говорилось, что пароль должен быть восстановлен в виде открытого текста, поэтому это требование. 2. Я использую асимметричное шифрование, а не симметричное. Ключ для расшифровки не нужен для повседневных операций и может храниться в банковском сейфе. Аргументация в ссылке действительна, но не относится к данной ситуации. - person stefanw; 18.02.2010
comment
CWE-257 специально говорит о хранении паролей в восстанавливаемом формате. То, что вы предложили, является восстанавливаемым форматом, и в этом есть уязвимость согласно NIST. Вот почему я поставил вам -1. Более того, этой уязвимости можно полностью избежать, заставив пользователей сбросить свой пароль. Эта дополнительная сложность не нужна и приводит к более слабой системе. - person rook; 18.02.2010
comment
Верно, но согласитесь ли вы с тем, что с учетом требований это наиболее ответственный способ сделать это? Вы можете целый день поражать меня своим CWE-257, это не изменит интересную проблему безопасного хранения и работы с учетными данными и возможности их восстановления в исходную форму, если это необходимо. - person stefanw; 18.02.2010
comment
@Michael Brooks - я комментирую свой главный вопрос относительно этого и других постов. - person Shane; 18.02.2010
comment
@Michael Brooks: ваш 1-й комментарий прямо противоречит CWE: используйте надежное необратимое шифрование для защиты сохраненных паролей. наверное опечатка? - person devio; 18.02.2010
comment
Требование секретного ключа не мешает инсайдерам расшифровывать пароли. По совпадению, инсайдеры будут людьми, у которых уже есть доступ к зашифрованным паролям. - person Steven Sudit; 18.02.2010
comment
Агент восстановления Windows также является плохим примером здесь, поскольку он имеет дело с фактическим шифрованием, а не с управлением паролями. Ключ шифрования не совпадает с паролем; правила и практики, связанные с каждым из них, полностью различны. Шифрование и аутентификация - это не одно и то же. Шифрование предназначено для конфиденциальности - ключ используется для защиты данных. Аутентификация предназначена для идентичности, где ключ - это данные (это один фактор в процессе аутентификации). Итак, я повторяю, шифрование и аутентификация - это не одно и то же. Вы не можете правильно применять принципы одного к другому. - person Aaronaught; 18.02.2010
comment
@Aaronaught Конечно, нельзя. Никто не хочет хранить пароли с возможностью восстановления. Но ради требования о том, что пароли должны быть восстанавливаемыми, это вполне может соответствовать случаю. @Steven Вы можете применить политику 4 или более глаз к закрытому ключу (например, несколько человек будут шифровать его последовательно). - person stefanw; 18.02.2010
comment
Если вы не являетесь военным (и в этом случае у вас все равно будет гораздо более строгая безопасность), этой политики просто не будет, и она все еще не защищает от злонамеренных инсайдеров (либо они могут сговориться или системный администратор может установить несколько клавиатурных шпионов - в некоторых компаниях такие вещи являются стандартными). Даже если бы это произошло, это сделало бы систему практически бесполезной для восстановления пароля. Я знаю, что вы просто отвечаете на заданный вопрос, и у меня нет проблем с этим; Моя проблема связана с предположением, что это достаточно безопасно, чтобы его можно было ответственно использовать в производстве. - person Aaronaught; 18.02.2010
comment
@Devio, Да, хранение паролей в восстанавливаемом формате - уязвимость. Вы прочитали ссылку? - person rook; 18.02.2010
comment
Все верно. Я бы не стал строить такую ​​систему, я воспринял вопрос как абстрактный вызов с заданными требованиями. Кстати, если задействованы кейлоггеры, все идет: вы можете получить пароль прямо от людей. - person stefanw; 18.02.2010
comment
@Shane: Чтобы избежать проблемы, связанной с внутренним неправильным использованием закрытого ключа, вы можете дополнительно дважды зашифровать пароль, используя симметричный ключ в качестве некоторой информации, которая есть у пользователя (место рождения, имя питомца и т. Д.), Но не хранится в системе. Чтобы восстановить пароль, пользователь предоставляет ключ, с помощью которого вы расшифровываете, а затем повторно расшифровываете, используя закрытый ключ, чтобы получить оригинальный пароль. - person Gladwin Burboz; 22.02.2010
comment
В одной компании, в которой я работал, у нас была группа по информационной безопасности, и если в предлагаемой системе выявлялась серьезная угроза безопасности, директор компании должен был подписать форму, в которой говорилось, что они понимают риск и рады, что система будет работать. . - person Jason Roberts; 23.02.2010
comment
+1 Какой смысл одержимо настаивать на CWE-257? Это слабость (CWE), а не уязвимость (CVE). Сравнение восстанавливаемых паролей с переполнением буфера - это сравнение яблок и апельсинов. Просто убедитесь, что клиент понимает проблему (позвольте ему подписать что-нибудь, что об этом говорит - иначе он может ничего не вспомнить, если возникнет вопрос) и продолжайте. Кроме того, необходимые меры безопасности зависят от стоимости системы и потенциального риска атаки. Если успешный злоумышленник смог отменить только некоторые подписки на информационные бюллетени, нет причин для споров о каких-либо проблемах. - person sfussenegger; 23.02.2010
comment
-1 @sfuseenegger: Пожалуйста, посмотрите мои другие комментарии в другом месте. Успешный злоумышленник, завладевший паролями ваших пользователей, может нанести гораздо более серьезный ущерб, чем просто отмена некоторых подписок на информационные бюллетени, он может взломать их Facebook, Gmail, PayPal, банковские счета и т. Д. - person jammycakes; 24.02.2010
comment
@jammycakes Вот что я имел в виду под ценностью системы. Вы уже предполагаете, что этот пользователь предоставил сами пароли. - person sfussenegger; 24.02.2010
comment
Да, но системы, в которых пользователь сам предоставляет пароли, - это именно то, о чем мы здесь говорим. - person jammycakes; 25.02.2010
comment
@jammycakes не явно, нет - по крайней мере, я не могу найти ничего, что бы об этом говорилось. Кроме того, бывают случаи, когда пароли должны быть доступны в виде обычного текста. Например, первые дни Twitter, когда множество сервисов действовали от имени пользователей без какого-либо взаимодействия. Я просто хочу прояснить, что существуют допустимые варианты использования, и @stefanw приложил все усилия, чтобы ответить на вопрос. Я просто не могу поверить, что люди недооценивают его за приемлемый ответ. - person sfussenegger; 25.02.2010
comment
@sfussenegger: не явно, но на практике так и будет. Что касается Twitter, это было плохой, плохой практикой со стороны Twitter, потому что он учит пользователей фишингу. В наши дни доступны лучшие альтернативы, такие как oAuth - см. adactio.com/journal/1357 для обсуждение. - person jammycakes; 25.02.2010
comment
@jammycakes, без сомнения, это была плохая практика. Но как стороннему разработчику у вас не было выбора, кроме как (разглагольствовать и) задать себе вопрос: как мне этично подойти к хранению паролей пользователей для последующего извлечения открытого текста? ;) - person sfussenegger; 25.02.2010
comment
Кстати, не запрашивать пароли в пользу OAuth, как предлагает ваша ссылка, - это просто вариант, если такой механизм недоступен - если вы не возражаете, чтобы отказаться от этой идеи. Но, к сожалению, вы сделаете это в пользу своих конкурентов, а не в интересах образования пользователей. - person sfussenegger; 25.02.2010
comment
Верно, но это спорный вопрос, потому что теперь доступен OAuth. Но в таких случаях, как этот, когда у вас не было другого выбора, кроме как запрашивать у пользователей их пароли к сторонней службе, я бы отвечал не сохранять их на ваших серверах в первую очередь - вместо этого вы должны отказаться от них как как только вы получите все необходимые данные. - person jammycakes; 25.02.2010
comment
Я ответил на комментарии здесь, внизу в моем ответе, поскольку он был довольно длинным - я считаю важным пересмотреть анализ и обсуждение поднятых вопросов. stackoverflow.com/questions/2283937/ - person AviD; 01.03.2010
comment
Довольно умный ответ. - person Captain Hypertext; 08.06.2016

Не сдавайся. Оружие, которое вы можете использовать, чтобы убедить своих клиентов, - это неотвратимость. Если вы можете восстановить пароли пользователей с помощью любого механизма, вы предоставили их клиентам законный механизм предотвращения отказа, и они могут отклонить любую транзакцию, которая зависит от этого пароля, потому что поставщик не может доказать, что они не восстанавливали пароль и не проводили транзакцию через себя. Если пароли правильно хранятся в виде дайджестов, а не зашифрованного текста, это невозможно, поэтому либо конечный клиент выполнил транзакцию сам, либо нарушил свои обязанности по соблюдению осторожности. пароль. В любом случае это полностью оставляет ответственность за него. Я работал над случаями, когда это стоило бы сотни миллионов долларов. Не то, что вы хотите ошибиться.

person user207421    schedule 18.02.2010
comment
Журналы веб-сервера не учитываются в суде? Или в этом случае они тоже будут сочтены фальшивыми? - person Vinko Vrsalovic; 01.03.2010
comment
@Vinko Vrsalovic, журналы веб-сервера НЕ ДОЛЖНЫ засчитываться в суде, для этого вам необходимо доказать неотрекаемость, подтверждение подлинности, цепочку доказательств и т. Д., Чего явно не являются в журналах веб-сервера. - person AviD; 01.03.2010
comment
Точно. Поставщик должен доказать, что только клиент мог выполнить эту транзакцию. Журнал веб-сервера этого не делает. - person user207421; 02.03.2010
comment
Не все пароли действительно нужны для транзакций, так сказать. Скажем, веб-сайт предназначен для разработки списка закладок веб-страниц. В этом случае предел ответственности (который обычно указывается в Условиях и положениях при регистрации на веб-сайте) равен нулю, потому что нет финансовых транзакций. Если на веб-сайте нет действий, затрагивающих других, то, самое большее, данные будут потеряны для взломанного пользователя. Компания находится под защитой T&C. - person Sablefoste; 02.12.2015
comment
@Sablefoste На этом сайте. Если пользователь использует тот же пароль в другом месте, вы создаете риск утечки его личных учетных данных. Если вы никогда не занимаетесь практикой, вы не можете вызвать проблемы. - person user207421; 09.12.2015

Вы не можете этично хранить пароли для последующего извлечения в виде открытого текста. Это так просто. Даже Джон Скит не может этично хранить пароли для последующего извлечения открытого текста. Если ваши пользователи могут тем или иным образом извлекать пароли в виде обычного текста, то потенциально то же самое может сделать и хакер, обнаруживший уязвимость системы безопасности в вашем коде. И дело не только в пароле одного пользователя, но и в их всех.

Если у ваших клиентов есть проблемы с этим, сообщите им, что хранение паролей с возможностью восстановления является нарушением закона. Во всяком случае, здесь, в Великобритании, Закон о защите данных 1998 года (в частности, Приложение 1, Часть II, Параграф 9) требует от контроллеров данных использовать соответствующие технические меры для обеспечения безопасности личных данных, принимая во внимание, среди прочего, вред, который может быть причинен, если данные были скомпрометированы, что может быть значительным для пользователей, которые используют пароли на разных сайтах. Если им все еще трудно понять, что это проблема, укажите им на несколько примеров из реальной жизни, например этот.

Самый простой способ разрешить пользователям восстановить логин - отправить им по электронной почте одноразовую ссылку, которая автоматически выполняет вход в систему и ведет прямо на страницу, где они могут выбрать новый пароль. Создайте прототип и покажите им в действии.

Вот несколько сообщений в блоге, которые я написал на эту тему:

Обновление: сейчас мы начинаем видеть судебные иски и судебные преследования против компаний, которые не могут должным образом защитить пароли своих пользователей. Пример: LinkedIn подал коллективный иск на сумму 5 миллионов долларов; Sony оштрафовала на 250 000 фунтов стерлингов за взлом данных PlayStation. Если я правильно помню, LinkedIn на самом деле шифрует пароли своих пользователей, но шифрование, которое он использует, было слишком слабым, чтобы быть эффективным.

person jammycakes    schedule 23.02.2010
comment
@jimmycakes - это хорошая вещь, которую можно сделать в системе с низким уровнем безопасности, но если вы храните какие-либо данные высокой ценности, вы должны предположить, что электронная почта людей уже скомпрометирована и что отправка им прямой ссылки для входа в вашу систему компрометирует вашу систему. +1 за то, что ответил на мой вопрос о возможной альтернативе, но указал на ошибку в логике в целом. Я не хочу, чтобы Payppal НИКОГДА отправлял прямую ссылку для входа. Это может показаться параноидальным, но я всегда предполагаю, что моя учетная запись электронной почты повреждена - это держит меня честным. ;) - person Shane; 24.02.2010
comment
Совершенно верно - я бы ожидал, что мой банк по крайней мере позвонит мне и подтвердит мою личность, прежде чем разрешить мне сбросить (не восстанавливать) мой пароль. Я описал здесь абсолютный минимальный стандарт безопасности паролей, которого я ожидал бы от любого веб-сайта в любом месте. - person jammycakes; 24.02.2010
comment
Игнорирование банка или PayPal, у которых все равно не было бы установленного вами ограничения; Если вы предполагаете, что их электронная почта взломана, как возможен какой-либо онлайн-метод? Если вы отправляете сгенерированный пароль по электронной почте, как он становится более безопасным? - person Peter Coulton; 13.10.2010
comment
Я не говорю о получении пароля для одного человека, я говорю о получении нескольких паролей из базы данных. Если система хранит пароли с возможностью восстановления в виде простого текста, хакер потенциально может написать сценарий для извлечения всех паролей из вашей базы данных. - person jammycakes; 13.10.2010
comment
Мне интересно отправить ссылку / пароль по электронной почте, пройти через сеть в простой форме через неизвестные сетевые узлы ... - person Jakub; 26.04.2012
comment
Абсолютно согласен. Если есть способ получить мой простой пароль, я не буду полагаться на этот сайт. Простой. Это невозможно с этической точки зрения, на самом деле это противоречит концепции самого пароля. - person jhmilan; 04.08.2015
comment
LinkedIn не шифровал пароли, и шифрование было не слишком слабым (потому что они не шифровались, помните). Они хешировали пароли, но их алгоритм хеширования был слишком слабым, чтобы быть эффективным. (SHA1, если быть точным.) - person Scott Arciszewski; 09.12.2015
comment
@ScottArciszewski Есть ли что-нибудь неправильное в выборе хеширования вместо шифрования (игнорирование выбора в алгоритме), кроме того, что с шифрованием вы можете получить исходные данные? Я использую bcrypt для своих приложений - person Abdul; 26.07.2016
comment
+1 за даже Джона Скита ... потому что вы поднимаете важный вопрос: даже эксперты не могут делать это железным образом, даже если бы они этого не хотели. Восстанавливаемый пароль можно восстановить, точка. Предоставление пользователю возможности выбирать уникальные пароли - единственное, что их защищает, и мы знаем, как часто это происходит. И это защитит только их учетные записи на других сайтах; не текущий. - person trnelson; 08.02.2017

После прочтения этой части:

В примечании ниже я отметил, что веб-сайты, ориентированные в основном на пожилых людей, умственно отсталых или очень молодых, могут сбивать с толку людей, когда их просят выполнить процедуру безопасного восстановления пароля. Хотя в таких случаях мы можем счесть это простым и обыденным, некоторым пользователям потребуется дополнительная помощь в виде предоставления технической поддержки в систему или отправки по электронной почте / отображения непосредственно для них.

В таких системах коэффициент отсева из-за этих демографических данных может затруднить работу приложения, если пользователям не будет предоставлен такой уровень помощи при доступе, поэтому, пожалуйста, ответьте, имея в виду такую ​​настройку.

Мне остается только гадать, требует ли какое-либо из этих требований извлекаемую систему паролей. Например: звонит тетя Мэйбл и говорит: «Ваша интернет-программа не работает, я не знаю свой пароль». "ОК", - говорит дрон службы поддержки клиентов, - "позвольте мне проверить некоторые детали, а затем я дам вам новый пароль. При следующем входе в систему он спросит вас, хотите ли вы сохранить этот пароль или измените его на то, что вам будет легче запомнить ".

Затем система настроена так, чтобы знать, когда произошел сброс пароля, и отображать сообщение «хотите ли вы сохранить новый пароль или выбрать новый».

Чем это хуже для менее грамотных в отношении ПК, чем им говорят их старый пароль? И хотя специалист по обслуживанию клиентов может пошалить, сама база данных намного безопаснее на случай взлома.

Прокомментируйте, что плохого в моем предложении, и я предложу решение, которое действительно делает то, что вы изначально хотели.

person Mr. Boy    schedule 25.02.2010
comment
@john - Я думаю, что это вполне жизнеспособное решение. Однако будьте готовы к тому, что вас разгорят внутренние угрозы! Вы знаете, если бы я сделал это с помощью промежуточного сброса пароля (технический специалист устанавливает пароль вручную как временное средство и говорит Мэйбл ввести 1234 в качестве своего пароля), то это, вероятно, хорошо сработает в системе, не содержащей важных данных. Если бы это была среда с высоким уровнем безопасности, тогда у нас возникла бы проблема, когда служба cust могла бы установить пароль генерального директора на 1234 и войти в систему напрямую. Идеального решения не существует, но это работает во многих случаях. (+1) - person Shane; 25.02.2010
comment
Я только что заметил этот ответ. @Shane, я не понимаю, почему вы предсказали пламя из-за внутренних угроз. Возможность смены пароля не является серьезным недостатком; проблема заключается в возможности узнать пароль, который, вероятно, будет использоваться для других услуг - ее электронной почты, ее банка, ее интернет-магазинов, на которых хранится ее информация CC. Эта слабость здесь не проявляется; если Боб сбрасывает пароль Мэйбл и сообщает ей по телефону, это не дает ему доступа ни к одной из ее других учетных записей. Однако я бы предпочел принудительно, чем предлагать сброс пароля при входе в систему. - person Aaronaught; 28.02.2010
comment
@Aaronaught - я понимаю вашу точку зрения, но я думаю о случаях, когда даже сотрудники службы поддержки клиентов не могут попасть в определенные области системы (например, платежную ведомость, бухгалтерию и т. Д.), И им разрешается напрямую устанавливать пароль. проблема безопасности сама по себе. Я все же понимаю вашу точку зрения, что тип системы, о которой я задал этот вопрос, во многом отличается от внутренней системы бухгалтерского учета. Вероятно, мы могли бы совершенно иначе обсудить проприетарные внутренние системы и безопасность паролей в них. - person Shane; 01.03.2010
comment
@Shane: Тогда вопрос имеет еще меньше смысла. Я предположил, что вы хотите, чтобы кто-нибудь прочитал им пароль по телефону. Если вы хотите отправлять пользователям их пароли по электронной почте через какую-нибудь автоматизированную систему самообслуживания, вы также можете полностью отказаться от пароля, потому что он защищен чем-то гораздо более слабым. Возможно, вам нужно уточнить, какие именно сценарии удобства использования вы пытаетесь поддерживать. Возможно, этот анализ впоследствии покажет вам, что восстанавливаемые пароли даже не нужны. - person Aaronaught; 01.03.2010
comment
Код, предоставленный специалистом службы поддержки, не обязательно должен быть новым паролем. Это может быть просто одноразовый код, который разблокирует функцию сброса пароля. - person kgilpin; 18.09.2013

Майкл Брукс довольно громко говорил о CWE-257 - о том, что какой бы метод вы ни использовали, вы (администратор) все равно можете восстановить пароль. Так как насчет этих вариантов:

  1. Зашифруйте пароль с помощью чужого открытого ключа - какого-то внешнего авторитета. Таким образом, вы не сможете восстановить его лично, и пользователю придется обратиться к этому внешнему органу и попросить восстановить свой пароль.
  2. Зашифруйте пароль с помощью ключа, сгенерированного из второй парольной фразы. Выполняйте это шифрование на стороне клиента и никогда не передавайте его на сервер в открытом виде. Затем для восстановления снова выполните расшифровку на стороне клиента, повторно сгенерировав ключ из их ввода. По общему признанию, этот подход в основном использует второй пароль, но вы всегда можете попросить их записать его или использовать старый подход с секретными вопросами.

Я думаю, что 1. - лучший выбор, потому что он позволяет вам назначить кого-то в компании клиента, чтобы держать закрытый ключ. Убедитесь, что они сами генерируют ключ и хранят его вместе с инструкциями в сейфе и т. Д. Вы даже можете повысить безопасность, выбрав только шифрование и передачу определенных символов из пароля внутренней третьей стороне, чтобы им пришлось взламывать пароль, чтобы угадать Это. Подавая этих персонажей пользователю, он наверняка вспомнит, что это было!

person Phil H    schedule 18.02.2010
comment
И, конечно же, вы можете использовать любую технику разделения секрета, чтобы потребовать несколько человек от вашей компании для расшифровки. Но ничто из этого не удовлетворяет первоначальным требованиям - иметь возможность отправлять пользователю пароли по почте или иметь какого-нибудь заурядного телефонного помощника первого уровня, который поможет ему войти в систему. - person Christopher Creutzig; 24.02.2010

В ответ на этот вопрос пользователи много обсуждали проблемы безопасности, но я хотел бы добавить упоминание о преимуществах. До сих пор я не встречал упоминания о одном законном преимуществе наличия восстанавливаемого пароля, хранящегося в системе. Учти это:

  • Выгодно ли пользователю получать его пароль по электронной почте? Нет. Они получают больше преимуществ от одноразовой ссылки для сброса пароля, которая, надеюсь, позволит им выбрать пароль, который они будут помнить.
  • Выгодно ли пользователю отображение пароля на экране? Нет, по той же причине, что и выше; они должны выбрать новый пароль.
  • Выгодно ли пользователю, чтобы человек из службы поддержки говорил ему пароль? Нет; Опять же, если специалист службы поддержки считает, что запрос пользователя на его пароль правильно аутентифицирован, для пользователя будет больше пользы, если ему будет предоставлен новый пароль и возможность его изменить. Кроме того, поддержка по телефону обходится дороже, чем автоматический сброс пароля, поэтому компания также не выигрывает.

Кажется, единственные, кто может извлечь выгоду из восстанавливаемых паролей, - это те, у кого есть злой умысел, или сторонники плохих API, требующих стороннего обмена паролями (пожалуйста, никогда не используйте указанные API!). Возможно, вам удастся выиграть свой аргумент, если честно заявить своим клиентам, что компания не получает никаких преимуществ, а только несет ответственность, храня пароли с возможностью восстановления.

Читая между строк этих типов запросов, вы увидите, что ваши клиенты, вероятно, не понимают или даже вообще не заботятся о том, как управляются пароли. На самом деле им нужна система аутентификации, которая не так уж сложна для их пользователей. Таким образом, помимо объяснения им, почему они на самом деле не хотят восстанавливать пароли, вы должны предложить им способы сделать процесс аутентификации менее болезненным, особенно если вам не нужны высокие уровни безопасности, например, в банке:

  • Разрешить пользователю использовать свой адрес электронной почты в качестве имени пользователя. Я видел бесчисленное количество случаев, когда пользователь забывает свое имя пользователя, но мало кто забывает свой адрес электронной почты.
  • Предложите OpenID и позвольте третьей стороне оплатить расходы, связанные с забывчивостью пользователя.
  • Избавьтесь от ограничений пароля. Я уверен, что мы все были невероятно раздражены, когда на каком-то веб-сайте не разрешено использование вашего предпочтительного пароля из-за бесполезных требований, таких как «вы не можете использовать специальные символы» или «ваш пароль слишком длинный» или «ваш пароль должен начинаться. с письмом ". Кроме того, если простота использования важнее, чем надежность пароля, вы можете ослабить даже не глупые требования, разрешив более короткие пароли или не требуя сочетания классов символов. При ослаблении ограничений пользователи с большей вероятностью будут использовать пароль, который они не забудут.
  • Не теряйте срок действия паролей.
  • Разрешить пользователю повторно использовать старый пароль.
  • Разрешить пользователю выбирать собственный вопрос для сброса пароля.

Но если вам по какой-то причине (и, пожалуйста, сообщите нам причину) действительно, действительно, действительно нужна возможность иметь восстанавливаемый пароль, вы можете защитить пользователя от потенциальной компрометации его других учетных записей в Интернете, предоставляя им систему аутентификации, не основанную на пароле. Поскольку люди уже знакомы с системами имени пользователя и пароля, и они представляют собой хорошо отработанное решение, это будет крайним средством, но, безусловно, есть множество творческих альтернатив паролям:

  • Позвольте пользователю выбрать числовой пин, желательно не 4-значный, и желательно только в том случае, если от попыток перебора защищена защита.
  • Попросите пользователя выбрать вопрос с коротким ответом, на который только он знает ответ, никогда не изменится, он всегда будет помнить и не возражает против того, чтобы это узнали другие люди.
  • Попросите пользователя ввести имя пользователя, а затем нарисовать легко запоминающуюся фигуру с достаточным количеством перестановок для защиты от угадывания (см. это отличное фото того, как G1 делает это для разблокировки телефона).
  • Для детского веб-сайта вы можете автоматически сгенерировать нечеткое существо на основе имени пользователя (что-то вроде идентификатора) и попросить пользователя дать существу секретное имя. Затем им может быть предложено ввести секретное имя существа для входа в систему.
person Jacob    schedule 27.02.2010
comment
Я ответил на комментарии здесь, внизу в моем ответе, поскольку он был довольно длинным - я считаю важным пересмотреть анализ и обсуждение поднятых вопросов. stackoverflow.com/questions/2283937/ - person AviD; 01.03.2010
comment
Выгодно ли пользователю отображение пароля на экране? На мой взгляд - однозначно да! Каждый раз, когда я получаю непонятный пароль из Интернета, я благодарю Apple, что могу сделать его видимым, чтобы мне не приходилось набирать его 100 раз в мучениях. Представляю, как себя чувствует инвалид. - person Dmitri Zaitsev; 24.08.2013
comment
Почему показать непонятный пароль лучше, чем позволить вам выбрать новый пароль, который вы можете запомнить? - person Jacob; 25.08.2013
comment
@ Джейкоб: Больше энтропии? - person Alexander Shcheblikin; 08.03.2014

В соответствии с комментарием, который я сделал по вопросу:
Один важный момент был упущен почти всеми ... Моя первоначальная реакция была очень похожа на @Michael Brooks, пока я не понял, как @stefanw, что проблема здесь нарушены требования, но это то, что они есть.
Но потом мне пришло в голову, что это может быть даже не так! Отсутствует здесь невысказанная ценность ресурсов приложения. Проще говоря, для недорогой системы полностью безопасный механизм аутентификации со всеми задействованными процессами был бы излишним и неправильным выбором безопасности.
Очевидно, что для банка "лучший практики »являются обязательными, и нет никакого способа этически нарушить CWE-257. Но легко представить себе системы с низкой стоимостью, в которых оно того не стоит (но все же требуется простой пароль).

Важно помнить, что истинный опыт в области безопасности заключается в поиске подходящих компромиссов, а НЕ в догматическом изложении "передовых методов", которые каждый может прочитать в Интернете.

В связи с этим я предлагаю другое решение:
В зависимости от стоимости системы и ТОЛЬКО ЕСЛИ система имеет достаточно низкую стоимость без «дорогих» активов (включая саму идентификацию), И существуют действующие бизнес-требования, которые делают надлежащий процесс невозможным (или достаточно сложным / дорогостоящим), И клиент осведомлен обо всех предостережениях ...
Затем было бы уместно просто разрешить обратимое шифрование без каких-либо специальных обручей, через которые можно было бы перескочить.
Я останавливаюсь, чтобы сказать не беспокоиться о шифровании вообще, потому что это очень просто / дешево в реализации (даже с учетом проходного ключа management), и он ДЕЙСТВИТЕЛЬНО обеспечивает НЕКОТОРОЙ защиты (больше, чем затраты на его реализацию). Кроме того, стоит посмотреть, как предоставить пользователю исходный пароль, будь то по электронной почте, с отображением на экране и т. Д.
Поскольку здесь предполагается, что ценность украденного пароля (даже в совокупности) довольно низка , любое из этих решений может быть верным.


Поскольку идет оживленное обсуждение, на самом деле НЕСКОЛЬКО оживленных дискуссий в разных сообщениях и отдельных ветках комментариев, я добавлю некоторые пояснения и отвечу на некоторые из очень хороших моментов, которые были подняты в другом месте здесь.

Для начала, я думаю, что всем здесь ясно, что разрешение восстановления исходного пароля пользователя - это плохая практика и, как правило, не лучшая идея. Это нисколько не оспаривается ...
Далее подчеркну, что во многих, а точнее, в БОЛЬШИНСТВЕ ситуаций - это действительно неправильно, даже грязный, противный И некрасивый.

Однако суть вопроса заключается в принципе: Есть ли ситуация, когда нет необходимости запрещать это, и если да, то как это сделать в наиболее правильный способ, соответствующий ситуации.

Как отметили @Thomas, @sfussenegger и некоторые другие, единственный правильный способ ответить на этот вопрос - это провести тщательный анализ риска любой заданной (или гипотетической) ситуации, чтобы понять, что поставлено на карту. , сколько стоит защищать и какие еще существуют меры по снижению рисков.
Нет, это НЕ модное слово, это один из основных и наиболее важных инструментов для настоящего профессионала в области безопасности. Лучшие практики хороши до определенного момента (обычно в качестве рекомендаций для неопытных и хакеров), после чего начинает действовать вдумчивый анализ рисков.

Знаете, это забавно - я всегда считал себя одним из фанатиков безопасности, и почему-то я нахожусь на противоположной стороне этих так называемых «экспертов по безопасности» ... Ну, правда в том, что я фанатик, и реальный эксперт по безопасности - я не верю в распространение догмы "передовой практики" (или CWE) БЕЗ этого важнейшего анализа рисков.
"Остерегайтесь фанатика безопасности, который быстро применять все, что есть в их поясе с инструментами, не зная, от какой реальной проблемы они защищаются. Повышение безопасности не обязательно означает хорошую безопасность ».
Анализ рисков и истинные фанатики безопасности указали бы на более разумное, ценность / компромисс на основе риска, основанный на риске, потенциальных убытках, возможных угрозах, дополнительных мерах по смягчению последствий и т.д. догмы и CWE, даже не понимая, как проводить анализ рисков, не имеют значения, • Взломщики системы безопасности и их опыт не стоят той туалетной бумаги, на которой они ее напечатали.

В самом деле, именно так мы получаем нелепость, которую представляет служба безопасности аэропорта.

Но прежде чем мы поговорим о соответствующих компромиссах в ЭТОЙ СИТУАЦИИ, давайте посмотрим на очевидные риски (очевидные, поскольку у нас нет всей исходной информации об этой ситуации, мы все предполагаем - поскольку вопрос в том, какие гипотетические ситуация может быть ...)
Давайте предположим, что система НИЗКАЯ ЦЕННОСТЬ, но не настолько тривиальная, чтобы иметь открытый доступ - владелец системы хочет предотвратить случайное олицетворение, но "высокая" безопасность не так важна, как простота использования . (Да, это законный компромисс - ПРИНИМАТЬ риск того, что любой опытный скрипач может взломать сайт ... Погодите, разве APT сейчас не в моде ...?)
Например, скажем, я ' m организовать простое место для сбора большой семьи, что позволит каждому провести мозговой штурм о том, куда мы хотим отправиться в поход в этом году. Меня меньше беспокоит какой-нибудь анонимный хакер или даже кузен Фред, выдавливающий повторяющиеся предложения вернуться к озеру Вантанаманабикилики, поскольку я беспокоюсь о том, что тетя Эрма не сможет войти в систему, когда ей это нужно. Итак, тетя Эрма, физик-ядерщик, не очень хорошо запоминает пароли и даже не умеет пользоваться компьютерами ... Так что я хочу устранить все возможные трения. Опять же, меня НЕ беспокоят взломы, я просто не хочу глупых ошибок неправильного входа в систему - я хочу знать, кто идет и чего они хотят.

В любом случае.
Итак, каковы наши основные риски, если мы будем шифровать пароли симметрично, а не использовать односторонний хэш?

  • Выдает себя за пользователей? Нет, я уже пошел на этот риск, не интересно.
  • Злой администратор? Ну, может быть ... Но опять же, меня не волнует, сможет ли кто-то выдать себя за другого пользователя, ВНУТРЕННЯЯ или нет ... и в любом случае злонамеренный администратор получит ваш пароль независимо от того, что - если ваш администратор ушел плохо, игра все равно окончена.
  • Другой вопрос, который был поднят, заключается в том, что идентичность фактически используется несколькими системами. Ах! Это очень интересный риск, который требует более пристального внимания.
    Позвольте мне начать с утверждения, что это не настоящая личность, которой мы делимся, а доказательство или учетные данные аутентификации. Хорошо, поскольку общий пароль фактически позволит мне войти в другую систему (скажем, мой банковский счет или Gmail), это фактически тот же идентификатор, так что это просто семантика ... За исключением того, что это не . В этом сценарии идентификация управляется отдельно каждой системой (хотя могут быть сторонние системы идентификации, такие как OAuth - все же, в этой системе она отделена от идентификационной информации - подробнее об этом позже).
    Таким образом, ядро Здесь есть риск, связанный с тем, что пользователь добровольно вводит свой (один и тот же) пароль в несколько разных систем - и теперь я (администратор) или любой другой хакер моего сайта будет иметь доступ к паролям тети Эрмы для сайта ядерных ракет.

Хм.

Вам здесь что-то не нравится?

Должно.

Начнем с того факта, что защита ракетно-ядерной системы - это не моя ответственность, я просто строю место для прогулок семьи Фраккинов (для МОЕЙ семьи). Так чья это ответственность? Эмм ... А как насчет ракетно-ядерной системы? Да.
Во-вторых, если бы я хотел украсть чей-то пароль (кто-то, кто, как известно, неоднократно использует один и тот же пароль между безопасными и небезопасными сайтами) - зачем мне взламывать ваш сайт? Или боретесь с симметричным шифрованием? Гошдарниталл, я могу просто создать свой собственный простой веб-сайт, чтобы пользователи подписывались, чтобы получать ОЧЕНЬ ВАЖНЫЕ НОВОСТИ обо всем, что они хочу ... Паффо Престо, я «украл» их пароли.

Да, обучение пользователей всегда возвращает нас, чтобы укусить нас, не так ли?
И с этим ничего не поделать ... Даже если вы БЫЛИ хешировали их пароли на своем сайте и делали все остальное TSA может придумать, что вы добавили защиту их паролю НЕ ОДИН БЕЛЫЙ, если они собираются и дальше беспорядочно вставлять свои пароли на каждый сайт, на который они натыкаются. ДАЖЕ не пытайтесь.

Другими словами, их пароли не принадлежат вам, поэтому перестаньте вести себя так, как вы.

Итак, мои дорогие эксперты по безопасности, как старая женщина спрашивала Венди: «ГДЕ риск?»

Еще несколько моментов в ответ на некоторые вопросы, поднятые выше:

  • CWE - это не закон, не постановление или даже не стандарт. Это набор общих недостатков, т. Е. Противоположность "передового опыта".
  • Проблема общей идентичности - актуальная проблема, но ее неправильно понимают (или искажают) скептики. Это проблема совместного использования идентичности как таковой (!), А НЕ взлом паролей в малоэффективных системах. Если вы разделяете пароль между системой с низкой и высокой стоимостью, проблема уже существует!
  • Кстати, предыдущий пункт на самом деле указывал бы ПРОТИВ использования OAuth и т.п. как для этих малоэффективных систем, так и для высокодоходных банковских систем.
  • Я знаю, что это был всего лишь пример, но (к сожалению) системы ФБР на самом деле не самые надежные. Не совсем как серверы блога вашей кошки, но и не превосходят некоторые из более безопасных банков.
  • Разделение знаний или двойной контроль ключей шифрования происходит НЕ только в вооруженных силах, на самом деле PCI-DSS теперь требует этого практически от всех продавцов, так что это уже не так далеко (ЕСЛИ значение оправдывает это).
  • Всем тем, кто жалуется, что именно такие вопросы заставляют профессию разработчика выглядеть так плохо: именно такие ответы делают профессию безопасности еще хуже. Опять же, анализ рисков, ориентированный на бизнес, - это то, что необходимо, иначе вы станете бесполезным. Помимо того, что ошибаюсь.
  • Думаю, именно поэтому не стоит брать обычного разработчика и возлагать на него больше ответственности за безопасность, не обучая мыслить по-другому и искать правильные компромиссы. Без обид, для тех из вас, кто здесь, я полностью за это, но нужно еще тренироваться.

Уф. Какой длинный пост ...
Но чтобы ответить на ваш первоначальный вопрос, @Shane:

  • Объясните клиенту, как правильно поступать.
  • Если он все еще настаивает, объясните еще, настаивайте, спорьте. Если нужно, устроите истерику.
  • Объясните ему ДЕЛОВЫЙ РИСК. Детали хороши, цифры лучше, живая демонстрация обычно лучше.
  • ЕСЛИ ОН ВСЕ ЕЩЕ настаивает и представляет веские бизнес-причины - пришло время высказать свое мнение:
    Этот сайт имеет низкую или нулевую ценность? Действительно ли это обоснованный бизнес-пример? Вам этого достаточно? Есть ли какие-либо другие риски, которые могут перевесить веские бизнес-причины? (И, конечно, клиент НЕ является вредоносным сайтом, но это так).
    Если это так, просто продолжайте. Не стоит прилагать усилия, трение и упущенное использование (в этой гипотетической ситуации), чтобы запустить необходимый процесс. Любое другое решение (опять же в этой ситуации) - плохой компромисс.

Итак, итоги и фактический ответ - зашифруйте его с помощью простого симметричного алгоритма, защитите ключ шифрования с помощью надежных списков ACL и, предпочтительно, DPAPI или тому подобного, задокументируйте его и попросите клиента (кого-то достаточно старшего, чтобы принять это решение) подписать Это.

person AviD    schedule 23.02.2010
comment
Пароли, используемые вашим дешевым сайтом без дорогих ресурсов и Facebook / GMail / вашим банком, являются дорогостоящим активом даже на малоценных сайтах. - person jammycakes; 23.02.2010
comment
Я думаю, проблема здесь в том, что вышеупомянутые группы пользователей склонны использовать один и тот же пароль для всех приложений с разными уровнями безопасности (от банковского дела до блогов рецептов). Итак, вопрос в том, несет ли разработчик ответственность за защиту пользователей даже от самих себя. Однозначно скажу да! - person ercan; 23.02.2010
comment
@jammycakes, @ercan - Я согласен в принципе, но обратите внимание, что я сказал, что нет дорогостоящего актива, включая саму личность. Теперь его семантика, является ли общий пароль идентификатором ... И да, пароли будут совместно использоваться всеми приложениями, но разработчик не может защитить пользователя от выдачи пароля банка на любом из имеющихся сайтов, включая вредоносные сайты. ! Итак, чтобы не вдаваться в дальнейшие споры по этому поводу, я должен просто подчеркнуть - действительно должна быть какая-то форма экранных инструкций для пользователя НЕ использовать один и тот же пароль, информируя его о рисках и т. Д. - person AviD; 23.02.2010
comment
Извините, но сама личность - это ценный актив, и точка. Никаких исключений, никаких оправданий. Неважно, насколько мал и незначителен ваш сайт. А общий пароль является идентификатором, если он позволяет хакеру проникать в учетные записи ваших пользователей Facebook, Gmail, банковские счета и т. Д. Это не имеет никакого отношения к семантике, но все имеет отношение к последствиям. Просто спросите любого, кто пострадал от хакерской атаки, такой как эта: реестр. co.uk/2009/08/24/4chan_pwns_christians - person jammycakes; 24.02.2010
comment
До сих пор неясно, что пользователь или гипотетическая компания на самом деле выигрывает от наличия восстанавливаемого пароля по сравнению с возможностью сбросить пароли. Так что, даже если защита наших пользователей не является нашей обязанностью, зачем возлагать на наших клиентов потенциальную ответственность за отсутствие добавленной стоимости? Если нашим клиентам предъявлен иск о возмещении ущерба из-за взлома других учетных записей Эммы, они расплачиваются за это независимо от того, сочтут ли суды в ее пользу. - person Jacob; 01.03.2010
comment
@ Джейкоб, в каком мире к вашему клиенту предъявят иск из-за взлома учетных записей Эрмы в других системах? Даже учитывая грубую халатность со стороны вашего клиента (которая НЕ является данностью, как я пояснил), И ПОСЛЕ того факта, что НЕТ СПОСОБА доказать, что другая система была взломана из-за вашей, нет никакого возможного юридического статуса для требовать возмещения любого ущерба от одной системы к другой системе. Оно будет исключено из суда с предубеждением и с неуважением к истцу. Однако Эрма может быть виновата в нарушении многочисленных Условий обслуживания ... - person AviD; 01.03.2010
comment
Если учетные записи были скомпрометированы из-за того, что кто-то в вашей компании восстановил пароль Эммы, и было доказано, что это произошло, на вашу компанию могут быть предъявлены иски из-за слабой практики безопасности. И неважно, вынесут ли суды решение в ее пользу; ваша компания по-прежнему должна выделять ресурсы на рассмотрение судебных споров и сталкивается с последствиями потери клиентов из-за дела. Зачем заставлять компанию проходить через это? По-прежнему нет причин, по которым компания может захотеть восстановить пароль. - person Jacob; 02.03.2010
comment
@ Джейкоб, это очень неправильно. Просто потому, что пароль один и тот же (что явно нарушит ваши Условия использования и их политику безопасности), у них нет законного права на их соответствие. Это даже ПОСЛЕ того факта, что ДОКАЗАТЬ это было бы почти невозможно. В стороне, я также отмечу, что НЕ существует ЗАКОНА, который требовал бы от случайной компании, чтобы она не применяла слабые методы обеспечения безопасности, если не применяются особые правила. Вдобавок к этому пароли зашифрованы (!), Так что нельзя забывать об их небрежности. - person AviD; 02.03.2010
comment
И, кстати, помимо приведенного выше обсуждения бизнес-требований, ЕСТЬ законные (хотя и нехорошие) ТЕХНИЧЕСКИЕ причины для использования обратимо зашифрованных паролей. Это одна из причин, по которым PCI-DSS требует симметричного шифрования паролей пользователей! - person AviD; 02.03.2010
comment
До сих пор не слышал, каковы эти законные причины, если только в обсуждение не были добавлены новые, которых я не видел. И вы упустили мою мысль о том, что даже не имеет значения, будет ли закон на стороне компании. Ни одна компания не захочет иметь репутацию ответственной за разглашение паролей своих клиентов, даже если суд не признает их виновными. И да, это может быть доказано, если кто-то ворует пароли при правильном ведении журнала и аудита, но не то, чтобы сложность доказательства правонарушения в любом случае оправдывала правонарушение. - person Jacob; 02.03.2010
comment
Сохранение любой полученной информации - это всегда ваша проблема, а не кто-то другой. - person Anigel; 12.07.2016

Как насчет дома на полпути?

Храните пароли с надежным шифрованием и не допускайте сброса.

Вместо сброса паролей разрешите отправку одноразового пароля (который необходимо изменить при первом входе в систему). Затем позвольте пользователю сменить пароль на любой (предыдущий, если они захотят).

Вы можете «продать» это как безопасный механизм для сброса паролей.

person Oded    schedule 17.02.2010
comment
Вы знаете, я использовал это в нескольких ситуациях (обычно это моя золотая середина), но люди говорили мне, что конечный пользователь просто не получит взаимодействия, и что служба поддержки должна иметь возможность `` сказать им их пароль «из-за обстоятельств в этой бизнес-модели». Я согласен с тем, что по возможности это предпочтительнее. - person Shane; 17.02.2010
comment
Вы всегда можете сообщить своему клиенту о риске попадания его базы данных в злые руки и о том, что украденные пароли станут известны огласке ... Примеров множество. - person Oded; 17.02.2010
comment
Ха! Да, это относится к категории «ожесточенная борьба». Я даже предупреждаю о потенциальных судебных исках (хотя я не знаю из первых рук о том, что когда-либо происходило, я не понимаю, почему это не могло быть), если пароли утеряны из-за нарушений безопасности. - person Shane; 17.02.2010
comment
Попросите их подписать дизайн с добавлением пункта о том, что они не могут подавать на вас в суд, если то, о чем вы их предупреждали, действительно произойдет ... По крайней мере, тогда вы прикрываетесь. - person Oded; 17.02.2010
comment
Если вы собираетесь отправлять одноразовые пароли, то в первую очередь вы могли бы сохранить соленый хеш. - person Steven Sudit; 17.02.2010
comment
-1 пароли никогда не должны быть зашифрованы. Это нарушение CWE-257 cwe.mitre.org /data/definitions/257.html - person rook; 18.02.2010
comment
@Michael Brooks: Нет необходимости понижать и копировать один и тот же комментарий снова и снова; мы все знаем, что это плохая практика. Шейн заявил, что у него нет рычагов в этом вопросе, и поэтому предлагаются следующие лучшие решения. - person Johannes Gorset; 18.02.2010

Единственный способ разрешить пользователю восстановить свой исходный пароль - это зашифровать его с помощью собственного открытого ключа пользователя. Только этот пользователь может затем расшифровать свой пароль.

Итак, шаги будут такими:

  1. Пользователь регистрируется на вашем сайте (разумеется, через SSL), еще не установив пароль. Авторизуйтесь автоматически или введите временный пароль.
  2. Вы предлагаете сохранить их открытый ключ PGP для восстановления пароля в будущем.
  3. Они загружают свой открытый ключ PGP.
  4. Вы просите их установить новый пароль.
  5. Они отправляют свой пароль.
  6. Вы хешируете пароль, используя лучший из доступных алгоритмов хеширования паролей (например, bcrypt). Используйте это при подтверждении следующего входа в систему.
  7. Вы шифруете пароль открытым ключом и храните его отдельно.

Если пользователь затем запросит свой пароль, вы ответите зашифрованным (не хешированным) паролем. Если пользователь не желает получать свой пароль в будущем (он сможет только сбросить его на пароль, созданный службой), шаги 3 и 7 можно пропустить.

person Nicholas Shanks    schedule 28.05.2013
comment
У большинства пользователей нет ключа PGP (у меня его до сих пор нет; после 20 лет работы в отрасли я никогда не чувствовал в этом необходимости), и получение ключа не является простым процессом. Кроме того, закрытый ключ в любом случае является просто прокси для действительного пароля. Другими словами, это пароль вместо пароля; это черепахи до самого конца. - person Robert Harvey; 22.07.2013
comment
@RobertHarvey Цель состоит в том, чтобы позволить пользователю получить свой пароль, не позволяя сотрудникам сайта или любым хакерам получить его. Требуя, чтобы процесс извлечения происходил на собственном компьютере пользователя, вы обеспечиваете это. Вполне могут быть альтернативы PGP, которые могли бы добиться того же. Могут быть черепахи (возможно, несколько слонов по пути), но я не вижу другого выхода. Для населения в целом (вряд ли для индивидуального таргетинга) наличие ваших паролей на листе бумаги и невозможность их получения из службы было бы более безопасным, чем мы в настоящее время. - person Nicholas Shanks; 22.07.2013
comment
Мне это нравится, потому что это заставляет всех иметь открытый ключ PGP, что, как ни странно, очень этично. - person Lodewijk; 05.08.2014
comment
вы можете просто сгенерировать его и передать пользователю. - person My1; 17.02.2016
comment
@RobertHarvey Возможно, вы правы, что это не беспроблемный процесс, но это может быть дополнительная услуга для опытных пользователей, которые обычные пользователи могут игнорировать. Что касается аргумента о том, что ПК является паролем для пароля, помните, что теоретически это может быть так для многих паролей; вы можете использовать разные пароли для разных служб и шифровать их все с помощью одного и того же ключа. Тогда PK будет более ценным, чем просто один пароль. Возможно, это абстрактно сравнимо с менеджером паролей (?). Мне не сразу понятно, к каким последствиям это может привести ... - person Kjartan; 23.11.2016

Я думаю, что реальный вопрос, который вы должны задать себе: «Как я могу лучше убеждать людей?»

person z-boss    schedule 17.02.2010
comment
@sneg - Ну, я очень убедительный парень, но иногда это начальник, а иногда покупатель, поэтому у меня не всегда есть рычаги влияния, которые мне нужны, чтобы убедить их так или иначе. Хотя я еще попрактикуюсь перед зеркалом ..;) - person Shane; 18.02.2010
comment
Чтобы быть убедительным, вам на самом деле не нужны никакие рычаги, кроме вашей компетенции и коммуникативных навыков. Если вы знаете, как лучше что-то сделать, но люди не слушают ... Подумайте об этом. - person z-boss; 19.02.2010
comment
@ z-boss - По-видимому, вы не работали / с некоторыми из тех, с которыми я имел удовольствие работать. Иногда не имеет значения, покрыт ли ваш язык золотом, и вы можете перепрограммировать Google Chrome за день (что, возможно, действительно может сделать его полезным), они все равно не сдвинутся с места. - person Shane; 25.02.2010

У меня такая же проблема. И точно так же я всегда думаю, что кто-то взломает мою систему, это не вопрос «если», а «когда».

Итак, когда мне нужно создать веб-сайт, на котором должна храниться конфиденциальная информация, которую можно восстановить, например, кредитная карта или пароль, я делаю это:

  • encrypt with: openssl_encrypt(string $data , string $method , string $password)
  • data arg:
    • the sensitive information (e.g. the user password)
    • при необходимости сериализуйте, например если информация представляет собой массив данных, например, несколько конфиденциальных данных
  • password arg: use a information that only the user know like:
    • the user license plate
    • номер социального страхования
    • номер телефона пользователя
    • имя матери пользователя
    • случайная строка, отправляемая по электронной почте и / или sms во время регистрации
  • method arg:
    • choose one cipher method, like "aes-256-cbc"
  • НИКОГДА не храните информацию, используемую в аргументе "пароль", в базе данных (или в любом другом месте в системе).

Когда необходимо получить эти данные, просто используйте функцию «openssl_decrypt ()» и спросите у пользователя ответ. Например: «Чтобы получить пароль, ответьте на вопрос: какой у вас номер мобильного телефона?»

PS 1: никогда не используйте в качестве пароля данные, хранящиеся в базе данных. Если вам нужно сохранить номер мобильного телефона пользователя, никогда не используйте эту информацию для кодирования данных. Всегда используйте информацию, которую знает только пользователь или которую трудно узнать кому-то постороннему.

PS 2: для информации о кредитной карте, такой как «покупка в один клик», я использую пароль для входа. Этот пароль хешируется в базе данных (sha1, md5 и т. Д.), Но во время входа в систему я сохраняю пароль в виде обычного текста в сеансе или в непостоянном (то есть в памяти) безопасном файле cookie. Этот простой пароль никогда не остается в базе данных, он всегда остается в памяти и уничтожается в конце раздела. Когда пользователь нажимает кнопку «покупка в один клик», система использует этот пароль. Если пользователь вошел в систему с помощью такой службы, как facebook, twitter и т. Д., То я снова запрашиваю пароль во время покупки (хорошо, это не полностью "по щелчку") или затем использую некоторые данные службы, которую пользователь использовал для входа в систему (как идентификатор facebook).

person Daniel Loureiro    schedule 27.04.2013

Защита учетных данных не является бинарной операцией: безопасно / небезопасно. Безопасность - это оценка рисков, которая измеряется непрерывно. Фанатики безопасности ненавидят так думать, но отвратительная правда в том, что ничто не является абсолютно безопасным. Хешированные пароли с жесткими требованиями к паролям, образцы ДНК и сканирование сетчатки глаза более безопасны, но за счет разработки и взаимодействия с пользователем. Открытые пароли гораздо менее безопасны, но их дешевле реализовать (но их следует избегать). В конце концов, все сводится к анализу затрат и выгод от взлома. Вы реализуете безопасность на основе ценности защищаемых данных и их временной стоимости.

Какова цена выхода чьего-либо пароля на свободу? Какова стоимость выдачи себя за другое лицо в данной системе? Для компьютеров ФБР цена может быть огромной. Для одноразового пятистраничного веб-сайта Боба стоимость может быть незначительной. Профессионал предоставляет своим клиентам варианты и, когда дело доходит до безопасности, излагает преимущества и риски любого внедрения. Это вдвойне верно, если клиент запрашивает что-то, что может поставить его под угрозу из-за несоблюдения отраслевых стандартов. Если клиент специально запрашивает двустороннее шифрование, я гарантирую, что вы задокументируете свои возражения, но это не должно помешать вам реализовать его наилучшим из известных вам способов. В конце концов, это деньги клиента. Да, вы должны настаивать на использовании односторонних хэшей, но говорить, что это абсолютно единственный выбор, а все остальное неэтично, - полная чушь.

Если вы храните пароли с двусторонним шифрованием, безопасность сводится к управлению ключами. Windows предоставляет механизмы для ограничения доступа к закрытым ключам сертификатов административными учетными записями и паролями. Если вы размещаете на других платформах, вам нужно будет посмотреть, какие варианты у вас есть на них. Как предлагали другие, вы можете использовать асимметричное шифрование.

Я знаю, что не существует закона (ни Закона о защите данных в Великобритании), в котором конкретно говорится, что пароли должны храниться с использованием односторонних хешей. Единственное требование в любом из этих законов - это просто принятие разумных мер для обеспечения безопасности. Если доступ к базе данных ограничен, даже пароли с открытым текстом могут подпадать под такое ограничение по закону.

Однако при этом обнаруживается еще один аспект: приоритет закона. Если верховенство закона предполагает, что вы должны использовать односторонние хэши с учетом отрасли, в которой создается ваша система, то это совершенно другое. Это боеприпасы, которые вы используете, чтобы убедить своего клиента. Если этого не сделать, это лучшее предложение для обеспечения разумной оценки рисков, документирования ваших возражений и внедрения системы наиболее безопасным способом, который вы можете с учетом требований клиента.

person Community    schedule 27.02.2010
comment
В вашем ответе полностью игнорируется тот факт, что пароли повторно используются на нескольких сайтах / службах, что является центральным в этой теме и является самой причиной, по которой восстанавливаемые пароли считаются серьезным недостатком. Специалист по безопасности не делегирует решения по безопасности нетехническому клиенту; профессионал знает, что его обязанности выходят за рамки платежеспособного клиента и не предлагают варианты с высоким риском и нулевым вознаграждением. -1 за напыщенную риторику и предельно легкую информацию о фактах - и даже за то, что не ответил на вопрос. - person Aaronaught; 28.02.2010
comment
Опять же, вы полностью упускаете из виду оценку рисков. Чтобы использовать ваш аргумент, вы не можете останавливаться только на односторонних хэшах. Вы должны ТАКЖЕ указать требования к сложности, длине пароля, ограничениям на повторное использование пароля и так далее. Утверждение, что пользователи будут использовать глупые пароли или повторно использовать пароли, не является достаточным коммерческим оправданием, если система неуместна, и, честно говоря, я ответил на этот вопрос. Краткий ответ: настаивайте на использовании реализации std, задокументируйте свои возражения, если вас отклонят, и двигайтесь дальше. - person Thomas; 28.02.2010
comment
О, я понимаю, по сути, вы говорите, что безопасность - это все или ничего, и если у вас не может быть всего этого, то вам также не следует беспокоиться об односторонних хэшах? Я предполагаю, что вы на самом деле никогда не проводили оценку рисков, потому что восстанавливаемые пароли обычно являются одной из первых вещей, которые вы ищете. - person Aaronaught; 28.02.2010
comment
И снова вы повторяете утку, что все это не имеет значения для малоценной системы! Значение пароля пользователя не имеет ничего общего со значением учетной записи пользователя в вашей системе. Это секрет, который вы должны всегда хранить. Хотел бы я дать еще -1 за комментарий, демонстрирующий, что вы все еще не понимаете проблемы здесь. - person Aaronaught; 28.02.2010
comment
@Aaronnaught:, а если у вас не может быть всего этого, то не стоит беспокоиться и об односторонних хэшах? Вы изучаете второкурсник. Я прошу ВАС оправдать ВАШУ позицию по защите от повторного использования pwd, тогда ясно, что каждая система, которую вы строите, также должна иметь все эти другие требования pwd, иначе ваш аргумент будет пуст. - person Thomas; 28.02.2010
comment
Оценка рисков - это ключевая проблема. Повторное использование пароля - это лишь одна из потенциальных проблем в гораздо более широком наборе проблем. Почему не требуются брелки? Почему бы не потребовать, чтобы этот человек подъехал к вам в офис для входа в систему? Без разумной оценки рисков невозможно ответить на эти вопросы. В вашем мире все является риском, поэтому каждая система требует безопасности входа на уровне ФБР. В реальном мире это просто не так. - person Thomas; 28.02.2010
comment
Единственное, что здесь ясно, это то, что весь ваш аргумент - не более чем заблуждение о скользком спуске и что вы пытаетесь запугать читателей такими модными словечками, как оценка риска, чтобы скрыть этот факт. Будьте уверены, какая бы система ни использовала ФБР, она будет намного более безопасной, чем хэш bcrypt и минимальная длина пароля. Если требование систем аутентификации отраслевого стандарта делает меня фанатиком безопасности, то, думаю, я фанатик; Лично мне больно знать, что есть люди, готовые пожертвовать МОЕЙ безопасностью ради денег. Это неэтично. - person Aaronaught; 28.02.2010
comment
Использование ФБР будет гораздо более безопасным, чем хэш bcrypt и минимальная длина пароля. Почему вы полагаете, что системы ФБР предъявляют более строгие требования к безопасности, чем большинство систем, или, более конкретно, почему большинство систем не имеют этих требований безопасности? Ответьте на этот вопрос, и вы сможете ответить, почему существует огромная разница между концепцией разумных мер безопасности и тем, что вы должны делать x во всех ситуациях. - person Thomas; 28.02.2010
comment
@Thomas: вы здесь рассуждаете так, будто соление и хеширование паролей - дорогостоящая и сложная задача. Это не так. Это очень просто (около дня работы компетентного разработчика) и при правильной реализации не влияет на удобство использования. Теперь Закон о защите данных. Согласен, он не явно требует использования хэшей с солью, но это настоятельно подразумевается тем, что вы настаиваете на том, чтобы вы принимали во внимание (а) доступные технические меры и (б) стоимость их реализации. Если вы действительно проведете анализ риска, вы увидите, что неспособность реализовать односторонний соленый хеш для паролей является явной безрассудством. - person jammycakes; 27.04.2011
comment
@jammycakes - Во-первых, с юридической точки зрения ни в одном законе нет ничего, что конкретно предписывало бы одностороннее хеширование. В каждом законе есть формулировка о принятии разумных мер по обеспечению безопасности, которым однозначно удовлетворяет двустороннее шифрование. - person Thomas; 27.04.2011
comment
@jammycakes - (Продолжение) Во-вторых, проблема в этом случае абсолютно не связана с техническими трудностями реализации хэшей, шифрования или управления ключами. Это связано с тем, что клиент специально требует восстановления паролей. Совершенно возможно сделать это, используя двустороннее шифрование, не проявляя безрассудства, иначе ни одно правительство или военные не стали бы использовать двустороннее шифрование для чего-либо. - person Thomas; 27.04.2011
comment
Я признал, что в законодательстве нет ничего явного в отношении хэшей с солью, но это подразумевается. Кроме того, не существует никакого бизнес-обоснования вообще (кроме незнания) для использования обратимого шифрования с паролями пользователей. Подсолить и хэшировать пароли несложно, а отправка пользователям одноразовой ссылки на страницу сброса пароля (а не нового пароля или существующего пароля) не только более безопасна, но и более удобна для пользователя, поскольку они этого не делают. нужно скопировать и вставить что-нибудь или вернуться к форме входа в систему, они попадают прямо туда одним щелчком мыши. - person jammycakes; 28.04.2011
comment
Кроме того, я не верю в сравнение с военными. Если вам нужно двустороннее обратимое шифрование на веб-сайте, вам необходимо хранить как свои публичные, так и частные ключи, где к ним может получить доступ веб-сервер. Итог таков: если ваши пользователи могут запрашивать свой пароль в виде обычного текста, это тоже потенциально может сделать хакер, если у вас есть дыра в безопасности где-то в системе - это полностью свело бы на нет смысл наличия двухстороннего шифрования в первую очередь. . Зачем внедрять что-то, что может быть ненадежным, если у вас есть надежная альтернатива за небольшую дополнительную плату или без нее? - person jammycakes; 28.04.2011
comment
@jammycakes - не существует неявных юридических обязательств. Есть то, что будет задержано в суде, и то, что нет. На сегодняшний день законы, касающиеся управления pwd, требуют разумных мер безопасности, для которых подходит двустороннее шифрование. Вы можете найти судебные иски, вращающиеся вокруг паролей в виде открытого текста, но ничего не использующего двустороннюю передачу. Опять же, рассматриваемая проблема не имеет абсолютно ничего общего с легкостью или сложностью реализации. Ничего такого. Все дело в том, что клиент делает конкретный запрос на обратимые пароли, несмотря на протесты OP. - person Thomas; 28.04.2011
comment
@jammycakes - Зачем реализовывать что-то, что может показаться ненадежным, если у вас есть надежная альтернатива за небольшую дополнительную плату или без нее? Потому что клиент, несмотря на такие аргументы, отверг вас. Я согласен с принятым ответом в том, что это вероятно из-за уродливых автоматических паролей, генерируемых при сбросе. Никто не сомневается, что одностороннее хеширование определенно является лучшей практикой. Я бы долго и упорно возражал против всего остального и документировал свои возражения. Однако, в конце концов, клиент оплачивает счета, и, в конечном итоге, это их выбор, если не считать юридических ограничений. - person Thomas; 28.04.2011
comment
@jammycakes - вам необходимо хранить как свои публичные, так и частные ключи там, где к ним может получить доступ веб-сервер. Ежедневно через двустороннюю передачу передаются и хранятся тысячи битов личной информации людей. Пример: кредитные карты. Когда Amazon сохраняет информацию о вашей копии, они используют двустороннее шифрование. Как они могут делать это с этической точки зрения? Короткий ответ - управление ключами. Это можно сделать так, чтобы только веб-сервер и доверенные лица имели доступ к ключам, а доступ к ключу регистрировался. Это проще и безопаснее, чем одностороннее? Отнюдь не. Но очевидно, что это можно сделать этично. - person Thomas; 28.04.2011
comment
Причина, по которой я упомянул Закон о защите данных, заключалась в том, что он дает разработчикам юридический аргумент для противодействия возражениям клиента, а сомнение в его действительности в данной ситуации подрывает этот аргумент. Если у вас есть такой клиент, который обращается за помощью к юристу, скорее всего, они все равно примут работоспособную альтернативу, если вы покажете им прототип. С другой стороны, если вы показали им работающий альтернативный прототип, и они все равно отвергнут вас, несмотря на то, что им сообщили о юридических последствиях, скорее всего, у вас на руках Проблемный клиент. - person jammycakes; 28.04.2011
comment
Еще одна вещь. Amazon не позволяет восстанавливать пароль в виде обычного текста - они реализуют ссылку для сброса пароля, как, конечно, и должны. Amazon также не позволяет восстановить вашу кредитную карту (за исключением последних четырех цифр) в виде обычного текста. Несомненно, у них есть открытый и закрытый ключи для шифрования и дешифрования полных кредитных карт на совершенно разных серверах, разделенных брандмауэрами, что делает невозможным общедоступный веб-сервер для дешифрования информации о кредитных картах. Маловероятно, что кто-то, кто требует восстанавливаемые пароли, захочет инвестировать в такую ​​инфраструктуру. - person jammycakes; 28.04.2011
comment
@jammycakes - я неоднократно заявлял, как в комментариях, так и в моем сообщении, что если есть законный прецедент, требующий невосстановимых паролей, это определенно оружие. Фактически, на этом разговор закончится. Проблема в том, что такой правовой приоритет не существует при использовании двустороннего шифрования. В Законе о защите данных не говорится, что вы должны использовать невосстановимые пароли. В нем просто говорится, что вы должны предпринять разумные шаги, и юристы клиента также это увидят. Давайте проясним: если у вас есть клиент, настаивающий на восстановлении паролей, он по определению является проблемным клиентом. - person Thomas; 28.04.2011
comment
@jammycakes - Моя точка зрения об Amazon заключалась не в том, что человек может восстановить свою информацию. Скорее, это секретная информация, которая, скорее всего, хранится с использованием шифрования. В какой-то момент Amazon должен расшифровать CC, чтобы клиент мог его использовать. Каждый день наша информация, даже секреты, хранятся с использованием шифрования. Можно поступать этично; просто гораздо лучше использовать хеши. Я не могу себе представить, чтобы я не смог убедить клиента использовать хеши, но, в конце концов, это деньги клиента. Если они требуют восстановления pwd, задокументируйте свои возражения, сделайте все, что в ваших силах, и двигайтесь дальше. - person Thomas; 28.04.2011
comment
Да, я знаю, что не могу указать на определенный юридический прецедент, но суть не в этом. Я считаю, что это аргумент, который вы можете представить клиенту в ответ на то, что он отвергает вас. Если они в конечном итоге потеряют пароли и если в суде будет показано, что им посоветовали более безопасную альтернативу, но они отказались от нее, они могут легко в конечном итоге стать этот правовой прецедент. Кроме того, даже если это не является незаконным, это все равно неэтично, потому что вы (или, скорее, ваш клиент) ставите под угрозу безопасность ценного актива без каких-либо уважительных причин. - person jammycakes; 29.04.2011
comment
@jammycakes - Конечно, вы можете предложить клиенту, что он может подать в суд за использование шифрования. Но если клиент знает хоть немного, он поймет, что это чушь. Даже если они потеряли базу данных, что само по себе маловероятно, все, что нужно показать, - это то, что вы предприняли разумные шаги и шифрование соответствует требованиям. Использование аргумента о том, что хэши являются более безопасным решением, вряд ли их убедит. Они, вероятно, согласятся, но скажут, что в этом нет необходимости, учитывая низкую ценность системы. - person Thomas; 29.04.2011
comment
@jammycakes - Использование шифрования вместо хэшей не менее этично, чем хранение любого другого типа личной или частной информации с использованием шифрования. Это не компромисс безопасности. Скорее, вы просто оставляете открытым еще один потенциальный вектор атаки. По вашей логике, можно утверждать, что разрешать пароли длиной менее пяти символов неэтично. Шифрование требует большего доверия к людям, управляющим системой, чем к хешам. Я бы никогда не рекомендовал шифрование паролей, но утверждение, что шифрование паролей в любой форме является неэтичным, просто экстремистски. - person Thomas; 29.04.2011
comment
(1) Это не экстремизм, это ответственность. (2) Я не знаю, понимаете ли вы это, но, говоря, что это не компромисс безопасности, вы просто оставляете открытым еще один потенциальный вектор атаки, которому вы только что противоречили. (3) Потеря базы данных не является маловероятным событием. Sony только на прошлой неделе потеряла семьдесят миллионов пользователей Playstation и данные кредитной карты, несмотря на то, что они считали строгими мерами безопасности. Мы говорим о реальных ситуациях, которые случаются снова и снова. - person jammycakes; 30.04.2011
comment
Еще раз о Законе о защите данных. Соответствующие части - это Приложение 1, Часть I, параграф 7, и Приложение 1, Часть II, параграфы 9–12. Это требует, чтобы вы использовали уровень безопасности, соответствующий ущербу, который может возникнуть в результате ... случайной потери, и принимая во внимание состояние технологического развития и стоимость реализации любых мер. Некоторое время назад я рассказал об этом более подробно в блоге здесь. - person jammycakes; 30.04.2011
comment
@jammycakes - 1. Оставление открытым потенциального вектора атаки НЕ является компромиссом (прошедшее время) безопасности. Поправьте свой словарный запас. 2. Утверждать, что невозможно реализовать какую-либо форму защиты паролей, которая является моральной (эквивалентной этической), нелепо по причинам, не последней из которых является то, что защищенная информация передается с использованием шифрования каждую минуту каждый день. 3. Утверждать, что из-за того, что Sony потеряла свою базу данных, и, следовательно, любые и все базы данных с такой же вероятностью могут быть украдены, является экстремистской чепухой, не говоря уже о статистической ошибочности. Sony - очень важная цель. Модный блог Боба - нет. - person Thomas; 02.05.2011
comment
@jammycakes - Кстати, ничто не мешает вам зашифровать базу данных, поэтому в случае ее кражи у вас есть еще один уровень защиты. - person Thomas; 02.05.2011
comment
@jammycakes - DPA, Приложение 1, Часть 2, 7-й принцип: Принимая во внимание состояние технологического развития и стоимость реализации любых мер, меры должны обеспечивать уровень безопасности, соответствующий (а) ущербу, который может в результате такой несанкционированной или незаконной обработки или случайной потери, уничтожения или повреждения, как указано в седьмом принципе. Чтобы выиграть в суде, вы должны доказать, что никакая другая технология, кроме хэшей, не соответствует этому счету. Для этого вам нужно будет показать, что военные, передавая секреты с помощью шифрования, также не нарушают этот принцип. - person Thomas; 02.05.2011
comment
@jammycakes - В случае, если вы пропустили убедительные детали: необходимо обеспечить уровень безопасности, соответствующий. Шифрование абсолютно соответствовало бы этим требованиям. Если вы зашифруете пароли с разумным уровнем контроля над ключами, вам будет чрезвычайно сложно доказывать в суде, что уместно только хеши. - person Thomas; 02.05.2011
comment
@Thomas: (1) Вы, очевидно, понимаете, что я использую слово «компромисс» как синоним нарушения. Я использовал слово «компромисс» как синоним компромисса. Другими словами, вы используете гораздо менее безопасную альтернативу, чем односторонние хэши - и что делает это неэтичным, так это то, что для этого решения нет никакого действительного технического обоснования. . Конечно, если бы им посоветовали использовать более надежную форму шифрования и сознательно отклонили их, они бы наверняка оказались на тонком льду с точки зрения закона. - person jammycakes; 02.05.2011
comment
@Thomas: (2) Аргумент о том, что модный блог Боба не является целью с высокой стоимостью, ошибочен по двум причинам. Во-первых, что касается паролей, то малоценных сайтов не существует просто потому, что люди повторно используют пароли. Во-вторых, база данных Боба больше < / b> могут быть украдены, потому что хакеры любят сайты, которые считают, что их ценность слишком мала, чтобы беспокоиться о безопасности. Они запускают ботов, которые круглосуточно и без выходных исследуют дыры в безопасности, например, уязвимости SQL-инъекций. - person jammycakes; 02.05.2011
comment
@Thomas: (3) Должен обеспечивать уровень безопасности, соответствующий квалификации, с учетом состояния технологического развития и стоимости реализации любых мер. Если клиенту сообщают, что существует более безопасная альтернатива шифрованию, вероятно, наиболее конфиденциальной информации, которую он обрабатывает, и что нет практических недостатков для реализации тогда они совершенно четко не принимают во внимание как состояние технологического развития, так и стоимость реализации таких мер. Для меня это звучит как явное нарушение. - person jammycakes; 02.05.2011
comment
@jammycakes - это менее безопасно, но чтобы утверждать, что гораздо менее безопасен до точки неэтичности, вам нужно будет объяснить, как военные могут подвергать опасности жизни людей, используя то же самое. формы шифрования. Утверждать, что нельзя защитить секреты с помощью шифрования, просто экстремистски. Техническое обоснование не является проблемой. Это бизнес-решение клиента. - person Thomas; 02.05.2011
comment
@jammycakes - значение цели влияет на вероятность появления затвора, потому что оно влияет на желание атаковать его хакерами. Таким образом, попытки приравнять потенциальную атаку на Sony к потенциальной атаке на сайт «ничто» просто не соответствуют друг другу. Кроме того, казенные части от Sony и других компаний часто представляли собой незашифрованные резервные копии. Проблема решается легко. - person Thomas; 02.05.2011
comment
@jammycakes - Помните, что мы говорим об использовании шифрования. Это означает, что атаки должны были украсть базу данных и ключи шифрования. - person Thomas; 02.05.2011
comment
@jammycakes - Если клиенту сообщают, что есть более безопасная альтернатива .. Клиент не обязан использовать самые безопасные доступные методы, так же как вы не обязаны использовать засовы на каждой двери. Заказчик принял решение по причинам, абсолютно не связанным с технической реализацией, и это его право. Они обязаны принимать разумные меры, и шифрование соответствует требованиям. Никакой суд не собирается осуждать того, кто использовал шифрование и надлежащее управление ключами и был взломан. - person Thomas; 02.05.2011
comment
@jammycakes - люди повторно используют пароли Это та же утка, что использовалась ранее. Это риск, который ПОЛЬЗОВАТЕЛИ берут на себя. Это похоже на использование простых угадываемых паролей или вставку их паролей в какой-либо другой нехешированный / незашифрованный столбец. - person Thomas; 02.05.2011
comment
@Thomas: Повторное использование паролей - не утка. Это реальная проблема. Большинство пользователей не являются техническими специалистами. Они не понимают (или недооценивают) риски. Они не видят, что с этим делать. Да, вы можете сказать им использовать менеджер паролей, такой как KeePass, но это все равно ошибка, и большинство из них не будет беспокоиться. Нравится вам это или нет, но они доверяют вам данные, которые могут причинить им большой вред в случае их разглашения и злоупотребления. Используя менее безопасный вариант, вы подрываете их доверие. - person jammycakes; 02.05.2011
comment
@Thomas: Конечно, вы не обязаны использовать засовы на дверях вашего собственного дома, которые защищают только вашу собственность. Однако, когда вы защищаете ценные активы, принадлежащие перед другими людьми вы обязаны обеспечивать более высокие стандарты безопасности. - person jammycakes; 02.05.2011
comment
@Thomas: это все, связанное с технической реализацией. Как я неоднократно заявлял, в Законе о защите данных прямо говорится о состоянии технологического развития. - person jammycakes; 02.05.2011
comment
@Thomas: ценность цели - это только одно соображение, которое хакеры будут принимать во внимание. Еще одним соображением является легкость проникновения. На крошечном пустом сайте, на котором есть дыра в безопасности, позволяющая раскрыть пароли пользователей и взломать их банковские счета, была обнаружена информация, которая могла приведет к ущербу в тысячах, если не миллионах фунтов стерлингов. - person jammycakes; 02.05.2011
comment
@jammycakes - Pwd resue - Повторное использование паролей - это проблема пользователя, как и выбор плохих паролей. Если вы собираетесь пойти по этому пути защиты пользователей от самих себя, вы не можете останавливаться на хэшах. Вы должны указать минимальную длину pwd, требования к сложности, регулярные сбросы pwd и так далее. Вы не можете, с одной стороны, сказать, что я хочу защитить пользователей, которые повторно используют pwd, а затем разрешают трехбуквенные пароли. - person Thomas; 02.05.2011
comment
@jammycakes - Пользователи также доверяют вам целый ряд другой информации. Не могу использовать хеши для всего. Выбор небезопасного варианта подрывает их доверие. Выбор безопасного, но не такого безопасного, как могло бы быть, абсолютно не подрывает их доверие. Исходя из вашего аргумента, я могу сказать, что отказ от брелоков подрывает их доверие, потому что это не самый безопасный вариант. - person Thomas; 02.05.2011
comment
@jammycakes - Даже защищая чужую собственность, вы не обязаны выбирать наиболее безопасный вариант. Например, если вы храните имущество людей, сканирование сетчатки глаза не требуется. Это более безопасно, чем они не требуются. Их легко реализовать. Шифрование абсолютно квалифицируется как учет технической реализации и, поскольку это так, в данном случае это не проблема. - person Thomas; 02.05.2011
comment
@jammycakes - RE: Ключевым элементом уравнения является то, что рассматриваемый сайт НЕ хранит банковские счета или какую-либо другую важную информацию, кроме потенциально их пароля, если они тупые и используют тот же пароль, что и использовать для своего банковского счета, и даже эта информация будет зашифрована. Для взлома потребуются как данные, так и ключ шифрования. Предполагается, что ключ шифрования защищен. - person Thomas; 02.05.2011
comment
@Thomas: совершенно нереально ожидать, что пользователи не будут повторно использовать пароли. Во-первых, нетехнические пользователи просто не понимают риска. Во-вторых, трудно избежать повторного использования пароля. Запоминание сотен различных логинов просто не вариант, и менеджеры паролей, такие как KeePass, хотя и полезны технически подкованным людям, таким как мы, далеко не так удобны, как простое запоминание одного и того же пароля во всех направлениях. - person jammycakes; 02.05.2011
comment
@Thomas: Разница между солеными хешами и другими вещами, о которых вы говорите - минимальной длиной пароля, требованиями к сложности, регулярным сбросом пароля, брелоками и т. Д. - заключается в том, что существует значительные дополнительные расходы на реализовать эти меры либо с точки зрения инфраструктуры, либо с точки зрения обучения, либо с точки зрения удобства использования. DPA конкретно упоминает стоимость реализации при принятии во внимание мер. При использовании хэшей с односторонним подсчетом дополнительных затрат во всех смыслах и целях, ноль. Подводя итог вашему аргументу, можно сказать, что пароли в виде простого текста вполне подойдут. - person jammycakes; 02.05.2011
comment
@Thomas: На самом деле существует множество способов быстрого получения паролей из базы данных с помощью двустороннего шифрования, даже если у вас нет закрытого ключа. Как я уже сказал, одним из таких примеров являются ошибки в пользовательском интерфейсе. - person jammycakes; 02.05.2011
comment
@jammycakes - Опять же, если ваш аргумент - защита от повторного использования pwd, вы не можете останавливаться на хэшах. Вы должны использовать другие средства защиты, если это ваша цель или ваши аргументы пусты. Минимальная длина паролей, соли, требования к сложности и даже требуемые сбросы паролей легко реализовать с технологической точки зрения, и, таким образом, утверждение, что эти технологически сложны, а хэши - нет, логически не следить. - person Thomas; 02.05.2011
comment
@jammycakes - вполне реально ожидать, что пользователи не будут повторно использовать пароли, как нереально ожидать от них принятия разумных решений в отношении паролей. Менеджеры паролей встроены в большинство браузеров в дополнение к решениям сторонних производителей. Пользователи подвергают себя риску, когда повторно используют пароли, независимо от защиты, предоставляемой данным сайтом. - person Thomas; 02.05.2011
comment
@jammycakes - Даже дыра в вашем пользовательском интерфейсе не обязательно даст возможность извлекать зашифрованные данные из базы данных таким образом, чтобы вы могли их расшифровать. Вам понадобится ключ шифрования и любые соли, которые могут быть добавлены, и здесь предполагается, что ключи хорошо управляются. - person Thomas; 02.05.2011
comment
@Thomas: совершенно нереально ожидать, что ваши пользователи не будут повторно использовать пароли. На самом деле, отказ от повторного использования паролей - довольно трудная задача даже для технического пользователя, вооруженного менеджерами паролей. Большая сложность - синхронизировать их на нескольких устройствах. Ваш iPhone. Ваша PlayStation. Ваше интернет-телевидение. Компьютер вашего друга. Интернет кафе. Заблокированные рабочие станции в корпоративных сетях. Отказ от повторного использования паролей требует дисциплины, усилий и жертв. Для нетехнических пользователей, которые не понимают рисков и чьи глаза тускнеют, когда вы говорите об этих вещах, это в значительной степени безнадежное дело. - person jammycakes; 03.05.2011
comment
@Thomas: аргумент о минимальной длине пароля, требованиях к сложности и обязательном сбросе пароля заключается в том, что они вредны для пользовательского опыта, а не потому, что их сложно реализовать. - person jammycakes; 03.05.2011
comment
@Thomas: Другой (и главный) момент о минимальной длине пароля и т. Д. (И да, вы должны дать пользователю хотя бы предупреждение о слабых паролях) заключается в том, что они являются совершенно отдельной проблемой по отношению к вопросу двухстороннего шифрования по сравнению с солеными хэшами. У них совершенно разные компромиссы и совершенно разные соображения по соотношению затрат и выгод, и поэтому они не входят в рамки этого обсуждения. - person jammycakes; 03.05.2011
comment
@jammycakes - Водители ежедневно превышают ограничение скорости. Это риск, на который идет водитель. Повторное использование паролей - это риск, на который пользователи идут, так же как и при использовании коротких или легко угадываемых паролей. Мы все делаем это до некоторой степени, но мы сами несем этот риск. - person Thomas; 03.05.2011
comment
@jammycakes - аргумент о минимальной длине пароля, требованиях к сложности и обязательном сбросе пароля заключается в том, что они вредны для взаимодействия с пользователем, а не потому, что их сложно реализовать. ТОЧНО! Это не имеет ничего общего с технической реализацией, и поэтому утверждение, что хэши легче реализовать, чем шифрование с технологической точки зрения, также не имеет отношения к обсуждению. И то, и другое легко реализовать технологически. - person Thomas; 03.05.2011
comment
@jammycakes - RE: минимальная длина pwd, требования к сложности и т. д. Еще одна вещь, на которую следует обратить внимание в связи с этим аргументом, - это то, что он связан с вашим аргументом защиты от повторного использования пароля. Вы не можете законно утверждать, что вы можете использовать хэши только для этичного хранения pwd, специально для защиты от повторного использования pwd, а также не допускаете, что если это является целью, вы также должны реализовать все эти другие меры. - person Thomas; 03.05.2011
comment
@jammycakes - Все сводится к следующему. Повседневные сайты используют шифрование для хранения конфиденциальной информации. Многие законы во многих странах требуют, чтобы ваша личная информация была как минимум зашифрована. Пароли - это еще одна конфиденциальная информация. Если возможно этично хранить другие биты конфиденциальной информации с помощью шифрования, то это можно сделать с помощью pwds. Совершенно не рекомендуется. Я бы возразил против этого. Мне никогда не удавалось убедить кого-то использовать хеши. Но утверждать, что это невозможно сделать с помощью шифрования этически, глупо. - person Thomas; 03.05.2011
comment
@Thomas: Соблюдать ограничение скорости легко. Выбрать надежный пароль легко. разумно ожидать этого от ваших пользователей. С другой стороны, избежать повторного использования пароля сложно. Дело в том, что политика паролей имеет существенный пагубный эффект на удобство использования и, возможно, даже на доступность. Влияние на удобство использования односторонних хешей при правильной реализации незначительно. И это возвращает нас к аспекту затрат на реализацию. Тот факт, что нет аргументов по поводу технической реализации, за которые нужно отвечать, не означает, что вообще нет аргументов. - person jammycakes; 05.05.2011
comment
@Thomas: Двустороннее шифрование гораздо менее безопасно, чем одностороннее шифрование, поскольку всегда существует вероятность того, что ваши ключи шифрования могут быть скомпрометированы или ваш внешний интерфейс может иметь брешь в безопасности. Прежде чем вы начнете разбрасывать слова вроде глупого или экстремистского, взгляните на презентацию Саймона Уиллисона Ужасные истории веб-безопасности. Внедрение кода, XSS, CSRF, кликджекинг, обнаружение пути, выявление ошибок и многие другие направления атак потенциально могут позволить повысить привилегии и установить руткит. - person jammycakes; 05.05.2011
comment
@ Томас: Все сводится к следующему. Для наиболее конфиденциальной информации двустороннее шифрование - это лучшее, что вы можете сделать. С паролями дело обстоит иначе. Двустороннее шифрование паролей предполагает ослабление защиты, которую вы предлагаете своим пользователям, без какой-либо оправданной выгоды, и независимо от того, действительно ли это CYA с юридической точки зрения (а может и нет), это все еще неэтично. - person jammycakes; 05.05.2011
comment
@jammycakes - RE: Pwd reuse - Вы настраиваете себя на душевную боль, если предполагаете, что каждый сайт хорошо управляет вашими паролями. Если вы избегаете повторного использования пароля, вы избегаете этой головной боли и, следовательно, это риск, на который берет на себя пользователь. Независимо от того, делают ли это многие люди, например, превышая скорость, вы подвергаете себя риску, полагая, что каждый посещаемый вами сайт надежно управляет вашим паролем. Повторное использование ваших паролей, а затем жалобы на плохое обращение - это бессмысленно. Избежать повторного использования пароля НЕ сложно. Есть много менеджеров паролей, которые упрощают эту задачу. - person Thomas; 05.05.2011
comment
@jammycakes - RE: Стоимость внедрения - На самом деле, есть технические затраты на создание пригодных для использования хэшей. Процесс сброса пароля требует определенных затрат. Если вы хотите, чтобы пользователи могли легко запоминать сброс паролей, необходимо создать этот генератор. Чтобы сделать это правильно, необходимо создать элементы, которые не нужно создавать с помощью шифрования. Они того стоят, ИМО, но не пытайтесь убедить людей, что у хешей нет своих затрат. - person Thomas; 05.05.2011
comment
@jammycakes - RE: Шифрование гораздо менее безопасно - тогда вам нужно беспокоиться о многом не только о вашем пароле. Военным и правительствам тоже следует волноваться. Если ваши медицинские записи и номер кредитной карты могут быть сохранены с использованием этичного шифрования, то и ваш пароль может быть сохранен. Это менее безопасно, но я просто не верю аргументу гораздо меньшей безопасности. Это полностью зависит от реализации. - person Thomas; 05.05.2011
comment
@jammycakes - Клиенты не обязаны использовать лучшее решение безопасности, которое они могут. Они должны, но не обязаны. Например, этично ли шифровать вашу медицинскую информацию с помощью AES-128 вместо AES-256? А что насчет DES-56? А как насчет playfair cypher? Для клиента OP может показаться очевидное преимущество в работе с механизмом сброса пароля и его построении. Оправдано ли это, сомнительно, но это не наша задача. - person Thomas; 05.05.2011
comment
@Thomas: Повторное использование пароля: ваше утверждение о том, что избежать повторного использования пароля несложно, полностью игнорирует мою точку зрения о синхронизации ваших менеджеров паролей на нескольких устройствах, включая iPhone, PlayStation, интернет-телевидение, интернет-кафе и заблокировано корпоративные рабочие станции, на которых использование вашего менеджера паролей может быть неприемлемым. Кроме того, я говорю здесь не о вас и обо мне, я говорю о нетехнических людях, которые не знают разницы между веб-браузером и поисковой системой, не говоря уже о рисках повторного использования пароля. - person jammycakes; 05.05.2011
comment
@Thomas: Повторная стоимость внедрения: я так понимаю, вы говорите здесь об удобстве использования? Самый удобный способ восстановления входа в систему - это отправить пользователю по электронной почте одноразовую ссылку на страницу, где он может выбрать новый пароль - как это делают Twitter и Amazon. Для кодирования может потребоваться немного больше усилий, но не больше, чем кодирование двустороннего шифрования и создание надежной системы управления ключами. И для этого не нужно восстанавливать пароли в виде обычного текста. - person jammycakes; 05.05.2011
comment
@ Томас: Давайте проясним, что мы обсуждаем в отношении законности. Я не сомневаюсь, что полное отсутствие шифрования является нарушением Закона о защите данных. Достаточно ли будет двустороннего шифрования для CYA на законных основаниях? Не знаю, придется это проверять в суде. Но есть большая разница между юридическим и этическим. Конечно, если вам предложат два подхода, и вы выберете менее безопасный, несмотря на то, что вам сказали, что более безопасный вариант столь же эффективен, это неэтично, независимо от законности. - person jammycakes; 05.05.2011
comment
@Thomas: о вооруженных силах, медицинских записях и т. Д.: Имейте в виду, что мы говорим о публичных веб-серверах, открытых для атак со всего мира 24 часа в сутки, 7 дней в неделю. В медицинских, правительственных и военных учреждениях общедоступные веб-серверы находятся в ненадежных сетях, отделенных от конфиденциальных данных брандмауэрами со строгими настройками конфигурации и стандартными корпоративными протоколами, связанными с управлением ключами, доступом к серверу и т. Д., С персоналом, подлежащим строгой проверке безопасности и всевозможными вещи. Во многих медицинских приложениях даже разработчикам не разрешен доступ к актуальным данным пациентов. - person jammycakes; 05.05.2011
comment
@jammycakes - RE: Стоимость реализации - Я согласен, но сложность или простота реализации ортогональны проблеме выбора клиентом более сложного пути и этичности того, можно ли это сделать. Конечно, может. Больно быть уверенным. Это явно более рискованно. Однако это отличается от того, чтобы сказать, что невозможно сделать так, чтобы уменьшить многие из этих рисков. Очевидно, что это возможно, потому что много другой информации хранится в зашифрованном виде. - person Thomas; 05.05.2011
comment
@jammycakes - Неверно, что вся медицинская, правительственная и военная информация недоступна в общедоступных сетях. Пример: информация о вашей медицинской страховке. Многое, если теперь к нему можно получить доступ в Интернете. Опять же, использование шифрования может осуществляться с соблюдением этических норм, даже если оно более громоздко и рискованно, чем хэши. Это не рекомендуется. Это не рекомендуется, но это можно сделать. - person Thomas; 05.05.2011
comment
@Thomas: Выбирать вариант, который, как вы знаете, более рискованный, чем альтернатива, с конфиденциальными данными, которые вам доверили другие люди, когда для этого нет никаких уважительных причин, является неэтичным, точка. - person jammycakes; 06.05.2011
comment
@jammycakes - Риск ier. Это не то же самое, что говорить об этом рискованно. Не шифровать пароли вообще очень рискованно. Шифрование их менее рискованно. Хеширование имеет наименьший риск. Люди уже доверяют вам информацию, которая, вероятно, только зашифрована. Похоже, тебя это не волнует. Ясно, что у клиента было оправдание. Мы с вами не согласны с этим оправданием, но это совсем не то, чтобы сказать, что это неэтично. Как я уже сказал, по вашей логике использование AES-128 вместо AES-256 для шифрования неэтично, потому что нет никаких оснований поступать иначе. - person Thomas; 06.05.2011
comment
@Thomas: Вы хоть раз смотрели презентацию Саймона Уиллисона, на которую я ссылался ранее? Интернет - это минное поле для безопасности. Хакеры запускают бот-сети для поиска уязвимых серверов. Типичный веб-сайт проверяется ежедневно на наличие уязвимостей. Веб-сервер, который использует двустороннее шифрование, но затем получает руткит, установленный злоумышленником, или его ключи шифрования, украденные инсайдером, также может хранить все в виде обычного текста. AES-128 по сравнению с AES-256 не будет иметь никакого значения. - person jammycakes; 06.05.2011
comment
@Thomas: И да, я действительно забочусь о конфиденциальной личной информации. Но пароли вообще разные. С помощью скомпрометированной базы паролей злоумышленник может банально выдать себя за большую часть вашей пользовательской базы. Он может захватить свои учетные записи электронной почты , и оттуда они могут довольно легко захватить всю свою жизнь. Как я уже сказал, пароли, вероятно, являются самой конфиденциальной информацией, которую вы храните на всем своем сайте. - person jammycakes; 06.05.2011
comment
@Thomas: Все сводится к следующему. Если вы потеряете медицинские данные своих пользователей и зашифровали их с помощью достаточно надежного метода шифрования, по крайней мере, у вас есть защита, что вы приняли разумные меры для их защиты. С другой стороны, подобная потеря паролей пользователей непростительна. - person jammycakes; 06.05.2011
comment
@jammycakes - по крайней мере, у вас есть защита, что вы приняли разумные меры для их защиты Это ИМЕННО защита, которая будет использоваться с зашифрованными паролями: вы приняли разумные меры для их защиты. Ваш аргумент состоит в том, что не что иное, как хэши (даже если вы разрешаете двухбуквенные пароли), разумно, а это просто неразумно. Вы устранили риск? Нет. Вы предприняли шаги, чтобы снизить риск? да. Проблема в степени. - person Thomas; 06.05.2011
comment
@jammycakes - Если злоумышленник установит руткит на ваш веб-сервер, украдет соли, ключи хеширования и данные, наличие хешей для слабых паролей не поможет. Тем не менее, пользователи, которым разрешено использовать слабые пароли, которые предположительно возобновляются, часто не являются риском для пользователя? - person Thomas; 06.05.2011
comment
@jammycakes - Кстати, если у вас есть новичок на своем веб-сервере, они, вероятно, могли бы просто использовать его для прослушивания трафика IIS и чтения паролей, незашифрованных или хешированных в реальном времени. Если у вас есть прямой доступ к веб-серверу, вам не будет конца неприятностей. - person Thomas; 06.05.2011
comment
@Thomas: (1) Руткит - это лишь один из многих способов, с помощью которых злоумышленник может получить доступ к вашей базе паролей и ключам. Большинство угроз являются внутренними. (2) Если злоумышленник украдет вашу базу данных с двусторонним шифрованием, надежные и слабые пароли будут скомпрометированы. Соленые хэши можно взломать только с помощью грубой силы, и если вы используете достаточно сильный алгоритм хеширования, такой как bcrypt, с достаточно высокой рабочей функцией, они смогут получить только самые мертвые мозги паролей из базы данных. - person jammycakes; 06.05.2011
comment
@Thomas: Подводя итог вашей аргументации, совершенно нормально использовать что-то смехотворно слабое, например, шифрование XOR. Вы устранили риск? Нет. Вы предприняли шаги для снижения риска? да. Да, все зависит от степени, но предприняли ли вы все шаги, которые от вас разумно ожидать? Нет. - person jammycakes; 06.05.2011
comment
@Thomas: Да, кстати, я действительно считаю, что вам следует использовать надежный (т.е. медленный) алгоритм хеширования, такой как bcrypt, для хеширования ваших паролей. MD5 и SHA-1 слишком быстры, чтобы быть полезными. См. codahale.com/how-to-safely-store-a-password < / а> - person jammycakes; 06.05.2011
comment
@jammycakes - Если вы собираетесь использовать закон в качестве аргумента, то мы должны оценить, как решения будут разыгрываться в судах. Если бы компания использовала самый слабый из известных алгоритмов хеширования без солей, маловероятно, что какой-либо суд постановил бы, что они не предприняли разумных шагов. Если компания использовала форму шифрования, которой доверяет авторитетный источник (например, правительство или военные), с некоторыми протоколами для защиты ключей, это, вероятно, будет сочтено разумным. Если они развернут собственное шифрование, несмотря на протесты разработчиков, я понятия не имею, как это закончится. - person Thomas; 06.05.2011
comment
@jammycakes - Все это уходит от основной проблемы. Дело не в том, что шифрование несет больший риск, чем хеширование. Дело не в передовых методах, простоте реализации или лучших алгоритмах. Основная проблема заключается в том, ВОЗМОЖНО ли хранить пароли с использованием шифрования с соблюдением этических норм. Поскольку другая, в равной степени, если не более конфиденциальная информация, включая секреты, хранится с использованием шифрования, по определению это возможно. - person Thomas; 06.05.2011
comment
@Thomas: (1) Весь смысл юридических аргументов в том, что они укрепляют ваши позиции как разработчика, давая отпор неблагоразумным клиентам и говоря им: «Извините, я не могу этого сделать». (2) как я уже сказал ранее, существует разница между юридическим и этическим и использованием варианта, который, как вы знаете, значительно слабее, чем разумный Альтернатива просто неэтична вне зависимости от законности. - person jammycakes; 06.05.2011
comment
@jammycakes - 1. Нет юридических аргументов. Ни один закон или прецедент не требует хеш-кодов или даже лучшего доступного решения. 2. Сказать, что вы не можете этого сделать, будет истолковано, как вы этого не сделаете. Это ваш выбор, но это просто означает, что вы не знаете, как это сделать безопасно (кстати, тоже допустимый аргумент). 3. Я просто не верю в экстремистское мнение о том, что никакая форма шифрования не является этичной. То, что гораздо больше секретной и конфиденциальной информации хранится с помощью шифрования, является неопровержимым доказательством. Доказательством является то, что для некоторых систем требуются восстанавливаемые пароли для сквозного доступа. - person Thomas; 06.05.2011
comment
Я надеюсь, что ни один разработчик, согласившийся с этим ответом, не реализует приложение, требующее безопасного хранения паролей. Я думаю, что примера архитектора Ааронаута достаточно, чтобы объяснить, почему следует избегать реализации неправильного бизнес-кейса любой ценой. - person Utku Zihnioglu; 19.05.2011
comment
@ utku.zih - этим ответом вы не обращаетесь к OP. Вопрос в следующем: A: способы убедить вашего клиента, B: возможно ли сделать это этично и C: что делать, если они отклоняются. Аароннаут хотел бы, чтобы мы приравняли юридически требуемые стандарты пожарной безопасности к любым веб-сайтам, даже к тем, которые принимают некоторые разумные меры предосторожности, такие как асимметричное шифрование. - person Thomas; 19.05.2011
comment
@ utku.zih - Кстати, позвольте мне добавить, что здесь нет ни одного человека, включая меня, который бы когда-либо рекомендовал использовать что-либо, кроме хешей. Этого просто не следует делать. Однако клиенты могут быть тупыми, и это их деньги. Если приняты разумные меры предосторожности, можно сделать это с помощью шифрования, даже если это не рекомендуется ни при каких обстоятельствах. - person Thomas; 19.05.2011
comment
@Thomas - Возможно, я отделился от вопроса OP после прочтения 85 комментариев к этому ответу. Я понимаю, что вы говорите; однако я лично считаю, что причина такой дискуссии по поводу вашего ответа заключается в том, что вы осознаете ситуацию, когда большинство разработчиков выполнят запрос клиентов и никогда не будут об этом говорить. Так что да, это верный случай; но это неприемлемо, если разработчик несет ответственность за рекомендации или принятие решения по бизнес-модели. - person Utku Zihnioglu; 19.05.2011
comment
Очень долгое обсуждение комментариев, TL; DR - и в любом случае, пропустив несколько страниц с комментариями, кажется, что вы, ребята, вернулись к тому месту, где начали, так что я ничего не пропустил. Как специалист по безопасности, я заметил две проблемы в этом обсуждении, в основном из-за семантики: 1. Безопасность слишком широкая тема, она неквалифицирована и означает слишком много разных вещей для разных людей. Таким образом, бессмысленно пытаться обсуждать, безопасно ли это. - person AviD; 25.09.2011
comment
2. @jammycakes поднял вопрос о компромиссах - однако вы, похоже, думали, что это плохо. В действительности хорошая безопасность (sic) основана на рациональных компромиссах, основанных на оценке риска, в бизнес-контексте. Таким образом, ваш аргумент был наполовину правильным, но упущен в окончательном выводе: да, хранение паролей с обратимым шифрованием - компромисс между бизнес-требованиями и требованиями безопасности - НО это хорошо вещь. Теперь, независимо от того, является ли это правильным компромиссом, это то, что можно обсудить, но это должно быть в контексте бизнес-риска. - person AviD; 25.09.2011
comment
@ utku.zih - Вся суть OP в том, что разработчик не отвечает за решение бизнес-задачи, иначе они бы выбрали хеши. Разработчик уже сделал свою рекомендацию по хешам, и она была отклонена. Фундаментальный вопрос заключается в том, можно ли создать достаточно безопасную систему без хешей и является ли это решение этичным. - person Thomas; 26.09.2011
comment
@AviD - Да, дискуссия заключается в том, стоит ли рисковать отказ от использования хешей в бизнес-контексте. Исходя из OP, это не решение, которое разработчик в OP имеет право принимать. В конце концов, компания, оплачивающая разработку, имеет право принять такое решение. Другая часть обсуждения заключается в том, что в свете того, что компания делает выбор в пользу хэшей, возможно ли построить решение, которое обеспечит достаточную безопасность, чтобы быть этичным? ИМО, это (хотя и более громоздко, чтобы делать правильно), поскольку это регулярно делается с другими формами данных. - person Thomas; 26.09.2011
comment
@ Томас согласился (см. Мой ответ ниже). И вот в чем суть этого аргумента, независимо от того, хороши ли компромиссы или нет. Хорошее управление рисками - это не только предотвращение риска, но и его разумное принятие. Как я часто говорю, безопасность без управления рисками похожа на мчащуюся машину без рулевого управления, без остановок и без карты - вы доберетесь туда быстро, но у вас нет контроля над тем, где это находится, и вы не узнаете, даже если вы получил там. - person AviD; 27.09.2011

Сделайте ответ на секретный вопрос пользователя частью ключа шифрования и не храните ответ на секретный вопрос в виде простого текста (вместо этого хеш-код)

person Rob Fonseca-Ensor    schedule 18.02.2010
comment
Пользователь также может по-разному ответить на вопрос. Некоторые вопросы требуют более длинных ответов, которые позже легко перефразировать. - person Monoman; 13.10.2010
comment
Вопросы безопасности - плохая идея. Как сделать так, чтобы ваша мама сменила девичью фамилию после того, как информация будет взломана? Также см. Engineering Security. - person jww; 30.12.2013

Я внедряю системы многофакторной аутентификации для жизни, поэтому для меня естественно думать, что вы можете либо сбросить, либо восстановить пароль, временно используя на один фактор меньше для аутентификации пользователя только для рабочего процесса сброса / восстановления. В частности, использование одноразовых паролей (одноразовых паролей) в качестве некоторых дополнительных факторов снижает большую часть риска, если временное окно мало для предлагаемого рабочего процесса. Мы с большим успехом внедрили программные генераторы одноразовых паролей для смартфонов (которые большинство пользователей уже носят с собой весь день). Прежде чем появятся жалобы на коммерческий плагин, я хочу сказать, что мы можем снизить риски, связанные с сохранением легко извлекаемых или сбрасываемых паролей, когда они не являются единственным фактором, используемым для аутентификации пользователя. Я признаю, что для повторного использования пароля среди сценариев сайтов ситуация все еще не очень хороша, поскольку пользователь будет настаивать на том, чтобы иметь исходный пароль, потому что он / она хочет открыть и другие сайты, но вы можете попытаться доставить восстановленный пароль в самый безопасный способ (htpps и ненавязчивый вид на html).

person Monoman    schedule 13.10.2010
comment
Временное удаление фактора из системы многофакторной аутентификации действительно является гораздо более безопасным средством сброса пароля, чем приводящие в ярость системы секретных вопросов, которые можно увидеть на стольких сайтах. Но что касается хранения паролей в восстанавливаемом формате, я не уверен, как это помогает, если только вы каким-то образом не используете второй фактор для шифрования или запутывания первого, и я не уверен, как это возможно с чем-то вроде SecurID. Вы можете объяснить? - person Aaronaught; 14.10.2010
comment
@Aaronaught Я уже сказал, что если от вас «требуется» иметь восстанавливаемые пароли, неотъемлемый риск будет ниже, если это не единственный фактор аутентификации, и это также будет проще для конечного пользователя, если в этих рабочих процессах повторно используются факторы, которые он / она уже обладает и имеет текущий доступ к ним, а не пытается вспомнить, вероятно, также забытые «секретные ответы» или использует ограниченные по времени ссылки или временные пароли, которые отправляются через небезопасные каналы (если вы не используете S-MIME с сертификатами клиента или PGP, оба несут расходы, особенно на управление правильной ассоциацией и истечением срока действия / заменой) - person Monoman; 18.10.2010
comment
Я полагаю, что все это правда, но риск публичной компрометации с самого начала минимален; Более серьезная проблема с восстанавливаемыми паролями - это внутренняя безопасность, которая потенциально позволяет недовольному сотруднику уйти с паролями электронной почты тысяч клиентов или нечестным генеральным директором продать его фишерам и спамерам. Двухфакторная аутентификация отлично подходит для борьбы с кражей личных данных и угадыванием пароля, но на самом деле мало что дает в плане обеспечения безопасности фактической базы данных паролей. - person Aaronaught; 18.10.2010

Извините, но если у вас есть способ расшифровать их пароль, он не будет безопасным. Боритесь с этим ожесточенно, и если проиграете, CYA.

person Steven Sudit    schedule 17.02.2010

Только что наткнулся на эту интересную и бурную дискуссию. Но больше всего меня удивило то, как мало внимания было уделено следующему основному вопросу:

  • Q1. Каковы реальные причины, по которым пользователь настаивает на доступе к паролю, хранящемуся в виде простого текста? Почему это так ценно?

Информация о том, что пользователи старше или молоды, на самом деле не дает ответа на этот вопрос. Но как можно принять бизнес-решение, не понимая заботы клиента?

Теперь почему это важно? Потому что, если настоящая причина запросов клиентов - это система, которую крайне сложно использовать, то, возможно, устранение точной причины решит реальную проблему?

Поскольку у меня нет этой информации и я не могу говорить с этими клиентами, я могу только догадываться: это касается удобства использования, см. Выше.

Еще один вопрос, который я видел, задан:

  • Q2. Если пользователь изначально не помнит пароль, почему старый пароль имеет значение?

И вот возможный ответ. Если у вас есть кошка по кличке «miaumiau», и вы использовали ее имя в качестве пароля, но забыли, что вы это сделали, вы бы предпочли, чтобы вам напомнили, что это было, или, скорее, вам отправили что-то вроде «# zy * RW (ew»?

Другая возможная причина заключается в том, что пользователь считает нелегко придумать новый пароль! Таким образом, возврат старого пароля создает иллюзию того, что она снова избавляется от этой мучительной работы.

Я просто пытаюсь понять причину. Но какова бы ни была причина, необходимо устранить причину, а не причину.

Как пользователь, я хочу, чтобы все было просто! Я не хочу много работать!

Если я захожу на новостной сайт, чтобы читать газеты, я хочу ввести 1111 в качестве пароля и пройти !!!

Я знаю, что это небезопасно, но какое мне дело до того, что кто-то получит доступ к моей «учетной записи»? Да, он тоже может читать новости!

Хранит ли сайт мою "личную" информацию? Новости, которые я сегодня прочитал? Тогда проблема сайта, а не моя! Показывает ли сайт личную информацию аутентифицированному пользователю? Тогда не показывай это на первом месте!

Это просто демонстрация отношения пользователя к проблеме.

Подводя итог, я считаю, что проблема заключается не в том, как «надежно» хранить пароли в виде обычного текста (что, как мы знаем, невозможно), а скорее в том, как решить реальную проблему клиентов.

person Dmitri Zaitsev    schedule 24.08.2013

Обработка утерянных / забытых паролей:

Никто никогда не должен иметь возможность восстанавливать пароли.

Если пользователи забыли свои пароли, они должны, по крайней мере, знать свои имена пользователей или адреса электронной почты. По запросу сгенерируйте GUID в таблице Users и отправьте электронное письмо, содержащее ссылку, содержащую guid в качестве параметра на адрес электронной почты пользователя.

Страница за ссылкой проверяет, что параметр guid действительно существует (возможно, с некоторой логикой тайм-аута), и запрашивает у пользователя новый пароль.

Если вам нужна помощь пользователям горячей линии, добавьте несколько ролей в свою модель грантов и разрешите роли горячей линии временно войти в систему как идентифицированный пользователь. Регистрируйте все такие входы на горячую линию. Например, Bugzilla предлагает администраторам такую ​​функцию олицетворения.

person devio    schedule 18.02.2010
comment
GUID - плохая идея, недостаточно случайная и легкая для перебора. есть и другие проблемы, см. stackoverflow .com / questions / 664673 / - person AviD; 23.02.2010

Как насчет того, чтобы отправить пароль по электронной почте при регистрации, прежде чем он будет зашифрован и утерян? Я видел, как это делают многие веб-сайты, и получение этого пароля из электронной почты пользователя более безопасно, чем оставлять его на своем сервере / компьютере.

person casraf    schedule 24.02.2010
comment
Я бы не подумал, что электронная почта более безопасна, чем любая другая система. Хотя это избавляет меня от юридических проблем, все еще существует проблема, связанная с тем, что кто-то потеряет / удалит свою электронную почту, и теперь я вернулся к исходной точке. - person Shane; 25.02.2010
comment
Обеспечьте сброс пароля и отправьте пароль по электронной почте. Я думаю, что это максимум, что вы можете сделать по этому поводу, не храня копию пароля самостоятельно. - person casraf; 25.02.2010
comment
Это абсолютно ужасная идея. Это одновременно неэффективно (многие пользователи фактически удаляют электронные письма после прочтения) и хуже того, от чего вы пытаетесь защитить (поскольку электронная почта по умолчанию не шифруется и проходит через ненадежные сети). Лучше предложить пользователю записать пароль самостоятельно, по крайней мере, отправив себе электронное письмо, информация никогда не уходит дальше почтового сервера, а не по всему Интернету! - person Ben Voigt; 21.11.2016

Если вы не можете просто отказаться от требования хранить восстанавливаемые пароли, как насчет этого в качестве контраргумента?

Мы можем либо правильно хэшировать пароли и создать механизм сброса для пользователей, либо удалить всю личную информацию из системы. Вы можете использовать адрес электронной почты для настройки пользовательских предпочтений, но это все. Используйте файл cookie, чтобы автоматически выбирать настройки при будущих посещениях и удалять данные по истечении разумного периода времени.

Единственный вариант, который часто упускается из виду в политике паролей, - это действительно ли пароль вообще нужен. Если единственное, что делает ваша политика паролей, это вызывает звонки в службу поддержки, возможно, вы сможете избавиться от нее.

person anopres    schedule 13.10.2010
comment
Если у вас есть адрес электронной почты, связанный с паролем, и этот пароль можно восстановить, вы потенциально утекли пароль для этого адреса электронной почты из-за повторного использования пароля. На самом деле это основная проблема. На самом деле нет никакой другой информации, позволяющей установить личность, которая имеет значение. - person Aaronaught; 14.10.2010
comment
Вы полностью упустили мою точку зрения. Если вам действительно не нужен пароль, не собирайте его. Разработчики часто застревают в том, как мы думаем именно так. Иногда помогает отбросить предвзятые представления. - person anopres; 14.10.2010

Нужно ли пользователям действительно восстанавливать (например, сообщать), какой был пароль, который они забыли, или им просто нужно иметь возможность войти в систему? Если им действительно нужен пароль для входа в систему, почему бы не использовать процедуру, которая просто меняет старый пароль (каким бы он ни был) на новый пароль, который сотрудник службы поддержки может передать человеку, потерявшему свой пароль?

Я работал с системами, которые делают именно это. Специалист службы поддержки не может узнать текущий пароль, но может сбросить его на новое значение. Конечно, все такие сбросы следует где-то регистрировать, и хорошей практикой будет создание электронного письма для пользователя, сообщающего ему, что пароль был сброшен.

Другая возможность - иметь два одновременных пароля, разрешающих доступ к учетной записи. Один из них - это «обычный» пароль, которым управляет пользователь, а другой похож на скелетный / главный ключ, который известен только персоналу службы поддержки и является одинаковым для всех пользователей. Таким образом, когда у пользователя возникает проблема, сотрудник службы поддержки может войти в учетную запись с помощью главного ключа и помочь пользователю изменить свой пароль на любой другой. Излишне говорить, что все входы в систему с помощью главного ключа также должны регистрироваться системой. В качестве дополнительной меры всякий раз, когда используется главный ключ, вы также можете проверить учетные данные сотрудников службы поддержки.

-EDIT- В ответ на комментарии об отсутствии главного ключа: я согласен, что это плохо, так же как я считаю, что плохо разрешать кому-либо, кроме пользователя, иметь доступ к учетной записи пользователя. Если вы посмотрите на вопрос, вся предпосылка состоит в том, что заказчик потребовал создать сильно скомпрометированную среду безопасности.

Мастер-ключ не должен быть таким плохим, как может показаться на первый взгляд. Раньше я работал на оборонном заводе, где считалось, что оператору мэйнфрейма необходимо иметь «особый доступ» в определенных случаях. Они просто помещали специальный пароль в запечатанный конверт и прикрепляли его к столу оператора. Чтобы использовать пароль (который оператор не знал), ему пришлось открыть конверт. При каждой смене смены одна из задач начальника смены заключалась в том, чтобы проверить, был ли открыт конверт, и если да, то немедленно изменить пароль (другим отделом), и новый пароль был помещен в новый конверт, и процесс запустился. снова. Оператора спросят, почему он открыл его, и инцидент будет задокументирован для записи.

Хотя это не та процедура, которую я хотел бы разработать, она действительно сработала и обеспечила отличную подотчетность. Все регистрировалось и проверялось, плюс все операторы имели секретные разрешения Министерства обороны США, и у нас никогда не было никаких нарушений.

Благодаря проверке и надзору все операторы знали, что в случае злоупотребления правом вскрытия конверта они подлежат немедленному увольнению и возможному уголовному преследованию.

Поэтому я полагаю, что реальный ответ заключается в том, что если кто-то хочет делать все правильно, он нанимает людей, которым можно доверять, проверяет биографические данные и осуществляет надлежащий надзор и подотчетность со стороны руководства.

Но опять же, если бы у клиента этого бедняги был хороший менеджмент, они бы вообще не просили такое компромиссное решение безопасности, не так ли?

person JonnyBoats    schedule 24.02.2010
comment
Мастер-ключ был бы очень рискованным, персонал службы поддержки имел бы доступ к каждой учетной записи - и как только вы дадите этот ключ пользователю, у них будет мастер-ключ и доступ ко всему. - person Carson Myers; 27.02.2010
comment
Мастер-ключ - ужасная идея, поскольку, если кто-то обнаружит его (или он ему случайно раскроет), он может его использовать. Механизм сброса пароля для каждой учетной записи намного предпочтительнее. - person Phil Miller; 27.02.2010
comment
Мне любопытно, я думал, что Linux по умолчанию имеет учетную запись суперпользователя с доступом на уровне root? Разве это не главный ключ для доступа ко всем файлам в системе? - person JonnyBoats; 02.03.2010
comment
@JonnyBoats Да, это так. Вот почему современные системы Unix, такие как Mac OS X, отключают учетную запись root. - person Nicholas Shanks; 28.05.2013
comment
@NicholasShanks: отключить учетную запись root или отключить интерактивный вход в учетную запись root? По-прежнему работает много кода с неограниченными разрешениями. - person Ben Voigt; 21.11.2016
comment
@BenVoigt Вы правы: я имел в виду возможность для людей входить в систему как… - person Nicholas Shanks; 21.11.2016

Судя по тому немногому, что я понимаю в этой теме, я считаю, что если вы создаете веб-сайт с паролем для входа в систему, то вы вообще не должны видеть пароль в виде открытого текста на своем сервере. Пароль должен быть хеширован и, возможно, засолен еще до того, как он уйдет от клиента.

Если вы никогда не видите пароль в виде открытого текста, вопрос о поиске не возникает.

Кроме того, я понял (из Интернета), что (предположительно) некоторые алгоритмы, такие как MD5, больше не считаются безопасными. Сам я не могу судить об этом, но это нужно учитывать.

person Jeremy C    schedule 23.07.2015

откройте БД на автономном сервере и предоставьте зашифрованное удаленное соединение каждому веб-серверу, для которого требуется эта функция.
это не обязательно должна быть реляционная БД, это может быть файловая система с доступом по FTP, используя вместо этого папки и файлы таблиц и строк.
предоставьте веб-серверам разрешения только на запись, если можете.

Храните неизвлекаемое шифрование пароля в БД сайта (назовем его "pass-a"), как это делают обычные люди :)
для каждого нового пользователя (или смены пароля) сохраняйте простую копию пароля в удаленная БД. используйте идентификатор сервера, идентификатор пользователя и пароль в качестве составного ключа для этого пароля. вы даже можете использовать двунаправленное шифрование пароля, чтобы лучше спать по ночам.

теперь, чтобы кто-то мог получить и пароль, и его контекст (идентификатор сайта + идентификатор пользователя + "пароль"), он должен:

  1. взломать БД веб-сайта, чтобы получить пару или пары ("pass-a", идентификатор пользователя).
  2. получить идентификатор веб-сайта из некоторого конфигурационного файла
  3. найти и взломать удаленную БД паролей.

вы можете контролировать доступность службы поиска паролей (предоставлять ее только как защищенную веб-службу, разрешать извлечение только определенного количества паролей в день, делать это вручную и т. д.) и даже взимать дополнительную плату за эту «особую систему безопасности».
Сервер БД для извлечения паролей довольно скрыт, поскольку он не выполняет многих функций и может быть лучше защищен (вы можете жестко настраивать разрешения, процессы и службы).

в общем, вы усложняете работу хакеру. вероятность нарушения безопасности на любом отдельном сервере остается прежней, но важные данные (совпадение учетной записи и пароля) будет сложно собрать.

person Amir Arad    schedule 24.02.2010
comment
Если сервер приложений может получить к нему доступ, то же самое может сделать любой, у кого есть доступ к серверу приложений (будь то хакер или злоумышленник). Это не обеспечивает никакой дополнительной безопасности. - person molf; 25.02.2010
comment
Дополнительная безопасность здесь заключается в том, что БД сервера приложений не хранит пароли (поэтому требуется второй взлом - для БД паролей), а БД паролей может лучше защищаться от нерегулярной активности, поскольку вы контролируете доступность службы поиска паролей. Таким образом, вы можете обнаруживать массовое извлечение данных, еженедельно изменять SSH-ключ извлечения или даже не разрешать автоматическое извлечение прохода и делать все это вручную. Это решение также подходит для любой другой схемы внутреннего шифрования (например, открытый + закрытый ключи, соль и т. Д.) Для БД паролей. - person Amir Arad; 25.02.2010

Другой вариант, который вы, возможно, не рассматривали, - это разрешение действий по электронной почте. Это немного громоздко, но я реализовал это для клиента, которому нужны были пользователи, находящиеся «вне» их системы, для просмотра (только для чтения) определенных частей системы. Например:

  1. После регистрации пользователь получает полный доступ (как к обычному веб-сайту). Регистрация должна включать электронную почту.
  2. Если требуются данные или действие, а пользователь не помнит свой пароль, он все равно может выполнить это действие, нажав специальную кнопку «Отправить мне письмо по электронной почте» рядом с обычным «< strong> отправить ".
  3. Затем запрос отправляется по электронной почте с гиперссылкой, в которой спрашивается, хотят ли они, чтобы действие было выполнено. Это похоже на ссылку для сброса пароля в электронном письме, но вместо сброса пароля выполняется одноразовое действие.
  4. Затем пользователь нажимает «Да», и это подтверждает, что данные должны быть показаны, или действие должно быть выполнено, данные раскрыты и т. Д.

Как вы упомянули в комментариях, это не сработает, если электронная почта взломана, но это касается комментария @joachim о нежелании сбрасывать пароль. В конце концов, им придется использовать сброс пароля, но они могут сделать это в более удобное время или с помощью администратора или друга, если это необходимо.

Изюминкой этого решения будет отправка запроса действия стороннему доверенному администратору. Это будет лучше всего работать в случаях с пожилыми людьми, умственно отсталыми, очень молодыми или иным образом сбитыми с толку пользователями. Конечно, для этих людей требуется доверенный администратор, который будет поддерживать их действия.

person Sablefoste    schedule 02.12.2015

Соль-и-хешируйте пароль пользователя как обычно. При входе пользователя в систему разрешите как пароль пользователя (после соления / хеширования), так и разрешите то, что пользователь буквально ввел, чтобы совпадать.

Это позволяет пользователю вводить свой секретный пароль, но также позволяет им вводить соленую / хешированную версию своего пароля, которую кто-то мог бы прочитать из базы данных.

По сути, сделайте соленый / хешированный пароль также паролем «в виде простого текста».

person Eliott    schedule 04.05.2017
comment
Как вы думаете, почему необходимо сравнивать то, что пользователь ввел напрямую, с хешированным паролем, хранящимся в базе данных? Какие функциональные возможности это дает вам? Кроме того, при этом очень важно применять функцию сравнения в постоянном времени между паролем, введенным пользователем, и хешированным паролем из базы данных. В противном случае практически невозможно определить хешированный пароль на основе различий во времени. - person Artjom B.; 11.05.2017
comment
@ArtjomB. В вопросе задается вопрос, как защитить пароль пользователя, а также позволить службе поддержки клиентов (CS) разговаривать / отправлять электронную почту пользователю, вводя его забытый пароль. Сделав хешированную версию пригодной для использования в качестве простого текстового пароля, CS может прочитать его и попросить пользователя использовать его вместо забытого пароля. CS также может использовать его для входа в систему в качестве пользователя и помощи в решении задачи. Это также позволяет защитить пользователей, которые привыкли к автоматизированным системам забытых паролей, поскольку пароль, который они вводят и используют, хешируется. - person Eliott; 11.05.2017
comment
Понятно. Я не прочитал вопрос полностью. Использование сравнения с постоянным временем по-прежнему необходимо для предотвращения тривиального выхода из строя всей системы. - person Artjom B.; 11.05.2017