CryptoDoc – Xây dựng hệ thống ký số tài liệu với Spring Boot & RSA

CryptoDoc – Xây dựng hệ thống ký số tài liệu với Spring Boot & RSA

2026-04-11 5 min đọc
java spring-boot security rsa docker agile cryptography postgresql minio

CryptoDoc Dashboard

Bối cảnh dự án

CryptoDoc ra đời từ bài toán thực tế: làm sao để xác minh một tài liệu số không bị giả mạođúng người ký? Trong thời đại trao đổi văn bản điện tử ngày càng phổ biến, việc đảm bảo tính toàn vẹn và xác thực nguồn gốc tài liệu là cực kỳ quan trọng — đặc biệt trong môi trường doanh nghiệp, pháp lý, hành chính.

Dự án được thực hiện theo quy trình Agile Scrum trong 1 tuần (29/03 – 04/04/2026), từ phân tích yêu cầu đến deploy production hoàn chỉnh.

Giao diện ứng dụng

Màn hình đăng nhập

Màn hình đăng nhập CryptoDoc

Giao diện đăng nhập tối giản với dark theme. Người dùng xác thực bằng email/password — backend phát JWT token có hiệu lực 24h. Token được lưu client-side và đính kèm vào mọi request tiếp theo qua header Authorization: Bearer <token>.

Dashboard quản lý tài liệu

Dashboard tài liệu

Màn hình chính hiển thị toàn bộ tài liệu của user với thống kê tổng quan: tổng số tài liệu, đã ký, chờ ký, đã xác minh. Mỗi dòng trong bảng cho phép thực hiện nhanh các thao tác Download · Sign · Verify · Delete. Badge màu sắc phân biệt rõ trạng thái tài liệu (UNSIGNED / SIGNED / VERIFIED).

Quản lý khóa RSA

RSA Key Management

Mỗi người dùng có thể tạo và quản lý cặp khóa RSA cá nhân. Giao diện hiển thị public key dạng text để chia sẻ, đồng thời cảnh báo người dùng không bao giờ chia sẻ private key. Có nút copy-to-clipboard và chức năng regenerate khi cần đổi khóa.

Kiến trúc hệ thống

Deployment Diagram

Toàn bộ hệ thống chạy trên Docker Compose với 4 service độc lập, giao tiếp qua Docker internal network:


System Architecture

Thiết kế dữ liệu

Entity Relationship Diagram

ERD gồm 6 entity chính: User, Document, RsaKey, Signature, AuditLog, và enum DocumentStatus. Mỗi Document có thể có nhiều Signature (cho phép nhiều người ký sau này), mỗi User có một cặp RsaKey active tại một thời điểm. Schema được quản lý hoàn toàn bằng Flyway migration.

Class Diagram

Luồng ký số — Cốt lõi kỹ thuật

Document State Machine

Tài liệu di chuyển qua 3 trạng thái: UNSIGNED → SIGNED → VERIFIED. Mỗi chuyển trạng thái đều được ghi vào AuditLog.

Quy trình ký số (Signing)

Signing Flow


Quy trình xác minh (Verification)

Verification Flow


Use Case & Phạm vi hệ thống

Use Case Diagram

Hệ thống phục vụ 2 actor chính: User (đăng ký, upload, ký, xác minh tài liệu cá nhân) và Admin (quản lý toàn bộ người dùng, xem audit log hệ thống, kích hoạt/vô hiệu hóa tài khoản).

Wireframe & Thiết kế UI

Wireframe tổng quan

UI được thiết kế wireframe từ đầu sprint với dark theme nhất quán. Ưu tiên thao tác nhanh ngay trên bảng danh sách thay vì phải vào trang chi tiết — giảm số click cần thiết để ký hoặc xác minh tài liệu.

Những điểm kỹ thuật đáng chú ý


Tech Stack

Backend: Java 17 · Spring Boot 3.2 · Spring Security · JJWT 0.11.5 · Flyway Storage: PostgreSQL 14 · MinIO 8.5.7 Frontend: HTML5 · Vanilla JS (module pattern) · CSS3 DevOps: Docker · Docker Compose · Nginx 1.24

Kết luận

CryptoDoc là dự án nhỏ nhưng đủ để hiểu end-to-end về mật mã ứng dụng thực tế — từ lý thuyết RSA đến một hệ thống chạy hoàn chỉnh, có auth, storage, và logging. Quy trình Agile 1 tuần buộc phải ưu tiên đúng thứ tự: thiết kế trước, code sau, test cuối.

Hướng mở rộng tiếp theo: hỗ trợ multi-party signing (nhiều người ký cùng một tài liệu) và export PDF có nhúng chữ ký điện tử dạng chuẩn PAdES.

← Quay lại Blogs