Giải pháp ký số trên web đa nền tảng sử dụng Web Socket
Vào thời điểm năm 2015, sau nhiều năm phát triển chữ ký số điện tử, nhiều vấn đề đã được đặt ra, trong đó có vấn đề ký số điện tử trên nền tảng web. Mặc dù trước đó đã có nhiều giải pháp như Plug-in, Add-on hay Extension, nhưng vẫn còn nhiều bài toán cần giải quyết khi triển khai. Các bài toán của giải pháp ký số trên web là: chạy trên đa nền tảng trình duyệt, đa hệ điều hành, nhiều thiết bị và ngôn ngữ lập trình hỗ trợ, dễ tích hợp và triển khai. Do đó cần một giải pháp ký số điện tử mới để đáp ứng toàn bộ bài toán trên.
Để đảm bảo an toàn cho các giao dịch điện tử thì tệp phải được ký số điện tử trên máy tính ngay sau khi mở cửa sổ chọn tệp và trước khi được đính lên một trang web, sau đó mới thực hiện gửi tệp đi. Trong khi đó, các trình duyệt là một ứng dụng chạy trong môi trường cách ly (sandbox) chỉ cho phép trang web giao tiếp với tệp bên ngoài thông qua các tiện ích như: Plug-in, Extension, Add-on hay Native Client. Ngoài ra, việc lập trình một trang web cho phép giao tiếp với tệp bên ngoài là không thể, vì các phần tử lập trình (gọi là Control) cho phép chọn tệp như <input type=”file”/> chạy trong môi trường cách ly như trình duyệt và không thể can thiệp thao tác ký số chen giữa sau khi mở cửa sổ chọn tệp, nên đây là một bài toán khó giải.
Các giải pháp ký số trên web
Các giải pháp ký số trên web hiện tại bao gồm:
Plug-in: Là phần mềm của bên thứ ba, cho phép trình duyệt giao tiếp với tệp bên ngoài. Plug-in còn có thể nhúng vào trong một trang web. Tuy nhiên vì vấn đề bảo mật mà các hãng trình duyệt đã cấm sử dụng plug-in từ năm 2015 và được thay bằng Native Client. Triển khai ký số bằng Plug-in thường khó khăn do Plug-in thường viết trên ngôn ngữ lập trình C/C++ nên khó tích hợp và cồng kềnh khi lập trình.
Extension (hoặc Add-on trên Firefox): Là phần mềm phát triển của bên thứ ba, nhưng khác với Plug-in là nó có cửa sổ giao diện mở cho người dùng cài đặt, Extension có thể chứa Plug-in. Ví dụ điển hình của Plug-in là ứng dụng tra từ điển, xóa quảng cáo, thời tiết…. Việc triển khai ký số bằng Extension thường gặp khó khăn vì phải viết mỗi Extension cho mỗi trình duyệt khác nhau, sau mỗi lần trình duyệt nâng cấp hoặc thay đổi thì phải cập nhập lại Extension cho phù hợp.
Native Client: Là giải pháp mới của Google Chrome giúp tối ưu hiệu suất thực hiện và bảo mật hơn. Giải pháp này sinh ra để thay thế cho Plug-in và cơ chế trao đổi dữ liệu giữa trình duyệt và các Extension. Ngày nay, đa số trình duyệt cập nhật lại Extension dựa trên giải pháp Native Client. Tuy nhiên, Native Client không hỗ trợ USB e-token, lệnh gọi tệp .exe bên ngoài để thực hiện ký số, hoặc lệnh mở một cửa sổ chọn tệp.
Giải pháp ký số Web Socket
Ngoài các giải pháp ký số trên web như trên, còn có giải pháp Web Socket. Ý tưởng của giải pháp này là tạo ra một cặp phần mềm khách (client) và phần mềm chủ (server) để giao tiếp với nhau trong nội bộ máy tính. Trong đó, phần mềm chủ viết trên Javascript nhúng trong trang web, giao tiếp với phần mềm khách có thể được viết bằng các ngôn ngữ khác nhau ngoài trình duyệt (như C/C++/C#/Java/Python....).
Hình 1. Mô hình giải pháp công nghệ Web Socket
Quy trình thực hiện của Web Socket như sau:
1. Người dùng thực hiện chọn chức năng ký số trên trang web, từ đây, chương trình sẽ gọi hàm Javascript để bắt đầu khởi tạo Web Socket:
var ws = new WebSocket(“ws://localhost:” + Port); // Port là tham số cổng.
2. Phần mềm chủ thực hiện bắt tay với phần mềm khách ở bên ngoài đang chờ sẵn.
3. Sau khi phần mềm chủ nhận thông tin bắt tay xong, thực hiện gửi các mã lệnh đến cho phần mềm khách đang chạy ngầm chờ sẵn:
ws.send(“MDZ” + “|” + index + “|”); // MDZ là mã lệnh chọn tệp, index là số thứ tự của tệp.
Phần mềm khách dựa vào các mã lệnh do người lập trình quy định để thực hiện và gửi trả kết quả về cho phần mềm chủ, như mở cửa sổ, ký tệp, xóa tệp, xác thực lại tệp đã ký, gửi tệp đi….
4. Hai phần mềm khách chủ giao tiếp với nhau qua lại và kết thúc phiên bằng câu lệnh websocket.close(), khi người dùng tải lại trang web, thoát trang web, tắt trình duyệt hoặc tắt phần mềm khách.
Hình 2. Một số giao dịch của giải pháp Web Socket
Web Socket ra đời là để thay thế cho giao thức HTTP truyền thống có thủ tục bắt tay nhiều bước và tốc độ chậm. Ở đây, Web Socket chạy trong nội bộ máy tính, với thủ tục bắt tay nhanh kèm theo các câu lệnh tối giản nên tốc độ thực hiện cao, đặc biệt là khi làm việc với tệp có dung lượng lớn (500MB trở lên). Có 2 cách lưu tệp như sau, nếu số lượng và dung lượng tệp ít thì lưu vào cơ sở dữ liệu SQLite của trình duyệt và gửi tệp bằng trình duyệt, còn nếu dung lượng tệp lớn hoặc nhiều tệp được chọn thì lưu ở ngoài trình duyệt và gửi bằng phần mềm khách.
Có thể sử dụng hàm băm như SHA1, SHA256 bên trong Web Socket để chống tấn công xen giữa các giao dịch của Web Socket. Web Socket cho phép xác thực bằng chứng thư số qua kênh SSL 2 chiều khi bắt tay và trước khi phần mềm khách gửi tệp ký lên máy chủ. Giải pháp Web Socket đa ngôn ngữ lập trình hỗ trợ phần mềm máy khách, có thể viết một lần cho các trình duyệt, chạy đa thiết bị (di động, máy tính bảng…) và đa hệ điều hành. Hiện nay, đây là giải pháp độc đáo và khả thi cho việc thực hiện ký web trên các thiết bị di động.
Bảng 1. So sánh giải pháp ký số Web Socket với các giải pháp ký số trên web khác
Bảng 1 so sánh các giải pháp ký số trên web. Môi trường so sánh được thực hiện trên cùng một máy tính, cùng một loại trình duyệt, cùng một hệ điều hành, cùng phiên tại một thời điểm sử dụng.
Kết luận
Kể từ cuối năm 2015, giải pháp ký số sử dụng Web Socket đã được triển khai ở nhiều nơi tại các Bộ, ban, ngành và các cơ quan nhà nước khác. Đây là giải pháp ký số có tốc độ cao, tải được dung lượng tệp lớn, chi phí thấp, dễ tích hợp, góp phần giúp cho giao dịch điện tử trong Chính phủ điện tử ngày một lưu thông hơn và giải quyết các yêu cầu của bài toán trước đó đã đặt ra. Mặc dù giải pháp ký số sử dụng Web Socket có nhiều ưu điểm, nhưng một giải pháp mới thay thế cho Web Socket trong tương lai là cần thiết với mục đích “viết một lần chạy khắp nơi” (có thể áp dụng cho tất cả các thiết bị và hệ điều hành) và để khử vòng lặp while trong Web Socket.
Lê Minh Lộc - Cục Chứng thực số và Bảo mật thông tin