Hướng dẫn end-to-end encryption javascript - javascript mã hóa đầu cuối
Khi truyền hoặc lưu trữ dữ liệu người dùng, đặc biệt là các cuộc hội thoại riêng tư, điều cần thiết là phải xem xét sử dụng các kỹ thuật mật mã để đảm bảo quyền riêng tư. Show
Bằng cách đọc hướng dẫn này, bạn sẽ học cách mã hóa dữ liệu mã hóa đầu cuối trong các ứng dụng web không sử dụng gì ngoài JavaScript và API Crypto Web, đây là API trình duyệt gốc. Xin lưu ý rằng hướng dẫn này là rất cơ bản và giáo dục nghiêm ngặt, có thể chứa đơn giản hóa và không nên thực hiện giao thức mã hóa của riêng bạn là không nên. Các thuật toán được sử dụng có thể chứa một số 'gotchas' nhất định nếu không được sử dụng đúng với sự trợ giúp của các chuyên gia bảo mật Bạn cũng có thể tìm thấy dự án đầy đủ trong repo GitHub này nếu bạn bị lạc. Và nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với tôi trên Twitter :). Mã hóa từ đầu đến cuối là gì?
API tiền điện tử web là gì?
Lên những điều cơ bảnTrong các bước sau, chúng tôi sẽ khai báo các chức năng thiết yếu liên quan đến mã hóa từ đầu đến cuối. Bạn có thể sao chép từng cái vào tệp Lưu ý: Không phải tất cả các trình duyệt đều thực hiện các thuật toán chúng tôi sẽ sử dụng. Cụ thể, Internet Explorer và Microsoft Edge. Kiểm tra bảng khả năng tương thích tại MDN Web Docs: API Crypto - Web tinh tế. Tạo một cặp khóaCác cặp khóa mật mã là điều cần thiết để mã hóa từ đầu đến cuối. Một cặp khóa bao gồm một khóa công khai và khóa riêng. Mỗi người dùng trong ứng dụng của bạn phải có một cặp khóa để bảo vệ dữ liệu của họ, với thành phần công khai có sẵn cho người dùng khác và thành phần riêng tư chỉ có thể truy cập vào chủ sở hữu của cặp khóa. Bạn sẽ hiểu làm thế nào những thứ này phát huy tác dụng trong phần tiếp theo.key pair consists of a public key and a private key. Each user in your application should have a key pair to protect their data, with the public component available to other users and the private component only accessible to the key pair's owner. You'll understand how these come into play in the next section. Để tạo cặp khóa, chúng tôi sẽ sử dụng phương thức Ngoài ra, tôi đã chọn thuật toán ECDH với đường cong hình elip P-256 vì nó được hỗ trợ tốt và sự cân bằng phù hợp giữa bảo mật và hiệu suất. Ưu tiên này có thể thay đổi theo thời gian khi các thuật toán mới có sẵn. Khóa rút raChúng tôi sẽ sử dụng cặp khóa được tạo trong bước cuối cùng để rút ra khóa mật mã đối xứng mã hóa và giải mã dữ liệu và là duy nhất cho bất kỳ hai người dùng giao tiếp nào. Ví dụ: người dùng A có được khóa bằng khóa riêng của họ với khóa công khai của người dùng B và người dùng B có cùng một khóa bằng khóa riêng và khóa công khai của người dùng A của họ. Không ai có thể tạo khóa dẫn xuất mà không có quyền truy cập vào ít nhất một trong các khóa riêng của người dùng, vì vậy điều cần thiết là giữ chúng an toàn.derived key without access to at least one of the users' private keys, so it's essential to keep them safe. Trong bước trước, chúng tôi đã xuất cặp khóa theo định dạng JWK. Trước khi chúng tôi có thể lấy phím, chúng tôi cần nhập những người đó trở lại trạng thái ban đầu bằng cách sử dụng Trong trường hợp này, tôi đã chọn thuật toán AES-GCM cho số dư bảo mật/hiệu suất đã biết và tính khả dụng của trình duyệt. Mã hóa văn bảnBây giờ chúng ta có thể sử dụng khóa dẫn xuất để mã hóa văn bản, vì vậy an toàn để truyền nó.encrypt text, so it's safe to transmit it. Trước khi mã hóa, chúng tôi mã hóa văn bản thành Như bạn có thể thấy, tham số thuật toán AES-GCM bao gồm một vectơ khởi tạo (IV). Đối với mọi hoạt động mã hóa, nó phải là ngẫu nhiên và khác nhau để đảm bảo sức mạnh của mã hóa. Nó được bao gồm trong thông báo để nó có thể được sử dụng trong quá trình giải mã, đó là bước tiếp theo. Decrypt văn bảnBây giờ chúng ta có thể sử dụng khóa dẫn xuất để giải mã bất kỳ văn bản được mã hóa nào chúng ta nhận được, thực hiện chính xác so với bước mã hóa.decrypt any encrypted text we receive, doing precisely the opposite from the encrypt step. Trước khi giải mã, chúng tôi truy xuất vectơ khởi tạo, chuyển đổi chuỗi trở lại từ base64, biến nó thành Cũng có thể quá trình giải mã này sẽ thất bại do sử dụng khóa hoặc vectơ khởi tạo sai, điều đó có nghĩa là người dùng không có cặp khóa chính xác để giải mã văn bản họ nhận được. Trong trường hợp như vậy, chúng tôi trả về một thông báo lỗi. Tích hợp trong ứng dụng trò chuyện của bạnVà đó là tất cả các công việc mật mã cần thiết! Trong các phần sau, tôi sẽ giải thích cách tôi sử dụng các phương thức chúng tôi đã triển khai ở trên để mã hóa từ đầu đến cuối một ứng dụng trò chuyện được xây dựng với các thành phần trò chuyện phản ứng mạnh mẽ của Stream Chat. Sao chép dự ánSao chép kho lưu trữ-Chat được mã hóa trong một thư mục cục bộ, cài đặt các phụ thuộc và chạy nó. Sau đó, một tab trình duyệt nên mở. Nhưng trước tiên, chúng ta cần định cấu hình dự án với khóa API Chat Chat của riêng mình. Định cấu hình bảng điều khiển trò chuyện luồngTạo tài khoản của bạn tại getStream.io, tạo một ứng dụng và chọn phát triển thay vì sản xuất. Để đơn giản hóa, hãy tắt cả kiểm tra AUTH và kiểm tra quyền. Hãy chắc chắn để nhấn Lưu. Khi ứng dụng của bạn đang được sản xuất, bạn nên giữ những thứ này được bật và có phần phụ trợ để cung cấp mã thông báo cho người dùng. Để tham khảo trong tương lai, xem tài liệu về xác thực và tài liệu về quyền. Vui lòng lưu ý thông tin đăng nhập luồng, vì chúng tôi sẽ sử dụng chúng để khởi tạo ứng dụng trò chuyện trong ứng dụng trong bước tiếp theo. Vì chúng tôi đã vô hiệu hóa xác thực và quyền, chúng tôi sẽ chỉ thực sự cần chìa khóa ngay bây giờ. Tuy nhiên, trong tương lai, bạn sẽ sử dụng bí mật trong phần phụ trợ của mình để thực hiện xác thực để phát hành mã thông báo của người dùng để trò chuyện luồng, vì vậy ứng dụng trò chuyện của bạn có thể có các điều khiển truy cập phù hợp.
Như bạn có thể thấy, tôi đã điều chỉnh lại các phím của mình. Sẽ là tốt nhất nếu bạn giữ các thông tin này an toàn. Thay đổi thông tin đăng nhậpTrong Sau này, bạn sẽ có thể kiểm tra ứng dụng. Trong các bước sau, bạn sẽ hiểu nơi các chức năng chúng tôi xác định phù hợp. Đặt người dùngTrong Trong chức năng này, chúng tôi nhập Thành phần người gửiTrong Thành phần người nhậnTrong Thành phần KeyDeriverTrong Thành phần mã hóaTrong Nếu không có sự tùy chỉnh này của thành phần tin nhắn, nó sẽ hiển thị như thế này: Việc tùy chỉnh được thực hiện bằng cách gói thành phần Thành phần EncryptedMessageInputTrong Tùy chỉnh được thực hiện bằng cách gói thành phần ____3030 của Stream Chat và cài đặt Thành phần trò chuyệnVà cuối cùng, vào Thành phần Các bước tiếp theo với API Web CryptoXin chúc mừng!Bạn vừa học cách thực hiện mã hóa từ đầu đến cuối cơ bản trong các ứng dụng web của bạn.Điều quan trọng là phải biết đây là hình thức mã hóa đầu cuối cơ bản nhất.Nó thiếu một số điều chỉnh bổ sung có thể làm cho nó chống đạn hơn cho thế giới thực, chẳng hạn như đệm ngẫu nhiên, chữ ký kỹ thuật số và bí mật về phía trước, trong số những người khác.Ngoài ra, để sử dụng trong thế giới thực, điều quan trọng là có được sự giúp đỡ của các chuyên gia bảo mật ứng dụng. |