Web Crypto API
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
Web Crypto API là một giao diện cho phép script sử dụng các primitive mật mã để xây dựng hệ thống có dùng mật mã.
Một số trình duyệt trước đây đã triển khai một giao diện gọi là Crypto mà chưa được định nghĩa rõ ràng hoặc không an toàn về mặt mật mã.
Để tránh nhầm lẫn, các phương thức và thuộc tính của giao diện này đã bị loại bỏ khỏi các trình duyệt triển khai Web Crypto API, và mọi phương thức của Web Crypto API đều có sẵn trên một giao diện mới: SubtleCrypto.
Thuộc tính Crypto.subtle cung cấp quyền truy cập vào một đối tượng triển khai nó.
Warning: Web Crypto API cung cấp một số primitive mật mã cấp thấp. Rất dễ dùng sai chúng, và các cạm bẫy liên quan có thể rất tinh vi.
Ngay cả khi giả định bạn dùng đúng các hàm mật mã cơ bản, việc quản lý khóa an toàn và thiết kế hệ thống bảo mật tổng thể vẫn cực kỳ khó làm đúng, và thường thuộc phạm vi của các chuyên gia bảo mật.
Sai sót trong thiết kế và triển khai hệ thống bảo mật có thể khiến bảo mật của hệ thống hoàn toàn vô hiệu.
Hãy học và thử nghiệm, nhưng đừng bảo đảm hoặc ngụ ý tính an toàn của sản phẩm bạn làm ra trước khi một người am hiểu chủ đề này xem xét kỹ lưỡng. Crypto 101 Course có thể là một nơi tốt để bắt đầu tìm hiểu về thiết kế và triển khai hệ thống an toàn.
Giao diện
Crypto-
Cung cấp các tính năng mật mã cơ bản, chẳng hạn bộ sinh số ngẫu nhiên đủ mạnh về mặt mật mã, và quyền truy cập vào các primitive mật mã thông qua đối tượng
SubtleCrypto. Một đối tượng kiểu này có thể được truy cập trong global scope bằngWindow.cryptohoặcWorkerGlobalScope.crypto. SubtleCrypto-
Đại diện cho một đối tượng cung cấp các hàm mật mã cấp thấp cho việc tạo khóa, mã hóa, giải mã, bọc và mở khóa, v.v.
CryptoKey-
Đại diện cho một khóa mật mã thu được từ một trong các phương thức của
SubtleCryptonhưgenerateKey(),deriveKey(),importKey(), hoặcunwrapKey().
Các dictionary
AesCbcParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.encrypt(),SubtleCrypto.decrypt(),SubtleCrypto.wrapKey(), hoặcSubtleCrypto.unwrapKey()khi dùng thuật toán AES-CBC. AesCtrParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.encrypt(),SubtleCrypto.decrypt(),SubtleCrypto.wrapKey(), hoặcSubtleCrypto.unwrapKey()khi dùng thuật toán AES-CTR. AesGcmParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.encrypt(),SubtleCrypto.decrypt(),SubtleCrypto.wrapKey(), hoặcSubtleCrypto.unwrapKey()khi dùng thuật toán AES-GCM. AesKeyGenParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.generateKey()khi tạo khóa AES, tức là khi thuật toán được xác định là một trong AES-CBC, AES-CTR, AES-GCM, hoặc AES-KW. CryptoKeyPair-
Đại diện cho một cặp khóa công khai và riêng tư dùng cho thuật toán mật mã bất đối xứng.
EcKeyGenParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.generateKey()khi tạo bất kỳ cặp khóa dựa trên đường cong elliptic nào, tức là khi thuật toán được xác định là ECDSA hoặc ECDH. EcKeyImportParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.importKey()hoặcSubtleCrypto.unwrapKey()khi tạo bất kỳ cặp khóa dựa trên đường cong elliptic nào, tức là khi thuật toán được xác định là ECDSA hoặc ECDH. EcdhKeyDeriveParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.deriveKey()khi dùng thuật toán ECDH. EcdsaParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.sign()hoặcSubtleCrypto.verify()khi dùng thuật toán ECDSA. HkdfParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.deriveKey()khi dùng thuật toán HKDF. HmacImportParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.importKey()hoặcSubtleCrypto.unwrapKey()khi tạo khóa cho thuật toán HMAC. HmacKeyGenParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.generateKey()khi tạo khóa cho thuật toán HMAC. Pbkdf2Params-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.deriveKey()khi dùng thuật toán PBKDF2. RsaHashedImportParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.importKey()hoặcSubtleCrypto.unwrapKey()khi nhập bất kỳ cặp khóa dựa trên RSA nào, tức là khi thuật toán được xác định là RSASSA-PKCS1-v1_5, RSA-PSS, hoặc RSA-OAEP. RsaHashedKeyGenParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.generateKey()khi tạo bất kỳ cặp khóa dựa trên RSA nào, tức là khi thuật toán được xác định là RSASSA-PKCS1-v1_5, RSA-PSS, hoặc RSA-OAEP. RsaOaepParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.encrypt(),SubtleCrypto.decrypt(),SubtleCrypto.wrapKey(), hoặcSubtleCrypto.unwrapKey()khi dùng thuật toán RSA_OAEP. RsaPssParams-
Đại diện cho đối tượng nên được truyền vào tham số
algorithmchoSubtleCrypto.sign()hoặcSubtleCrypto.verify()khi dùng thuật toán RSA-PSS.
Phần mở rộng cho các giao diện khác
Window.crypto-
Đại diện cho đối tượng
Cryptogắn với global object trong phạm vi luồng chính. WorkerGlobalScope.crypto-
Đại diện cho đối tượng
Cryptogắn với global object trong phạm vi worker.
Thông số kỹ thuật
| Specification |
|---|
| Web Cryptography Level 2> # crypto-interface> |