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ằng Window.crypto hoặc WorkerGlobalScope.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 SubtleCrypto như generateKey(), deriveKey(), importKey(), hoặc unwrapKey().

Các dictionary

AesCbcParams

Đại diện cho đối tượng nên được truyền vào tham số algorithm cho SubtleCrypto.encrypt(), SubtleCrypto.decrypt(), SubtleCrypto.wrapKey(), hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.encrypt(), SubtleCrypto.decrypt(), SubtleCrypto.wrapKey(), hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.encrypt(), SubtleCrypto.decrypt(), SubtleCrypto.wrapKey(), hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.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ố algorithm cho SubtleCrypto.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ố algorithm cho SubtleCrypto.importKey() hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.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ố algorithm cho SubtleCrypto.sign() hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.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ố algorithm cho SubtleCrypto.importKey() hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.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ố algorithm cho SubtleCrypto.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ố algorithm cho SubtleCrypto.importKey() hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.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ố algorithm cho SubtleCrypto.encrypt(), SubtleCrypto.decrypt(), SubtleCrypto.wrapKey(), hoặc SubtleCrypto.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ố algorithm cho SubtleCrypto.sign() hoặc SubtleCrypto.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 Crypto gắn với global object trong phạm vi luồng chính.

WorkerGlobalScope.crypto

Đại diện cho đối tượng Crypto gắn với global object trong phạm vi worker.

Thông số kỹ thuật

Specification
Web Cryptography Level 2
# crypto-interface

Tương thích trình duyệt