Сначала назначение
Pulse генерирует непредсказуемый id импорта, проверяет пароль администратора и подписывает экспорт для обнаружения изменения. Эти задачи требуют разных примитивов: random_bytes, password_hash/password_verify и HMAC. Обычный hash не доказывает авторство, потому что любой может пересчитать его.
Шифрование применяется только когда конфиденциальность действительно нужна. Оно добавляет ключ, nonce, rotation и обработку ошибки аутентификации; base64 лишь кодирует байты.
Жизненный цикл секрета
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 этого браузера и не отправляются в аналитику.
Перелинковка со справочником
Проверка актуальности
- 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Первичный источник для актуализации фактов. Адрес приведён как текст и не является активной ссылкой.
Текст и схемы созданы для этого самоучителя без воспроизведения страниц, иллюстраций и листингов приложенной книги. Проверено: .