Chương 2 : HẠ TẦNG MOBILE PKI
3.1. XÂY DỰNG ỨNG DỤNG CHỮ KÝ SỐ TRÊN ĐIỆN THOẠI DI ĐỘNG
3.1.1. Mục tiêu và giải pháp
Trong thực tế, việc xây dựng một ứng dụng Mobile PKI đòi hỏi nhiều thành phần như nhà cung cấp dịch vụ, nhà cung cấp hệ thống mạng, các cơ sở hạ tầng, … Tuy nhiên với điều kiện thực tế tại Việt Nam vẫn chưa có hạ tầng Mobile PKI hồn chỉnh, các sản phẩm thực tế như SIM-CA, USB token, ứng dụng phía người dùng, kết nối giữa CA và các nhà cung cấp cịn hạn chế. Ngồi ra, để triển khai PKI trên các thiết bị di động phải thực hiện giao tiếp với thiết bị qua chuẩn PKCS#11. Tuy nhiên, hầu hết các chương trình phần mềm, hệ điều hành trên mobile đều chưa hỗ trợ chuẩn giao tiếp này. Chính vì vậy giải pháp Client-based là tối ưu. Với giải pháp này, khóa bí mật sẽ được lưu trữ theo một cấu trúc trên module của phần mềm.
Vì các giới hạn về cấu hình và cơ sở hạ tầng mạng của thiết bị, việc kiểm tra tính hợp lệ của chứng thư số phải thực hiện tại một máy chủ trung gian của hạ tầng PKI. Người nhận sử dụng tùy chọn kiểm tra chứng thư số, sẽ gửi yêu
cầu tới máy chủ trung gian. Việc kiểm tra chứng thư số được máy chủ này thực hiện và gửi kết quả lại cho người dùng (việc xác thực này sử dụng dịch vụ OCSP). Trong phạm vi hẹp của một chương trình demo, luận văn không xây dựng hạ tầng PKI để thực hiện các dịch vụ như cấp phát chứng thư số, kiểm tra tính hợp lệ của chứng thư số, cấp dấu thời gian,…
Trong phạm vi của luận văn này, giải pháp xây dựng ứng dụng ký số trên điện thoại di động với giao diện người dùng hoạt động trên hệ điều hành android được viết trên nền tảng java. Trong java có bộ thư viện JCE, hỗ trợ việc xử lý chứng thư số, trích xuất, đọc chứng thư số và ký số. Bộ thư viện này khơng q nặng, do đó có thể hoạt động được trên các thiết bị di động cấu hình khơng cần quá cao.
Thuật tốn mã hóa khóa cơng khai dựa vào thuật tốn RSA được lựa chọn cho thuật toán ký số của PKI, nhưng trên điện thoại di động việc tạo cặp khóa cơng khai dựa trên thuật tốn RSA tốn nhiều thời gian hoặc khơng thể xảy ra vì thiếu bộ nhớ và hiệu suất CPU nhỏ. Mặc dù vậy với ứng dụng demo trong luận văn này vẫn sử dụng thuật toán RSA cho thuật toán ký số.
Trong ứng dụng này, việc lưu trữ chứng thư số được thực hiện ngay trên máy điện thoại di động. Ứng dụng cho phép người dùng cuối thực hiện các chức năng: ký số vào file văn bản điện tử (.docx, .pdf, .xlsx), mã hóa, giải mã và xác thực chữ ký số trên điện thoại di động. Quá trình gửi và nhận file văn bản dựa vào thuật tốn băm SHA1và thuật tốn mã hóa RSA.
Chứng thư số lưu khóa cơng khai của người dùng, được lưu trên thư mục tại CA. Tuy nhiên vì trong ứng dụng demo này khơng xây dựng CA để xác thực nên giả sử đã tạo ra khóa bí mật và khóa cơng khai bằng OpenSSL và lưu chúng trong file *.p12 và *.crt. Trong đó, file chứng thư dạng *.p12 là chứng thư đầy đủ, chứa thông tin chứng thư, khóa bí mật và khóa cơng khai. File chứng thư dạng .crt chứa thơng tin chứng thư, khóa cơng khai. Trong q trình sử dụng, để đảm bảo an toàn, chỉ cần sử dụng 2 file *.crt và *.p12 là đủ. Khi cần khóa cơng khai hoặc trình chứng thư xác thực thì sử dụng file *.crt. Khi cần sử dụng khóa bí mật thì sử dụng file *.p12 là được. Khóa bí mật trong file *.p12 được bảo vệ bằng mật khẩu nhập vào trong câu lệnh tạo file p12.
3.1.2. Hoạt động của ứng dụng 3.1.2.1. Quá trình bên gửi 3.1.2.1. Quá trình bên gửi - Quá trình ký số file dữ liệu
Từ file dữ liệu cần gửi, chương trình sẽ sử dụng thuật tốn SHA1 để mã hóa thành chuỗi ký tự 160 bit, hash value (gọi là bản tóm lược). Sau đó sử dụng
thuật tốn RSA và khóa bí mật của người gửi để ký số lên file dữ liệu thành file chữ ký (*.sig).
Hình 3.1: Mơ hình ký số
- Q trình mã hóa
Người gửi khơng muốn để lộ file dữ liệu nên mã hóa file dữ liệu để gửi đi. Từ file dữ liệu, sử dụng thuật tốn mã hóa RSA và lấy khóa cơng khai của người nhận từ file *.crt để mã hóa tạo ra file dữ liệu mã hóa.
Hình 3.2: Mơ hình mã hóa
Dữ liệu gửi cho bên nhận gồm có các file (*.sig + *.crt + *.enc). Quá trình gửi dữ liệu có thể được thực hiện bằng cách gửi qua email, các tin nhắn đa phương tiện, …
3.1.2.2. Quá trình bên nhận
Sau khi người nhận thực hiện việc nhận các tệp dữ liệu. Lúc này, sẽ có 2
quá trình kiểm tra: kiểm tra file có đúng người nhận hay khơng? kiểm tra tính
File dữ liệu
Mã hóa RSA
File dữ liệu mã hóa (*.enc) Lấy khóa cơng khai của
người nhận (*.crt) File dữ liệu
Hàm Băm SHA1
Bản tóm lược Ký số RSA
Lấy khóa bí mật của người gửi (*.p12)
toàn vẹn của dữ liệu? Để thực hiện được các quá trình kiểm tra này phải thực hiện các cơng việc sau:
- Q trình giải mã:
Bên nhận phải giải mã file dữ liệu mã hóa.
Hình 3.3: Mơ hình giải mã
Sử dụng thuật toán RSA để giải mã file dữ liệu bằng khóa bí mật của người nhận
Nếu giải mã khơng thành cơng thì người nhận khơng đúng
Nếu giải mã thành cơng thì đúng người nhận và có được File dữ liệu 1. - Q trình xác thực
Xác thực chữ ký, khi xác thực chữ ký sẽ sử dụng file chứng thư *.crt để lấy khóa cơng khai, từ đó xác định chữ ký đúng hay sai, dữ liệu cũng được băm trước bằng cùng một thuật tốn với lúc ký.
Hình 3.4: Mơ hình xác thực
Khơng File dữ liệu 1
File dữ liệu 2 Giống
File dữ liệu toàn vẹn
File dữ liệu bị thay đổi
Có File chữ ký (*.sig)
Xác thực RSA Khóa cơng khai của
người gửi (*.crt)
File dữ liệu mã hóa (*.enc)
Giải mã RSA Khóa bí mật của
người nhận (*.p12)
Từ file chữ ký *.sig, khóa cơng khai của người gửi lấy từ file *.crt, sử dụng thuật toán băm SHA1 và thuật toán RSA để xác thực.
Kiểm tra File dữ liệu 1 và File dữ liệu 2 có giống nhau hay khơng? Nếu giống nhau thì file nhận được là vẹn tồn (khơng bị thay đổi hay tác động), nếu không giống nhau là file đã bị thay đổi.