advanced
Web Crypto
Используйте secure random, hashing, signatures, import/export ключей и encryption primitives, не изобретая криптографию.
Web Crypto даёт криптопримитивы браузера: безопасная случайность, hashing, подписи, key derivation и шифрование. Асинхронен и безопаснее самодельного JS-crypto, но протокол всё равно сложен. На интервью — примитивы, ключи и threat model, без изобретения схем.
const bytes = crypto.getRandomValues(new Uint8Array(16));
const digest = await crypto.subtle.digest('SHA-256', data);
Hash — не шифрование. Non-extractable ключи снижают риск утечки при XSS, но не спасают от полностью скомпрометированного клиента. Пароли обрабатывает сервер с проверенными KDF.
На интервью: random ID, hash vs encrypt, extractability ключей и почему пароли не на клиенте.
Типовые ошибки: API не делает небезопасный протокол безопасным; клиентские ключи доступны при XSS.
Компромисс: удобство против контроля — выбирайте механизм под вашу связность и бюджет производительности.
Чеклист:
- getRandomValues для ID и токенов.
- Различайте hash, encrypt и sign.
- Non-extractable ключи, где возможно.
- Не проектируйте свои crypto-протоколы.