Когда моя начальная загрузка системы и попытка загрузить Ubuntu, у меня есть только графическая ошибка на экране.
Я пытался использовать nomode set
режим и это работают, но я не имею 3-го ускорения и не имею никаких драйверов для установки.
Я предположил бы, что необходимо будет добавить, что столбец к базе данных для зашифрованного пароля затем выполняет пакетное задание по всем записям, которое получает текущий пароль, шифрует его (поскольку другие упомянули, что хеш как md5 довольно стандартный редактирование: но не должен использоваться самостоятельно - видят другие ответы для хороших обсуждений ), хранилища это в новом столбце, и проверяет, что все это произошло гладко.
Затем необходимо будет обновить фронтенд, чтобы хешировать вводимый пользователями пароль во время входа в систему и проверить это по сравнению с сохраненным хешем, вместо того, чтобы проверить простой текст по сравнению с простым текстом.
казалось бы благоразумным мне оставить оба столбца на месте на некоторое время, чтобы гарантировать, что ничто подозрительное не продолжилось, прежде в конечном счете удалить незашифрованные пароли все-вместе.
не забывают также, что каждый раз, когда к паролю получают доступ, код должен будет измениться, такие как изменение пароля / запросы напоминания. Вы, конечно, потеряете способность послать по электронной почте забытые пароли, но это не плохая вещь. Необходимо будет использовать систему сброса пароля вместо этого.
Редактирование: Один конечный пункт, Вы могли бы хотеть рассмотреть предотвращение ошибки, я сделал на своей первой попытке испытательного стенда безопасный веб-сайт входа в систему:
При обработке пароля пользователя, рассмотрите, где хеширование происходит. В моем случае хеш был вычислен кодом PHP, работающим на веб-сервере, но пароль был передан к странице от машины пользователя в простом тексте! Это было в порядке (выход) в среде, в которой я работал, как это было в https системе так или иначе (uni сеть). Но, в реальном мире я предполагаю, что Вы хотели бы хешировать пароль, прежде чем он оставит пользовательскую систему, с помощью JavaScript и т.д., и затем передайте хеш на сайт.
попытайтесь создать a /etc/X11/xorg.conf
файл с этим в нем
Section "Device" Identifier "Intel Graphics" Driver "intel" Option "AccelMethod" "uxa" EndSection
затем перезапустите или выполненный sudo service lightdm restart
от tty [Ctrl]
+[Alt]
+[F2]
Если это работает, зарегистрируйте отчет об ошибках с помощью команды ubuntu-bug xorg
В целях аутентификации необходимо постараться не хранить пароли с помощью обратимого шифрования, т.е. необходимо только сохранить хэш пароля и проверить хеш предоставленного пользователями пароля против хеша, который Вы сохранили. Однако тот подход имеет недостаток: это уязвимо для нападения таблицы радуги, должен взломщик овладевать своей базой данных хранилища пароля.
то, Что необходимо сделать, сохранить хеши предварительно выбранного (и секрет) соленое значение + пароль. Т.е. свяжите соль и пароль, хешируйте результат и сохраните этот хеш. При аутентификации сделайте то же - связывает соленое значение и предоставленный пользователями пароль, хеш, затем проверяет на равенство. Это делает нападения таблицы радуги невыполнимыми.
, Конечно, если пользователь отправляет пароли по сети (например, если Вы работаете над веб-приложением или клиент-серверным приложением), затем Вы не должны отправлять пароль в открытом тексте через, таким образом, вместо того, чтобы хранить хеш (соль + пароль) необходимо сохранить и проверить по хешу (соль + хеш (пароль)), и сделать, чтобы клиент предварительно хешировал предоставленный пользователями пароль и отправил тот по сети. Это защищает пароль Вашего пользователя также, должен пользователь (как многие делают), снова используют тот же пароль в нескольких целях.
хешируйте их с md5. это - то, что обычно делается с паролями.
Я не специалист по безопасности, но я думаю, что текущая рекомендация состоит в том, чтобы использовать bcrypt/blowfish или вариант SHA-2, не MD5 / SHA1.
, Вероятно, необходимо думать с точки зрения полной проверки защиты, также
Я хотел бы предложить одно улучшение большой пример Python, отправленный Orip. Я переопределил бы эти random_bytes
функция, чтобы быть:
def random_bytes(num_bytes):
return os.urandom(num_bytes)
, Конечно, необходимо было бы импортировать os
модуль. Эти os.urandom
функция обеспечивает случайную последовательность байтов, которые могут безопасно использоваться в криптографических приложениях. См. ссылочная справка этой функции для получения дальнейшей информации.
MD5 и SHA1 показали немного слабости (два слова могут привести к тому же хешу), настолько использующий SHA256-SHA512 / повторяющимся хешам рекомендуют хешировать пароль.
я записал бы небольшую программу на языке, что приложение записано в этом, идет и генерирует случайную соль, которая уникальна для каждого пользователя и хеша пароля. Причина я склонен использовать тот же язык в качестве проверки, состоит в том, что различные crypto библиотеки могут сделать вещи немного по-другому (т.е. дополняющий) настолько пользующийся той же библиотекой, чтобы генерировать хеш и проверить, что это устраняет тот риск. Это приложение могло также затем проверить вход в систему после того, как таблица была обновлена, если Вы хотите, поскольку это знает незашифрованный пароль все еще.
Для хеширования пароля, можно использовать функция HashBytes. Возвращает varbinary, таким образом, необходимо было бы создать новый столбец и затем удалить старый varchar один.
Как
ALTER TABLE users ADD COLUMN hashedPassword varbinary(max);
ALTER TABLE users ADD COLUMN salt char(10);
--Generate random salts and update the column, after that
UPDATE users SET hashedPassword = HashBytes('SHA1',salt + '|' + password);
Затем Вы изменяете код для проверки пароля, с помощью запроса как
SELECT count(*) from users WHERE hashedPassword =
HashBytes('SHA1',salt + '|' + <password>)
где < пароль> является значением, вводимым пользователем.
РЕДАКТИРОВАНИЕ (2016): используйте Argon2, scrypt, bcrypt, или PBKDF2, в том порядке предпочтения. Используйте столь большой фактор замедления, как выполнимо для Вашей ситуации. Используйте исследуемую существующую реализацию. Удостоверьтесь, что Вы используете надлежащую соль (хотя библиотеки, которыми Вы пользуетесь, должны удостоверяться в этом для Вас).
<час>, Когда Вы хешируете использование паролей , НЕ ИСПОЛЬЗУЮТ ПРОСТОЙ MD5.
Использование PBKDF2, который в основном означает использовать случайную соль, чтобы предотвратить нападения таблицы радуги и выполнить итерации (перефразирование) достаточно раз для замедления хеширования - не так много, что приложение занимает слишком много времени, но достаточно что принуждение скота взломщика большое количество другого пароля заметит
Из документа:
реализация В качестве примера в Python, с помощью SHA-256 в качестве безопасного хеша:
РЕДАКТИРОВАНИЕ : как упомянуто Eli Collins это не реализация PBKDF2. Необходимо предпочесть реализации, которые придерживаются стандарта, такой как PassLib.
from hashlib import sha256
from hmac import HMAC
import random
def random_bytes(num_bytes):
return "".join(chr(random.randrange(256)) for i in xrange(num_bytes))
def pbkdf_sha256(password, salt, iterations):
result = password
for i in xrange(iterations):
result = HMAC(result, salt, sha256).digest() # use HMAC to apply the salt
return result
NUM_ITERATIONS = 5000
def hash_password(plain_password):
salt = random_bytes(8) # 64 bits
hashed_password = pbkdf_sha256(plain_password, salt, NUM_ITERATIONS)
# return the salt and hashed password, encoded in base64 and split with ","
return salt.encode("base64").strip() + "," + hashed_password.encode("base64").strip()
def check_password(saved_password_entry, plain_password):
salt, hashed_password = saved_password_entry.split(",")
salt = salt.decode("base64")
hashed_password = hashed_password.decode("base64")
return hashed_password == pbkdf_sha256(plain_password, salt, NUM_ITERATIONS)
password_entry = hash_password("mysecret")
print password_entry # will print, for example: 8Y1ZO8Y1pi4=,r7Acg5iRiZ/x4QwFLhPMjASESxesoIcdJRSDkqWYfaA=
check_password(password_entry, "mysecret") # returns True
Я думаю, что необходимо сделать следующее:
Как со всеми решениями безопасности, существуют компромиссы. При хешировании пароля который является, вероятно, самым легким перемещением, Вы не можете предложить функцию извлечения пароля, которая возвращает старый пароль, и при этом Ваш штат не может искать пароль человека для доступа к их учетной записи.
можно использовать симметричное шифрование, которое имеет его собственные недостатки безопасности. (Если Ваш сервер поставлен под угрозу, симметричный ключ шифрования может быть поставлен под угрозу также).
можно использовать шифрование с открытым ключом и выполнить извлечение/обслуживание клиентов пароля на отдельной машине, которая хранит закрытый ключ в изоляции от веб-приложения. Это является самым безопасным, но требует архитектуры с двумя машинами и вероятно промежуточного брандмауэра.