QUYẾT ĐỊNH 769/QĐ-BTTTT HƯỚNG DẪN KẾT NỐI ỨNG DỤNG SỬ DỤNG CHỮ KÝ SỐ VỚI TỔ CHỨC CUNG CẤP DỊCH VỤ CHỨNG THỰC CHỮ KÝ SỐ CÔNG CỘNG ĐỐI VỚI HÌNH THỨC KÝ SỐ TỪ XA DO BỘ TRƯỞNG BỘ THÔNG TIN VÀ TRUYỀN THÔNG BAN HÀNH
BỘ THÔNG TIN VÀ |
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM |
Số: 769/QĐ-BTTTT |
Hà Nội, ngày 27 tháng 4 năm 2022 |
QUYẾT ĐỊNH
BAN HÀNH HƯỚNG DẪN KẾT NỐI ỨNG DỤNG SỬ DỤNG CHỮ KÝ SỐ VỚI TỔ CHỨC CUNG CẤP DỊCH VỤ CHỨNG THỰC CHỮ KÝ SỐ CÔNG CỘNG ĐỐI VỚI HÌNH THỨC KÝ SỐ TỪ XA
BỘ TRƯỞNG BỘ THÔNG TIN VÀ TRUYỀN THÔNG
Căn cứ Luật Giao dịch điện tử ngày 29 tháng 11 năm 2005;
Căn cứ Nghị định số 130/2018/NĐ-CP ngày 27 tháng 9 năm 2018 của Chính phủ quy định chi tiết thi hành Luật Giao dịch điện tử về chữ ký số và dịch vụ chứng thực chữ ký số;
Căn cứ Nghị định số 17/2017/NĐ-CP ngày 17 tháng 02 năm 2017 của Chính phủ quy định chức năng, nhiệm vụ, quyền hạn và cơ cấu tổ chức của Bộ Thông tin và Truyền thông;
Căn cứ Thông tư số 16/2019/TT-BTTTT ngày 05 tháng 12 năm 2019 của Bộ trưởng Bộ Thông tin và Truyền thông quy định danh mục tiêu chuẩn bắt buộc áp dụng về chữ ký số và dịch vụ chứng thực chữ ký số theo mô hình ký số trên thiết bị di động và ký số từ xa;
Theo đề nghị của Giám đốc Trung tâm Chứng thực điện tử quốc gia.
QUYẾT ĐỊNH:
Điều 1. Ban hành kèm theo Quyết định này Hướng dẫn kết nối ứng dụng sử dụng chữ ký số với tổ chức cung cấp dịch vụ chứng thực chữ ký số công cộng đối với hình thức ký số từ xa.
Điều 2. Quyết định này có hiệu lực thi hành kể từ ngày ký.
Điều 3. Chánh Văn phòng, Giám đốc Trung tâm Chứng thực điện tử quốc gia, Thủ trưởng các đơn vị thuộc Bộ, các tổ chức, cá nhân có liên quan chịu trách nhiệm thi hành Quyết định này./.
Nơi nhận: – Như Điều 3; – Bộ trưởng Nguyễn Mạnh Hùng; – Các Thứ trưởng; – Cổng thông tin điện tử của Bộ; – Lưu: VT, NEAC. |
KT. BỘ TRƯỞNG Nguyễn Huy Dũng |
HƯỚNG DẪN
KẾT NỐI ỨNG DỤNG SỬ DỤNG CHỮ KÝ SỐ VỚI TỔ CHỨC CUNG CẤP DỊCH VỤ CHỨNG THỰC CHỮ KÝ SỐ CÔNG CỘNG ĐỐI VỚI HÌNH THỨC KÝ SỐ TỪ XA
(Ban hành kèm theo Quyết định số 769/QĐ-BTTTT ngày 27 tháng 4 năm 2022 của Bộ trưởng Bộ Thông tin và Truyền thông)
I. Giới thiệu
Hướng dẫn này là đặc tả các giao thức kết nối để chuyển yêu cầu ký số từ một dịch vụ/ứng dụng có kết nối mạng (SP) đến Tổ chức cung cấp dịch vụ chứng thực chữ ký số (CA) và nhận lại chứng thư số của người ký, kết quả ký số.
Hướng dẫn này không áp dụng đối với các dịch vụ/ứng dụng đã tích hợp chức năng ký số, các phần mềm ký số.
Trong trường hợp pháp luật chuyên ngành có quy định về định dạng của dữ liệu thì áp dụng trực tiếp quy định đó.
Giao thức này có thể được ứng dụng để thực hiện các hành động khác của người dùng (đăng ký, đăng nhập,…).
Do đặc thù của ký số từ xa cần phải có sự xác nhận của người sử dụng thông qua một phương tiện điện tử khác nên giao thức ký được miêu tả theo tài liệu là giao thức ký không đồng bộ. Tức là giữa SP và CA không duy trì kết nối trong quá trình CA xác thực với người dùng. Sau khi người dùng xác thực ký, kết quả ký số sẽ được CA trả về trên một kết nối khác tuân theo phương thức kết nối webhook như mô tả trong tài liệu này. Tuy nhiên, trong trường hợp khả thi, SP và CA được khuyến khích duy trì kết nối khoá phiên theo chuẩn TLS.
II. Đặc tả chi tiết
1. Sơ đồ
Hình 1. Sơ đồ luồng kết nối ký số tài liệu
2. Luồng xử lý yêu cầu ký số
2.1. Khởi tạo yêu cầu ký số
Người sử dụng thực hiện yêu cầu ký số.
SP đóng gói dưới dạng .xml (hoặc json) yêu cầu ký số bao gồm: thông tin xác thực tài khoản của SP (sp_credentials), mã tài liệu (doc_id), mã giao dịch (transaction_id), mã định danh người ký trong hệ thống SP (user_id), số xê-ri của chứng thư số (serial_number, trường hợp người dùng có nhiều hơn 01 chứng thư số), thời gian thực hiện yêu cầu.
SP gửi dữ liệu đã được đóng gói theo giao thức TLS cho CA.
SP gọi CA để lấy thông tin chứng thư.
SP tiến hành băm tài liệu cần được ký số và nén dữ liệu.
SP gửi mã băm (file_hash), thông tin xác thực tài khoản của SP (sp_credentials), mã giao dịch (transaction_id) cho CA.
2.2. Thực hiện ký số
CA bóc tách thông tin các thông tin trong dữ liệu .xml (hoặc json).
CA xác thực sp_credentials.
CA tìm thuê bao từ user_id, gửi lại chứng thư số cho SP.
CA gửi yêu cầu và nhận lại xác nhận ký đến người dùng (thông qua app của CA) để thực hiện quy trình ký số.
CA thực hiện cấp dấu thời gian cho giao dịch (nếu có).
2.3. Trả kết quả
CA đóng gói kết quả ký số dưới dạng .xml (hoặc json), gồm: chữ ký số theo từng mã tài liệu (doc_id), chứng thư số của người ký (user_cert), dấu thời gian (nếu có), thời gian thực hiện yêu cầu, mã giao dịch (transaction_id).
CA gửi dữ liệu đã được đóng gói theo giao thức TLS cho SP.
SP gắn chữ ký vào file và hoàn tất quy trình ký.
Hình thức trả:
Thông qua cơ chế webhook: Khi có kết quả ký tài liệu, CA sẽ gửi kết quả cho SP theo url webhook SP đăng ký trước với CA.
3. Định nghĩa giao thức
3.1. API lấy thông tin chứng thư
Mô tả:
– SP gọi CA.
– Khi người dùng tạo yêu cầu ký số, SP gọi CA để lấy dữ liệu chứng thư người dùng.
– CA sẽ kiểm tra và trả về danh sách chứng thư của người dùng.
– Khi có thông tin chứng thư, SP sử dụng dữ liệu này để tính toán hash file cần ký.
a. Đặc tả API
Phương thức: GET
Đường dẫn: https://x.x.x.x/get_certificate (x.x.x.x là URL API sẽ do mỗi CA tự quyết định)
Tham số đầu vào:
STT |
Tham số |
Kiểu dữ liệu |
Bắt buộc |
Chú thích |
1 |
sp_id | String |
|
Tên tài khoản của SP do CA cung cấp |
2 |
sp_password | String |
|
Mật khẩu do CA cung cấp cho SP |
3 |
user_id | String |
|
Số CCCD/CMND/Hộ chiếu/Mã số thuế/ của cá nhân/tổ chức muốn đăng nhập |
4 |
serial_number | String | Số xê-ri của chứng thư số | |
5 |
transaction_id | String |
|
Mã giao dịch khởi tạo bởi SP |
Ví dụ tham số đầu vào:
Tham số đầu ra:
STT |
Tham số |
Kiểu dữ liệu |
Chú thích |
1 |
status_code | Int | Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401,403, 500… |
2 |
message | String | Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code. |
3 |
cert_id | String | Định danh chứng thư số (còn gọi là cert alias) |
4 |
cert_data | String | Raw data chứng thư (dạng base64) |
5 |
chain_data | List<String> | List chứng thư, gồm 3 phần tử. Phần tử đầu tiên là chứng thư số người ký, thứ hai là chứng thư số của CA, cuối cùng là chứng thư số root do NEAC cấp. |
6 |
serial_number | String | Số xê-ri của chứng thư số |
7 |
transaction_id | String | Mã giao dịch khởi tạo bởi SP |
Ví dụ tham số đầu ra:
3.2. API ký số tài liệu
a. Mô tả
– SP gọi CA, cung cấp mã giao dịch (transaction_id)
– SP dùng dữ liệu chứng thư người dùng để tính toán mã băm của tệp cần ký.
– SP gửi dữ liệu file_hash đến CA để thực hiện ký số tài liệu.
– SP sử dụng mã giao dịch để lấy thông tin chữ ký khi cần.
– Trong trường hợp đặc thù cần thiết, SP và CA có thể trao đổi thêm để trả về luôn kết quả ký tại request này (giữ và chờ request).
b. Đặc tả API
Phương thức: POST
Đường dẫn: https://x.x.x.x/sign (x.x.x.x là URL API sẽ do mỗi CA tự quyết định)
Tham số đầu vào:
STT |
Tham số |
Kiểu dữ liệu |
Bắt buộc |
Chú thích |
1 |
sp_id | String |
|
Tên tài khoản của SP do CA cung cấp |
2 |
sp_password | String |
|
Mật khẩu do CA cung cấp cho SP |
3 |
user_id | String |
|
Số CCCD/CMND/Hộ chiếu/Mã số thuế/ của cá nhân/tổ chức muốn đăng nhập |
4 |
data_to_be_signed | String |
|
Chuỗi biểu diễn của tài liệu được yêu cầu ký số (base64 string với file, hex với hash) |
5 |
doc_id | String |
|
Mã tài liệu yêu cầu ký số
(Mã này cần được hiển thị đồng thời tại giao diện của SP và tại giao diện tại ứng dụng của CA khi người dùng thực hiện xác thực yêu cầu ký số) |
6 |
file_type | String |
|
Loại file: xml/json/word/pdf/excel/… |
7 |
sign_type | String |
|
Loại ký số: hash/file |
8 |
serial_number | String |
|
Số xê-ri của chứng thư số (trong trường hợp một chủ thể có nhiều chứng thư số) |
9 |
time_stamp | String |
|
Thời gian người dùng gửi yêu cầu ký số. Định dạng: YYYYMMddHHmmSS |
10 |
transaction_id | String |
|
Mã giao dịch khởi tạo bởi SP |
Lưu ý: Truyền data_to_be_signed dạng base64 dung lượng tăng thêm 30%, khuyến nghị sử dụng mã băm (hash) trong việc chuyển yêu cầu ký.
Ví dụ tham số đầu vào:
Tham số đầu ra:
STT |
Tham số |
Kiểu dữ liệu |
Chú thích |
1 |
status_code | Int | Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401, 403, 500… |
2 |
message | String | Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code |
3 |
transaction_id | String | Mã giao dịch khởi tạo bởi SP |
4 |
doc_id | String | Mã tài liệu yêu cầu ký số (Mã này cần được hiển thị đồng thời tại giao diện của SP và tại giao diện tại ứng dụng của CA khi người dùng thực hiện xác thực yêu cầu ký số) |
5 |
signature_value | String | Dữ liệu chữ ký gắn với tài liệu (dạng base64) |
6 |
timestamp_signature | String | Chữ ký của CA lên dấu thời gian của giao dịch ký số |
Ví dụ tham số đầu ra:
a. Đối với trường hợp ký không đồng bộ:
b. Đối với trường hợp ký đồng bộ: Khi theo cơ chế đồng bộ (giữ request ký và chờ xác nhận của người dùng) thì CA sẽ trả về kèm theo dữ liệu ký số file ở trường signed_files. Thời gian chờ xác nhận của người dùng phụ thuộc vào chính sách của từng CA. Sau khi hết thời gian chờ xác nhận, phiên giao dịch sẽ bị hủy bởi SP và yêu cầu ký số được xem là không thành công.
3.3. API webhook nhận thông tin ký tài liệu
a. Mô tả
– CA gọi SP theo url đăng ký trước.
– Sau khi CA có kết quả ký số tài liệu, CA sẽ gửi kết quả về cho SP.
– SP gắn chữ ký vào file, trả về cho người dùng, kết thúc luồng ký.
b. Đặc tả API
Phương thức: POST
Đường dẫn: https://x.x.x.x/recv_signature (x.x.x.x là URL API sẽ do mỗi CA tự quyết định)
Tham số đầu vào:
STT |
Tham số |
Kiểu dữ liệu |
Bắt buộc |
Chú thích |
1 |
sp_id | String |
|
Tên tài khoản của SP do CA cung cấp (SP có thể dùng để phân biệt request của CA nào gửi về) |
2 |
status_code | int |
|
Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401, 403, 500… |
3 |
message | String |
|
Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code |
4 |
transaction_id | String |
|
Mã giao dịch khởi tạo bởi SP |
5 |
doc_id | String |
|
Mã tài liệu yêu cầu ký số |
6 |
signature_value | String |
|
Dữ liệu chữ ký gắn với tài liệu (dạng base64) |
7 |
timestamp_signature | String |
|
Chữ ký của CA lên dấu thời gian của giao dịch ký số |
Ví dụ tham số đầu vào:
Tham số đầu ra:
STT |
Tham số |
Kiểu dữ liệu |
Chú thích |
1 |
status_code | Int | Mã request thành công hoặc mã lỗi tương ứng. VD: 200, 401, 403, 500… |
2 |
message | String | Thông điệp thành công hoặc thông điệp lỗi tương ứng với mã trạng thái ở status_code |
Ví dụ tham số đầu ra:
3.4. Bảng mã trạng thái
STT |
Status_code |
Chú thích |
1 |
200 |
Thành công |
2 |
400 |
Tài liệu không hợp lệ |
3 |
401 |
Credentials không hợp lệ |
4 |
403 |
Chứng thư bị thu hồi hoặc không rõ định dạng |
5 |
500 |
Lỗi hệ thống |
|
… |
Các lỗi khác (Neu có) |
– Bảng mã lỗi này tượng trưng cho các nhóm mã trạng thái cơ bản: thành công (mã 2xx, ví dụ 201, 202…), không hợp lệ do phía người dùng (mã 4xx, ví dụ 401, 402…) và lỗi hệ thống (mã 5xx, ví dụ 500, 503…).
– Nếu CA có hệ thống mã trạng thái riêng thì có thể áp dụng hệ thống mã trạng thái đó, nhưng bắt buộc phải có đầy đủ 5 nhóm mã trạng thái cơ bản như trên và phải được công bố cho các bên muốn kết nối.
III. Chính sách
1. Trách nhiệm chung:
Trách nhiệm giữa tổ chức cung cấp dịch vụ (SP) và tổ chức cung cấp dịch vụ chứng thực ký số cộng cộng (CA) khi sử dụng giao thức quy định tại hướng dẫn này:
– SP và CA có trách nhiệm thỏa thuận SP_credentials với độ an toàn phù hợp với yêu cầu kỹ thuật được nêu chi tiết ở Phụ lục, quản lý và sử dụng an toàn, bí mật thông tin này.
– SP và CA có trách nhiệm thống nhất về các địa chỉ URL dành cho yêu cầu ký số, mã trạng thái và thông điệp trong trường hợp kết nối thành công cũng như lỗi.
– SP và CA có trách nhiệm thiết lập đường truyền TLS trong việc truyền, nhận dữ liệu, tránh trường hợp bị tấn công dẫn đến lộ, lọt dữ liệu.
2. Trách nhiệm của SP:
– Xác thực và chịu trách nhiệm về thông tin được truyền tải;
– Bảo mật thông tin của người dùng khi nhận được chứng thư số;
– Có phương án ngăn chặn việc lạm dụng giao thức này cho các mục đích khác, bảo vệ quyền lợi người dùng.
3. Trách nhiệm của CA:
– Đảm bảo tính sẵn sàng của dịch vụ ký số để phục vụ nhu cầu của SP.
– Đảm bảo hệ thống ký số đáp ứng các tiêu chuẩn.
YÊU CẦU KỸ THUẬT
STT |
Nội dung |
Yêu cầu kỹ thuật |
1 |
sp_credentials | Chuẩn bị, thực thi và so sánh chuỗi username và password (theo RFC 8265) |
2 |
Mã băm (hash) | Mã băm phải đạt được ít nhất độ an toàn theo chuẩn băm SHA (theo RFC 6234) hoặc cao hơn. |
3 |
Ký số | Theo Thông tư số 22/2020 của Bộ Thông tin và Truyền thông Quy định về yêu cầu kỹ thuật đối với phần mềm ký số, phần mềm kiểm tra chữ ký số |
4 |
TLS | Kết nối đạt chuẩn an toàn tầng giao vận TLS 1.3 (theo RFC 8446) |
5 |
Hex | Chuẩn mã hóa base16, base32 và base64 (theo RFC 4648) |
6 |
Chứng thư số của người dùng | Chứng thư số đạt chuẩn x509 (theo RFC 5280) |
QUYẾT ĐỊNH 769/QĐ-BTTTT HƯỚNG DẪN KẾT NỐI ỨNG DỤNG SỬ DỤNG CHỮ KÝ SỐ VỚI TỔ CHỨC CUNG CẤP DỊCH VỤ CHỨNG THỰC CHỮ KÝ SỐ CÔNG CỘNG ĐỐI VỚI HÌNH THỨC KÝ SỐ TỪ XA DO BỘ TRƯỞNG BỘ THÔNG TIN VÀ TRUYỀN THÔNG BAN HÀNH | |||
Số, ký hiệu văn bản | 769/QĐ-BTTTT | Ngày hiệu lực | 27/04/2022 |
Loại văn bản | Quyết định | Ngày đăng công báo | |
Lĩnh vực |
Công nghệ thông tin |
Ngày ban hành | 27/04/2022 |
Cơ quan ban hành |
Bộ thông tin và truyền thông |
Tình trạng | Còn hiệu lực |
Các văn bản liên kết
Văn bản được hướng dẫn | Văn bản hướng dẫn | ||
Văn bản được hợp nhất | Văn bản hợp nhất | ||
Văn bản bị sửa đổi, bổ sung | Văn bản sửa đổi, bổ sung | ||
Văn bản bị đính chính | Văn bản đính chính | ||
Văn bản bị thay thế | Văn bản thay thế | ||
Văn bản được dẫn chiếu | Văn bản căn cứ |