Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 72 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
72
Dung lượng
0,96 MB
Nội dung
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ VŨ THỊ NGỌC ANH NGHIÊN CỨU VỀ MOBILE PKI VÀ HẠ TẦNG ỨNG DỤNG PKI TRÊN THIẾT BỊ DI ĐỘNG LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN Hà Nội - 2015 ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ VŨ THỊ NGỌC ANH NGHIÊN CỨU VỀ MOBILE PKI VÀ HẠ TẦNG ỨNG DỤNG PKI TRÊN THIẾT BỊ DI ĐỘNG Ngành: Công nghệ thông tin Chuyên ngành: Hệ thống thông tin Mã số: 60480104 LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN NGƯỜI HƯỚNG DẪN KHOA HỌC: TS NGUYỄN VIẾT THẾ Hà Nội - 2015 -1- LỜI CAM ĐOAN Tơi xin cam đoan tồn nội dung luận văn “ Nghiên cứu Mobile PKI hạ tầng ứng dụng PKI thiết bị di động” tơi tìm hiểu, nghiên cứu, tham khảo tổng hợp từ nguồn tài liệu khác làm theo hướng dẫn người hướng dẫn khoa học Các nguồn tài liệu tham khảo, tổng hợp có nguồn gốc rõ ràng trích dẫn theo quy định Tơi xin chịu hồn tồn trách nhiệm lời cam đoan Nếu có điều sai trái, tơi xin chịu hình thức kỷ luật theo quy định Hà Nội, tháng 06 năm 2015 Người cam đoan Vũ Thị Ngọc Anh -2- LỜI CẢM ƠN Trước hết em xin gửi lời cảm ơn chân thành đến thầy cô Khoa Công Nghệ Thông Tin - trường Đại học Công nghệ - Đại học Quốc gia Hà Nội nhiệt tình tâm huyết truyền đạt cho em kiến thức quý báu suốt thời gian học tập trường Em xin gửi lời cảm ơn sâu sắc đến TS Nguyễn Viết Thế – Bộ Cơng an nhiệt tình, tận tâm định hướng, hướng dẫn cho em lời khuyên bổ ích để em hoàn thành luận văn tốt nghiệp Cuối cùng, em xin cảm ơn gia đình, bạn bè ln động viên ủng hộ em suốt trình học tập hoàn thành luận văn Bài luận văn thực khoảng thời gian tháng Bước đầu vào thực tế, tìm hiểu lĩnh vực Mobile PKI, kiến thức em nhiều hạn chế cịn nhiều bỡ ngỡ, nên khơng tránh khỏi thiếu sót Em mong nhận ý kiến đóng góp q báu từ phía q thầy bạn để luận văn hồn thiện Hà Nội, tháng 06 năm 2015 Học viên Vũ Thị Ngọc Anh -3- MỤC LỤC LỜI CAM ĐOAN LỜI CẢM ƠN LỜI NÓI ĐẦU DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT DANH MỤC CÁC BẢNG, HÌNH VẼ Chương I: TỔNG QUAN HẠ TẦNG KHÓA CÔNG KHAI 1.1 CƠ SỞ MẬT MÃ HỌC 1.1.1 Hệ mật mã khóa bí mật 1.1.2 Hệ mật mã khóa cơng khai 1.1.3 Chữ ký số 10 1.1.4 Hàm Băm 10 1.2 HỆ THỐNG PKI 11 1.2.1 Mục tiêu hệ thống PKI 11 1.2.2 Các thành phần hệ thống PKI 11 1.2.3 Các hoạt động hệ thống PKI 15 1.2.4 Trao đổi thông tin dựa PKI 18 1.3 CÁC MƠ HÌNH KIẾN TRÚC CỦA HỆ THỐNG PKI 19 1.3.1 Kiến trúc CA đơn (CA Single Architecture) 20 1.3.2 Trust List 21 1.3.3 Kiến trúc CA phân cấp (Hierarchical architecture) 21 1.3.4 Kiến trúc mắt lưới (Mesh architecture) 22 1.3.5 Kiến trúc kết hợp (Hybrid architecture) 23 1.3.6 Kiến trúc kiểu chứng thực chéo (Cross-certificate architecture) 23 1.3.7 Kiến trúc CA cầu nối (Bridge CA architecture) 24 1.4 CÁC GIẢI PHÁP AN TOÀN ĐỐI VỚI HẠ TẦNG PKI 24 1.4.1 An toàn vật lý 24 1.4.2 An toàn Logic 25 Chương 2: HẠ TẦNG MOBILE PKI 28 2.1 CÔNG NGHỆ VÀ GIAO THỨC SỬ DỤNG TRONG MOBILE PKI 28 2.2 KIẾN TRÚC MƠ HÌNH CƠNG NGHỆ CỦA HẠ TẦNG MOBILE PKI 29 2.2.1 Các yêu cầu Mobile PKI 29 -4- 2.2.2 Các thành phần hệ thống Mobile PKI 32 2.2.3 Mô hình Mobile PKI 36 2.2.4 Các hoạt động hệ thống Mobile PKI 38 2.2.5 Quản lý chứng thư số 40 2.2.6 Xác thực chứng thư số 41 2.2.7 Lưu trữ khóa bí mật Mobile PKI 42 2.3 BẢO MẬT TRONG MOBILE PKI 44 2.4 ƯU VÀ NHƯỢC ĐIỂM CỦA MOBILE PKI 46 2.4.1 Ưu điểm 46 2.4.2 Nhược điểm 46 2.5 ỨNG DỤNG VÀ GIẢI PHÁP HẠ TẦNG MOBILE PKI 46 2.5.1 Ứng dụng Mobile PKI 46 2.5.2 Giải pháp 48 CHƯƠNG 3: ỨNG DỤNG TRÊN THIẾT BỊ MOBILE CHẠY TRÊN NỀN TẢNG ANDROID 50 3.1 XÂY DỰNG ỨNG DỤNG CHỮ KÝ SỐ TRÊN ĐIỆN THOẠI DI ĐỘNG 50 3.1.1 Mục tiêu giải pháp 50 3.1.2 Hoạt động ứng dụng 51 3.2 XÂY DỰNG ỨNG DỤNG KÝ SỐ TRÊN HỆ ĐIỀU HÀNH ANDROID 54 3.2.1 Phân tích thiết kế 54 3.2.2 Thiết kế 56 3.2.3 Xây dựng chương trình 57 PHỤ LỤC 64 KẾT LUẬN 69 TÀI LIỆU THAM KHẢO 70 -5- LỜI NÓI ĐẦU Ngày nay, thiết bị di động (máy tính bảng, điện thoại di động, laptop ) phát triển mạnh thiết bị thiếu xã hội Việc sử dụng thiết bị di động để trao đổi thông tin, liệu, xử lý giao dịch thông qua mạng Internet, hệ thống Mobile Banking, Payment, E-commerce hay giao dịch hành điện tử … trở nên phổ biến Chỉ với điện thoại di động có khả kết nối Internet qua Wifi, 3G GPRS, người dùng thực giao dịch lúc, nơi Tuy nhiên môi trường Internet lại khơng an tồn tiềm ẩn nhiều nguy an tồn Đặc biệt sau vụ cơng dồn dập mạng thời gian gần trộm email, nghe điện thoại, hàng loạt vụ công liên quan đến an tồn thơng tin mạng internet khiến người dùng lo lắng Đứng trước nguy đánh cắp thông tin sử dụng tài khoản email giao dịch mua bán mạng, việc đảm bảo an tồn thơng tin trở nên vơ cấp thiết Đặc biệt, nhiều người có thói quen sử dụng thiết bị di động để giải cơng việc, việc áp dụng biện pháp bảo mật an toàn khó khăn Trước thực trạng đó, cần giải pháp ứng dụng chữ ký số thiết bị di động nhằm nâng cao tính bảo mật an tồn gửi tin nhắn, email hay sử dụng phần mềm tương tự cho người dùng, chế xác thực người dùng thân thiện cung cấp mức độ bảo mật cao Việc xác thực người dùng bảo mật thơng tin liên lạc thực nhiều phương pháp khác như: sử dụng mật mật mã khóa đối xứng thơng thường, sử dụng mật mã khóa phi đối xứng, cơng nghệ sinh trắc đại, giải pháp hạ tầng khóa công khai PKI cho thiết bị di động (Mobile PKI) giải pháp giải vấn đề cách hiệu thực cần thiết Lâu nay, vấn đề bảo mật an tồn thơng tin chủ yếu dành cho PC máy tính sách tay, cịn thiết bị di động có Mobile PKI hạ tầng ứng dụng PKI thiết bị di động (Mobile) vấn đề tương đối mới, nhắm nhu cầu thực tế thị trường Việt Nam Hiện nay, Việt Nam có số công ty doanh nghiệp nghiên cứu phát triển ứng dụng hạ tầng PKI thiết bị di động VNPT, NacenComm, Bkis, Viettel, FPT … Do tính linh động thiết bị di động, Mobile PKI vấn đề có tính cấp thiết đánh giá giải pháp có tiềm phát triển Việt Nam nên em lựa chọn đề tài: “Nghiên cứu Mobile PKI hạ tầng ứng dụng PKI thiết bị di động” Hà Nội, tháng 06 năm 2015 -6- DANH MỤC CÁC KÝ HIỆU VÀ CHỮ VIẾT TẮT AC CMP CP CPS CRL GUI HSM IMSI OCSP PKI RU SPKC SSL WTLS Attribute Certificate Certificate Manager Protocol Certificate Policy Certificate Practices Statement Certificate Revocation list Graphycal User Interface Hardware Security Module International Mobile Subscriber Identity Online Certificate Status Protocol Public Key Infrastructure Registration Utility Simple Public Key Certificate Secure Sockets Layer Wireless Transport Layer Security -7- DANH MỤC CÁC BẢNG, HÌNH VẼ Hình 1.1 Hình 1.2 Hình 1.3 Hình 1.4 Hình 1.5 Bảng 2.1 Bảng 2.2 Bảng 2.3 Hình 2.4 Hình 2.5 Hình 2.6 Hình 2.7 Hình 2.8 Hình 2.9 Hình 2.10 Hình 2.11 Hình 3.1 Hình 3.2 Hình 3.3 Hình 3.4 Hình 3.5 Hình 3.6 Hình 3.7 Hình 3.8 Hình 3.9 Hình 3.10 Hình 3.11 Hình 3.12 Hoạt động hệ thống PKI Một phiên giao dịch dựa PKI Kiến trúc CA đơn Kiến trúc CA phân cấp Kiến trúc mắt lưới Chứng thư X.509 không dây Chứng thư ngắn hạn Thiết bị Hard Token - AudioPass Mơ hình Mobile PKI Lược đồ ký số thiết bị di động Lược đồ xác thực thiết bị di động Giao thức quản lý chứng thư số Lược đồ xác thực chứng thư số Mobile PKI Giải pháp SIM – based Giải pháp Client – based Giải pháp Roaming Mô hình ký số Mơ hình mã hóa Mơ hình giải mã Mơ hình xác thực Sơ đồ hoạt động ứng dụng ký Android Sơ đồ chức chương trình Giao diện đăng nhập hệ thống Giao diện chương trình Giao diện ký số Giao diện chức mã hóa Giao diện chức giải mã Giao diện chức xác thực -8- Chương I: TỔNG QUAN HẠ TẦNG KHĨA CƠNG KHAI Trong kỷ ngun bùng nổ công nghệ thông tin, giao dịch từ xa thực thơng qua mạng Internet Tuy nhiên, khó bảo đảm giao dịch Internet ln an tồn Hạ tầng khóa cơng khai đáp ứng nhu cầu bảo mật người dùng Sáng kiến hạ tầng khóa cơng khai PKI (Public Key Infrastructure, viết tắt PKI) đời năm 1995, tiêu chuẩn chung xây dựng dựa phương pháp mã hoá để hỗ trợ hạ tầng bảo mật mạng Internet Tại thời điểm đó, mục tiêu đặt xây dựng tiêu chuẩn bảo mật tổng hợp với công cụ lý thuyết cho phép người dùng tổ chức (doanh nghiệp tổ chức phi lợi nhuận) tạo lập, lưu trữ trao đổi thông tin cách an toàn phạm vi cá nhân cơng cộng [12] Hiện có nhiều cách định nghĩa khác PKI tuỳ theo góc độ nghiên cứu ứng dụng sở hạ tầng Tuy nhiên, cách định nghĩa sở hạ tầng khố cơng khai hệ thống vừa mang tính mơ hình vừa mang tính cơng nghệ chuẩn, vừa mơ hình kiến trúc vừa hệ thống giao dịch ứng dụng cho phép thực khởi tạo, lưu trữ, quản lý chứng thư số (Digital certificate), quản lý phân phối khóa cơng khai, khóa bí mật chế chứng thực chứng thư số Thành phần cốt lõi hệ thống PKI chứng thư số Mỗi chứng thư số có hai thành phần thơng tin định danh khố cơng khai đối tượng sử dụng Các chứng thư số đối tượng quản lý chứng thư tạo ký với phương thức chữ ký số Trong số hệ thống, đối tượng quản lý đăng ký tách riêng khỏi CA Đối tượng không tạo chứng thư số Nó có nhiệm vụ xác minh đối tượng truyền thông cho CA, đối tượng mà CA cấp phát chứng thư số Nghĩa là, trình xác thực đối tượng yêu cầu chứng thư số CA RA đảm nhận PKI dịch vụ cho dịch vụ an toàn dựa chứng thư số Trong hệ thống này, PKI đảm nhận vai trò tạo lập, quản lý phân phối chứng thư số cho đối tượng truyền thơng Nói tóm lại, tất chức quản lý hệ thống PKI hướng tới yêu cầu quản lý đối tượng sử dụng hệ thống với khố cơng khai đối tượng Hiện Việt Nam, việc nghiên cứu, ứng dụng triển khai PKI nói chung dịch vụ cung cấp chứng thư số nói riêng vấn đề tương đối mẻ Bằng việc sử dụng chứng thư số chữ ký số, ứng dụng cho phép PKI đưa nhiều đặc tính đảm bảo an tồn thơng tin cho người dùng Có hai mơ hình cung cấp chứng thư số, mơ hình CA sinh cặp khóa cơng khai -56- Chương trình gồm chức sau: Chức Ký số Mã hóa Giải mã Xác thực Hình 3.6: Sơ đồ chức chương trình - Chức tạo chữ ký cho file liệu: Nhiệm vụ chức tạo file chữ ký - Chức mã hóa: Đầu vào file tài liệu + khóa cơng khai người nhận Nhiệm vụ mã hóa thơng tin gửi - Chức giải mã: Đầu vào file tài liệu mã hóa nhận từ bên gửi + khóa bí mật người nhận Nhiệm vụ giải mã tài liệu Xác định người nhận - Chức xác thực chữ ký số: Đầu vào modul file liệu + với file chữ ký số Nhiệm vụ modul kiểm tra tính đắn chữ ký số 3.2.2 Thiết kế - Mơ hình đăng nhập hệ thống Sử dụng hình thức bảo mật username / password thông thường để truy cập hệ thống - Ký số Thuật toán RSA dùng để tạo chữ ký số cho văn Sử dụng chứng thư dạng P12 để lấy khóa bí mật, sau ký lên liệu băm B1: Chọn tập tin PKCS#12 (file chứa khóa bí mật người gửi) B2: Chọn tập tin để ký B3: Nhập password để truy cập vào private key Token B4: Ký số Hiện thông báo “Ký số thành cơng” hồn thành quy trình Ký liệu - Mã hóa liệu B1: Chọn tập tin cần mã hóa B2: Chọn chứng thư số B3: Mã hóa Thơng báo “Mã hóa thành cơng ” q trình mã hóa thành cơng -57- - Giải mã B1: Chọn tập tin mã hóa B2: Chọn tập tin PKCS#12 B3: Nhập password để truy cập vào private key Token B4: Giải mã Thông báo “Giải mã thành cơng ” q trình giải mã thành công Hệ thống chứng thư số gồm file bản: File chứng thư dạng crt, chứng thư ký Trong chứa thơng tin chứng thư, khóa cơng khai ký CA File chứng thư dạng p12 chứng thư đầy đủ, chứa thơng tin chứng thư, khóa bí mật khóa công khai - Xác thực Khi xác thực chữ ký sử dụng file chứng thư crt để lấy khóa cơng khai, từ xác định chữ ký hay sai, liệu băm trước thuật toán với lúc ký B1: Chọn tập tin ký cần xác thực B2: Chọn chứng thư số B3: Chọn tập tin gốc (là tập tin ký số đó) B4: Xác thực So sánh giá trị tập tin chọn B1 B3 Nếu giống thơng báo “Chữ ký xác” Nếu khơng giống xuất thông báo “Chữ ký không đúng” 3.2.3 Xây dựng chương trình 3.2.3.1 Giao diện hệ thống -58- - Giao diện đăng nhập hệ thống Hình 3.7: Giao diện đăng nhập hệ thống - Giao diện chương trình Hình 3.8: Giao diện chương trình -59- - Giao diện ký số Hình 3.9: Giao diện ký số - Giao diện mã hóa Hình 3.10: Giao diện chức mã hóa -60- - Giao diện giải mã Hình 3.11: Giao diện chức giải mã - Giao diện xác thực Hình 3.12: Giao diện chức xác thực 3.2.3.2 Các module chương trình - Mơ hình tạo chữ ký số Input: đường đẫn tập tin * P12 + mật truy cập file * P12 + đường dẫn tập tin cần ký + đường dẫn tập tin lưu chữ ký -61- Output: File chữ ký số (*.sig) Mã chương trình: public void sign(String spath_pkcs12, String smatkhau, String spath_file, String spath_sigFile){ byte[] signature = null; File f_file = new File(spath_file); int size_file = (int) f_file.length(); byte[] contentfile = new byte[size_file]; try { //đọc nội dung tập tin vào mảng contentfile BufferedInputStream buf = new BufferedInputStream(new FileInputStream(f_file)); buf.read(contentfile, 0, contentfile.length); buf.close(); //lấy khóa bí mật P12 PrivateKey prk = module.get_privatekey(spath_pkcs12, smatkhau); //Khởi tạo instance SHA1withRSA để ký Signature dsa = Signature.getInstance("SHA1withRSA"); dsa.initSign(prk); dsa.update(contentfile, 0, contentfile.length); signature = dsa.sign(); //ghi chữ ký vào tập tin File f_sigFile = new File(spath_sigFile); if(!f_sigFile.exists()) { f_sigFile.createNewFile(); } FileOutputStream o_sigFile = new FileOutputStream(f_sigFile, false); o_sigFile.write(signature); o_sigFile.flush(); o_sigFile.close(); AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); module.my_messagebox(dlgAlert, "Ký số thành công"); } catch (Exception e) { Log.d(TAG, "Error"); } } Trong đoạn mã sử dụng thư viện hàm băm SHA1 để lấy giá trị file đầu vào => chữ ký tạo khóa bí mật + giá trị băm ghi file *.sig - Mơ hình mã hóa Input: đường dẫn chứng thư số + đường dẫn tập tin để mã hóa + đường dẫn để lưu tập tin mã hóa Output: File liệu mã hóa (*.enc) -62- Mã chương trình: public void encrypt(String spath_cert, String spath_file, String spath_encFile){ byte[] plaintext = null; byte[] cipherText = null; try { //đọc tập tin để mã hóa plaintext = module.readFiletoBytes(spath_file); PublicKey puk = module.get_publickey(spath_cert); //khởi tạo instance RSA final Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, puk); cipherText = cipher.doFinal(plaintext); File f_enfile = new File(spath_encFile); if(!f_enfile.exists()) { f_enfile.createNewFile(); } FileOutputStream o_encFile = new FileOutputStream(f_enfile, false); o_encFile.write(cipherText); o_encFile.flush(); o_encFile.close(); AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); module.my_messagebox(dlgAlert, "Mã hóa thành cơng"); } catch (Exception e) { Log.d(TAG, "Error"); } } - Mơ hình giải mã Input: đường dẫn tập tin *.P12 + mật truy cập file *.P12 + đường tập tin mã hóa + đường dẫn lưu tập tin giải mã Output: File liệu giải mã Mã chương trình: public void decrypt(String spath_pkcs12, String smatkhau, String spath_encFile, String spath_decFile) { byte[] cipherText = null; byte[] dectyptedText = null; try { // lấy khóa bí mật P12 PrivateKey prk = module.get_privatekey(spath_pkcs12, smatkhau); cipherText = module.readFiletoBytes(spath_encFile); //khởi tạo instance RSA final Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, prk); dectyptedText = cipher.doFinal(cipherText); //lưu nội dung giải mã tập tin File f_decryptedFile = new File(spath_decFile); if(!f_decryptedFile.exists()) { f_decryptedFile.createNewFile(); } FileOutputStream o_encFile = new FileOutputStream(f_decryptedFile, false); -63o_encFile.write(dectyptedText); o_encFile.flush(); o_encFile.close(); AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); module.my_messagebox(dlgAlert, "Giải mã thành công"); } catch (Exception ex) { Log.d(TAG, "Error"); } } - Mơ hình xác thực Input: đường dẫn chứng thư số + đường dẫn tập tin lưu chữ ký số + đường dẫn tập tin gốc Output: Tính đắn chữ ký số Mã chương trình: public void verify(String spath_cert, String spath_sig, String spath_plain) { byte[] contentfile = null; byte[] signature = null; try { //đọc tập tin gốc tập tin chữ ký số contentfile = module.readFiletoBytes(spath_plain); signature = module.readFiletoBytes(spath_sig); //Lấy khóa cơng khai chứng thư số PublicKey puk = module.get_publickey(spath_cert); Signature dsa = Signature.getInstance("SHA1withRSA"); //khởi tạo instance SHA1withRSA để xác thực dsa.initVerify(puk); //nhập khoa công khai dsa.update(contentfile, 0, contentfile.length); //xác thực AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); if (!dsa.verify(signature)) { module.my_messagebox(dlgAlert, "Chữ ký không đúng"); Log.e(TAG,"Signature verification failed."); } else { module.my_messagebox(dlgAlert, "Chữ ký xác"); Log.e(TAG, "Signature verification true."); } } catch (Exception e) { Log.d(TAG, "Error"); } } KẾT LUẬN CHƯƠNG Chương trình ứng dụng chạy tốt hệ điều hành android 4.0 trở lên Tuy nhiên chương trình demo chưa xây dựng xác thực thơng qua hạ tầng PKI bên ngồi Đây hướng phát triển chương trình ứng dụng -64- PHỤ LỤC Giao diện Hình: Giao diện ứng dụng Ứng dụng có chức là: ký số, xác thực, mã hóa, xác thực Mã nguồn số module 2.1 Mã nguồn số hàm liên quan 2.1.1 Hàm lấy khóa công khai chứng thư số public static PublicKey get_publickey(String spath_chungchiso){ PublicKey puk = null; try { FileInputStream fin = new FileInputStream(spath_chungchiso); CertificateFactory f = CertificateFactory.getInstance("X.509"); Certificate certificate = f.generateCertificate(fin); puk = certificate.getPublicKey(); fin.close(); } catch (Exception e) { //thong bao loi Log.d(TAG, "Error"); } return puk; } 2.1.2 Hàm lấy khóa bí mật P12 spath_PKCS12: đường đẫn tập tin P12 smatkhau: mật mở P12 -65public static PrivateKey get_privatekey(String spath_PKCS12, String smatkhau){ PrivateKey prk = null; try { FileInputStream f_chungchiso = new FileInputStream(spath_PKCS12); InputStream in_chungchiso = new BufferedInputStream(f_chungchiso); KeyStore keystore = KeyStore.getInstance("PKCS12"); keystore.load(in_chungchiso, smatkhau.toCharArray()); Enumeration enum1 = keystore.aliases(); String sAlias = (String) enum1.nextElement(); while (enum1.hasMoreElements()) { sAlias = (String) enum1.nextElement(); } prk = (PrivateKey) (keystore.getKey(sAlias, smatkhau.toCharArray())); f_chungchiso.close(); } catch (Exception e) { //thong bao loi Log.d(TAG, "Error"); } return prk; } 2.2 Mã nguồn thực ký spath_pkcs12: đường đẫn tập tin P12 smatkhau: mật mở P12 spath_file: đường dẫn tập tin để ký spath_sigFile: đường dẫn tập tin lưu chữ ký public void sign(String spath_pkcs12, String smatkhau, String spath_file, String spath_sigFile){ byte[] signature = null; File f_file = new File(spath_file); int size_file = (int) f_file.length(); byte[] contentfile = new byte[size_file]; try { //đọc nội dung tập tin vào mảng contentfile BufferedInputStream buf = new BufferedInputStream(new FileInputStream(f_file)); buf.read(contentfile, 0, contentfile.length); buf.close(); //lấy khóa bí mật P12 PrivateKey prk = module.get_privatekey(spath_pkcs12, smatkhau); //Khởi tạo instance SHA1withRSA để ký Signature dsa = Signature.getInstance("SHA1withRSA"); dsa.initSign(prk); //nhập khóa bí mật dsa.update(contentfile, 0, contentfile.length); //nhập nội dung để ký -66signature = dsa.sign(); //ký số chữ ký trả lưu vào signature //ghi chữ ký vào tập tin File f_sigFile = new File(spath_sigFile); if(!f_sigFile.exists()) { f_sigFile.createNewFile(); } FileOutputStream o_sigFile = new FileOutputStream(f_sigFile, false); o_sigFile.write(signature); o_sigFile.flush(); o_sigFile.close(); AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); module.my_messagebox(dlgAlert, "Ký số thành công"); } catch (Exception e) { Log.d(TAG, "Error"); } } 2.3 Mã nguồn thực xác thực chữ ký spath_cert: đường dẫn chứng thư số spath_sig: đường dẫn tập tin lưu chữ ký số spath_plain: đường dẫn tập tin gốc public void verify(String spath_cert, String spath_sig, String spath_plain) { byte[] contentfile = null; byte[] signature = null; try { //đọc tập tin gốc tập tin chữ ký số contentfile = module.readFiletoBytes(spath_plain); signature = module.readFiletoBytes(spath_sig); //Lấy khóa cơng khai chứng thư số PublicKey puk = module.get_publickey(spath_cert); Signature dsa = Signature.getInstance("SHA1withRSA"); //khởi tạo instance SHA1withRSA để xác thực dsa.initVerify(puk); //nhập khoa công khai dsa.update(contentfile, 0, contentfile.length); //xác thực AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); if (!dsa.verify(signature)) { module.my_messagebox(dlgAlert, "Chữ ký không đúng"); Log.e(TAG,"Signature verification failed."); } else { module.my_messagebox(dlgAlert, "Chữ ký xác"); Log.e(TAG, "Signature verification true."); } } catch (Exception e) { Log.d(TAG, "Error"); } } -67- 2.3 Mã nguồn thực mã hóa spath_cert: đường dẫn chứng thư số spath_file: đường dẫn tập tin để mã hóa spath_encFile: đường dẫn để lưu tập tin mã hóa public void encrypt(String spath_cert, String spath_file, String spath_encFile){ byte[] plaintext = null; byte[] cipherText = null; try { //đọc tập tin để mã hóa plaintext = module.readFiletoBytes(spath_file); PublicKey puk = module.get_publickey(spath_cert); //khởi tạo instance RSA final Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, puk);//nhập khóa cơng khai cipherText = cipher.doFinal(plaintext); //mã hóa, kết trả lưu cipherText //ghi nội dung cipherText tập tin File f_enfile = new File(spath_encFile); if(!f_enfile.exists()) { f_enfile.createNewFile(); } FileOutputStream o_encFile = new FileOutputStream(f_enfile, false); o_encFile.write(cipherText); o_encFile.flush(); o_encFile.close(); AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); module.my_messagebox(dlgAlert, "Mã hóa thành cơng"); } catch (Exception e) { Log.d(TAG, "Error"); } } 2.3 Mã nguồn thực giải mã spath_pkcs12: đường dẫn tập tin P12 smatkhau: mật mở P12 spath_encFile: đường tập tin mã hóa spath_decFile: đường dẫn lưu tập tin giải mã public void decrypt(String spath_pkcs12, String smatkhau, String spath_encFile, String spath_decFile) { byte[] cipherText = null; byte[] dectyptedText = null; try { // lấy khóa bí mật P12 PrivateKey prk = module.get_privatekey(spath_pkcs12, smatkhau); cipherText = module.readFiletoBytes(spath_encFile); //khởi tạo instance RSA final Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.DECRYPT_MODE, prk);//nhập khóa bí mật -68dectyptedText = cipher.doFinal(cipherText);//giải mã kết lưu vào mảng dectyptedText //lưu nội dung giải mã tập tin File f_decryptedFile = new File(spath_decFile); if(!f_decryptedFile.exists()) { f_decryptedFile.createNewFile(); } FileOutputStream o_encFile = new FileOutputStream(f_decryptedFile, false); o_encFile.write(dectyptedText); o_encFile.flush(); o_encFile.close(); AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this); module.my_messagebox(dlgAlert, "Giải mã thành công"); } catch (Exception ex) { Log.d(TAG, "Error"); } } -69- KẾT LUẬN Mobile PKI phận mở rộng hệ thống PKI truyền thống Đó chế bên thứ ba (thường nhà cung cấp chứng thư số) đáng tin cậy cung cấp xác thực định danh bên tham gia vào trình trao đổi thông tin Mobile PKI hệ thống tương đối lớn phức tạp nhiều hạn chế cấu hình sở hạ tầng mạng Hơn với điều kiện thực tế Việt Nam chưa có sở hạ tầng Mobile PKI hồn chỉnh Do việc tìm hiểu, nghiên cứu nắm vững Mobile PKI gặp nhiều khó khăn Tuy nhiên thời gian thực đề tài em nghiên cứu tìm hiểu Mobile PKI thu số kết sau: Về lý thuyết em tìm hiểu nắm vững vấn đề sau: Các kiến thức hạ tầng khóa cơng khai - PKI mơ hình kiến trúc giải pháp an toàn hệ thống PKI Tìm hiểu tổng quan hệ thống Mobile PKI ứng dụng Mobile PKI thương mại điện tử, giải pháp ứng dụng hạ tầng PKI điện thoại di động sử dụng Về mặt thực nghiệm, luận văn thực kết sau: Xây dựng phần mềm ký số xác thực đơn giản hệ điều hành Android với ngơn ngữ Java Mã hóa, ký số, giải mã, xác thực chứng thư số Vì công nghệ mới, chưa triển khai sâu rộng Việt Nam, nên đạt mục tiêu đề luận văn kết thu mức độ tìm hiểu Luận văn nhiều hạn chế ứng dụng xây dựng kiểm tra tính tồn vẹn liệu mà chưa kiểm tra tình trạng chứng thư qua OCSP CRL, toán lưu chứng thư số thiết bị di động chưa thực an toàn, việc gán nhãn thời gian chưa thực Hướng phát triển luận văn đưa hoàn thiện ứng dụng ký số xác thực điện thoại di động có xác thực thơng qua hạ tầng PKI bên đáng tin cậy Giải toàn kiểm tra tình trạng chứng thư trực tuyến qua giao thức OCSP CRL, từ đánh giá xác khả áp dụng thực tiễn, xây dựng thuật toán ký số thuật toán tối ưu Em mong nhận góp ý bảo thầy cô bạn để em hồn thiện luận văn tiếp tục nghiên cứu sâu Mobile PKI nhằm đưa giải pháp an toàn, thiết thực hiệu Một lần em xin chân thành cảm ơn TS Nguyễn Viết Thế nhiệt tình giúp đỡ em suốt thời gian thực luân văn -70- TÀI LIỆU THAM KHẢO Tiếng Việt TS Hồ Văn Hương, KS Hoàng Chiến Thắng-Cục QLKTNVMM, Ban Cơ yếu Chính phủ, Ký số xác thực tảng web, Tạp trí An tồn thơng tin, số (026) năm 2013 Hồ Văn Hương, Hoàng Vĩnh Hà, Cao Thị Linh, Trịnh Văn Anh, Mobile PKI ứng dụng thực tế, Kỷ yếu Hội nghị Quốc gia Một số vấn đề chọn lọc Công nghệ thông tin lần thứ XVII, năm 2014 Hồ Văn Hương, Hoàng Chiến Thắng, Nguyễn Quốc Uy, Giải pháp bảo mật xác thực cho văn phòng điện tử, Hội nghị Quốc gia điện tử truyền thông (REV 2013-KC01) Hồ Văn Hương, Hoàng Chiến Thắng, Nguyễn Quốc Uy, Giải pháp bảo mật xác thực thư điện tử, Tạp chí An tồn thơng tin số 04 (028), 2013 Hồ Văn Hương, Hồng Vĩnh Hà, Ngơ Thị Linh, Trịnh Văn Anh, Hộ chiếu điện tử ứng dụng chữ ký số cho Hộ chiếu điện tử, Kỷ yếu hội thảo Khoa học cơng nghệ an tồn thơng tin, lần thứ nhất, 12/ 2014 Nguyen Thi Hoang Lan et al, “Nghiên cứu xây dựng hệ thống kiểm sốt truy cập mạng an ninh thơng tin dựa sinh trắc học sử dụng công nghệ nhúng”, 2010, KC.01.11/06-10 ThS Lê Quang Hùng, Hạ tầng PKI di động tích hợp dịch vụ chứng chực điện tử cho thiết bị động, Tạp trí An tồn thơng tin, năm 2012 http://vi.wikipedia.org/ Tiếng Anh Carlisle Adams & Steve Lloyd, Understanding PKI: Concepts, Standards and Deployment Considerations, Addison-Wesley, 2003 10 Suranjan Choudhury, Kartik Bhatnagar, and Wasim Haque, Public Key Infrastructure Implementation and Design, Published by M&T Books 11 Yong Lee a,*, Jeail Lee a, JooSeok Song b, Design an implementation of wireless PKI technology suitable for mobile phone in mobile-commerce, Received May 2006 12 William Stallings, Cryptography and Network Security Principles and Practices, Fourth Edition, 2005 13 Wireless Public Key Infrastructure for Mobile Phones, International Journal of Network Security & Its Applications (IJNSA), Vol.4, No.6, November 2012