Web Crypto API та його інтерфейс SubtleCrypto продовжують залишатися вкрай складними та непрактичними для реального використання на веб-платформі. Розробники все частіше стикаються з проблемами через ці обмеження, і з кожним роком вони стають більш очевидними. Замість того, щоб стати зручним інструментом для обробки криптографії на клієнтській стороні, API, на жаль, виявився непридатним для сучасних потреб веб-розробки.
Основна проблема з SubtleCrypto полягає в тому, що він не підтримує ефективну обробку великих обсягів даних — через обмеження, які змушують розробників завантажувати великі дані в пам'ять перед виконанням операцій, таких як хешування, шифрування та дешифрування. Це створює серйозні проблеми з використанням пам'яті, оскільки весь потік або великий файл повністю зберігається в пам'яті перед його обробкою. Це фактично означає, що функціональність криптографічного API не може бути використана для реальних завдань, де обробляються великі дані, такі як резервні копії файлів або відео-дані.
Підходи до обходу цих обмежень — через конвертацію потоку в об'єкт Blob
або через ручне розбиття даних на частини — є неефективними, що тільки додає проблем до вже й так складного процесу обробки даних. Вони не зменшують проблему з пам'яттю, оскільки в кінцевому підсумку дані все одно повинні зберігатися в пам'яті у вигляді одного великого буфера.
Ще однією серйозною проблемою є обов'язкова асинхронність, яка нав'язана через обгортку async/await
. Це призводить до додаткової складності без реального вирішення проблеми обробки даних, що потребують великої обчислювальної потужності. Криптографічні операції все одно споживають значні ресурси ЦП, і виконання їх в асинхронному режимі не дозволяє ефективно обробляти важкі завдання, такі як шифрування або дешифрування великих файлів.
Рішення для цих проблем або кардинальна зміна архітектури API, або повна його заміна. Необхідно підтримувати підтримку потоків даних, надаючи методи для поступового оброблення даних без необхідності завантажувати їх у пам'ять цілими, що є невід'ємною частиною сучасних веб-додатків. Виправлення цього API могло б зробити його корисним інструментом для веб-розробників, зберігаючи при цьому необхідну безпеку та ефективність.
Замість того, щоб продовжувати «покривати» ці проблеми різними хитрощами, потрібно переписати Web Crypto API з урахуванням реальних потреб розробників і можливостей сучасної веб-платформи, що значно полегшить процес роботи з великими обсягами даних, зберігаючи при цьому баланс між безпекою і зручністю.
Перекладено з: Web Crypto’s SubtleCrypto: A Masterclass in Developer Hostility and How It Strangles the Modern Web