Ở đây chúng tôi có một số hàm nguyên thủy khá tốt về Quyền riêng tư (PGP) chung được trình bày dưới dạng lệnh gọi API chạy trên máy chủ Node HTTPS:.
Các chức năng này không cụ thể như có thể được sử dụng để nói, triển khai một plugin nhắn tin email, nhưng thay vào đó được dành riêng cho ứng dụng đăng ký người dùng và ủy quyền đăng nhập gọi các chức năng chung để hỗ trợ quy trình lớn hơn của nó.
Các khái niệm và mã hiển thị ở đây có thể dễ dàng điều chỉnh và được chia sẻ tại https://github.com/Bob-Wright/openPGP_functions_on_Node_API_Server .
PGP là sự triển khai của lược đồ Mật mã khóa công khai (PKC) thường dựa trên phương pháp mã hóa RSA .
PGP thường được sử dụng để ký và mã hóa các thư email, sau đó người nhận sẽ xác minh và giải mã. Một công dụng lớn khác là mã hóa các tệp và ổ đĩa để bảo vệ nội dung của chúng.
Lưu ý rằng các đặc điểm của PKC / PGP làm cho danh tính của những người tham gia trong một cuộc trao đổi hoặc giao dịch như vậy có thể nhận dạng được với nhau. Trên thực tế, trường hợp sử dụng của chúng tôi dựa trên khía cạnh này của sơ đồ.
Dưới đây là một bài viết về lược đồ PKC cung cấp một số giải thích tốt về các khái niệm và phương pháp liên quan: https://hackernoon.com/public-key-cryptography-simply-explained-e932e3093046 .
PGP như một kỹ thuật hoặc phương pháp mã hóa đã có sẵn trong một thời gian và nó đã được mã hóa hoặc lập trình bằng một số ngôn ngữ và nền tảng khác nhau.
Việc triển khai JavaScript openPGPjs khá gần đây mà chúng tôi sử dụng được viết bằng Nodejs dưới dạng API không đồng bộ và bạn có thể tìm thấy nó trong kho lưu trữ này: https://github.com/openpgpjs/openpgpjs .
Chúng tôi cung cấp giao diện cho các chức năng của openPGPjs thông qua khung API Express Nodejs sử dụng gửi biểu mẫu POST từ người gọi.
Sau đây là mã đề mục trong chương trình API Nodejs server.js của chúng tôi. Phần mã này hiển thị các mô-đun mà chúng tôi yêu cầu để đưa vào.
Theo mã đề mục này, chúng tôi đã chèn một số điểm nhập API vào đây cho các chức năng khác nhau mà chúng tôi cung cấp.
Sau khi các hàm API khác nhau này được liệt kê, chúng tôi có phần mã ngắn cuối cùng này để thiết lập và chạy máy chủ HTTPS: cho các hàm API.
API của chúng tôi xử lý một số đối tượng trong quá trình hoạt động của nó và một số đối tượng đó được lưu trữ trong các bảng trong cơ sở dữ liệu và một đối tượng được tạo từ nội dung của bảng dữ liệu khác.
Thông tin thêm về việc sử dụng bảng dữ liệu sau này, nhưng trong khi đó, khối mã sau đây dành cho mô-đun Node usersdb_conn.js kết nối chúng tôi với cơ sở dữ liệu mySQL của người dùng mà chúng tôi sử dụng chung trong các hàm API.
Bây giờ chúng ta đã mô tả shell API chung của mình, chúng ta có thể xem xét các chức năng mà nó trình bày cho người dùng của chúng ta.
Hầu như mọi chức năng PGP đều sử dụng một hoặc nhiều hơn ba đối tượng quan trọng trong quá trình xác định và hoạt động của nó.
Đối tượng đầu tiên trong số các đối tượng này là đối tượng người dùng, trong trường hợp của chúng tôi, được tạo từ dữ liệu về người dùng mà chúng tôi trích xuất từ cơ sở dữ liệu với địa chỉ email của người dùng được cung cấp thông qua tin nhắn POST.
Nội dung của cơ sở dữ liệu người dùng này trước đây đã được điền bởi một phần khác của quá trình đăng ký của chúng tôi.
Tại đây, trong danh sách bên dưới, chúng ta có thể thấy yêu cầu POST được sử dụng để gọi hàm tạo khóa cũng như hàm để lấy loại khóa và độ dài bit khóa từ tệp cấu hình và hàm chúng tôi sử dụng để trích xuất các giá trị dữ liệu người dùng cụ thể từ bảng cơ sở dữ liệu.
Trong phần liệt kê tiếp theo dưới đây, chúng ta thấy cách gọi hàm tạo khóa openPGP bằng cách sử dụng tên, họ, cụm mật khẩu và các giá trị dữ liệu email mà chúng ta đã thu được ở trên. Khi các khóa được tạo trong phiên bản demo này, chúng tôi cũng ghi từng khóa vào một tệp thích hợp.
Hai hàm tiếp theo bên dưới kiểm tra sự tồn tại của các bản ghi khóa công khai và khóa riêng tư trong bảng dữ liệu khóa công khai và khóa riêng tư. Chúng tôi sử dụng thông tin này để quyết định xem chúng tôi đang chèn một khóa mới hay thay thế / cập nhật một khóa đã có sẵn như được hiển thị trong danh sách bên dưới khóa này.
Chức năng ở đây tiếp theo bên dưới hiển thị trang thông báo thành công biểu ngữ chào mừng cho trình duyệt của người dùng đã gửi bản trình diễn tạo khóa API POST.
Mã trang hiển thị biểu ngữ thành công keygenWebpage này mà chúng ta vừa kiểm tra ở trên là hàm cuối cùng được sử dụng trong phần POST của trình tạo khóa của API.
Để các hàm riêng lẻ này hoàn thành nhiệm vụ dự định là tạo cặp khóa người dùng, chúng ta cần một phương thức để xếp hàng các hàm này để thực thi theo thứ tự phù hợp với tác vụ với từng hàm, cung cấp đóng góp của nó vào danh sách tác vụ .
Vì vậy, mã chính cho lệnh gọi API trình tạo khóa mà chúng ta đã thảo luận về các lần chạy như là một phần của chức năng mô hình “performanceAsyncFunctions” này, là một bộ điều khiển chức năng không đồng bộ chạy tuần tự từng chức năng, chờ mỗi chức năng hoàn thành trước khi chuyển sang phần tiếp theo.
Khi lệnh gọi API của trình tạo khóa này đã được chạy, chúng tôi sẽ có tất cả ba đối tượng thường được sử dụng để mã hóa hoặc giải mã và ký hoặc xác minh các tin nhắn văn bản có sẵn để chúng tôi sử dụng.
Chúng tôi có một trang menu HTML đơn giản có tên sendPost.html được hiển thị ở đây bên dưới thiết lập bên dưới để trình diễn hoặc chạy các lệnh gọi có sẵn từ API của chúng tôi.
Đây là biểu mẫu HTML cơ bản của bạn gửi yêu cầu ĐĂNG đến máy chủ API của chúng tôi và ba mục nhập để tạo cặp khóa được triển khai với mã này được hiển thị tiếp theo.
Cuối cùng, đối với bản demo của chúng tôi, chúng tôi hiển thị một màn hình trang biểu ngữ gắn cờ việc hoàn thành quá trình tạo khóa. Việc hoàn thành này dẫn đến ba đối tượng cốt lõi cho việc sử dụng sơ đồ PGP. Một là của đối tượng người dùng với các thuộc tính tên , họ , cụm mật khẩu và địa chỉ email .
Trình tạo khóa của chúng tôi đã tạo thêm hai đối tượng mới để chúng tôi sử dụng, đối tượng khóa công khai và đối tượng khóa cá nhân .
Nhật ký bảng điều khiển được sử dụng để hiển thị kết quả và tiến trình của chúng tôi cho các chức năng khác nhau và đây là nhật ký bảng điều khiển mẫu từ việc chạy bản trình diễn trình tạo khóa.
Có bốn hoạt động quan tâm mà chúng tôi sử dụng trong việc triển khai API của mình. Các thao tác này là để mã hóa một tin nhắn , ký một tin nhắn , giải mã một tin nhắn và xác minh một tin nhắn .
Có thể vừa mã hóa vừa ký hoặc vừa giải mã vừa xác minh một thông điệp, do đó, điều này cho chúng ta một bảng gồm sáu chức năng chung ngoài trình tạo khóa.
Mã hóa tin nhắn sử dụng khóa công khai của người gửi trong khi giải mã tin nhắn sử dụng khóa cá nhân và cụm mật khẩu của người nhận để các hoạt động bổ sung này sử dụng các khóa bổ sung.
Việc ký thư sử dụng khóa cá nhân và cụm mật khẩu của người ký trong khi xác minh sử dụng khóa công khai theo cách bổ sung tương tự.
Mã hóa một tin nhắn hoặc giải mã một tin nhắn là hai trong số các chức năng PGP phổ biến nhất. Hãy xem cách chúng được triển khai trong API của chúng tôi.
Đoạn mã này được hiển thị bên dưới là phần đầu của lệnh gọi Mã hóa API của chúng tôi.
Có thể thấy, điều đầu tiên chúng tôi làm là lấy địa chỉ email của người gửi hoặc người mã hóa từ tin nhắn POST, tiếp theo là lấy thông điệp bản rõ mà chúng tôi muốn mã hóa cùng với khóa công khai của người mã hóa, trong bản demo của chúng tôi, được trích xuất từ một bảng cơ sở dữ liệu dựa trên email mà chúng tôi đã cung cấp trong lệnh gọi API của mình.
Khi chúng ta có thông điệp văn bản rõ ràng mà chúng ta muốn mã hóa cùng với khóa công khai của người gửi, chúng ta có thể tiếp tục mã hóa thông báo bằng cách sử dụng hàm openPGP như được hiển thị ở đây tiếp theo.
Đối với bản trình diễn của chúng tôi, chúng tôi kết thúc lệnh gọi API bằng cách ghi tệp được mã hóa vào đĩa.
Tất cả các hàm này ở trên và được sử dụng trong lệnh gọi Mã hóa API của chúng tôi đều được chạy theo thứ tự như được chỉ dẫn bởi hàm không đồng bộ “performanceEncryptAsyncFunctions” đóng với chuỗi các hàm chờ được xếp hàng sẵn được liệt kê ở trên.
Bản trình diễn không hiển thị thông báo hoàn thành cho người dùng API của chúng tôi cho cuộc gọi này, nhưng nó hiển thị tệp nhật ký tới thiết bị đầu cuối máy chủ của chúng tôi như được hiển thị ở đây bên dưới.
Khi chúng tôi sở hữu một tin nhắn văn bản được mã hóa, chúng tôi có thể muốn đọc bản rõ hoặc nội dung không được mã hóa của nó. Tất nhiên, điều này đòi hỏi quá trình giải mã được thực hiện bởi đoạn mã sau.
Chúng tôi bắt đầu bằng cách phân tích cú pháp thư POST cho địa chỉ email người dùng của chúng tôi, sau đó là chức năng đọc thư được mã hóa của chúng tôi từ một tệp.
Việc giải mã trong trường hợp sử dụng của chúng tôi yêu cầu cả khóa cá nhân và cụm mật khẩu và chúng tôi trích xuất cụm mật khẩu từ cơ sở dữ liệu người dùng của chúng tôi như được hiển thị ở đây.
Chương trình PGP của chúng tôi cung cấp một cấp độ bảo vệ bổ sung bằng một quy trình được gọi là " trang bị" khóa liên quan đến việc mã hóa nó bằng cụm mật khẩu này.
Bên cạnh hai chức năng trước đó, chúng ta có một chức năng bổ sung để lấy khóa riêng từ cơ sở dữ liệu của nó.
Với các đối tượng này, chúng ta có thể giải mã thông báo và lưu bản rõ vào một tệp bằng cách sử dụng hai hàm đầu tiên trong danh sách dưới đây.
Một lần nữa, như được hiển thị ở trên, chúng tôi sử dụng cấu trúc “performanceAsyncFunctions” để thực hiện tuần tự từng chức năng trong danh sách chờ.
Như đã thực hiện với lệnh gọi API mã hóa, tương tác được cung cấp bởi lệnh gọi API giải mã này bao gồm văn bản được hiển thị trên thiết bị đầu cuối bảng điều khiển như được hiển thị trong nhật ký ví dụ bên dưới.
Bên cạnh ba chức năng chính là tạo khóa , mã hóa tin nhắn và giải mã tin nhắn, mã còn phục vụ bốn hàm API khác là ký và xác minh cùng với các lệnh gọi API mã hóa và ký và giải mã và xác minh .
Mã và kết quả nhật ký đầu cuối cho các API này được bao gồm trong kho lưu trữ GitHub tại https://github.com/Bob-Wright/openPGP_functions_on_Node_API_Server
Mã để chạy chương trình Node này như một dịch vụ trên Linux (Ubuntu20) cũng được bao gồm trong kho lưu trữ GitHub.
Mã này được viết dưới dạng bản demo và ví dụ về API NodeJS hơn là bất kỳ tiện ích sẵn sàng sản xuất nào. Hy vọng rằng, nó sẽ phục vụ tốt mục đích đó cho bạn thấy tôi đã viết nó như một ví dụ demo của riêng tôi.
Nó phải dễ dàng thích ứng với mục đích của riêng bạn. Nhận xét hoặc đề xuất được hoan nghênh.
Cũng được xuất bản tại đây