Một số phương pháp mã hóa thông tin và ứng dụng trong xác minh thông tin

72 557 0
Một số phương pháp mã hóa thông tin và ứng dụng trong xác minh thông tin

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NÓI ĐẦU Từ xưa đến thông tin yếu tố quan trọng hoạt động đời sống người Trong thời đại ngày nay, phương thức truyền đạt thông tin ngày đa dạng phát triển Với đời máy tính mạng máy tính, việc trao đổi thông tin trở lên dễ dàng hơn, nhanh chóng hơn, đa dạng Nhưng kèm theo nguy xâm phạm thông tin ngày tăng Nắm bắt thông tin nhiều mang ý nghĩa định, sống đặc biệt lĩnh vực: kinh tế, trị, an ninh, quốc phòng…Vì việc bảo mật thông tin đã, vấn đề đặt cấp bách Để giải vấn đề hệ mật mã đời Từ hệ mật mã sơ khải cổ điển như: Hệ mã Dịch Vòng, hệ mã Hill, hệ mã Affine,…, hệ mật mã đại, phức tạp hệ mã DES Các hệ mật mã công khai hệ mã RSA, hệ mã Ba Lô Nhưng kèm với đời phát triển hệ mật mã phương pháp phá khoá hệ mật mã Cuộc chiến bảo mật thông tin xâm phạm thông tin diễn cách thầm lặng vô gay gắt Với mong muốn tìm hiểu phương pháp bảo mật, xác minh thông tin em chọn đề tài số phương pháp mã hóa thông tin ứng dụng xác minh thông tin làm đồ án tốt nghiệp Tuy có nhiều cố gắng việc xây dựng đề tài hạn chế mặt thời gian kiến thức kinh nghiệm thực tế nên đề tài không tránh khỏi thiếu sót Vì em mong bảo, đóng góp ý kiến thầy cô giáo cho đề tài em ngày hoàn thiện Em xin chân thành cảm ơn giúp đỡ nhiệt tình cô: Nguyễn Hiền Trinh– Bộ môn khoa học máy tính thầy cô trang bị kiến thức cho em để em hoàn thành đề tài MỤC LỤC NÓI ĐẦU Chương Một số phương pháp mã hóa thông tin 1.1 Khái niệm hệ mật mã 1.2 Mã hoá giải mã 1.2.1 Quy trình mã hoá giải mã liệu 1.2.3 Thuật toán mã hóa phi đối xứng(Puclic-key-Algorithms) 1.3 Mật mã cổ điển 1.3.1 Mã dịch vòng 1.3.2 Mã thay 1.3.3 Mã Affine 10 1.3.4 Mã Vigenere 11 1.3.5 Hệ mã Hill 13 1.3.6 Hệ mã Hoán vị 15 1.3.6.1 Mô tả 15 1.3.6.2 Đánh giá độ an toàn 16 1.3.7 Sơ lược thám mã hệ mã cổ điển 16 1.3.8 Nhận xét chung hệ mật mã cổ điển 17 Chương 2: Một số thuật toán mã hóa công khai .17 2.1 Giới thiệt chung 17 2.2 Một số hệ mã hóa công khai .20 2.2.1 Hệ mã Ba Lô (MHK) 20 2.2.1.1 Tạo khoá 20 2.2.1.2 Mã hoá 21 2.2.1.3 Giải mã 21 2.1.1.4 Ví dụ 22 2.2.2 Hệ mã RSA 23 2.2.2.1 Tạo khoá 25 2.2.2.2 Mã hoá 25 2.2.2.3 Giải mã 26 2.2.2.4 Ví dụ minh hoạ .27 2.2.3 Ðộ an toàn hệ RSA .28 2.2.4 Sơ lược thám mã RSA 29 2.2.5 Ứng dụng hệ mật mã RSA 31 2.2.6 Hệ mã ELGAMAL .31 2.2.6.1 Mô tả toán họa 32 2.2.6.2 Quá trình mã học 32 2.2.6.3 Quá trình giải mã 32 Chương 3: Chữ ký điện tử .33 3.1 Giới thiệu chữ ký điện tử vấn đề xác nhận .33 3.2 Một số thuật toán ký 35 3.2.1 Thuật toán ký RSA 35 3.2.1.1 Thuật toán sinh khoá : 35 3.2.1.2 Thuật toán sinh xác định chữ ký : .36 3.2.1.3 Tóm tắt lược đồ ký theo RSA : .36 3.2.2 Thuật toán ký DSA 37 3.2.2.1 Tạo khóa 37 3.2.2.2 Ký 38 3.2.2.3 Xác nhận 38 3.2.2.4 Sự đắn giải thuật .38 3.3 Tấn công chữ ký điện tử 39 Chương 4: Kiến trúc mã hóa API bảo mật Java2 40 4.1 Những vấn đề liên quan đến bảo mật mật mã .40 4.2 Vấn đề chứng thực khóa công khai 43 4.3 Môi trường làm việc kiến trúc mã hóa Java 44 4.3.1 JCE United States Export 45 4.3.2 Quan hệ Java SDK, JCA JCE APIs .46 4.4 Các API bảo mật Java 47 4.4.1 Gói java.security 47 4.4.1.1 Các principal .47 4.4.1.2 Giao diện Guard lớp GaurdedObject 47 4.4.1.3 Các Provider .48 4.4.1.4 Lớp Security .49 4.4.1.5 Công việc quản lý khóa .50 4.4.1.6 Một ví dụ quản lý kho khóa 52 4.4.1.7 Biến đổi thông điệp chữ ký điện tử .54 4.4.1.8 Phát sinh số ngẫu nhiên an toàn 55 4.4.1.9 Lớp SignedObject .55 4.4.1.10 vùng bảo vệ 56 4.4.1.11 Lớp policy 57 4.4.2 Gói java.security.spec 58 4.4.3 Gói java.security.cert 58 4.4.4 Gói java.security.interfaces 59 4.4.5 Gói java.security.acl 59 Chương 5: Cài đặt chương trình 61 5.1 Các bước chuẩn bị cho chương trình .61 5.2 Giao điện chương trình 62 5.3 Tạo khóa 62 5.4 Thực ký .63 5.5 Xác minh chữ ký .64 PHỤ LỤC 65 KẾT LUẬN 69 TÀI LIỆU THAM KHẢO .70 ĐÁNH GIÁ, NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Error! Bookmark not defined Chương Một số phương pháp mã hóa thông tin 1.1 Khái niệm hệ mật mã Một hệ mật mã (P,C,K,E,D) thoả mãn điều kiện sau: - P: Là tập hợp hữu hạn rõ, gọi không gian rõ - C: Là tập hữu hạn mã, gọi không gian mã Mỗi phần tử C nhận cách áp dụng phép mã hoá Ek lên phần tử P, với k  K - K: Là tập hữu hạn khoá hay gọi không gian khoá Đối với phần tử k K gọi khoá Số lượng không gian khoá phải đủ lớn để “kẻ địch” đủ thời gian để thử khoá (hay sử dụng phương pháp vét cạn) Đối với k  K có quy tắc mã ek: PC quy tắc giải mã tương ứng dk D Mỗi ek: P C dk: CP hàm mà: dk (ek(x)) = x với rõ x  P 1.2 Mã hoá giải mã * Mã hoá(encryption): Là trình biến đổi thông tin từ dạng nhận thức sang dạng không nhận thức Giải mã: (decryption) Là trình ngược lại với mã hoá, tức biến đổi thông tin từ dạng không nhận thức (dữ liệu mã hoá) dạng nhận thức (dạng gốc) 1.2.1 Quy trình mã hoá giải mã liệu Quản lý khóa Khoá Ke DL gốc Mã hoá DL mã hoá Khoá Kd Giải mã Quy trình mã hoá liệu Quy trình thực sau: DL gốc Bộ phận quản lý khoá thực lập khoá mã hoá (Ke) khoá giải mã (Kd) Dữ liệu gốc mã hoá nhờ khoá mã hoá Vấn đề quản lý khóa việc mã hoá giải mã tương đối đơn giản đảm bảo tuyệt đối bí mật cho khoá giải mã Thuật toán mã hóa đối xứng (Symmetric Algorithms) Mật mã đối xứng gọi mật mã Private key Cryptograpgy hay mật mã Secret key Cryptography Nó sử dụng chìa khoá để mã hoá giải mã liệu (được thể hình dưới) hạn chế an toàn phổ biến phương pháp đối xứng, đồng thời điểm yếu, cần bên để lộ khoá bí mật bị Hệ mã cổ điển loại mã thực thông qua hàm f có tính thuận nghịch, sử dụng f để mã hoá, biết f suy hàm giải mã f-1 Khi mật mã đối xứng sử dụng cho rõ, người sử dụng thực mã hoá với secret key Khi giao tiếp sử dụng mã hoá đối xứng, hai giao tiếp chia sẻ mật mã để mã hoá giải mã gói tin Hình Một hệ thống mật mã đối xứng Trong hệ thống mã hoá đối xứng, trước truyền liệu, bên gửi nhận phải thoả thuận khoá dùng chung cho trình mã hoá giải mã Sau đó, bên gửi mã hoá rõ (Plaintext) cách sử dụng khoá bí mật gửi thông điệp mã hoá cho bên nhận Bên nhận sau nhận thông điệp mã hoá sử dụng khoá bí mật mà hai bên thoả thuận để giải mã lấy lại rõ (Plaintext) Sự bảo mật thuật toán đối xứng dựa khoá Tiết lộ khoá có nghĩa biết khoá mã hoá giải mã thông tin hệ thống Nhóm mã hoá giải mã thuật toán đối xứng thể công thức: - Quá trình mã hóa: Ek(P)=C - Quá trình giải mã: Dk(C)=P Dk(Ek(P))=P Một số hệ mã cổ điển điển hình cho phương pháp mã hóa đối xứng như: - Mã dịch vòng - Mã thay - Mã hoán vị - Mã Affine - Mã Vigenere - Mã Hill - Mã dòng 1.2.3 Thuật toán mã hóa phi đối xứng(Puclic-key-Algorithms) Hay gọi với tên khác mã hoá khoá công khai (Public Key Cryptography), thiết kế cho khoá sử dụng trình mã hoá khác biệt với khoá sử dụng trình giải mã Hơn nữa, khoá sử dụng trình giải mã tính toán hay luận từ khoá dùng để mã hoá ngược lại, tức hai khoá có quan hệ với mặt toán học suy diễn Thuật toán gọi mã hoá công khai khoá dùng cho việc mã hoá công khai cho tất người Một người dùng khoá để mã hoá liệu người mà có khoá giải mã tương ứng đọc liệu mà Do thuật toán có loại khoá: Khoá để mã hoá gọi Public Key, khoá để giải mã gọi Private Key Trong trình truyền thông tin sử dụng mật mã bất đối xứng cần cặp key Nó tạo khả sử dụng linh hoạt phát triển tương lai giải pháp mật mã đối xứng Private key bạn cần phải riêng đảm bảo tính bảo mật không truyền mạng Public key cung cấp miễn phí công bố rộng rãi cho người Một hệ thống mật mã bất đối xứng Thuật toán thể bằng: - Quá trình mã hóa: Ek1(P)=C - Quá trình giải mã: Dk2(C)=P Dk2(Ek1(P))=P Trong số trường hợp, thông điệp mã hoá khoá riêng giải mã khoá công khai, điều thường áp dụng chữ ký điện tử Một số hệ mã công khai điển hình cho phương pháp mã hóa bất đối xứng như: - Hệ mã RSA - Hệ mã Ba Lô 1.3 Mật mã cổ điển 1.3.1 Mã dịch vòng 1.3.1.1 Mô tả Khái niệm : mã dịch vòng mã tạo cách kí tự rõ dịch k vị trí theo chiều kim đồng hồ Mã dịch vòng xác định Z26 (do có 26 chữ bảng chữ bảng chữ tiếng Anh) Giả sử P = C = K = Z26 với  k  25 , Định nghĩa: eK(x) = x +K mod 26 dK(x) = y -K mod 26 (x,y  Z26) Ví dụ: Mã hoá: Giả sử khoá cho mã dịch vòng K = 11 rõ :wewillmeetatmidnight Đổi chuỗi số theo tứ tự bảng chữ ta có: 22 22 11 11 12 4 19 19 12 13 19 Cộng với khoá modulo 26: 15 19 22 22 23 15 15 11 23 19 14 24 19 17 18 Ta thu mã: HPHTWWXPPELEXTOYTRSE Giải mã: 15 19 22 22 23 15 15 11 23 19 14 24 19 17 18 Trừ số cho 11 rút gọn theo mod 26 ta dãy số 22 22 11 11 12 4 19 19 12 13 19 Đổi dãy số chữ ta thu rõ: Bản rõ: wewillmeetatmidnight 1.3.1.2 Đánh giá độ an toàn Điều kiện để hệ mật an toàn phép tìm khoá vét cạn thực được, không gian khoá nhỏ nên dễ dàng thử khoá dk nhận rõ có nghĩa Vì hệ mã dịch vòng hệ mã không an toàn 1.3.2 Mã thay 1.3.2.1 Mô tả Để có mã người ta thay đổi ký hiệu rõ ký hiệu Trên thực tế, mã thay lấy P C chữ tiếng Anh ( 26 chữ ) Ta dùng Z26 mã dịch vòng phép mã hoá giải mã phép toán đại số mã thay thế, xem mã hoá giải mã hoán vị ký tự Ta định nghĩa mã thay dạng toán học sau hơn, đối tượng SignedObject chứa đối tượng (đối tượng triển khai giao diện) chữ ký Nói cách khác đối tượng ký chép sâu đối tượng gốc Một cách dùng điển hình cho việc ký là: Signature signingEngine = Signature.getInstance(Algorithm, provider); SignedObject so = new SignedObject(myObject, signingKey, signingEngine); Một cách dùng điểm hình cho việc xác minh là: Signature verificationEngine = Signature.getInstance(algorithm, provider); If(so.verify(publickey, verificationEngine)) try{ Object myObj=so.getObject(); }catch(Exception e){ }; Các ứng dụng SignedObject bao gồm:  Nó dùng cho chương trình java thẻ chứng thực làm giả – chuyển di vòng quanh mà không sợ thẻ bị thay đổi mà không phát  Có thể dùng để ký hóa liệu đối tượng cho việc cất giữ bên runtime ứng dụng java  Các đối tượng signedObject lồng vào dùng để xây dựng dãy ký logic, giống dây chuyền chứng thực ủy quyền 4.4.1.10 Vùng bảo vệ Lớp ProtectionDomain dùng để mô tả đơn vị vùng bảo vệ bên môi trường ứng dụng java Các đối số cho phương thức khởi tạo bao gồm codeSource PermissionCollection, tập quyền cho phép với đối tượng CodeSource ProtectionDomain(CodeSource codesource, PermissionCollection permissions); Trong ý rằng: 57  Các lớp có quyền cho phép, nguồn mã khác vùng bảo vệ khác  Mỗi lớp có vùng bảo vệ, tùy theo mã nguồn chương trình cho phép với mã chương trình  Tất lớp nguồn code thuộc vùng bảo vệ Phương thức getCodeSource() trả nguồn mã chương trình vùng phương thức getPermission() trả quyền cho phép vùng Hơn nữa, với permission cho, có phương thức implies để kiểm tra xem, protectionDomain có bao gồm quyền diễn đạt đối tượng Permission không 4.4.1.11 Lớp policy Gói java.security cung cấp lớp trừu tượng khác Policy để mô tả sách bảo mật hệ thống với ứng dụng môi trường java Mục đích việc xây dựng lớp nhằm đặc tả quyền cho mã chương trình từ nguồn khác nhau.hiển nhiên, sách bảo mật mô tả lớp Policy triển khai phương thức trừu tượng trong lớp trừu tượng Policy Chỉ có đối tượng Policy vào thời điểm Nó lưu ý đối thượng ProtectionDomain khởi tạo quyền cho phép Nguồn gốc thông tin chinh sách dược dùng để xây dựng đối tượng Policy phụ thuộc vào việc triển khai lớp Policy Việc cấu hình sách lưu trữ như: file ASCII (chính sách mặc định SUN), hay file nhị phân hóa lớp Policy, sở liệu Các đối tượng Policy cài đặt lấy cách gọi phương thức tĩnh getPolicy Tuy nhiên, đạn mã cho phép thiêt lập Policy gọi phương thức thiết lập phương thức refresh / reload làm cho đối tượng policy thiết lập lại cấu hình mặc định Chính phương thức refresh / reload gọi lại file cấu hình sách thiết lập vào đối tượng sách Một phương thức getPermission lớp Policy nhận đối số codeSource ước lượng sách toàn cục trả mội đối tượng 58 CollectionPermission đặc tả quyền cho phép mã chương trình từ nguồn mà codeSourrce đặc tả 4.4.2 Gói java.security.spec Gói bao gồm lớp giao diện dùng cho việc đặc tả khóa đặc tả tham số thuật toán Các trình đặc tả khóa trình diễn vật liệu “trong suốt” tạo nên khóa Như nói trên, trình diễn vật liệu khóa “trong suôt” nghĩa ta truy cập loại vật liệu thông qua kỹ thuật “get” Ví dụ, lớp DSAPrivateKeySpec lớp dùng đặc tả khóa cho thuật toán DSA, định nghĩa phương tức getX, getP, getQ, getG để truy cập khóa riêng X, tham số thuật toán DSA số nguyên tố P, Q số G nói trên, trình diễn vật liệu khóa “mờ” trái ngược hoàn toàn với trình diễn vật liệu khóa “trong suốt” Gói chứa đặc tả khóa cho khóa chung riêng DSA, RSA, khóa riêng PKCS#8 định dạng mã DER, khóa chung riêng X.509 định dạng mã DER Nó cung cấp lớp đặc tả tham số thuật toán thuật toán DSA Các giao diện cung cấp AlgorithmParameterSpec keySpec Trong đó:  Giao diện AlgorithmParameterSpec đặc tả tham số mật mã Tất lớp đặc tả tham số DSAParameterSpec … phải triển khai từ  Giao diện KeySpec đặc tả vật liệu tạo nên khóa Tất lớp đặc tả khóa phải triển khai từ lớp 4.4.3 Gói java.security.cert Gói cung cấp lớp để quản lý điều khiển chứng Cung cấp thêm gói riêng phục vụ cho việc quản lý loại chứng X.509 danh sách triệu gọi chứng loại X.509  Lớp trừu tượng Certificate dùng để quản lý loại chứng khác nhau, lớp trừu lượng X509Certificate kế thừa từ lớp Certificate triển khai từ giao diện X509Extension dùng riêng cho chứng loại X509 59  Lớp CRL cách nghĩ trừu tượng CRLs lập trình java Tất CRLs chia sẻ chức triệu gọi, liệt kê chứng triêu gọi truy vấn xem chúng có liệt kê môt chứng cho hay không Các loại CRL đặc tả định nghĩa tạo lớp kế thừa từ lớp trừu tượng Một ví dụ cho trường hợp X509CRL kế thừa từ CRL triển khai giao diện X609Extension Lớp X509CRLEntry cung cấp cho mục chứng gọi CRL X.509  Gói java.security.cert cung cấp lớp CertificateFactory để phát sinh chứng đối tượng từ mã hóa chúng Tương tự lớp trước, lớp CertificateFactorySpi dùng để định nghĩa SPI cho lớp CertificateFatory Đối tượng CertificateFactory khởi tạo thông qua phương thức getInstance Sau dùng phương thức generateCertificate generateCRL để tạo chứng đối tượng CRL 4.4.4 Gói java.security.interfaces Gói bao gồm giao diện để phát sinh khóa DSA RSA Đối với giao diện việc phát sinh khóa RSA định nghĩa theo chuẩn RSA Laboratory Technical Note PKCS#1, DSA NIST FITS 186 Các giao diện DSAKey, DSAPrivateKey, DSAPublicKey cung cấp chuẩn khóa DSA Gói bao gồm giao diện DSAKeyPairGenerator để phát sinh cặp khóa DSA, với giao diện DSAParams dùng cho việc phát sinh tập đặc tả DSA tham số khóa tạo nên họ khóa DSA Với giao diện RSAPublicKey RSAPrivatekey dùng cho khóa RSA, gói chứa lớp gọi RSAPrivateCrtkey triển khai khóa riêng RSA theo định nghĩa chuẩn PKCS#1, dùng giá trị thông tin lý thuyết phần dư 4.4.5 Gói java.security.acl Gói đưa tập giao diện quản lý cá danh sách điểu khiển truy cập (ACLs) Trong danh sách điều khỉển truy cập cấu trúc liệu dùng để bảo vệ truy cập đến tài nguyên Sau giao diện có gói: 60  Giao diện Acl trình diễn ACL  Giao diẹn AclEntry trình diễn mục ACL  Giao diện Group trình diễn nhóm principal Giao diện kế thừa từ giao diện Principal gói java.security  Giao diện Owner dùng để quản lý chủ sở hữu cấu hình ACLs ACL  Giao diện Permission dùng để trình diễn cho phép việc truy cập đến tài nguyên 61 Chương 5: Cài đặt chương trình 5.1 Các bước chuẩn bị cho chương trình Thông thường, việc phát triển phần mềm, người phát triển phải tuân thủ theo quy trình phát triển phần mềm cách nghiêm ngặt quy trình chuẩn hóa Tuy nhiên phạm vi viết chương trình nhỏ không đòi hỏi khắt khe việc thực theo quy trình Nhưng để giải vấn đề ta cần phải thực theo bước sau Đầu tiên phải xác định vấn đề cần giải Nếu rõ vấn đề tìm phương pháp giải Sau xác định vấn đề, nghĩ kế hoạch để thực Sau có kế hoạch, thực thi kế hoạch Sau kế hoạch thực thi, ta phải kiểm tra lại kết để xem vấn đề giải xong chưa Logic thường áp dụng nhiều lĩnh vực khác nhau, có lập trình Khi tạo chương trình Java hay ngôn ngữ nào, nên theo bước sau: Xác định mục tiêu chương trình Xác định phương pháp giải vấn đề Tạo chương trình để giải vấn đề Thực thi chương trình để xem kết Dựa vào bước trên, chương trình ký xác minh chữ ký điện tử xây dựng dựa việc nắm vững lý thuyết mã hóa bảo mật thông tin, từ áp dụng API hỗ trợ bảo mật Java để xây dựng lên chương trình cho phép ký lên tài liệt cho phép xác minh chữ ký hợp lệ đồng thời đảo bảo tính toàn vẹn liệu Thuật toán ký sử dụng DSA RSA tùy thuộc vào việc ta chuyền tham số cho phương thức getInstance DSA hay RSA (đây mềm dẻo việc sủ dụng API hỗ trợ bảo mật java2) 62 5.2 Giao điện chương trình Chương trình có chức chính: -Chức tạo lưu trữ khóa dùng để phục vụ cho việc ký xác minh -Chức ký lên tài liệu -Chức xác minh chữ ký 5.3 Tạo khóa Từ giao diện chọn tạo khóa có giao diện sau: 63 Tại bước ta chọn thuật toán sinh khóa, nơi lưu chữ private key public key phục vụ cho việc ký tài liệu sau Thuật toán sử dụng thuật toán DSA hoăc RSA với độ dài khóa 1024 bit Sau chọn xong nhấn Tạo khóa, chương trình hiển thị thoam số Private key va Public key Sauk hi tạo khóa xong, quay trở lại giao diện lúc khởi động chương trình để thực ký lên tài liệu ta muốn ký 5.4 Thực ký Trở lại giao diện chương trình: - Chọn thuật toán để ký (DSA RSA) tương ứng với thuật toán bạn chọn để sinh khóa, chọn sai thuật toán tương ứng với thuật toán sinh khóa chương trình thông báo lỗi yêu cầu chọn lại - Nhập đầy đủ thông tin vào trường “Chọn file cần ký”, ” Chọn thư mục lưu file chữ ký”, ” Nạp khóa để ký” Sau nhập đầy đủ thông tin, chọn “tiến hành ký”, chương trình thông báo thực ký thành công lên tài liệu file chữ ký sinh 64 Thông báo chương trình thực ký thành công 5.5 Xác minh chữ ký Để xác minh chữ ký với liệu nhận được, chọn chức Xác minh chữ ký nhập vàp đầy đủ thông tin yêu cầu, giao diện chương trình sau: Sau nhập đầy đủ thông tin theo yêu cầu (chính liệu mà ta nhận cần xác minh liệu đó) chọn thuật toán xác minh, chọn Tiến hành xác minh Nếu thông tin nhập vào xác, liệu không bị thay đổi trình vận chuyển có thông báo cho biết tính hợp lệ chữ ký liệu đầu vào Nếu liệu bị thay đổi trình đến tay người nhận, lúc thông báo kết xuất là: 65 PHỤ LỤC Giới thiệu số mã code quan trọng chương trình Tọa khóa: public class getKey { java.security.KeyPairGenerator KPG = java.security.KeyPairGenerator.getInstance("DSA","SUN"); java.security.SecureRandom r = new java.security.SecureRandom(); KPG.initialize(1024, r); java.security.KeyPair KP = KPG.generateKeyPair(); //Phát sinh khóa java.security.PrivateKey priv = KP.getPrivate(); java.security.PublicKey publ = KP.getPublic(); } Ta nhận phát sinh cặp kháo để phát sinh chữ ký theo thuật toán DSA Đối tượng KeyPairGenerator đảm nhận việc Đầu tiên tạo phương thức tĩnh getInstance lớp KeyPairGenerator java.security.KeyPairGenerator KPG = java.security.KeyPairGenerator.getInstance("DSA","SUN"); Sau khởi tạo tiếp với số ngẫu nhiên java.security.SecureRandom r = new java.security.SecureRandom(); KPG.initialize(1024, r); Phát sinh cặp khóa KeyPair: 66 java.security.KeyPair KP = KPG.generateKeyPair(); Thu hai loại khóa chung riêng: java.security.PrivateKey priv = KP.getPrivate(); java.security.PublicKey publ = KP.getPublic(); Thực lý: public class Signature { java.security.Signature dsasig = java.security.Signature.getInstance("SHA1withDSA","SUN"); dsasig.initSign(privKey); // we get the file to be signed java.io.FileInputStream fis = new java.io.FileInputStream(this.txtChonFileKy.getText()); java.io.BufferedInputStream bis = new java.io.BufferedInputStream(fis); byte[] buff = new byte[1024]; int len; // we call the update() mothod of signature class // update the data to be signed while(bis.available()!=0){ len=bis.read(buff); dsasig.update(buff, 0, len); } // we close the buffered input stream and the file input stream bis.close(); fis.close(); // we get the signature byte[] realsignature = dsasig.sign(); … } 67 Xác minh chữ ký: public class Verify { try{ java.io.FileInputStream fis = new java.io.FileInputStream(this.txtFileNhan.getText()); java.io.FileInputStream sfis = new java.io.FileInputStream(this.txtFileChuKy.getText()); java.io.FileInputStream pfis = new java.io.FileInputStream(this.txtFileKhoa.getText()); //Get the public key of the sender byte[] encKey = new byte[pfis.available()]; pfis.read(encKey); pfis.close(); java.security.spec.X509EncodedKeySpec pubKeySpec = new java.security.spec.X509EncodedKeySpec(encKey); java.security.KeyFactory KeyFac = java.security.KeyFactory.getInstance("DSA","SUN"); java.security.PublicKey pubkey = KeyFac.generatePublic(pubKeySpec); // Get the signature on the file - This will be verified byte[] sigToVerify = new byte[sfis.available()]; sfis.read(sigToVerify); sfis.close(); //initialize the signature //update() method used to update the data to be verified java.security.Signature dsasig = java.security.Signature.getInstance("SHA1withDSA","SUN"); dsasig.initVerify(pubkey); java.io.BufferedInputStream buf = new java.io.BufferedInputStream(fis); byte[] buff = new byte[1024]; int len; while(buf.available()!=0){ len=buf.read(buff); 68 dsasig.update(buff, 0, len); } buf.close(); fis.close(); // Verify the signature boolean verifies = dsasig.verify(sigToVerify); if(verifies){ JOptionPane.showMessageDialog(null, "Verified: Xác nhận chữ ký hợp lệ! "); } else JOptionPane.showMessageDialog(null, "Warning: Chữ ký không hợp lệ hặc tài liệu bị sửa đổi! "); }catch(Exception ex){ String error = ex.toString(); JOptionPane.showMessageDialog(null, error); } } 69 KẾT LUẬN  Kết đạt Trong trình nghiên cứu thực đồ án số phương pháp mã hóa thông tin ứng dụng xác minh thông tin em đat số kết quả: – Nắm vững kiến thức phương pháp mã hóa thông tin để ứng dụng ký xác minh thông tin – Nghiên cứu sâu ngôn ngữ lập trình java công cụ lập trình mới, đặc biệt sử dụng kiến trúc mã hóa API hỗ trợ bảo mật java để xây dựng ứng dụng an toàn, bảo mật – Ôn lại kiến thức học, kết hợp với kiến trúc mã hóa java để xây dựng chương trình hoàn chỉnh – Xây dựng chương trình có giao diện thân thiện, dễ sử dụng, đáp ứng yêu cầu để tài – chương trình cho phép tạo khóa, ký xác minh tài liệu ký, cách nhanh chóng hiệu  Định hướng phát triển đề tài – Nghiên cứu sâu kiến trúc mã hóa hỗ trợ API bảo mật java – Hoàn thiện chương trình để phù hợp tốt với yêu cầu thực tế áp dụng thực tê 70 TÀI LIỆU THAM KHẢO [1] Bùi Doãn Khanh – Nguyễn Đình Thúc – Hoàng Đức Hải, Giáo Trình Mã Hóa Thông Tin - Lý Thuyết Và Ứng Dụng, NXB Lao động – Xã hội, 12/2004 [2] Nguyễn Xuân Dũng, Bảo mật thông tin mô hình ứng dụng, NXB Thống kê,2007 [3] Phạm Thế Bảo – Hoàng Đức Hải – Phương Lan, Bảo mật lập trình mạng java 2, Nhà xuất thống kê, 2005 [4] Phương lan – Hoàng Đức Hải, Lập trình java tập 1, NXB thống kê, 2003 [5] Nguyễn Đình Thúc – Bùi Doãn Khanh, Mã hóa thông tin với java, Nhà xuất lao động xã hội, 2006 [6] Rich Helton – Johenie Helton, Java Security Solutions, Wiley Publishing, Inc., Indianapolis, Indiana, 2002 [7] Một số tài liệu, Ebook lập trình Java Java Security … số book khác [8] Tham khảo số website diễn đàn như: http://javavietnam.org http://www.diendantinhoc.org http://www.java2s.com http://www.roseindia.net … 71

Ngày đăng: 11/08/2016, 16:44

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan