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-протоколы.