SSA · SDK v2

Luồng uỷ quyền chứng thư số

Vòng đời một yêu cầu uỷ quyền

stateDiagram-v2
    direction LR
    [*] --> INITIALIZE: initDelegateCertificate
    INITIALIZE --> WAITING_TO_ACCEPT: delegateCertificate, chủ CTS nhập PIN
    INITIALIZE --> EXPIRED: quá hạn phiên xác thực
    WAITING_TO_ACCEPT --> ACTIVE: người nhận đồng ý
    WAITING_TO_ACCEPT --> REJECTED: người nhận từ chối
    WAITING_TO_ACCEPT --> EXPIRED: quá hạn lời mời
    ACTIVE --> REVOKED: chủ CTS thu hồi hoặc hệ thống thu hồi
    EXPIRED --> [*]
    REJECTED --> [*]
    REVOKED --> [*]

1. Chủ CTS thêm người được uỷ quyền

sequenceDiagram
    autonumber
    actor CS as Chủ CTS
    participant APP as App + SDK (chủ CTS)
    participant EK as eKYC
    participant SSA
    participant HSM
    actor NN as Người được uỷ quyền

    CS->>APP: Mở Thông tin CTS, chọn Uỷ quyền CTS
    APP->>SSA: listDelegateAccount (credentialID)
    SSA-->>APP: Danh sách tài khoản đang được uỷ quyền
    CS->>APP: Thêm tài khoản, nhập username và CCCD

    rect rgba(127,127,127,0.08)
    Note over APP,EK: Kiểm tra tài khoản, app gọi thẳng eKYC
    Note over APP: signature = HMAC-SHA256 trên username,
identity, nonce, timestamp APP->>EK: POST /account/checkAccount Note over EK: Kiểm tra timestamp lệch tối đa 10 phút,
nonce chưa dùng, chữ ký đúng EK-->>APP: accountExists end alt Tài khoản đã tồn tại APP->>CS: Popup Tài khoản đã tồn tại, có uỷ quyền
không CS->>APP: Đồng ý else Tài khoản chưa tồn tại APP->>CS: Mở thêm ô Email và Số điện thoại CS->>APP: Nhập email, SĐT, bấm Xác nhận end rect rgba(127,127,127,0.08) Note over APP,HSM: Khởi tạo uỷ quyền, chưa cần PIN APP->>SSA: initDelegateCertificate (credentialID,
username, identity, email và phone nếu
tài khoản mới, message) Note over SSA: Tự xác định tài khoản mới hay đã có,
kiểm tra CCCD khớp, không trùng uỷ
quyền, không tự uỷ quyền SSA->>HSM: initKeyDelegation HSM-->>SSA: authId, authData (challenge chứa
username và CCCD người nhận) Note over SSA: Tạo bản ghi INITIALIZE, expiry_time =
hạn phiên xác thực SSA-->>APP: delegateCertRequestId, authId, authData,
expireTime end rect rgba(127,127,127,0.08) Note over CS,HSM: Chủ CTS xác thực bằng PIN APP->>CS: Màn Nhập mã PIN CS->>APP: Nhập PIN Note over APP: SDK dùng PIN mở KAK, ký challenge bằng
RS256 APP->>SSA: delegateCertificate
(delegateCertRequestId, authId,
authSignature, nonce) SSA->>HSM: confirmKeyDelegation (authSignature) Note over HSM: Xác minh chữ ký bằng KAK public, lưu
auth_signature làm bằng chứng HSM-->>SSA: Hợp lệ opt Tài khoản mới Note over SSA,HSM: Tạo tài khoản theo username và CCCD
trong challenge đã ký, cấp userSid từ
pool HSM, gửi email thông tin đăng nhập end Note over SSA: WAITING_TO_ACCEPT, ghi delegate_time,
expiry_time = hạn lời mời SSA-)NN: Gửi thông báo lời mời uỷ quyền SSA-->>APP: Thành công APP->>CS: Đã gửi yêu cầu uỷ quyền end

2. Người được uỷ quyền đồng ý hoặc từ chối

sequenceDiagram
    autonumber
    actor NN as Người được uỷ quyền
    participant APP as App + SDK (người nhận)
    participant SSA

    NN->>APP: Mở mục Thông báo
    APP->>SSA: listDelegateCertificate (statuses)
    SSA-->>APP: Danh sách lời mời, kèm thông tin CTS và
expireTime NN->>APP: Chọn Đồng ý hoặc Từ chối APP->>SSA: confirmDelegateCertificate
(delegateCertRequestId, confirm,
message, nonce) Note over SSA: Chỉ người nhận được gọi, bản ghi phải
đang WAITING_TO_ACCEPT và chưa quá hạn
lời mời alt Đồng ý Note over SSA: ACTIVE, ghi accept_time else Từ chối Note over SSA: REJECTED, ghi reject_time và reject_reason end SSA-->>APP: Kết quả

3. Ký bằng CTS được uỷ quyền

sequenceDiagram
    autonumber
    actor NN as Người được uỷ quyền
    participant APP as App + SDK (người nhận)
    participant SSA
    participant HSM

    NN->>APP: Chọn CTS được uỷ quyền để ký tài liệu
    APP->>SSA: Yêu cầu ký với credentialID của chủ CTS
    Note over SSA: Kiểm tra có bản ghi ACTIVE cho cặp CTS
và người gọi SSA->>HSM: initSign kèm granteeSid Note over HSM: Kiểm tra uỷ quyền ACTIVE, tạo challenge
ký cho người nhận HSM-->>SSA: Challenge SSA-->>APP: Challenge NN->>APP: Nhập PIN của chính mình APP->>SSA: confirmSign (chữ ký KAK của người nhận) SSA->>HSM: Xác minh và ký bằng khoá của CTS chủ HSM-->>SSA: Kết quả ký

4. Thu hồi uỷ quyền

sequenceDiagram
    autonumber
    actor CS as Chủ CTS
    participant APP as App + SDK (chủ CTS)
    participant SSA
    participant HSM
    actor NN as Người được uỷ quyền

    CS->>APP: Chọn tài khoản trong danh sách, bấm Thu
hồi APP->>SSA: initRevokeDelegateCertificate
(credentialID, delegateCertRequestId,
message) Note over SSA: Bản ghi phải đang ACTIVE SSA->>HSM: initRevokeKeyDelegation HSM-->>SSA: authId, authData SSA-->>APP: delegateCertRequestId, authId, authData,
expireTime APP->>CS: Màn Nhập mã PIN CS->>APP: Nhập PIN APP->>SSA: revokeDelegateCertificate
(delegateCertRequestId, authId,
authSignature, nonce) SSA->>HSM: revokeKeyDelegation (authSignature) HSM-->>SSA: Hợp lệ Note over SSA: REVOKED, revoke_by = GRANTOR, ghi
revoke_time và revoke_reason SSA-)NN: Thông báo đã bị thu hồi quyền dùng CTS SSA-->>APP: Thành công