Đây là báo cáo cuối kỳ môn Phát triển phần mềm trong thẻ thông minh - KMA). Đây là tài liệu tham khảo giúp các bạn hoàn thiện bài tập cuối kỳ của mình. Có cả code.
PHÂN TÍCH THIẾT KẾ
1 1 Tổng quan về đề tài
Trong bối cảnh ngành y tế chuyển đổi sang nền tảng số hóa, quản lý thông tin bệnh nhân hiệu quả và bảo mật trở thành thách thức quan trọng Các hệ thống quản lý truyền thống dựa vào giấy tờ hoặc cơ sở dữ liệu tập trung dễ bị tổn thương, dẫn đến nguy cơ mất mát thông tin, truy cập trái phép và khó khăn trong việc đồng bộ dữ liệu giữa các cơ sở y tế.
Thẻ thông minh (Smart Card) đã trở thành giải pháp hiệu quả cho việc lưu trữ dữ liệu an toàn và dễ sử dụng, giúp bảo mật thông tin bệnh nhân và tạo điều kiện chia sẻ thông tin y tế nhanh chóng giữa các cơ sở khám chữa bệnh Đề tài “Xây dựng thẻ bệnh nhân sử dụng Smart Card” tập trung vào nghiên cứu và phát triển hệ thống quản lý thông tin bệnh nhân dựa trên công nghệ thẻ thông minh Thẻ bệnh nhân không chỉ lưu trữ thông tin y tế cá nhân mà còn là cầu nối quan trọng trong hệ sinh thái số hóa y tế, góp phần nâng cao chất lượng dịch vụ chăm sóc sức khỏe.
Nghiên cứu và ứng dụng công nghệ Smart Card trong lĩnh vực y tế nhằm giải quyết các vấn đề tồn đọng trong quản lý y tế, đồng thời tạo ra hướng đi mới cho hệ thống chăm sóc sức khỏe hiện đại và an toàn hơn.
Mục tiêu chính của đề tài "Xây dựng thẻ bệnh nhân sử dụng Smart Card" là phát triển một hệ thống quản lý thông tin bệnh nhân hiện đại và bảo mật Đề tài tập trung vào việc cải thiện hiệu quả trong việc quản lý thông tin bệnh nhân thông qua công nghệ thẻ thông minh.
Xây dựng một cơ sở dữ liệu y tế an toàn và thuận tiện là rất quan trọng, bao gồm việc thiết kế và triển khai hệ thống lưu trữ thông tin bệnh nhân trên thẻ thông minh, đảm bảo tính bảo mật và toàn vẹn dữ liệu Hệ thống này cần đảm bảo khả năng truy xuất và cập nhật thông tin y tế một cách nhanh chóng và chính xác, nhằm nâng cao hiệu quả trong việc quản lý và cung cấp dịch vụ y tế.
Tích hợp và triển khai công nghệ thẻ thông minh: o Nghiên cứu cách thức hoạt động của thẻ thông minh trong việc lưu trữ và truy xuất dữ liệu.
2 o Xây dựng ứng dụng đọc/ghi dữ liệu từ thẻ thông minh, tích hợp với các thiết bị đầu cuối (ví dụ: máy đọc thẻ).
Để nâng cao bảo mật thông tin y tế cá nhân, cần áp dụng các phương pháp mã hóa dữ liệu trên thẻ thông minh nhằm bảo vệ thông tin bệnh nhân khỏi truy cập trái phép Đồng thời, chỉ những người dùng được ủy quyền mới có quyền truy cập vào thông tin trên thẻ, đảm bảo an toàn và bảo mật cho dữ liệu y tế.
Quá trình quản lý y tế có thể được cải thiện bằng cách hỗ trợ trao đổi thông tin giữa các cơ sở khám chữa bệnh một cách hiệu quả và bảo mật, đồng thời tăng cường tính tự động hóa để giảm thiểu sai sót trong quản lý thông tin bệnh nhân Để phát triển hệ thống trong tương lai, cần đánh giá hiệu quả hiện tại và đề xuất các cải tiến kỹ thuật nhằm mở rộng ứng dụng công nghệ thẻ thông minh trong lĩnh vực y tế.
Hoàn thành các mục tiêu này sẽ góp phần nâng cao chất lượng quản lý y tế, mang lại lợi ích thiết thực cho bệnh nhân và cơ sở y tế.
1 1 3 Đối tượng sử dụng trong hệ thống
Bệnh nhân sở hữu thẻ thông minh chứa thông tin y tế cá nhân, giúp cung cấp nhanh chóng dữ liệu y tế tại các cơ sở khám chữa bệnh Việc sử dụng thẻ này không chỉ giảm thời gian nhập liệu mà còn tránh được các sai sót trong cung cấp thông tin Thẻ thông minh còn hỗ trợ bệnh nhân theo dõi các thông tin quan trọng liên quan đến quá trình điều trị, bao gồm lịch sử khám bệnh, các loại thuốc đã sử dụng và kết quả xét nghiệm.
Nhân viên y tế, bao gồm bác sĩ và y tá, sử dụng hệ thống truy cập thông tin y tế của bệnh nhân thông qua thẻ thông minh, giúp nâng cao hiệu quả trong chẩn đoán và điều trị Sau mỗi lần thăm khám hoặc điều trị, họ sẽ cập nhật thông tin y tế mới lên thẻ bệnh nhân để đảm bảo dữ liệu luôn chính xác và kịp thời.
Nhân viên quản lý tại cơ sở y tế: o Quản lý dữ liệu bệnh nhân một cách tập trung, đảm bảo tính toàn vẹn và bảo mật thông tin.
Hỗ trợ quản lý hồ sơ bệnh nhân một cách hiệu quả, giảm thiểu việc sử dụng tài liệu giấy và nâng cao tính tự động hóa trong quy trình quản lý y tế.
Nhà phát triển và quản trị hệ thống chịu trách nhiệm đảm bảo vận hành ổn định và bảo trì hệ thống đọc/ghi thẻ, đồng thời nâng cấp và cải thiện hệ thống theo yêu cầu từ các cơ sở y tế và người dùng cuối Họ cũng xử lý các sự cố kỹ thuật và bảo mật liên quan đến hệ thống cùng dữ liệu trên thẻ thông minh.
Các cơ quan và tổ chức liên quan sẽ hỗ trợ việc kết nối và chia sẻ thông tin y tế giữa các cơ sở khám chữa bệnh với sự đồng ý của bệnh nhân Đồng thời, cần đảm bảo hệ thống tuân thủ các tiêu chuẩn về bảo mật thông tin y tế và dữ liệu cá nhân.
Việc xác định đối tượng sử dụng là yếu tố quan trọng giúp hệ thống được xây dựng và triển khai một cách hiệu quả, phù hợp với nhu cầu thực tế Điều này không chỉ tối ưu hóa hiệu quả sử dụng mà còn nâng cao khả năng quản lý thông tin y tế.
1 1 4 Yêu cầu chung và chức năng của hệ thống
1 1 4 1 Yêu cầu chung của hệ thống
Yêu cầu về bảo mật thông tin y tế đòi hỏi rằng dữ liệu của bệnh nhân phải được mã hóa và chỉ có thể truy cập từ các thiết bị được ủy quyền Ngoài ra, cần có cơ chế xác thực bảo mật, chẳng hạn như mã PIN, trước khi truy cập vào dữ liệu trên thẻ Về khả năng lưu trữ, thẻ thông minh cần có dung lượng đủ lớn để lưu trữ các thông tin cơ bản của bệnh nhân, bao gồm thông tin cá nhân, lịch sử khám bệnh và kết quả xét nghiệm.
Yêu cầu về hiệu năng: Đọc/ghi dữ liệu nhanh chóng, đảm bảo quy trình sử dụng thẻ không gây chậm trễ trong công tác khám chữa bệnh.
CÀI ĐẶT VÀ THỰC NGHIỆM
2 1 Xây dựng chức năng Quản trị viên
Trước khi đăng nhập vào phần mềm quản trị, quản trị viên cần xác thực tài khoản của mình Tài khoản này là duy nhất và được mã hóa trong phần mềm Nếu tên đăng nhập và mật khẩu được nhập đúng, quản trị viên sẽ được chuyển đến giao diện trang chủ; ngược lại, hệ thống sẽ thông báo lỗi và yêu cầu nhập lại thông tin.
Hình 2 1 Code xử lý đăng nhập vào phần mềm quản trị
2 1 2 Chức năng Kết nối với thẻ Ở trang chủ của phần mềm quản trị, chọn vào tab “Tài Khoản”, nhấn vào nút
Kết nối với thẻ bệnh nhân để kiểm tra thông tin Nếu thẻ đã có thông tin, phần mềm sẽ sử dụng card ID để lấy khóa công khai từ cơ sở dữ liệu và thực hiện ký xác nhận Nếu ký thành công, thông báo "Kết nối và xác thực thành công" sẽ hiển thị; ngược lại, sẽ có thông báo lỗi Nếu thẻ chưa có thông tin, thông báo "Thẻ chưa có thông tin, kết nối thành công" sẽ được hiển thị.
Hình 2 2 Code xử lý khi ấn kết nối
Hình 2 3 Code kết nối với thẻ
2 1 2 1 Xác thực thẻ sử dụng chữ ký số RSA
Hệ thống thẻ sử dụng cơ chế xác thực chữ ký số RSA, trong đó mỗi thẻ được khởi tạo với một cặp khóa công khai và bí mật Khi khởi tạo, thẻ sẽ nhận mã thẻ và khóa công khai sẽ được lưu trữ trong cơ sở dữ liệu tương ứng Trong các lần xác thực sau, mã thẻ sẽ được sử dụng để truy xuất khóa công khai Hệ thống sẽ gọi hàm VerifyCard để tạo một giá trị ngẫu nhiên, chuyển đổi thành mảng byte và gửi cho thẻ ký bằng khóa bí mật Sau khi nhận được chữ ký, phần mềm sẽ sử dụng khóa công khai để giải mã và so sánh với giá trị ngẫu nhiên ban đầu; nếu trùng khớp, xác thực thành công, ngược lại sẽ thất bại.
Hình 2 4 Code gửi APDU lệnh để lấy khóa công khai của thẻ
Hình 2 5 Code lấy khóa công khai được tạo từ thẻ
Hình 2 6 Code thực hiện gọi APDU lệnh tương ứng để thực hiện ký và xác nhận dựa trên chữ ký nhận từ thẻ
Hình 2 7 Code để thực hiện việc xác thực chữ ký
Hình 2 8 Code để thực hiện việc ký dữ liệu và gửi lại lên phần mềm ở phía thẻ
Hình 2 9 Code để thực hiện việc chuyển đổi giá trị kiểu String về mảng byte
Hình 2 10 Code lấy public key từ database
Hình 2 11 Code lưu public key vào database
2 1 2 2 Kiểm tra khởi tạo thẻ
Trước khi trích xuất dữ liệu từ thẻ, cần kiểm tra xem thẻ đã được khởi tạo hay chưa Phần mềm sẽ gửi một lệnh APDU đến thẻ và nhận phản hồi Nếu phản hồi là 90 00, thẻ đã khởi tạo và có thể lấy thông tin Ngược lại, nếu phản hồi là 6A 88, thẻ chưa khởi tạo và không có thông tin để truy xuất.
Hình 2 12 Code kiểm tra thẻ đã khởi tạo hay chưa
Hình 2 13 Code kiểm tra thẻ đã có thông tin hay chưa bên phía thẻ
2 1 2 3 Lấy dữ liệu từ thẻ
Sau khi xác thực thẻ, thông tin có thể được lấy trực tiếp bằng cách sử dụng các lệnh APDU tương ứng Thông tin lưu trên thẻ được mã hóa bằng AES, do đó cần giải mã trên thẻ trước khi truyền đến phần mềm Dữ liệu được truyền sẽ ở dạng mảng byte, sau đó sẽ được chuyển đổi thành mảng String và lưu vào các thuộc tính của bệnh nhân để sử dụng trong suốt phiên làm việc Đối với thẻ, mảng byte sẽ được chuyển đổi thành kiểu dữ liệu BufferedImage và cũng được lưu lại để sử dụng tương tự.
Hình 2 14 Code lấy dữ liệu của bệnh nhân
Hình 2 15 Code lấy mã thẻ của bệnh nhân từ thẻ
Hình 2 16 Code lấy mã pin của bệnh nhân từ thẻ
Hình 2 17 Code lấy số dư của bệnh nhân từ thẻ
Đối với dữ liệu lớn, việc sử dụng APDU mở rộng là cần thiết Cần khai báo rõ ràng lượng dữ liệu mong muốn nhận, do đó trường Le phải có độ dài 3 bytes.
Hình 2 18 Code lấy thông tin bệnh nhân
Hình 2 19 Code lấy ảnh bệnh nhân của thẻ
Hình 2 20 Code chuyển đổi giá trị kiểu mảng byte về mảng chuỗi
Hình 2 21 Code chuyển đổi giá trị kiểu mảng byte về kiểu BufferedImage
Hình 2 22 Code để lấy mã pin của bệnh nhân bên phía thẻ
Hình 2 23 Code lấy card id của bệnh nhân bên phía thẻ
Để xử lý dữ liệu lớn như thông tin và hình ảnh của bệnh nhân, cần chia nhỏ dữ liệu trước khi gửi, vì bộ đệm APDU chỉ hỗ trợ tối đa 255 ký tự, không bao gồm các byte header bắt buộc Đồng thời, thẻ cần khai báo hỗ trợ APDU mở rộng bằng cách triển khai giao diện ExtendedLength.
Hình 2 25 Code lấy thông tin của bệnh nhân bên phía thẻ
Hình 2 26 Code lấy ảnh của bệnh nhân bên phía thẻ
Tất cả dữ liệu trên thẻ đều được mã hóa bằng mật mã AES 128, do đó, trước khi gửi thông tin, cần giải mã dữ liệu bằng khóa đã được lưu trữ trên thẻ.
Hình 2 27 Code thực hiện việc giải mã thông tin lưu trên thẻ
2 1 3 Chức năng Thêm thông tin thẻ
Sau khi kết nối thành công với thẻ, để khởi tạo thông tin, hãy vào tab “Tài khoản” và nhấn nút “Thêm” Nếu thẻ đã có thông tin, sẽ xuất hiện thông báo lỗi “Thẻ đã có thông tin”, không cho phép tạo mới Nếu thẻ chưa có thông tin, một khung nhập dữ liệu bệnh nhân sẽ hiện ra Sau khi nhập xong, nhấn nút xác nhận để hoàn tất việc tạo thông tin Nếu có trường dữ liệu không đúng yêu cầu, hệ thống sẽ thông báo lỗi và yêu cầu nhập lại Khi tất cả các trường dữ liệu đều hợp lệ, thông báo thành công sẽ được hiển thị.
“Cập nhập tài khoản bệnh nhân thành công” Nếu có lỗi phát sinh thì thông báo
Khi tài khoản bệnh nhân được tạo thành công, một mã thẻ tương ứng sẽ được sinh ra và lưu trữ cả trong thẻ và cơ sở dữ liệu Tuy nhiên, nếu có thông báo "Cập nhật tài khoản bệnh nhân thất bại", điều này cho thấy quá trình cập nhật không thành công và cần được kiểm tra lại.
Hình 2 28 Thêm thông tin bệnh nhân lên thẻ và cơ sở dữ liệu
Hình 2 29 Lưu thông tin người dùng vào database
Để cập nhật thông tin lên thẻ, trước tiên cần chuyển đổi tất cả dữ liệu thành kiểu mảng byte Sau đó, thực hiện lệnh APDU tương ứng để lưu trữ thông tin lên thẻ.
Hình 2 30 Code gọi APDU lệnh thực hiện lưu mã pin của bệnh nhân lên thẻ
Hình 2 31 Cập nhật mã pin trong database
Hình 2 32 Code gọi APDU lệnh để lưu mã thẻ của bệnh nhân lên thẻ
Hình 2 33 Code lưu số dư của bệnh nhân lên thẻ
Hình 2 34 Code lưu số của bệnh nhân lên database
Đối với dữ liệu lớn như thông tin và ảnh của bệnh nhân, cần khai báo rõ ràng bằng cách sử dụng Lc = 3 byte thay vì 1 byte như trong APDU thông thường Để hỗ trợ APDU mở rộng, thẻ phải có phiên bản tối thiểu là 2.2.2 và phải thông báo triển khai giao diện ExtendedLength.
Hình 2 35 Code lưu thông tin bệnh nhân lên thẻ
Hình 2 36 Code lưu ảnh của bệnh nhân lên thẻ
Các thông tin trước khi được lưu lên thẻ sẽ được mã hóa bằng hệ mật AES
128 sử dụng khóa được tạo trực tiếp và lưu trên thẻ.
Hình 2 37 Code thực thi mã hóa dữ liệu trên thẻ
Hình 2 38 Code cập nhật thông tin bệnh nhân lên cơ sở dữ liệu
Hình 2 39 Code lưu khoá công khai của thẻ lên cơ sở dữ liệu
2 1 4 Chức năng Sửa thông tin thẻ
Sau khi kết nối với thẻ thành công, để chỉnh sửa thông tin cho thẻ, tại tab
Để sửa thông tin thẻ, người dùng cần nhấn vào nút “Sửa” Nếu thẻ chưa có thông tin, hệ thống sẽ thông báo lỗi “Thẻ chưa có thông tin” và không cho phép sửa Nếu thẻ đã có thông tin, dữ liệu bệnh nhân sẽ được hiển thị để người dùng thực hiện chỉnh sửa Sau khi hoàn tất việc sửa đổi, hãy nhấn nút xác nhận để lưu thông tin Nếu có trường dữ liệu không hợp lệ, hệ thống sẽ thông báo lỗi và yêu cầu nhập lại Khi tất cả các trường dữ liệu đạt yêu cầu, sẽ có thông báo “Cập nhập thông tin bệnh nhân thành công” Ngược lại, nếu có lỗi xảy ra, thông báo “Cập nhập thông tin bệnh nhân thất bại” sẽ được hiển thị.
Hình 2 40 Code thực hiện cập nhập thông tin bệnh nhân
2 1 5 Chức năng Xóa thông tin thẻ
Sau khi kết nối với thẻ thành công, để xóa thông tin thẻ, bạn cần vào tab “Tài khoản” và nhấn nút “Xóa” Hệ thống sẽ yêu cầu bạn xác thực tài khoản admin bằng cách nhập lại tên đăng nhập và mật khẩu Khi xác thực thành công, bạn sẽ nhận được thông báo “Xóa thông tin thẻ thành công” Nếu có lỗi xảy ra, thông báo “Xóa thông tin thẻ thất bại” sẽ được hiển thị.
Hình 2 41 Code thực hiện việc xóa thông tin thẻ
Hình 2 42 Code xoá thông tin thẻ trên database
Hình 2 43 Code gọi APDU lệnh để thực hiện xóa thông tin bệnh nhân trên thẻ
Hình 2 44 Code thực hiện xóa thông tin bệnh nhân bên phía thẻ
Sau khi kết nối thành công với thẻ, bạn hãy vào tab “Tài khoản” và nhấn nút “Khóa” để thực hiện việc khóa thẻ Nếu kết nối diễn ra thành công, thẻ sẽ được khóa Ngược lại, nếu có lỗi xảy ra, hệ thống sẽ thông báo cho bạn.
“Chưa kết nối với thẻ”
Hình 2 45 Code thực hiện việc khóa thẻ
Hình 2 46 Code gọi APDU lệnh để thực hiện khóa thẻ
Hình 2 47 Code thực hiện việc khóa thẻ bệnh nhân bên phía thẻ
2 1 7 Chức năng Mở khóa thẻ