File word mô tả đầy đủ thuật toán hàm băm sha1, dành cho ai tìm hiểu về hàm băm và thuật toán sha1, trong file đã trình bày đầy đủ mọi thứ cần thiết cho hàm băm sha1 và 1 số code java cần thiết cho ai lập trình để thử thuật toán có chính xác hay không.
MỤC LỤC DANH MỤC TỪ VIẾT TẮT CRHFs Collosion Resistant Hash Functions FIPS Tiêu chuẩn Xử lý Thông tin Liên bang Hoa Kỳ IPSEC Internet Protocol Security MAC Message Authentication Code NIST National Institute of Standards and Technology OWHFs One Way Hash Functions PGP Pretty Good Privacy SHA Secure Hash Algorithm SSH Secure Shell SSL Secure Socket Layer TLS Transport Layer Security DANH MỤC HÌNH VẼ Hình 3- 1: Đoạn text sau sử dụng thuật toán SHA1 20 Hình 32: Crack giải thuật Brute-Force Attack 20 LỜI MỞ ĐẦU Ngày với phát triển nhanh chóng công nghệ thông tin, đa số hoạt động thực qua mạng internet vấn đề bảo mật an toàn thông tin ngày trở nên quan trọng hết Trong lĩnh vực an toàn thông tin thuật toán mật mã có vai trò quan trọng, thuật toán mật mã không nhắc tới thuật toán hàm băm mật mã Hàm băm mật mã thành phần quan trọng nhiều ứng dụng bảo mật thông tin bảo vệ tính toàn vẹn liệu, thành phần cấu trúc hàm dẫn xuất khóa Tuy nhiên, với phát triển khoa học công nghệ họ hàm băm mật mã dùng phổ biến MD5, SHA không đảm bảo tính an toàn chúng Chính lý mà nhóm chúng em lựa chọn nghiên cứu đề tài: “Thuật toán SHA-1” Nội dung đề tài bao gồm: Chương Tổng quan hàm băm mật mã Chương Hàm băm SHA-1 Chương Triển khai hàm băm SHA-1 crack giải thuật Brute-Force Attack Do thời gian có hạn nên đề tài chúng em nhiều thiếu sót Chúng em mong nhận góp ý, bảo thầy để đề tài chúng em hoàn thiện Chúng em xin chân thành cảm ơn! CHƯƠNG TỔNG QUAN VỀ HÀM BĂM MẬT MÃ 1.1 Giới thiệu Trong ngành mật mã học, hàm băm mật mã hàm băm với số tính chất bảo mật định để phù hợp với việc sử dụng nhiều ứng dụng bảo mật thông tin đa dạng chứng thực (authentication) kiểm tra tính toàn vẹn thông điệp (message intergrity) Một hàm băm nhận đầu vào xâu ký tự dài (hay thông điệp) có độ dài tùy ý tạo kết xâu ký tự có độ dài cố định, gọi tóm tắt thông điệp chữ ký số Hàm băm (Hash function) hàm chiều mà đưa lượng liệu qua hàm cho chuỗi có độ dài cố định đầu Hàm h gọi hàm băm có hai tính chất sau: • Tính chất nén: h ánh xạ đầu vào x có độ dài bit hữu hạn tùy ý tới đầu h(x) có độ dài bit n hữu hạn • Tính chất dễ dàng tính toán: Với h cho trước đầu vào x, dẽ hàng tính h(x) Tính an toàn hàm băm tượng đụng độ: • Hàm băm xem an toàn tượng đụng độ khó tìm thông điệp có giá trị băm • Trong tập hợp mà phần tử mang N giá trị cho trước với xác suất nhau, cần khoảng N phép thử ngẫu nhiên để tìm phần tử có giá trị Phương pháp công dựa vào đụng độ: • Tìm hai thông điệp có nội dung khác giá trị băm • Ký tên thông điệp sau người ký không thừa nhận chữ ký mà nói ký thông điệp khác Như vậy, cần phải chọn hai thông điệp đụng độ với trước ký • Tính chiều: - Hàm băm xem hàm chiều cho trước giá trị băm, tái tạo lại thông điệp ban đầu, gọi “tiền ảnh” Như vậy, trường hợp lý tưởng, cần phải thực hàm băm cho khoảng n thông điệp để tìm “tiền ảnh” tương ứng giá trị băm - Nếu tìm phương pháp công cho phép xác định “tiền ảnh” tương ứng giá trị băm cho trước thuật toán băm không an toàn Cách công nhằm tạo thông điệp khác với thông điệp ban đầu có giá trị băm gọi công “tiền ảnh thứ hai” (Second Preimage Attack) 1.2 Các tính chất hàm băm mật mã Hầu hết hàm băm mật mã thiết kế với xâu đầu vào có độ dài tùy ý kết đầu giá trị băm có độ dài cố định Hàm băm mật mã phải chống lại tất kiểu công phân tích Ba tính chất quan trọng hàm băm mật mã là: • Tính kháng tiền ảnh: Với đầu y cho trước, tìm thấy liệu đầu vào x cho h(x)= y Các hàm thiếu tính chất bị tổn thương công tiền ảnh • Tính kháng tiền ảnh thứ hai: Với liệu đầu vào x cho trước y=h(x), tính toán để tìm giá trị x’ ≠ x cho h(x’) = h(x) Các hàm thiếu tính chất bị tổn thương tiền ảnh thứ hai • Tính kháng va chạm: Không thể tính toán để tìm hai liệu đầu vào x x ’ phân biệt cho chúng có giá trị băm h(x)= h(x’) Tính chất yêu cầu giá trị băm tối thiểu mạnh yêu cầu kháng tiền ảnh, va chạm tìm công nghịch lý ngày sinh 1.3 Phân loại hàm băm mật mã 1.3.1 Hàm băm có khóa Các hàm băm có khóa sử dụng để xác thực thông báo thường gọi thuật toán tạo mã xác thực thông báo (MAC) MAC dựa mật mã khối • • MAC nhận hai giá trị đầu vào: Thông điệp cần tính giá trị băm Khóa bí mật để băm văn theo chuẩn quy định MAC có yêu cầu bảo mật khác nhau, giống với hàm mã hóa MAC, phải có khả chống lại giả mạo, tức kẻ công truy cập vào khóa phát sinh MAC giống MAC bên gửi tính toán MAC khác chữ ký sỗ MAC sinh kiểm định việc sử dụng khóa Điều có nghĩa bên gửi bên nhận phải thống khóa chung trước thực việc trao đổi thông tin Như MAC khác với chữ ký số MAC không đảm bảo tính chất chống chối bỏ bên nhận sinh MAC thông tin nhận kết hợp với khóa chia sẻ 1.3.2 Hàm băm khóa Hàm băm khóa nhận giá trị đầu vào thông điệp Trong lớp hàm băm không sử dụng khóa MDCs (mã nhận diện thay đổi) lớp lớp Lớp hàm lại tiếp tục phân thành lớp nhỏ sau: • Hàm băm chiều (One-Way Hash Functions – OWHFs): Các hàm lớp thỏa mãn tính chất với mã băm biết trước, tính toán để tìm chuỗi bit đầu vào có mã băm với mã băm cho • Hàm băm kháng xung đột (Collosion Resistant Hash Functions – CRHFs): Các hàm lớp thỏa mãn tính chất tính toán để tìm hai chuỗi bit có giá trị băm 1.4 Các ứng dụng hàm băm mật mã Bảo vệ tính toàn vẹn Một ứng dụng quan trọng hàm băm mật mã kiểm tra tính toàn vẹn thông điệp Chẳng hạn việc xác định xem thông điệp có bị sửa đổi hay không thực cách so sánh giá trị băm tính trước sau gửi Còn dùng tóm lược làm phương tiện đáng tin cậy cho việc nhận dạng tập tin Một thông điệp kích thước tùy ý sau băm thu gọn thành băm- gọi giá trị băm có kích thước cố định Với thông điệp đầu vào tính văn đại diện có giá trị băm tương ứng Hai thông điệp khác chắn có hai văn đại diện khác Khi có văn đại diện cho thông điệp, kết luận đường truyền thông điệp có toàn vẹn hay không Xác thực Một ứng dụng tiêu biểu hàm băm mật mã sau: Alice đặt toán khó cho Bob, tuyên bố cô ta giải Bob phải cố gắng tự thực hiện, chưa dám Alice không giải sai Do đó, Alice viết lời giải mình, gắn thêm giá trị nonce ngẫu nhiên, tính giá trị băm cho Bob biết giá trị băm (giữ bí mật lời giải giá trị nonce) Bằng cách này, Bob tìm lời giải vài ngày sau đó, Alice chứng minh cô ta có lời giải sớm cách tiết lộ giá trị nonce cho Bob • Giả sử Alice muốn gửi cho Bob thông điệp x Alice thực bước sau: - Alice băm thông điệp x, thu đại diện z= h(x) có kích thước cố định - Alice ký số lên đại diện z khóa bí mật thu ký số y= sign(z) - Alice gửi (x,y) cho Bob • Khi Bob nhận (x,y) Bob thực bước sau: - Bob kiểm tra chữ ký số để xác minh xem thông điệp mà nhận có phải gửi từ Alice không cách giải mã chữ ký số y khóa công khai Alice thu z - Bob dùng thuật toán băm tương ứng với thuật toán băm mà Alice dùng để băm thông điệp x kèm nhận h(x) - Bob so sánh giá trị băm z h(x), giống chắn thông điệp x mà Alice muốn gửi cho Bob nguyên vẹn, bên cạnh xác thực người gửi thông tin Lưu trữ mật Khi người sử dụng đăng kí mật khẩu, giá trị băm mật tính hàm băm Giá trị băm lưu trữ vào tập tin hay sở liệu Vì hàm băm chiều suy mật Khi người sử dụng đăng nhập, mật đăng nhập tính toán giá trị băm so sánh với giá trị băm lưu trữ Do tính kháng va chạm, có mật có giá trị băm tương ứng, nên không khác người sử dụng có mật đăng nhập ứng dụng Ứng dụng chữ ký số 1.5 Một số hàm băm mật mã Kích thước khối (Block size) Độ dài (Length size) Kích thước word (Word size) Xung đột (Collision) Thuật toán Kích thước đầu (output size) Kích thướ trạng thái (Internal state size) HAVAL 256/224/192/16 0/128 256 1024 64 32 Có MD2 128 384 128 Không khả lớn MD4 MD5 128 128 128 128 512 512 64 64 32 32 Có Có PANAMA 256 8736 256 No 32 Có lỗi RIPEMD 128 128 512 64 32 Có RIPEMD128/256 128/256 128/256 512 64 32 Không RIPEMD160/320 160/320 160/320 512 64 32 Không SHA-0 SHA-1 160 160 160 160 512 512 64 64 32 32 Không Có lỗi SHA256/224 256/224 256 512 64 32 Không SHA512/384 512/384 512 1024 128 64 Không Tiger(2)192/160/12 192/160/128 192 512 64 64 Không VEST-4/8 (hash mode) 160/256 256/384 80/128 Không VEST-16/32 (hash mode) 320/512 512/768 160/256 Không WHIRLPOO L 512 512 512 256 Không 10 CHƯƠNG HÀM BĂM SHA-1 2.1 Giới thiệu 2.1.1 Lịch sử phát triển Vào năm 1990, Ron Rivest sáng tạo hàm băm MD4 Vào năm 1992, ông cải tiến MD4 phát triển hàm băm khác: MD5 Vào năm 1993, NSA công bố hàm băm giống với MD5, gọi SHA SHA(Secure Hash Algorithm) phát triển cục quốc gia an ninh Hoa Kỳ gọi tắt NSA xuất thành chuẩn phủ Hoa Kỳ viện công nghệ chuẩn quốc gia Hoa Kỳ (NIST) vào năm 1993 gọi tắt SHA-0 Các thuật toán SHA bao gồm: SHA-0, SHA-1, SHA-224, SHA-384, SHA-512, SHA-256 Vào năm 1995, có thay đổi nhỏ SHA-0 dẫn đến đời SHA-1, SHA-1 công bố FIPS PUB 180-1 SHA-1 gần tương tự SHA-0, sửa chữa lỗi đặc tả kỹ thuật gốc hàm băm SHA dẫn đến điểm yếu quan trọng Các thuật toán SHA-0 không sử dụng nhiều ứng dụng 2.1.2 Ứng dụng SHA-1 phần ứng dụng bảo mật sử dụng rộng rãi giao thức như: TLS SSL, PGP, SSH IPSEC… Các SHA-1 sử dụng với DSA thư điện tử, chuyển tiền điện tử, phân phối phần mềm, lưu trữ liệu, ứng dụng khác cần đảm bảo tính toàn vẹn liệu xác thực nguồn gốc liệu Các SHA-1 sử dụng cần thiết để tạo phiên đặc tin nhắn Hàm SHA-1 sử dụng Wii Nintendo để xác minh chữ ký thời gian khởi động SHA-1 SHA-2 thuật toán băm an toàn theo yêu cầu pháp luật để sử dụng số ứng dụng Chính Phủ Hoa Kỳ, bao gồm sử dụng thuật toán mã hóa khác giao thức, để bảo vệ thông tin mật nhạy cảm Nhưng Chính Phủ không sử dụng SHA-1 mà thay vào SHA-2 11 Các hàm băm SHA dùng làm sở cho mã khối SHACAL 2.1.3 Vấn đề bảo mật SHA-1 Hiện vấn đề bảo mật SHA-1 không tin tưởng sử dụng trước vì: • • • • • Đầu năm 2005, Rijmen Oswald công bố công vào phiên rút gọn SHA-1 cách tìm đụng độ thông qua việc tính 280 phép tính Tháng 2-2005, công nhà mật mã học thuộc đại học Shandong (Trung Quốc) tìm đụng độ phiên SHA-1 đầy đủ với với 269 phép tính nhanh khoảng 2000 lần so với cách công Brute-Force 8-2005, hội nghị Mật Mã, họ công bố thuyết trình việc công vụ va chạm vòng 58 SHA-1 với 233 phép tính băm 18-12-2007, báo cáo chi tiết kết giải thích xác nhận Martin Cochran Ngoài nhiều nghiên cứu công khác Nhưng nhìn chung SHA-1 bảo mật tốt công bố năm 2004 NIST hội nghị Mật Mã 2004 2.2 Thuật toán SHA-1 2.2.1 Thuật toán Đầu vào: thông điệp với độ dài tối đa 264 bit Đầu ra: giá trị băm (message digest) có độ dài 160 bit Giải thuật gồm bước thao tác khối 512 bit: Bước Nhồi liệu: • • • • Thông điệp nhồi thêm bit cho độ dài L mod 512 đồng dư 448 Thông điệp nhồi thêm bit Số bit nhồi thêm phải nằm khoảng [1-512] Phần thêm vào cuối liệu gồm bit “1” theo sau bit “0” Bước Thêm độ dài: • Độ dài khối liệu ban đầu biểu diễn dạng nhị phân 64 bit thêm vào cuối chuỗi nhị phân mà ta thu bước 12 • • Độ dài biểu diễn dạng nhị phân 64 bit không dấu Kết thu từ bước khối liệu có độ dài bội số 512 (với 512 bit khối liệu) Bước Khởi tạo đệm MD (MD Buffer): Một đệm 160 bit dùng để lưu trữ giá trị băm trung gian kết Bộ đệm biểu diễn ghi 32 bit với giá trị khởi tạo dạng big-eadian (byte có trọng số lớn từ nằm địa thấp nhất) có đệm Năm ghi đệm đặt tên A, B, C, D, E tương tự cho đệm thứ hai H0, H1, H2, H3, H4 Có giá trị sau (theo dạng Hex): H0 = 67452301 H1 = EFCDAB89 H2 = 98BADCFE H3 = 103258476 H4 = C3D2E1F0 Bước Xử lý khối liệu 512 bit: • • Trọng tâm giải thuật bao gồm vòng lặp thực tất 80 bước vòng lặp có cấu trúc giống nhau, khác hàm logic ft: Bước Hàm Giá trị ≤ t ≤ 19 ft = f(B,C,D) (B AND C) OR ((NOT B) AND D) 20 ≤ t ≤ 39 ft = f(B,C,D) B XOR C XOR D 40 ≤ t ≤ 59 ft = f(B,C,D) (B AND C) OR (B AND D) OR (C AND D) 60 ≤ t ≤ 79 ft = f(B,C,D) B XOR C XOR D • Mỗi vòng có đầu vào gồm khối 512 bit thời đệm 160 bit A, B, C, D, E Các thao tác cập nhật đệm 13 • Chia khối liệu nhồi thêm (cuối bước 2) thành 16 nhóm (mỗi nhóm gồm 32 bit) đặt theo thứ tự là: W0, W1, W2,…, W15 Hình 2- : Xử lý khối đơn 512 bit • Mở rộng từ 16 nhóm 32 bit lên 80 nhóm 32 bit vòng lặp sau: For t = 16 to 79 let Wt = S1(Wt-3 XOR Wt-8 XOR Wt-14 XOR Wt-16) • • Gán A = H0, B = H1, C = H2, D = H3, E = H4 Mỗi vòng lặp sử dụng theo công thức chung với số Kt(0≤t≤79) sau: 14 Hình 2- : Cách tính đệm A, B, C, D, E For t = to 79 TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt ; E = D; D = C; C = S30(B); B = A; A = TEMP; Với : Kt = 5A827999 (0 ≤ t ≤ 19); Kt = 6ED9EBA1(20 ≤ t ≤ 39); Kt = 8F1BBCDC(40 ≤ t ≤ 59); Kt = CA62C1D6(60 ≤ t ≤ 79); • Đầu vòng ( bước 80) cộng với giá trị đệm để tạo chuỗi kết dài 160 bit: H0 = H0 + A H1 = H1 + B 15 H2 = H2 + C H3 = H3 + D H4 = H4 + E Bước Xuất kết quả: Sau thao tác toàn N khối liệu (blocks) Kết khối thứ N chuỗi băm 160 bit: H = H0H1H2H3H4 2.2.2 Ví dụ cụ thể (lấy FIPS PUB 180-1) Cho chuỗi : 01100001 01100010 01100011 Chiều dài chuỗi là: l =24 Tiếp theo, thêm bit “1” 423 bit “0” theo bước Kế tiếp thêm 64 bit cuối thể độ dài chuỗi vào cuối bước nhồi liệu là: 00000000 00000018 (Hex), số dạng Hex cuối dãy 64 bit đại diện cho chiều dài l=24 Vì hoàn thành bước nhồi liệu => số block n = Khởi tạo đệm MD: H0 = 67452301 H1 = EFCDAB89 H2 = 98 BADCFE H3 = 103258476 H4 = C3D2E1F0 Bắt đầu tiến trình nén liệu Block 1: W[0] = 61626380 W[1] = 00000000 W[2] = 00000000 W[3] = 00000000 W[4] = 00000000 W[5] = 00000000 W[6] = 00000000 16 W[7] = 00000000 W[8] = 00000000 W[9] = 00000000 W[10] = 00000000 W[11] = 00000000 W[12] = 00000000 W[13] = 00000000 W[14] = 00000000 W[15] = 00000018 Gán A = H0, B = H1, C = H2, D = H3, E = H4 Giá trị Hex A, B, C, D, E sau cho t chạy theo vòng lặp "for t = to 79" là: A t t t t t t t t t t t t t t t t t t t t t t t t t t = = = = = = = = = = = = = = = = = = = = = = = = = = 0: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 0116FC33 8990536D A1390F08 CDD8E11B CFD499DE 3FC7CA40 993E30C1 9E8C07D4 4B6AE328 8351F929 FBDA9E89 63188FE4 4607B664 9128F695 196BEE77 20BDD62F 4E925823 82AA6728 DC64901D FD9E1D7D 1A37B0CA 33A23BFC 21283486 D541F12D C7567DC6 48413BA4 B 67452301 0116FC33 8990536D A1390F08 CDD8E11B CFD499DE 3FC7CA40 993E30C1 9E8C07D4 4B6AE328 8351F929 FBDA9E89 63188FE4 4607B664 9128F695 196BEE77 20BDD62F 4E925823 82AA6728 DC64901D FD9E1D7D 1A37B0CA 33A23BFC 21283486 D541F12D C7567DC6 C 7BF36AE2 59D148C0 C045BF0C 626414DB 284E43C2 F3763846 B3F52677 0FF1F290 664F8C30 27A301F5 12DAB8CA 60D47E4A 7EF6A7A2 18C623F9 1181ED99 644A3DA5 C65AFB9D C82F758B D3A49608 20AA99CA 77192407 7F67875F 868DEC32 0CE88EFF 884A0D21 75507C4B 17 D 98BADCFE 7BF36AE2 59D148C0 C045BF0C 626414DB 284E43C2 F3763846 B3F52677 0FF1F290 664F8C30 27A301F5 12DAB8CA 60D47E4A 7EF6A7A2 18C623F9 1181ED99 644A3DA5 C65AFB9D C82F758B D3A49608 20AA99CA 77192407 7F67875F 868DEC32 0CE88EFF 884A0D21 E 10325476 98BADCFE 7BF36AE2 59D148C0 C045BF0C 626414DB 284E43C2 F3763846 B3F52677 0FF1F290 664F8C30 27A301F5 12DAB8CA 60D47E4A 7EF6A7A2 18C623F9 1181ED99 644A3DA5 C65AFB9D C82F758B D3A49608 20AA99CA 77192407 7F67875F 868DEC32 0CE88EFF t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t t = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: BE35FBD5 4AA84D97 8370B52E C5FBAF5D 1267B407 3B845D33 046FAA0A 2C0EBC11 21796AD4 DCBBB0CB 0F511FD8 DC63973F 4C986405 32DE1CBA FC87DEDF 970A0D5C 7F193DC5 EE1B1AAF 40F28E09 1C51E1F2 A01B846C BEAD02CA BAF39337 120731C5 641DB2CE 3847AD66 E490436D 27E9F1D8 7B71F76D 5E6456AF C846093F D262FF50 09D785FD 3F52DE5A D756C147 548C9CB2 B66C020B 6B61C9E1 19DFA7AC 101655F9 0C3DF2B4 78DD4D2B 497093C0 3F2588C2 C199F8C7 39859DE7 EDB42DE4 48413BA4 BE35FBD5 4AA84D97 8370B52E C5FBAF5D 1267B407 3B845D33 046FAA0A 2C0EBC11 21796AD4 DCBBB0CB 0F511FD8 DC63973F 4C986405 32DE1CBA FC87DEDF 970A0D5C 7F193DC5 EE1B1AAF 40F28E09 1C51E1F2 A01B846C BEAD02CA BAF39337 120731C5 641DB2CE 3847AD66 E490436D 27E9F1D8 7B71F76D 5E6456AF C846093F D262FF50 09D785FD 3F52DE5A D756C147 548C9CB2 B66C020B 6B61C9E1 19DFA7AC 101655F9 0C3DF2B4 78DD4D2B 497093C0 3F2588C2 C199F8C7 39859DE7 B1D59F71 12104EE9 6F8D7EF5 D2AA1365 A0DC2D4B 717EEBD7 C499ED01 CEE1174C 811BEA82 4B03AF04 085E5AB5 F72EEC32 03D447F6 F718E5CF 53261901 8CB7872E FF21F7B7 25C28357 5FC64F71 FB86C6AB 503CA382 8714787C 2806E11B AFAB40B2 EEBCE4CD 4481CC71 99076CB3 8E11EB59 792410DB 09FA7C76 5EDC7DDB D79915AB F211824F 3498BFD4 4275E17F 8FD4B796 F5D5B051 9523272C ED9B0082 5AD87278 0677E9EB 4405957E 030F7CAD DE37534A 125C24F0 8FC96230 F0667E31 18 75507C4B B1D59F71 12104EE9 6F8D7EF5 D2AA1365 A0DC2D4B 717EEBD7 C499ED01 CEE1174C 811BEA82 4B03AF04 085E5AB5 F72EEC32 03D447F6 F718E5CF 53261901 8CB7872E FF21F7B7 25C28357 5FC64F71 FB86C6AB 503CA382 8714787C 2806E11B AFAB40B2 EEBCE4CD 4481CC71 99076CB3 8E11EB59 792410DB 09FA7C76 5EDC7DDB D79915AB F211824F 3498BFD4 4275E17F 8FD4B796 F5D5B051 9523272C ED9B0082 5AD87278 0677E9EB 4405957E 030F7CAD DE37534A 125C24F0 8FC96230 884A0D21 75507C4B B1D59F71 12104EE9 6F8D7EF5 D2AA1365 A0DC2D4B 717EEBD7 C499ED01 CEE1174C 811BEA82 4B03AF04 085E5AB5 F72EEC32 03D447F6 F718E5CF 53261901 8CB7872E FF21F7B7 25C28357 5FC64F71 FB86C6AB 503CA382 8714787C 2806E11B AFAB40B2 EEBCE4CD 4481CC71 99076CB3 8E11EB59 792410DB 09FA7C76 5EDC7DDB D79915AB F211824F 3498BFD4 4275E17F 8FD4B796 F5D5B051 9523272C ED9B0082 5AD87278 0677E9EB 4405957E 030F7CAD DE37534A 125C24F0 t t t t t t t = = = = = = = 73: 74: 75: 76: 77: 78: 79: 11793F6F 5EE76897 63F7DAB7 A079B7D9 860D21CC 5738D5E1 42541B35 EDB42DE4 11793F6F 5EE76897 63F7DAB7 A079B7D9 860D21CC 5738D5E1 CE616779 3B6D0B79 C45E4FDB D7B9DA25 D8FDF6AD 681E6DF6 21834873 F0667E31 CE616779 3B6D0B79 C45E4FDB D7B9DA25 D8FDF6AD 681E6DF6 8FC96230 F0667E31 CE616779 3B6D0B79 C45E4FDB D7B9DA25 D8FDF6AD Sau tính xong khối liệu (Block) Giá trị ghi đệm lúc là: H0 = 67452301 + 42541B35 = A9993E36 H1 = EFCDAB89 + 5738D5E1 = 4706816A H2 = 98BADCFE + 21834873 = BA3E2571 H3 = 10325476 + 681E6DF6 = 7850C26C H4 = C3D2E1F0 + D8FDF6AD = 9CD0D89D Kết thu được: A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D 19 CHƯƠNG TRIỂN KHAI HÀM BĂM SHA-1 VÀ CRACK BẰNG GIẢI THUẬT BRUTE- FORCE ATTACK 3.1 Chương trình thuật toán SHA-1(Code) Nhồi liệu thêm độ dài cho đoạn text cần băm: public static String padding(String message) { int dodai = message.length(); int tg = dodai; String KetQua = ""; String t; for (int i = 0;i < dodai;i++) { int k = (int) message.charAt(i); t = Integer.toBinaryString(k); while (t.length() 448) { mod = 512+448-mod; for(int i = 0;i < mod;i++) { } KetQua = KetQua+"0"; } tg = tg*8; t = Integer.toBinaryString(tg); tg = 64-t.length(); for(int i = 0;i < tg;i++) { t = "0"+t; 20 } KetQua = KetQua+t; String text = ""; for(int i = 0; i < KetQua.length()/4;i++) { String subtest = KetQua.substring(i*4, (i+1)*4); int m = Integer.parseInt(subtest, 2); subtest = Integer.toHexString(m); text = text+subtest; } } return text; Khởi tạo đệm: String[] H = {"67452301","EFCDAB89","98BADCFE","10325476","C3D2E1F0"}; BigInteger a = convert(H[0]); BigInteger b = convert(H[1]); BigInteger c = convert(H[2]); BigInteger d = convert(H[3]); BigInteger e = convert(H[4]); 21 Tính Wt : for (int k = 0;k [...]... BigInteger(H[4], 16),e); String KetQua = H[0]+H[1]+H[2]+H[3]+H[4]; 23 3.2 Triển khai chương trình Sử dụng thuật toán SHA-1 để băm đoạn text: “happy” Hình 3- 1: Đoạn text sau khi sử dụng thuật toán SHA-1 Sử dụng công cụ Cain and abel để crack chuỗi vừa băm bằng giải thuật Brute-force Attack: Hình 3- 2: Crack bằng giải thuật Brute-Force Attack 24 KẾT LUẬN Sau khi thực hiện tìm hiểu về đề tài này, nhóm chúng em... trúc cũng như ứng dụng của hàm băm mật mã và một số hàm băm mật mã phổ biến Hiểu được hàm băm SHA-1, một số vẫn đề bảo mật của SHA-1 và hiểu được thuật toán SHA-1 Xây dựng được chương trình sử dụng thuật toán SHA-1 để băm dữ liệu và kiểm chứng được thuật toán không an toàn bằng Brute-Force Attack Trong quá trình thức hiện đề tài do hạn chế về kiến thức và hiểu biết nên nhóm chúng em chỉ đi xâu vào... 1993 và được gọi tắt là SHA-0 Các thuật toán của SHA bao gồm: SHA-0, SHA-1, SHA-224, SHA-384, SHA-512, SHA-256 Vào năm 1995, có một sự thay đổi nhỏ của SHA-0 dẫn đến sự ra đời của SHA-1, và SHA-1 được công bố trong FIPS PUB 180-1 SHA-1 gần tương tự như SHA-0, nhưng sửa chữa một lỗi trong các đặc tả kỹ thuật gốc của hàm băm SHA dẫn đến những điểm yếu quan trọng Các thuật toán SHA-0 đã không được sử dụng... Nhưng nhìn chung là SHA-1 không có được sự bảo mật tốt nhất như khi nó được công bố năm 2004 bởi NIST tại hội nghị Mật Mã 2004 2.2 Thuật toán SHA-1 2.2.1 Thuật toán Đầu vào: thông điệp với độ dài tối đa 264 bit Đầu ra: giá trị băm (message digest) có độ dài 160 bit Giải thuật gồm 5 bước thao tác trên các khối 512 bit: Bước 1 Nhồi dữ liệu: • • • • Thông điệp được nhồi thêm các bit sao cho độ dài L... bản đặc của tin nhắn Hàm SHA-1 còn được sử dụng trên Wii của Nintendo để xác minh chữ ký thời gian khởi động SHA-1 và SHA-2 là những thuật toán băm an toàn theo yêu cầu của pháp luật để sử dụng trong một số ứng dụng của Chính Phủ Hoa Kỳ, bao gồm cả sử dụng trong các thuật toán mã hóa khác và các giao thức, để bảo vệ thông tin mật nhạy cảm Nhưng hiện nay thì Chính Phủ không còn sử dụng SHA-1 nữa mà thay... + 681E6DF6 = 7850C26C H4 = C3D2E1F0 + D8FDF6AD = 9CD0D89D Kết quả thu được: A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D 19 CHƯƠNG 3 TRIỂN KHAI HÀM BĂM SHA-1 VÀ CRACK BẰNG GIẢI THUẬT BRUTE- FORCE ATTACK 3.1 Chương trình thuật toán SHA-1(Code) Nhồi dữ liệu và thêm độ dài cho đoạn text cần băm: public static String padding(String message) { int dodai = message.length(); int tg = dodai; String KetQua... big-eadian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) và có 2 bộ đệm Năm thanh ghi của bộ đệm đầu tiên được đặt tên là A, B, C, D, E và tương tự cho bộ đệm thứ hai là H0, H1, H2, H3, H4 Có giá trị như sau (theo dạng Hex): H0 = 67452301 H1 = EFCDAB89 H2 = 98BADCFE H3 = 103258476 H4 = C3D2E1F0 Bước 4 Xử lý các khối dữ liệu 512 bit: • • Trọng tâm của giải thuật bao gồm 4 vòng lặp thực