Самоучитель: PHP под капотом: runtime и стандартная библиотека
Глава 16 из 20V. Данные и доверие135 минут

Глава 16. Случайность, пароли, хеши и криптографические границы

Криптографическая операция начинается с модели угроз и жизненного цикла ключа; правильная функция не исправит повтор nonce или секрет в репозитории.

После главы вы сможете
  • выбирать CSPRNG
  • различать hash и MAC
  • планировать rotation

Сначала назначение

Pulse генерирует непредсказуемый id импорта, проверяет пароль администратора и подписывает экспорт для обнаружения изменения. Эти задачи требуют разных примитивов: random_bytes, password_hash/password_verify и HMAC. Обычный hash не доказывает авторство, потому что любой может пересчитать его.

Шифрование применяется только когда конфиденциальность действительно нужна. Оно добавляет ключ, nonce, rotation и обработку ошибки аутентификации; base64 лишь кодирует байты.

Жизненный цикл секрета

Ключ от создания до выводаКод хранит идентификатор ключа рядом с данными, но сам секрет поступает из защищённой среды.GenerateCSPRNGStoresecret managerUsenarrow APIRotatekey idRetireaudit
Код хранит идентификатор ключа рядом с данными, но сам секрет поступает из защищённой среды.

Random extension и CSPRNG

random_bytes и random_int используют криптографически безопасный источник и подходят токенам. Объектный Random API позволяет явно выбрать engine для симуляции или теста, но предсказуемый engine нельзя подменить в security-контексте.

Тесту не нужен фиксированный реальный token: зависимость Randomizer передаётся интерфейсом, а production factory выбирает secure engine. Длина считается в байтах энтропии до hex или base64url-кодирования.

Пароль — медленный специальный хеш

password_hash получает PASSWORD_DEFAULT или одобренный алгоритм, а verify сравнивает без ручной обработки salt. password_needs_rehash позволяет обновить параметры после успешной проверки. В базе хранится полная строка результата достаточной длины.

Лимит попыток и MFA относятся к протоколу аутентификации. Самый сильный password hash не предотвращает credential stuffing или утечку session id.

MAC, encryption и ключи

hash_hmac с секретом подтверждает целостность сообщения для участников, знающих ключ. Сравнение MAC выполняется hash_equals. Для шифрования выбирают authenticated encryption и библиотеку высокого уровня, где nonce создаётся правильно.

Ключ не хранится рядом с ciphertext в одной записи и не выводится в error log. Rotation требует key id и периода чтения старых данных; удаление старого ключа до миграции делает данные недоступными.

Лаборатория

Сгенерируйте 32-байтовый import token, сохраните password hash и подпишите canonical export HMAC. Измените один байт и убедитесь, что проверка отклоняет результат.

  • Нет mt_rand для токена.
  • Пароль не логируется.
  • MAC сравнивается через hash_equals.
Локальный прогресс

Закрепите материал

Отметка, заметка, чек-лист и ответы остаются в localStorage этого браузера и не отправляются в аналитику.

Контрольная карта лаборатории

Выполнено: 0 из 3

Локальный тест

1. Подходит ли sha256(password) для хранения пароля?
2. Что доказывает обычный hash файла?

Перелинковка со справочником

Проверка актуальности

  • php.nethttps://www.php.net/manual/en/book.password.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • php.nethttps://www.php.net/manual/en/book.random.phpПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
  • cheatsheetseries.owasp.orghttps://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.htmlПервичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.

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

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

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

Политики

Политика конфиденциальности · Политика использования файлов cookie