JavaScript có thể được mã hóa không?
Đây là post #24 của series, chuyên khám phá JavaScript và các thành phần xây dựng của nó. Trong quá trình xác định và mô tả các yếu tố cốt lõi, chúng tôi cũng chia sẻ một số quy tắc chung mà chúng tôi sử dụng khi xây dựng SessionStack, một ứng dụng JavaScript cần mạnh mẽ và có hiệu suất cao để giúp các công ty tối ưu hóa trải nghiệm kỹ thuật số của người dùng của họ Show
An ninh mạng là một lĩnh vực quan trọng trong lĩnh vực CNTT. Nhiều người giao tiếp với nhau hàng ngày từ khắp nơi trên thế giới thông qua internet. Khi mọi người giao tiếp qua internet, có khả năng những người khác có thể nghe lén hoặc thậm chí chiếm đoạt thông tin trước khi thông tin đó đến được với các bên liên quan khác. Ngoài ra, có khả năng dữ liệu cá nhân của người dùng bị đánh cắp bởi tin tặc khai thác các lỗ hổng trong mạng máy tính Sau đó, làm cách nào để mọi người có thể gửi thông tin một cách an toàn qua internet và vai trò của JavaScript là gì? Trong bài viết này, bạn sẽ tìm hiểu mật mã là gì, cách nó hoạt động trong JavaScript và cách đối phó với cuộc tấn công giữa chừng (MitM) Giới thiệu về Mật mã họcMật mã là quá trình bảo mật thông tin và liên lạc để chỉ người gửi và bên nhận dự định mới có thể truy cập chúng. Mật mã cấu thành các công nghệ khác nhau để bảo mật thông tin liên lạc đúng cách. Các công nghệ này có thể bao gồm mã hóa và giải mã bằng cách sử dụng mật mã và giải mã, sử dụng các thuật toán khác nhau để băm các quy trình truyền thông hoặc tạo và xác minh chữ ký Vì nhiều người trò chuyện qua internet thông qua các ứng dụng di động được xây dựng bằng JavaScript, nên cần phải hiểu cách mã hóa hoạt động trong JavaScript. Trong phần tiếp theo, chúng ta sẽ xem API mã hóa web của JavaScript và cách nó hỗ trợ mã hóa API mật mã web của JavaScriptVì việc đảm bảo liên lạc an toàn qua internet là rất quan trọng nên một số trình duyệt web đã triển khai giao diện tiền điện tử. Tuy nhiên, giao diện này không được xác định rõ hoặc âm thanh mã hóa. API mã hóa web của JavaScript cung cấp một giao diện được xác định rõ ràng có tên là API mã hóa web của JavaScript cho phép các nhà phát triển kết hợp các chức năng mã hóa cơ bản vào ứng dụng của họ mà không cần thư viện của bên thứ ba. Bạn có thể ký tài liệu, thực hiện xác thực và thực hiện kiểm tra tính toàn vẹn tổng thể của thông tin liên lạc Ví dụ: bạn có thể lấy dữ liệu ngẫu nhiên được bảo mật bằng mật mã cho một mảng các số nguyên không dấu 8 bit bằng cách chạy các mã sau Bạn có thể chạy mã này trên bảng điều khiển web của mình. Chẳng hạn, nếu tôi chạy mã này trên bảng điều khiển của Chrome, tôi sẽ nhận được đầu ra gồm mười số 8 bit được tạo ngẫu nhiên không có dấu Hãy xem cách API mã hóa web của JavaScript hoạt động và cách chúng tôi có thể thực hiện điều này từ bảng điều khiển web của mình Với API mã hóa web của JavaScript, máy chủ không thể xem dữ liệu vì nó được bảo mật bằng mật mã. Chỉ người gửi và người nhận mới có quyền truy cập vào dữ liệu liên lạc Từ sơ đồ trên, bạn có thể thấy dữ liệu từ người gửi được mã hóa bằng API. Người nhận sử dụng khóa để giải mã dữ liệu, máy chủ và cơ sở dữ liệu không thể giải mã dữ liệu được mã hóa. Bạn có thể thực hiện các thao tác mật mã cơ bản như Băm, Tạo và xác minh chữ ký, Mã hóa và Giải mã sẽ được thảo luận thêm trong bài viết này Các hàm mật mã cơ bảnCó rất nhiều chức năng mã hóa mà bạn có thể thực hiện với API mã hóa web của JavaScript. Trong phần này, chúng ta sẽ xem xét các chức năng mật mã cơ bản như Băm, Tạo và xác minh chữ ký, Mã hóa và Giải mã mã hóaMã hóa là một trong những chức năng mật mã cơ bản. Trong mã hóa, một tin nhắn bằng ngôn ngữ của con người (bản rõ) được chuyển đổi thành ngôn ngữ máy tính (bản mã) bằng một khóa. Để người nhận hiểu được thông điệp từ người gửi, họ phải sử dụng một khóa Quá trình mã hóa trong API mã hóa web của JavaScript sử dụng phương pháp Phương thức mã hóa sẽ trả về một Từ mã, chỉ định khóa, trong khi chỉ định thuật toán. hàm strToArrayBuffer chuyển đổi văn bản rõ thành văn bản mã hóa vì lời hứa được thực hiện cần phải là một Giải mã là ngược lại của mã hóa. Trong giải mã, bản mã được chuyển đổi trở lại văn bản thuần túy. Để làm điều này, cần có khóa (tiền điện tử) từ người dùng được ủy quyền. Điều này giống như cố gắng truy cập vào một tòa nhà bị khóa bằng chìa khóa. Bạn sẽ không được phép vào tòa nhà chỉ vì bạn có một số chìa khóa. Cách duy nhất bạn sẽ được phép vào là nếu chìa khóa khớp (có thể mở tòa nhà) Quá trình giải mã trong API mã hóa web của JavaScript sử dụng phương pháp Vì vậy, cú pháp giải mã từ bản mã ví dụ của chúng tôi được hiển thị bên dưới Tuy nhiên, chúng tôi sẽ phải mã hóa và giải mã văn bản của mình khi các phương pháp này đi cùng nhau. Mã hoàn chỉnh để mã hóa và giải mã văn bản mẫu của chúng tôi được hiển thị bên dưới Khi bạn chạy chương trình này, nó sẽ xuất ra bản rõ đã được mã hóa trước đó Từ mã, tạo khóa bí mật để giải mã tin nhắn Quá trình mã hóa được chia thành mã hóa đối xứng và không đối xứng. Sự phân chia này phụ thuộc vào loại khóa dùng để giải mã. Đối với mã hóa đối xứng, cùng một khóa được sử dụng cho cả mã hóa và giải mã. Trong khi, đối với mã hóa bất đối xứng, các cặp khóa khác nhau được sử dụng để mã hóa và giải mã. Khóa công khai được chia sẻ bởi người dùng được ủy quyền được sử dụng để mã hóa trong khi khóa bí mật từ người nhận được sử dụng để giải mã. Chìa khóa bí mật được giữ bí mật bởi chủ sở hữu của họ Băm là một chức năng mật mã, cho phép bạn ánh xạ dữ liệu có kích thước tùy ý thành một mảng có kích thước cố định. Hàm băm mật mã chuyển đổi dữ liệu từ văn bản gốc thành một chuỗi số và bảng chữ cái duy nhất. Băm không giống như mã hóa, nó là chức năng một chiều. Điều này có nghĩa là rất khó và hầu như không thể lấy được văn bản gốc từ giá trị băm Băm sử dụng thuật toán toán học để chuyển đổi văn bản thuần túy thành các giá trị được băm. Không có khóa nào giải mã giá trị băm như trong mã hóa. Hàm băm mật mã chủ yếu được sử dụng để xác thực. Ví dụ, trong đăng ký/đăng nhập. Khi người dùng đăng ký, mật khẩu của họ được băm trước khi lưu trữ chúng trong cơ sở dữ liệu. Bất cứ khi nào người dùng cố gắng đăng nhập, mật khẩu của họ sẽ được băm và so sánh với các giá trị được băm trong cơ sở dữ liệu để đảm bảo nó khớp. Với phương pháp này, nếu kẻ tấn công chiếm quyền điều khiển cơ sở dữ liệu của một công ty phần mềm, thông tin đăng nhập của người dùng sẽ vô dụng đối với họ vì họ không thể giải mã hoặc hiểu mật khẩu API mật mã web của JavaScript cung cấp hàm Để hiểu cách băm tin nhắn với hàm Từ chương trình ví dụ trên, chúng tôi đã băm văn bản Đây là một tin nhắn an toàn từ Mary bằng thuật toán Tạo và xác minh chữ kýĐây là một chức năng mã hóa khác mà bạn có thể thực hiện với API mã hóa web của JavaScript. Với chức năng Hãy xem xét một tình huống khi bạn muốn gửi tài liệu cho bạn của mình. Để tài liệu được xác thực, bạn cần phải ký tên. Bạn của bạn nhận được tin nhắn nhận ra rằng đó là từ bạn khi họ nhìn thấy chữ ký Để ký và xác minh tài liệu bằng hàm Máy tính không có suy nghĩ của riêng mình. Do đó, bất cứ khi nào chúng tôi muốn máy tính thực hiện một số tác vụ, chúng tôi sẽ cho chúng biết cách thực hiện. Ví dụ: nếu bạn muốn máy tính của mình thực hiện các phép tính cơ bản, bạn sẽ phải cho máy tính biết cần cộng những số nào và cách thực hiện Các thuật toán là một tập hợp các hướng dẫn có thể thực hiện trên máy tính được xác định rõ ràng để giải quyết các vấn đề. Trong mật mã, bạn cần chỉ định cách bạn muốn máy tính của mình thực hiện chức năng mật mã. Có nhiều loại thuật toán SHA khác nhau, mỗi loại chỉ định độ dài bit của giá trị băm. Trong phần này, chúng ta sẽ xem xét các chức năng mã hóa cơ bản mà API mã hóa web của JavaScript hỗ trợ ECDH (Đường cong elip Diffie-Hellman)Thuật toán mật mã này được sử dụng để tạo khóa và thỏa thuận khóa. Elliptic Curve Giao thức thỏa thuận khóa Diffie-Hellman cho phép hai bên có cặp khóa riêng-công khai thực hiện giao tiếp an toàn. Nó được sử dụng cho mật mã Elliptic Curve Diffie-Hellman Thuật toán Elliptic Curve Diffie-Hellman cho phép bạn thực hiện các thao tác sau
SHA (Thuật toán băm an toàn)Thuật toán này chủ yếu được sử dụng để thực hiện các hàm băm. Nó cô đặc dữ liệu biến đổi thành đầu ra chuỗi bit có kích thước cố định. API mã hóa web của JavaScript cho phép bạn thực hiện các hàm băm với HMAC (Mã xác thực tin nhắn dựa trên hàm băm)Sau khi băm một giá trị bằng hàm băm, bạn sẽ cần xác minh rằng thư đến bằng với giá trị băm. Hãy nhớ rằng chúng ta hầu như không thể chuyển đổi giá trị băm trở lại văn bản gốc của nó. Để so sánh các giá trị, thuật toán
HKDF (Hàm dẫn xuất khóa dựa trên hàm băm)Hàm dẫn xuất khóa dựa trên hàm băm là hàm dẫn xuất khóa mật mã dựa trên HMAC. Nó sử dụng phương pháp khai thác-sau đó-mở rộng. Bạn có thể sử dụng thuật toán này để chuyển đổi các bí mật được chia sẻ thành các khóa phù hợp để mã hóa, kiểm tra tính toàn vẹn hoặc xác thực. Các thao tác bạn có thể thực hiện với thuật toán này như sau
PBKDF2 (Chức năng dẫn xuất khóa dựa trên mật khẩu 2)Thuật toán PBKDF2 được sử dụng để lấy các khóa mật mã, sử dụng hàm dẫn xuất khóa dựa trên mật khẩu PKCS#5 (Tiêu chuẩn mã hóa khóa công khai #5) phiên bản 2. Cũng giống như hàm HKDF, bạn có thể thực hiện Dẫn xuất bit, Nhập khóa và Lấy độ dài khóa bằng thuật toán này ECDSA (Thuật toán chữ ký số đường cong Elliptic)Thuật toán chữ ký số Elliptic Curve cho phép các nhà phát triển ký và xác minh tài liệu, sử dụng mật mã đường cong elliptic. Nó cung cấp một biến thể của Thuật toán chữ ký số (DSA). Bạn có thể thực hiện các thao tác sau với thuật toán ECDSA
Thuật toán RSA (Rivest–Shamir–Adleman)Thuật toán RSA được sử dụng để bảo mật thông tin qua internet. Nó là một thuật toán mật mã bất đối xứng. Hai khóa được sử dụng cho quá trình mã hóa và giải mã. Một khóa là công khai và có thể được chia sẻ giữa những người dùng được ủy quyền, trong khi khóa thứ hai là riêng tư phải được giữ kín Rivest–Shamir–Adleman hỗ trợ các thuật toán khác với sơ đồ đệm có thể được sử dụng với thuật toán RSA. API mã hóa web của JavaScript hỗ trợ các thuật toán RSA và sơ đồ đệm sau
Thuật toán AES (Chuẩn mã hóa nâng cao)Thuật toán tiêu chuẩn mã hóa nâng cao hầu hết được biết đến với tên ban đầu là Rijndael. Nó được sử dụng để mã hóa dữ liệu điện tử và được thành lập bởi U. S. Viện Tiêu chuẩn và Công nghệ Quốc gia (NIST) năm 2001. API mã hóa web của JavaScript hỗ trợ các mô hình mã hóa khác nhau sử dụng khối AES, chúng là
Có rất nhiều ứng dụng API mã hóa web của JavaScript trong mã hóa thời gian thực. Trong phần này, chúng ta sẽ xem xét các ứng dụng khác nhau của mật mã trong thời gian thực Xác thực đa yếu tốĐôi khi, tin tặc có thể đánh cắp mật khẩu của người dùng. Vì vậy, ngay cả khi những mật khẩu này được băm hoặc mã hóa trong cơ sở dữ liệu, nó cũng không thể ngăn chúng truy cập vào tài khoản của người dùng. Để đảm bảo rằng ai đó đang truy cập tài khoản là chủ sở hữu thực sự, các ứng dụng cho phép xác thực đa yếu tố Thay vì sử dụng xác thực tầng vận chuyển, chẳng hạn như ứng dụng chứng chỉ máy khách TLS có thể sử dụng các khóa máy khách phù hợp có thể đã được tạo trước đó thông qua tác nhân người dùng như mã thông báo đa yếu tố Trao đổi tài liệu được bảo vệMột trong những mục tiêu của mật mã là bảo mật thông tin liên lạc qua internet với sự có mặt của bên thứ ba. Vì có các bên thứ ba liên tục theo dõi cuộc hội thoại của người khác, nên API mã hóa web của JavaScript cho phép bạn ký, xác minh và mã hóa tài liệu. Bảo vệ tài liệu yêu cầu người dùng được ủy quyền phải có khóa cho phép họ truy cập vào tài liệu Lưu trữ đám mâyBạn có thể bảo vệ tài liệu trước khi tải chúng lên máy chủ từ xa bằng cách sử dụng API mã hóa web của JavaScript. Ứng dụng có thể yêu cầu người dùng chọn khóa riêng hoặc khóa bí mật, lấy khóa mã hóa, mã hóa tài liệu, sau đó tải dữ liệu được mã hóa lên nhà cung cấp dịch vụ bằng các API hiện có Nhắn tin an toànNgười dùng có thể giao tiếp an toàn qua internet với các chương trình như nhắn tin không ghi âm (OTR). Hai bên tham gia giao tiếp có thể mã hóa và giải mã tin nhắn bằng các khóa mã xác thực tin nhắn (MAC) để ngăn chặn giả mạo Ký và mã hóa đối tượng JavaScript (JOSE)Bạn có thể tương tác với các cấu trúc và định dạng thông báo được xác định bởi Nhóm làm việc mã hóa và ký mã đối tượng JavaScript (JOSE) với API mã hóa web của JavaScript Cách đối phó với các cuộc tấn công MitMMan in the middle attack (MitM) còn có thể gọi là machine in the middle attack hay person in the middle attack. Đó là một cuộc tấn công mạng trong đó kẻ tấn công nghe trộm thông tin liên lạc giữa hai bên, để chiếm quyền điều khiển hoặc sửa đổi thông tin liên lạc Ví dụ: một người trung gian có thể chặn thông tin được gửi từ một bên trước khi nó đến bên kia. Hãy xem trường hợp hai người; Nếu một người đàn ông ở giữa (James) nắm được chìa khóa của Nancy, anh ta có thể giải mã tin nhắn, xem hoặc sửa đổi nội dung của nó trước khi gửi cho Joy Hãy xem xét các cách khác nhau mà mọi người đối phó với các cuộc tấn công MitM
Mọi người cần cảm thấy an toàn bất cứ khi nào họ giao tiếp qua internet. Bảo quản không an toàn không chỉ có nghĩa là thông tin liên lạc của bạn có thể bị rò rỉ trên internet, một số kẻ tấn công còn đi xa hơn là đánh cắp người dùng, bắt nạt người dùng và thậm chí truy tìm họ để gây tổn hại về thể chất Nhà phát triển phải xây dựng sản phẩm bền vững và an toàn cho người dùng. Điều gì xảy ra khi các công ty bỏ bê quyền riêng tư và an toàn của người dùng khi xây dựng sản phẩm? Các cơ quan quản lý bảo vệ dữ liệu quy định cách dữ liệu cá nhân được xử lý qua internet. Ví dụ: GDPR, một cơ quan quản lý dữ liệu, sẽ phạt tới 20 triệu euro (khoảng 18 triệu bảng Anh) hoặc 4% doanh thu toàn cầu hàng năm — tùy theo mức nào lớn hơn — đối với hành vi vi phạm. Do đó, các công ty phải thực hiện mọi bước cần thiết để đảm bảo rằng dữ liệu của người dùng luôn được bảo mật Điều này có nghĩa là các công ty cũng phải rất cẩn thận về các công cụ và nhà cung cấp của bên thứ ba mà họ chọn hợp tác. Điều rất quan trọng là các công cụ đang được tất cả các tổ chức áp dụng phải an toàn và tôn trọng quyền riêng tư. Điều này đặc biệt quan trọng đối với các sản phẩm nặng về nhập dữ liệu như phân tích, giám sát, theo dõi lỗi, v.v. Khi xây dựng SessionStack, quyền riêng tư và bảo mật của người dùng là ưu tiên hàng đầu vì sản phẩm thu thập nhiều loại dữ liệu từ trình duyệt trong các phiên của người dùng. Sau khi SessionStack được tích hợp vào ứng dụng web, nó sẽ bắt đầu thu thập dữ liệu như thay đổi DOM, tương tác người dùng, ngoại lệ JavaScript, dấu vết ngăn xếp, yêu cầu mạng và thông báo gỡ lỗi. Dữ liệu này sau đó được xử lý và cho phép các nhóm phát lại hành trình của người dùng dưới dạng video để tối ưu hóa quy trình làm việc của sản phẩm, tái tạo lỗi hoặc xem người dùng gặp khó khăn ở đâu Chúng tôi đã tích hợp các tính năng vào SessionStack cho phép khách hàng của chúng tôi có toàn quyền kiểm soát dữ liệu nào đang được gửi từ trình duyệt đến máy chủ của chúng tôi. Thậm chí còn có tùy chọn che giấu bất kỳ dữ liệu nào trên trang, chẳng hạn như PII, dữ liệu này sẽ bị bỏ qua và sẽ không rời khỏi trình duyệt Mã hóa JavaScript có an toàn không?Với API mật mã web của JavaScript, máy chủ không thể xem dữ liệu vì nó được bảo mật bằng mật mã . Chỉ người gửi và người nhận có quyền truy cập vào dữ liệu liên lạc. Từ sơ đồ trên, bạn có thể thấy dữ liệu từ người gửi được mã hóa bằng API.
Làm cách nào để mã hóa dữ liệu trong JavaScript?Mã hóa đối tượng . dữ liệu var = [{ foo. thanh}, { thanh. foo}]; var ciphertext = CryptoJS. AES. mã hóa (JSON. stringify(dữ liệu), 'khóa bí mật 123'); var byte = CryptoJS. AES. giải mã (bản mã. toString(), 'khóa bí mật 123'); var decryptedData = JSON. phân tích cú pháp (byte. toString(CryptoJS. enc. UTF8)); Làm cách nào để JavaScript không thể đọc được?Không thể đọc được, có thể khó đọc hơn. Cuối cùng, trình duyệt của bạn sẽ phải đọc mã JS, đó là lý do tại sao "không đọc được" là không thể. khó đọc. Như đã chỉ ra trong giải pháp 1, thu nhỏ và che giấu là 2 kỹ thuật làm cho mã nguồn khó đọc hơn .
Làm cách nào để giải mã mã nguồn JavaScript?Nếu bạn có Google Chrome, hãy mở trang web có JavaScript mà bạn đang cố giải mã. Nhấn F12 để mở Công cụ dành cho nhà phát triển bên trong Chrome. Bây giờ hãy chuyển sang tab Tập lệnh, nhấp chuột phải và chọn Gỡ rối mã nguồn . Đó là nó. |