Storing passwords safely · Безопасное хранение паролей
The big rule: never store plain passwords
- If a website stores your password as plain text and gets hacked, every password is stolen instantly.
- Instead, sites store a hash — a scrambled fingerprint that cannot be reversed back into the password.
Главное правило: никогда не храните пароли в открытом виде
- Если сайт хранит ваш пароль в открытом тексте и подвергается взлому, все пароли будут украдены мгновенно.
- Вместо этого сайты сохраняют хэш — искаженный отпечаток, который невозможно превратить обратно в исходный пароль.
What is a hash?
- A hash function turns any input into a fixed-length string. The same input always gives the same hash.
- It is one-way: easy to compute forwards, practically impossible to reverse.
- When you log in, the site hashes what you typed and compares it to the stored hash — it only ever stores the hash, never your actual password.
Что такое хэш?
- Хэш-функция преобразует любой входной набор данных в строку фиксированной длины. Один и тот же вход всегда дает одинаковый хэш.
- Он работает в одном направлении: легко вычислить напрямую, но практически невозможно восстановить исходные данные.
- При входе в систему сайт хэширует введенные вами данные и сравнивает их с сохраненным хэшем — он хранит только хэш, никогда сам пароль.
import hashlib
print(hashlib.sha256(b"hello").hexdigest())
Add salt
- If two users pick the same password, their hashes match — a clue for attackers.
- A salt is a random string added before hashing, so identical passwords get different hashes.
- It also defeats pre-computed "rainbow table" attacks. Always salt.
Добавьте соль
- Если два пользователя выберут одинаковый пароль, их хэши совпадут — это подсказка для злоумышленников.
- Соль — случайная строка, добавляемая перед хэшированием, чтобы одинаковые пароли давали разные хэши.
- Она также защищает от заранее вычисленных атак по «радужным таблицам». Всегда используйте соль.
Your turn
- Hash
salt + passwordwith SHA-256. The check confirms you produced the correct 64-character digest.
Covers: A-Level 6.1, 17.1 (encryption/hashing).
Ваша очередь
- Захэшируйте
salt + passwordс помощью SHA-256. Проверка подтвердит, что вы получили правильный дайджест из 64 символов.
Охватывает: A-Level 6.1, 17.1 (шифрование/хэширование).
Common mistakes
- Never store passwords in plain text.
- Store a salted hash, not the password itself.
Распространенные ошибки
- Никогда не храните пароли в открытом виде.
- Храните соль с хэшем, а не сам пароль.
Store the hash, not the password · Храните хеш, а не пароль
Sites store a hash; a tiny change gives a totally different digest. · Сайты хранят хеш; незначительное изменение даёт совершенно другой дайджест.
Never store a plain password — store its hash. Using hashlib, hash the salt + password with SHA-256 and put the hex digest in a variable called digest. · Никогда не храните пароль в открытом виде — храните его хеш. Используя hashlib, создайте хеш от соль + пароль методом SHA-256 и поместите шестнадцатеричный дайджест в переменную с именем digest.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.
Now be the login system. The database holds a salt and a stored digest — never the password. Hash salt + attempt with SHA-256 and print welcome if it matches stored, else denied. · Теперь вы — система входа. База данных хранит хеш-значения для ⟨salt⟩ и ⟨stored⟩ — никогда сам пароль. Захэшируйте ⟨salt + attempt⟩ с помощью SHA-256⟩ и выведите ⟨welcome⟩, если оно совпадает с ⟨stored⟩, иначе выведите ⟨denied⟩.
Click Run to see the output here. · Нажмите Запустить, чтобы увидеть результат здесь.