Cùng với xu thế chung của đất nước, cũng là yêu cầu đặt ra với chính công việc của mình, học viên đã chọn đề tài về an toàn thông tin, mà ở đây cụ thể là áp dụng các thuật toán mã hóa kh
Trang 1ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CNTT & TT THÁI NGUYÊN
Trương Mạnh Cường
LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH
NGHIÊN CỨU CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG KHAI VÀ ỨNG DỤNG TRONG CHỮ KÝ ĐIỆN TỬ
Chuyên ngành: KHOA HỌC MÁY TÍNH
Mã số: 60 48 01
THÁI NGUYÊN - 2014
Trang 2ĐẠI HỌC THÁI NGUYÊN
TRƯỜNG ĐẠI HỌC CNTT & TT THÁI NGUYÊN
Trương Mạnh Cường
LUẬN VĂN THẠC SỸ KHOA HỌC MÁY TÍNH
NGHIÊN CỨU CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG KHAI VÀ ỨNG DỤNG TRONG CHỮ KÝ ĐIỆN TỬ
GIÁO VIÊN HƯỚNG DẪN PGS.TS BÙI THẾ HỒNG
THÁI NGUYÊN - 2014
Trang 3MỤC LỤC
DANH MỤC CÁC CHỮ TIẾNG ANH VIẾT TẮT 5
DANH MỤC CÁC HÌNH 6
MỞ ĐẦU 7
1 Lý do nghiên cứu đề tài 7
7
8
8
8
CHƯƠNG 1 TỔNG QUAN VỀ CÁC THUẬT TOÁN MÃ HÓA KHÓA CÔNG KHAI 9
1.1 Khái niệm mã hóa khóa công khai 9
1.1.1 Mật mã hóa khóa đối xứng 9
1.1.2 Mật mã hóa khóa công khai 9
1.2 Các thuật toán mật mã hóa khóa công khai 13
1.2.1 Thuật toán RSA 13
1.2.2 Trao đổi và thỏa thuận khóa Diffie-Hellman 17
1.2.3 Hệ mã ElGammal 19
1.3 So sánh ưu nhược điểm của các thuật toán 21
1.3.1 Ưu điểm 21
1.3.2 Hạn chế 22
CHƯƠNG 2: HÀM BĂM VÀ CHỮ KÝ ĐIỆN TỬ 24
2.1 Hàm băm 24
2.1.1 Tổng quan về hàm băm 24
2.1.2 Một số hàm băm được sử dụng phổ biến 29
2.1.2.1 Họ hàm băm SHA (Secure Hash Algorithm) 29
2.1.2.2 Họ hàm băm MD (Message-Digest algorithm) 32
2.2 Chữ ký điện tử 39
2.2.1 Tổng quan về chữ ký điện tử 39
2.2.2 Định nghĩa chữ ký điện tử 42
Trang 42.2.3 Một số qui ước trong chữ ký điện tử 43
2.3 Những vấn đề trao đổi cặp khóa đặt ra trong thực tế 44
2.3.1 Sự tương tự với bưu chính 44
2.3.2 Mối quan hệ giữa khóa công khai với thực thể sở hữu khóa 47 2.3.3 Các vấn đề liên quan tới thời gian thực 47
CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG 52
3.1 Phát triển ứng dụng 52
3.1.1 Sơ đồ hệ thống và chức năng của ứng dụng 52
3.1.1.1 Sơ đồ hệ thống 52
3.1.1.2 Chức năng của ứng dụng 53
3.1.2 Phân tích ứng dụng 54
3.1.2.1 Tạo khóa công khai và bí mật bằng thuật toán RSA 54
3.1.2.2 Băm dữ liệu bằng hàm băm MD5 54
3.1.3.3 Mã hóa giá trị băm bằng khóa bí mật 54
3.1.4.4 Giải mã bằng khóa công khai và kiểm tra tính toàn vẹn của văn bản 54
3.2 Cài đặt ứng dụng 55
3.2.1 Giới thiệu chương trình 55
3.2.2 Một số giao diện chính trong chương trình 55
3.2.2.1 Giao diện chương trình 55
3.2.2.2 Tạo file khóa công khai và bí mật, lưu file khóa 56
3.2.2.3 Lựa chọn văn bản 56
3.2.2.4 Ký văn bản 57
3.2.2.5 Giải mã chữ ký 57
58
GIẢI THÍCH MỘT SỐ THUẬT NGỮ 59
TÀI LIỆU THAM KHẢO 60
Trang 5DANH MỤC CÁC CHỮ TIẾNG ANH VIẾT TẮT NIST National Institute of Standards and Technology
RSA R Rivest, A Shamir, L Adleman
MITM Man-In-The-Middle attack
MD Message-Digest algorithm
SHA Secure Hash Algorithm
MAC Message Authentication Code
PKCS Public Key Cryptography Standards
Trang 6DANH MỤC CÁC HÌNH
4 Hình 2.3: Mô hình xác minh chữ ký, kiểm tra tính toàn
10 Hình 3.5: Giao diện ký văn bản đã lựa chọn bằng khóa
11 Hình 3.6: Giao diện giải mã văn bản đã ký bằng khóa
Trang 7MỞ ĐẦU
1 Lý do nghiên cứu đề tài
Bảo mật thông tin luôn là nhu cầu cần thiết trong các lĩnh vực tình báo, quân sự, ngoại giao, thông tin thương mại Bảo mật thông tin cũng
là một vấn đề đã được nghiên cứu từ xưa đến nay
Bảo mật thông tin là duy trì tính bảo mật, tính toàn vẹn, tính sẵn sàng Tính bảo mật là đảm bảo thông tin chỉ được tiếp cận bởi những người được cấp quyền trao đổi thông tin Tính toàn vẹn của thông tin là bảo vệ sự chính xác, hoàn chỉnh của thông tin và thông tin chỉ được thay đổi bởi những người được cấp quyền Tính sẵn sàng của thông tin là những người được quyền sử dụng có thể truy xuất thông tin khi họ cần Để đảm bảo được các yêu cầu về thông tin trên thì rất nhiều người trong nước và thế giới đang tập trung nghiên cứu và tìm mọi giải pháp để đảm bảo an toàn, an ninh cho các giao dịch điện tử trên máy tính
Giao dịch điện tử ở Việt Nam hiện nay đã và đang được quan tâm Những giao dịch điện tử xuất hiện cùng với sự phổ dụng của máy tính và mạng Internet Đã có những luật, văn bản dưới luật cho lĩnh vực an toàn thông tin trong giao dịch điện tử như: Quốc hội thông qua luật thương mại, luật giao dịch điện tử Thủ tướng Chính phủ đã ban hành Quyết định số 1073/QĐ-TTg ngày 12/7/2010 phê duyệt kế hoạch tổng thể phát triển thương mại điện tử giai đoạn 2010 – 2015
Cùng với xu thế chung của đất nước, cũng là yêu cầu đặt ra với chính công việc của mình, học viên đã chọn đề tài về an toàn thông tin, mà ở đây
cụ thể là áp dụng các thuật toán mã hóa khóa công khai, hàm băm, chữ ký điện tử, làm mục tiêu nghiên cứu Mong muốn những tìm tòi của mình có thể xây dựng được ứng dụng phục vụ cho cơ quan, đơn vị nơi học viên công tác
2
Nghiên cứu các giải thuật mã hóa khóa công khai
Nghiên cứu về chữ ký điện tử, tìm hiểu về hàm băm và các giải thuật
về hàm băm
Trang 8Cài đặt thử nghiệm một giải thuật sinh chữ ký điện tử
Một số thuật toán sinh khóa công khai, khóa bí mật;
Một số hàm băm thường sử dụng hiện nay;
Chữ ký điện tử
4 Ph
Tìm hiểu dựa trên cơ sở lý thuyết, các thuật toán hay về sinh khóa công khai, khóa bí mật đã có từ trước So sánh để thấy những ưu điểm, những hạn chế của từng thuật toán
Từ cơ sở đó có thể cải tiến, hoặc triển khai ứng dụng cài đặt một giải thuật tối ưu nhất vào thực tiễn
Trong quá trình triển khai ứng dụng nêu lên những hạn chế của
đề tài và những khó khăn trong thực hiện đề tài
Đề xuất hướng phát triển của đề tài trong thời gian tới
ăn
Ngoài phần mở đầu và kết luận đề tài có cơ cấu gồm 3 chương:
Chương 1 : Tổng quan về các thuật toán mã hóa khóa công khai
Chương 2: Hàm băm và chữ ký điện tử
Chương 3: Xây dựng ứng dụng
Trang 9CHƯƠNG 1 TỔNG QUAN VỀ CÁC THUẬT TOÁN
MÃ HÓA KHÓA CÔNG KHAI 1.1 Khái niệm mã hóa khóa công khai
1.1.1 Mật mã hóa khóa đối xứng
Trong mật mã học, các thuật toán khóa đối xứng (symmetric key algorithms) là một lớp các thuật toán mật mã hóa trong đó các khóa dùng cho việc mật mã hóa và giải mã có quan hệ rõ ràng với nhau (có thể dễ dàng tìm được một khóa nếu biết khóa kia)
Khóa dùng để mã hóa có liên hệ một cách rõ ràng với khóa dùng để giải mã có nghĩa chúng có thể hoàn toàn giống nhau, hoặc chỉ khác nhau nhờ một biến đổi đơn giản giữa hai khóa Trên thực tế, các khóa này đại diện cho một bí mật được phân hưởng bởi hai bên hoặc nhiều hơn và được sử dụng để giữ gìn sự bí mật trong kênh truyền thông tin
Thuật toán đối xứng có thể được chia ra làm hai thể loại, mật mã luồng (stream ciphers) và mật mã khối (block ciphers) Mật mã luồng mã hóa từng bit của thông điệp trong khi mật mã khối gộp một số bit lại và mật
mã hóa chúng như một đơn vị Cỡ khối được dùng thường là các khối 64 bit Những thuật toán mã hóa khóa đối xứng nổi tiếng là DES và AES
Các thuật toán đối xứng thường không được sử dụng độc lập Trong thiết kế của các hệ thống mật mã hiện đại, cả hai kiểu mật hóa khóa đối xứng
và khóa bất đối xứng thường được sử dụng phối hợp để tận dụng các ưu điểm của chúng
1.1.2 Mật mã hóa khóa công khai
Là một dạng mật mã hóa cho phép người sử dụng trao đổi các thông tin mật mà không cần phải trao đổi các khóa chung bí mật trước đó Điều này được thực hiện bằng cách sử dụng một cặp khóa có quan hệ toán học với nhau là khóa công khai và khóa cá nhân (hay khóa bí mật)
Thuật ngữ "mật mã hóa khóa bất đối xứng" thường được dùng đồng nghĩa với "mật mã hóa khóa công khai" mặc dù hai khái niệm không hoàn toàn tương đương Có những thuật toán mật mã khóa bất đối xứng không có
Trang 10tính chất khóa công khai và bí mật như đề cập ở trên mà cả hai khóa (cho mã hóa và giải mã) đều cần phải giữ bí mật
Trong mật mã hóa khóa công khai, khóa cá nhân phải được giữ bí mật trong khi khóa công khai được phổ biến công khai Trong 2 khóa, một dùng
để mã hóa và khóa còn lại dùng để giải mã Điều quan trọng đối với hệ thống
là không thể tìm ra khóa bí mật nếu chỉ biết khóa công khai
Hệ thống mật mã hóa khóa công khai có thể sử dụng với các mục đích:
Mã hóa: giữ bí mật thông tin và chỉ có người có khóa bí mật mới giải
mã được
Tạo chữ ký số: cho phép kiểm tra một văn bản có phải đã được tạo
với một khóa bí mật nào đó hay không
Thỏa thuận khóa: cho phép thiết lập khóa dùng để trao đổi thông tin
mật giữa 2 bên
Thông thường, các kỹ thuật mật mã hóa khóa công khai đòi hỏi khối lượng tính toán nhiều hơn các kỹ thuật mã hóa khóa đối xứng nhưng những lợi điểm mà chúng mang lại khiến cho chúng được áp dụng trong nhiều ứng dụng
Có thể hình dung hệ mật này tương tự như sau A đặt một vật vào một hộp kim loại và rồi khoá nó lại bằng một khoá số do B để lại Chỉ có B là người duy nhất có thể mở được hộp vì chỉ có người đó mới biết tổ hợp mã của khoá số của mình
Thuật toán mã hóa công khai là thuật toán được thiết kế sao cho khóa
mã hóa là khác so với khóa giải mã Mà khóa giải mã hóa không thể tính toán được từ khóa mã hóa Khóa mã hóa gọi là khóa công khai (public key), khóa giải mã được gọi là khóa riêng (private key)
Trang 11Hình 1.1: Kênh liên lạc
Đặc trưng nổi bật của hệ mã hóa công khai là cả khóa công khai (public key) và bản tin mã hóa (ciphertext) đều có thể gửi đi trên một kênh thông tin không an toàn
Trong hầu hết lịch sử mật mã học, khóa dùng trong các quá trình mã hóa và giải mã phải được giữ bí mật và cần được trao đổi bằng một phương pháp an toàn khác (không dùng mật mã) như gặp nhau trực tiếp hay thông qua một người đưa thư tin cậy Vì vậy quá trình phân phối khóa trong thực tế gặp rất nhiều khó khăn, đặc biệt là khi số lượng người sử dụng rất lớn Mật
mã hóa khóa công khai đã giải quyết được vấn đề này vì nó cho phép người dùng gửi thông tin mật trên đường truyền không an toàn mà không cần thỏa thuận khóa từ trước
Năm 1874, William Stanley Jevons xuất bản một cuốn sách mô tả mối quan hệ giữa các hàm một chiều với mật mã học đồng thời đi sâu vào bài toán phân tích ra thừa số nguyên tố (sử dụng trong thuật toán RSA) Tháng 7 năm 1996, một nhà nghiên cứu đã bình luận về cuốn sách trên như sau:
Trong cuốn The Principles of Science: A Treatise on Logic and
Scientific Method được xuất bản năm 1890, William S Jevons đã phát hiện
nhiều phép toán rất dễ thực hiện theo một chiều nhưng rất khó theo chiều ngược lại Một ví dụ đã chứng tỏ mã hóa rất dễ dàng trong khi giải mã thì không Vẫn trong phần nói trên ở chương 7 (Giới thiệu về phép tính ngược) tác giả đề cập đến nguyên lý: ta có thể dễ dàng nhân các số tự nhiên nhưng
Khóa giải mã
Khóa mã hóa
Oscar
Trang 12phân tích kết quả ra thừa số nguyên tố thì không hề đơn giản Đây chính là nguyên tắc cơ bản của thuật toán mật mã hóa khóa công khai RSA mặc dù tác giả không phải là người phát minh ra mật mã hóa khóa công khai
Thuật toán mật mã hóa khóa công khai được thiết kế đầu tiên bởi James H Ellis, Clifford Cocks, và Malcolm Williamson tại GCHQ (Anh) vào đầu thập kỷ 1970 Thuật toán sau này được phát triển và biết đến dưới tên Diffie-Hellman, và là một trường hợp đặc biệt của RSA Tuy nhiên những thông tin này chỉ được tiết lộ vào năm 1997
Năm 1976, Whitfield Diffie và Martin Hellman công bố một hệ thống mật mã hóa khóa bất đối xứng trong đó nêu ra phương pháp trao đổi khóa công khai Công trình này chịu sự ảnh hưởng từ xuất bản trước đó của Ralph Merkle về phân phối khóa công khai Trao đổi khóa Diffie-Hellman là phương pháp có thể áp dụng trên thực tế đầu tiên để phân phối khóa bí mật thông qua một kênh thông tin không an toàn Kỹ thuật thỏa thuận khóa của Merkle có tên là hệ thống câu đố Merkle
Thuật toán đầu tiên cũng được Rivest, Shamir và Adleman tìm ra vào năm 1977 tại MIT Công trình này được công bố vào năm 1978 và thuật toán được đặt tên là RSA RSA sử dụng phép toán tính hàm mũ môđun (môđun được tính bằng tích số của 2 số nguyên tố lớn) để mã hóa và giải mã cũng như tạo chữ ký số An toàn của thuật toán được đảm bảo với điều kiện là không tồn tại kỹ thuật hiệu quả để phân tích một số rất lớn thành thừa số nguyên tố
Kể từ thập kỷ 1970, đã có rất nhiều thuật toán mã hóa, tạo chữ ký số, thỏa thuận khóa được phát triển Các thuật toán như ElGamal (mật mã) do Netscape phát triển hay DSA do NSA và NIST cũng dựa trên các bài toán lôgarit rời rạc tương tự như RSA Vào giữa thập kỷ 1980, Neal Koblitz bắt đầu cho một dòng thuật toán mới: mật mã đường cong elliptic và cũng tạo ra nhiều thuật toán tương tự Mặc dù cơ sở toán học của dòng thuật toán này phức tạp hơn nhưng lại giúp làm giảm khối lượng tính toán đặc biệt khi khóa
có độ dài lớn
Trang 13Vấn đề về độ an toàn của thuật toán mật mã hóa khóa công khai
Về khía cạnh an toàn, các thuật toán mật mã hóa khóa bất đối xứng cũng không khác nhiều với các thuật toán mã hóa khóa đối xứng Có những thuật toán được dùng rộng rãi, có thuật toán chủ yếu trên lý thuyết; có thuật toán vẫn được xem là an toàn, có thuật toán đã bị phá vỡ Cũng cần lưu ý là những thuật toán được dùng rộng rãi không phải lúc nào cũng đảm bảo an toàn Một số thuật toán có những chứng minh về độ an toàn với những tiêu chuẩn khác nhau Nhiều chứng minh gắn việc phá vỡ thuật toán với những bài toán nổi tiếng vẫn được cho là không có lời giải trong thời gian đa thức (Xem thêm: Lý thuyết độ phức tạp tính toán) Nhìn chung, chưa có thuật toán nào được chứng minh là an toàn tuyệt đối (như hệ thống mật mã sử dụng một lần) Vì vậy, cũng giống như tất cả các thuật toán mật mã nói chung, các thuật toán mã hóa khóa công khai cần phải được sử dụng một cách thận trọng
1.2 Các thuật toán mật mã hóa khóa công khai
1.2.1 Thuật toán RSA
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại Học viện Công nghệ Massachusetts (MIT) Tên
của thuật toán lấy từ 3 chữ cái đầu của tên 3 tác giả
Thuật toán RSA có hai khóa: khóa công khai (hay khóa công cộng) và khóa bí mật (hay khóa cá nhân) Mỗi khóa là những số cố định sử dụng trong quá trình mã hóa và giải mã Khóa công khai được công bố rộng rãi cho mọi người và được dùng để mã hóa Những thông tin được mã hóa bằng khóa công khai chỉ có thể được giải mã bằng khóa bí mật tương ứng Nói cách khác, mọi người đều có thể mã hóa nhưng chỉ có người biết khóa cá nhân (bí mật) mới có thể giải mã được
Ta có thể mô phỏng trực quan một hệ mật mã hóa khoá công khai như sau: giả sử B muốn gửi cho A một thông tin mật mà B muốn duy nhất A có thể đọc được Để làm được điều này, A gửi cho B một chiếc hộp có khóa đã
mở sẵn và giữ lại chìa khóa B nhận chiếc hộp, cho vào đó một tờ giấy viết
Trang 14thư bình thường và khóa lại (như loại khoá thông thường chỉ cần sập chốt lại, sau khi sập chốt khóa ngay cả B cũng không thể mở lại được, không đọc lại hay sửa thông tin trong thư được nữa) Sau đó B gửi chiếc hộp lại cho A và
A mở hộp với chìa khóa của mình và đọc thông tin trong thư Trong ví dụ này, chiếc hộp với khóa mở đóng vai trò khóa công khai, chiếc chìa khóa chính là khóa bí mật
Tạo khóa
Giả sử A và B cần trao đổi thông tin bí mật thông qua một kênh không
an toàn (ví dụ như Internet) Với thuật toán RSA, A đầu tiên cần tạo ra cho mình cặp khóa gồm khóa công khai và khóa bí mật theo các bước sau:
1 Chọn 2 số nguyên tố lớn và với , lựa chọn ngẫu nhiên và độc lập
o Bước 5 có thể viết cách khác: Tìm số tự nhiên sao cho
cũng là số tự nhiên Khi đó sử dụng giá trị
Từ bước 3, sử dụng
thay cho
Khóa công khai bao gồm:
n – môđun và e - số mũ công khai (cũng gọi là số mũ mã hóa)
Khóa bí mật bao gồm:
n – môđun và d - số mũ bí mật (cũng gọi là số mũ giải mã)
Trang 15A nhận c từ B và tính được m từ c theo công thức sau:
Biết m, A tìm lại M theo phương pháp đã thỏa thuận trước Quá trình
Trang 16
Ví dụ tạo khóa công khai và khóa bí mật:
Sau đây là một ví dụ với những số cụ thể Ở đây chúng ta sử dụng những số nhỏ để tiện tính toán còn trong thực tế phải dùng các số có giá trị
6 In khoá công khai KU={7,187}
7 Giữ khoá riêng bí mật KR={23,187}
8 Hủy bỏ các giá trị bí mật p = 17 và q = 11
Ví dụ mã hóa, giải mã dựa trên cặp khóa công khai, bí mật:
Cho mẩu tin M = 88 (vậy 88<187)
Mã C = 887 mod 187 = 11
Giải mã M = 1123 mod 187 = 88
Có thể dùng định lý phần dư Trung Hoa để giải mã cho nhanh như sau:
a Tính 1123 mod 11 = 0
b Tính 1123mod 17 = (-6)23 mod 17 = (-6)16(-6)4 (-6)2 (-6)mod 17 = 3
Vì (-6)2 mod 17 = 2, nên (-6)4 mod 17 = 4, (-6)8 mod 17 = -1 (-6)16 mod 17 = 1
c 11-1 mod 17 = (-6)-1 mod 17 = 14 nên c2 = 11(11-1 mod 17) = 11 (14 mod 17) = 154
Trang 17Vậy M = (3.154) mod 187 = 462 mod 187 = 88
Độ an toàn của thuật toán RSA
Độ an toàn của thuật toán RSA dựa vào độ khó giải của việc tính Ф(N) và điều này đòi hỏi chúng ta cần phân tích N ra thừa số nguyên tố Thuật toán phân tích số nguyên tố hiệu quả nhất hiện nay là Berent-Pollard, chúng ta hãy xem bảng thống kê sau để thấy được tốc độ hoạt động của nó:
Số chữ số trong hệ thập phân của N Số các thao tác bit để phân tích N
Trên thực tế việc để cài đặt RSA cần phải thực hiện các thao tác modulo với các số 300 chữ số (hay 1024 bit) mà hiện nay các máy tính mới chỉ thao tác với các số nguyên 128 bit, điều này dẫn đến nhu cầu về các thư viện số học nhân chính xác để làm việc với các số nguyên lớn này Ngoài ra việc sử dụng RSA cần tới các số nguyên tố lớn nên chúng ta cũng phải có một cơ sở dữ liệu các số nguyên tố
1.2.2 Trao đổi và thỏa thuận khóa Diffie-Hellman
Thuật toán thỏa thuận khóa Diffie-Hellman là một thuật toán dùng để trao đổi khóa chứ không dùng để mật mã hóa dữ liệu Tuy nhiên Diffie-
Hellman lại có ích trong giai đoạn trao đổi khóa bí mật của các thuật toán
mật mã đối xứng Thuật toán thỏa thuận khóa Diffie-Hellman thúc đẩy việc nghiên cứu đề xuất các mã khoá công khai, một trong những vấn đề quan
Trang 18trọng liên quan trực tiếp đến tính an toàn của các thuật toán mật mã đối xứng là vấn đề thống nhất khoá bí mật giữa các thực thể thông tin
Giả sử A và B muốn liên lạc sử dụng hệ mật khoá bí mật Để thoả thuận mật khoá K chung cho cả hai bên qua một kênh không an toàn mà không ai khác có thể biết được, A và B có thể dùng thủ tục thoả thuận khoá Diffie -Hellman sau:
Thuật toán:
Khởi tạo Diffie Hellman
Mọi người dùng thỏa thuận dùng tham số chung:
o Số nguyên tố rất lớn q hoặc đa thức
o α là căn nguyên tố của mod q
Mỗi người dùng (A chẳng hạn) tạo khoá của mình:
o Chọn một khoá mật (số) của A: xA < q
o Tính khoá công khai của A: yA = αxA mod q
o Mỗi người dùng thông báo công khai khoá của mình yA
Trao đổi khoá Diffie Hellman
Khoá phiên dùng chung cho hai người sử dụng A, B là KAB
KAB = αxA.xB mod q
= yAxB mod q (mà B có thể tính)
= yBxA mod q (mà A có thể tính)
KAB được sử dụng như khoá phiên trong sơ đồ khoá riêng giữa A và B
A và B lần lượt trao đổi với nhau, họ có khoá chung KAB cho đến khi họ
Trang 19A chọn xA=97, B chọn xB=233
• Tính các khoá công khai:
yA=397 mod 353 = 40 (A)
yB=3233 mod 353 = 248 (B)
• Tính khoá phiên chung:
KAB= yBxA mod 353 = 24897 = 160 (A)
KAB= yAxB mod 353 = 40233 = 160 (B)
Thuật toán:
Ban đầu chọn một số nguyên tố lớn p và hai số nguyên tùy ý nhỏ hơn
p là a (a là một phần tử nguyên thủy của Z*
p) và x (x là của người nhận, bí mật), sau đó tính:
y = ax mod p
Để mã hóa một thông điệp M (là một số nguyên trên Zp) thành bản mã
C người gửi chọn một số ngẫu nhiên k nhỏ hơn p và tính khóa mã K:
K = yk mod p
Sau đó tính cặp bản mã:
C1 = ak mod p
.C2 = K.M mod p
Và gửi bản mã C = (C1,C2) đi (lưu ý là sau đó k sẽ bị hủy)
Để giải mã thông điệp đầu tiên ta cần tính lại khóa mã hóa thông điệp K:
Trang 20K = C1
x
mod p = akx mod p Sau đó tính M bằng cách giải phương trình sau:
- Tìm khóa của hệ mã này
- Mã hóa bản rõ M = 3 với k được chọn bằng 36
Vậy bản mã thu được là C = (50,31)
Vấn đề đối với hệ mã công khai nói chung và ElGammal nói riêng là tốc độ (do phải làm việc với số nguyên lớn), bên cạnh đó dung lượng bộ nhớ dành cho việc lưu trữ các khóa cũng lớn Với hệ mã ElGammal chúng ta cần gấp đôi bộ nhớ để chứa bản mã so với các hệ mã khác Ngoài ra do việc sử dụng các số nguyên tố nên việc sinh khóa và quản lý khóa cũng khó khăn hơn so với các hệ mã khối Trên thực tế các hệ mã khóa công khai thường được sử dụng kết hợp với các hệ mã khối (mã hóa khóa của hệ mã) hoặc để
mã hóa các thông tin có dung lượng nhỏ và là một phần quan trọng của một phiên truyền tin nào đó
Thám mã với hệ mã ElGmamal:
Để thực hiện thám mã hệ mã ElGammal chúng ta cần giải bài toán logarit rời rạc Ở đây chúng ta sẽ xem xét thuật toán có thể áp dụng để giải bài toán này
Thuật toán Shank:
Trang 21Thuật toán này còn có tên gọi khác là thuật toán cân bằng thời gian –
bộ nhớ (time – memory trade off), có nghĩa là nếu chúng ta có đủ bộ nhớ thì
có thể sử dụng bộ nhớ đó để giảm thời gian thực hiện của thuật toán xuống
Input: số nguyên tố p, phần tử nguyên thủy a của Zp*, số nguyên y Output: tìm x sao cho ax mod p = y
Thuật toán:
Gọi m = [(p-1)1/2] (lấy phần nguyên)
Bước 1: tính amj
mod p với 0 <= j <= m-1 Bước 2: sắp xếp các cặp (j, amj
mod p) theo amj mod p và lưu vào danh sách L1
Bước 3: tính ya-I
mod p với 0 <= I <= m-1 Bước 4: sắp xếp các cặp (i, ya-i
mod p) theo amj mod p và lưu vào danh sách L2
Bước 5: tìm trong 2 danh sách L1, L2 xem có tồn tại cặp (j, a-i mod p)
và (i, ya-i mod p) nào mà amj mod p = ya-I mod p (tọa độ thứ hai của cặp bằng nhau)
Bước 6: x = (mj + i) mod (p - 1) Kết quả này có thể kiểm chứng từ công thức amj
mod p = ya-i mod p => amj + i mod p = y mod p => x = (mj + i) mod (p - 1)
Độ phức tạp của thuật toán phụ thuộc vào m = [(p-1)1/2], với giá trị của m, chúng ta cần tính các phần tử thuộc hai danh sách L1, L2 đều là các phép toán lũy thừa phụ thuộc vào j và i, i và j lại phụ thuộc vào m nên có thể nhận thấy là thuật toán này chỉ có thể áp dụng trong trường hợp mà p nhỏ
1.3 So sánh ƣu nhƣợc điểm của các thuật toán
1.3.1 Ưu điểm
- Thuật toán RSA: Thực tế triển khai cho đến nay chứng tỏ rằng hệ
mã RSA là rất an toàn Độ an toàn của hệ thống RSA dựa trên 2 vấn đề của toán học: bài toán phân tích ra thừa số nguyên tố các số nguyên lớn và bài toán RSA Nếu 2 bài toán trên là khó (không tìm được thuật toán hiệu quả để giải chúng) thì không thể thực hiện được việc phá mã toàn bộ đối với RSA
Trang 22Phá mã một phần phải được ngăn chặn bằng các phương pháp chuyển đổi bản rõ an toàn
- Thuật toán Diffie-Hellman: Có ích trong giai đoạn trao đổi khóa bí
mật của các thuật toán mật mã đối xứng Tính an toàn trong trao đổi khóa dựa trên việc khó giải của bài toán logarit rời rạc, Tuy nhiên, thuật toán này không ngăn chặn được các tấn công theo phương thức người xen giữa Man-In-The-Middle (MITM) Có thể hiểu nôm na về kiểu tấn công này như là một kẻ nghe trộm MITM hoạt động bằng cách thiết lập các kết nối đến máy tính nạn nhân và lấy cắp các thông tin trao đổi giữa họ Trong trường hợp bị tấn công, nạn nhân cứ tin tưởng là họ đang truyền thông một cách trực tiếp với nạn nhân kia, trong khi đó sự thực thì các luồng truyền thông lại bị thông qua máy tính của kẻ tấn công Kết quả là các máy tính này không chỉ có thể giải mã được các dữ liệu nhạy cảm mà nó còn có thể gửi xen vào cũng như thay đổi luồng dữ liệu để kiểm soát sâu hơn những nạn nhân của nó
-
1.3.2 Hạn chế
- Hệ mã RSA có nhược điểm là mã hoá chậm, cho nên thường dùng để
mã hoá các bản tin ngắn, trao đổi chìa khoá của các hệ mã đối xứng, đặc biệt
Trang 23Nhận xét chung:
Kỹ thuật mật mã bất đối xứng hoàn toàn có thể đáp ứng được những yêu cầu về bảo mật hệ thống như trong kỹ thuật mật mã đối xứng, mặc dù tốc độ thực thi của mã bất đối xứng thường thấp hơn do bản chất thuật toán dựa trên các thao tác số học chứ không dựa trên các thao tác xử lý bit Hơn nữa, mã bất đối xứng chỉ phù hợp với việc thực thi bằng phần mềm
Mật mã bất đối xứng đảm bảo được 2 yêu cầu cơ bản của thông tin là tính bí mật và tính toàn vẹn
Trang 24CHƯƠNG 2: HÀM BĂM VÀ CHỮ KÝ ĐIỆN TỬ 2.1 Hàm băm
2.1.1 Tổng quan về hàm băm
Giới thiệu hàm băm
Hàm băm (hash function) là một giải thuật nhằm sinh ra các giá trị
băm tương ứng với mỗi khối dữ liệu (có thể là một chuỗi kí tự, một đối tượng trong lập trình hướng đối tượng, v.v ) Giá trị băm đóng vai gần như một khóa để phân biệt các khối dữ liệu, tuy nhiên, người ta chấp nhận hiện tượng trùng khóa hay còn gọi là đụng độ và cố gắng cải thiện giải thuật để giảm thiểu sự đụng độ đó
Hàm băm có nhiệm vụ băm thông điệp được đưa vào theo một thuật toán h một chiều nào đó, rồi đưa ra một giá trị băm, có kích thước cố định
Do đó người nhận không biết được nội dung hay độ dài ban đầu của thông điệp đã được băm bằng hàm băm
Giá trị của hàm băm là duy nhất, và không thể suy ngược lại được nội dung thông điệp từ giá trị băm này
Hình 2.1: Hoạt động của một hàm băm tiêu biểu
Các yêu cầu của hàm băm
Nén thông tin bất kỳ về kích thước cố định, và giả thiết hàm băm là công khai và không dùng khoá Hàm băm chỉ phụ thuộc thông tin
Hàm băm được sử dụng để phát hiện thay đổi của thông tin Hàm băm
có thể sử dụng nhiều cách khác nhau với thông tin, Hàm băm thường được kết hợp dùng để tạo chữ ký trên thông tin
Trang 25Có thể áp dụng cho mọi thông tin có kích thước tuỳ ý Tuy nhiên phải tạo đầu ra h có kích thước cố định, thường là 128 bit đến 1024 bit
Dễ tính h = H(M) cho mọi mẫu tin M, hàm H tính toán nhanh, hiệu quả phụ thuộc chặt vào thông tin M và không tính toán ngược lại
Cho trước h không thể tìm được (rất khó) x sao cho H(x) = h Tính chất này gọi là tính chất một chiều, chiều tìm nghịch ảnh rất khó khăn, tuy chiều tìm ảnh lại dễ dàng
Cho x không thể tìm được y sao cho H(y) = H(x) Đây là tính chất chống đỡ va chạm yếu, không tìm được thông điệp có cùng Hàm băm với thông tin đã cho; và không thể tìm được x, y sao cho H(y) = H(x) Đây gọi
là tính chất chống đỡ va chạm mạnh, đây là yêu cầu cao hơn tính chống đỡ
va chạm yếu
Đặc trƣng của hàm băm
Hàm băm h là hàm một chiều (one-way hàm băm) với các đặc tính:
- Với thông điệp đầu vào x thu được giá trị băm z = h(x) là duy nhất
- Nếu dữ liệu trong thông điệp x thay đổi để thành thông điệp x’ thì
h(x’) h(x) => Hai thông điệp hoàn toàn khác nhau thì giá trị hàm băm cũng
khác nhau
Nội dung của thông điệp gốc không thể bị suy ra từ giá trị hàm băm
=> Với thông điệp x thì dễ dàng tính được z = h(x), nhưng lại không thể (thực chất là khó) suy ngược lại được x nếu chỉ biết giá trị hàm băm h
Vai trò hàm băm trong mật mã hiện đại
Được dùng để xác thực tính nguyên vẹn dữ liệu;
Được dùng trong quá trình tạo chữ kí số trong giao dịch điện tử;
Vai trò cơ bản của các hàm băm mật mã là một giá trị băm coi như ảnh đại diện thu gọn, đôi khi gọi là một dấu vết (imprint), vân tay số (digital fingerprint), hoặc tóm lược thông báo (message digest) của một xâu đầu vào,
và có thể được dùng như là một định danh duy nhất với xâu đó;
Các hàm băm thường được dùng cho toàn vẹn dữ liệu kết hợp với các lược đồ chữ kí số;
Trang 26Một lớp các hàm băm riêng được gọi là mã xác thực thông báo (MAC) cho phép xác thực thông báo bằng các kĩ thuật mã đối xứng
Tính toàn vẹn của dữ liệu của hàm băm
Việc sử dụng các hệ mật mã và các sơ đồ chữ ký số, thường là mã hóa
và ký số trên từng bit của thông tin, sẽ tỷ lệ với thời gian để mã hóa và dung lượng của thông tin
Thêm vào đó có thể xảy ra trường hợp: Với nhiều bức thông điệp đầu vào khác nhau, sử dụng hệ mật mã, sơ đồ ký số giống nhau (có thể khác nhau) thì cho ra kết quả bản mã, bản ký số giống nhau (ánh xạ N-1: nhiều – một) Điều này sẽ dẫn đến một số rắc rối về sau cho việc xác thực thông tin
Với các sơ đồ ký số, chỉ cho phép ký các bức thông điệp (thông tin) có kích thước nhỏ và sau khi ký, bản ký số có kích thước gấp đôi bản thông điệp gốc Ví dụ: với sơ đồ chữ ký chuẩn DSS chỉ ký trên các bức thông điệp
có kích thước 160 bit, bản ký số sẽ có kích thước 320 bit
Trong khi đó trên thực tế, ta cần phải ký các thông điệp có kích thước lớn hơn nhiều, chẳng hạn vài chục MB Hơn nữa, dữ liệu truyền qua mạng không chỉ là bản thông điệp gốc, mà còn bao gồm cả bản ký số (có dung lượng gấp đôi dung lượng bản thông điệp gốc), để đáp ứng việc xác thực sau khi thông tin đến người nhận Một cách đơn giản để giải bài toán (với thông điệp có kích thước vài chục MB) này là chia thông điệp thành nhiều đoạn
160 bit, sau đó ký lên các đoạn đó độc lập nhau Nhưng biện pháp này có một số vấn đề trong việc tạo ra các chữ ký số:
- Thứ nhất: với một thông điệp có kích thước a, thì sau khi ký kích thước của chữ ký sẽ là 2a (trong trường hợp sử dụng DSS)
- Thứ hai: với các chữ ký “an toàn” thì tốc độ chậm vì chúng dùng nhiều phép tính số học phức tạp như số mũ modulo
- Thứ ba: vấn đề nghiêm trọng hơn đó là kết quả sau khi ký, nội dung của thông điệp có thể bị xáo trộn các đoạn với nhau, hoặc một số đoạn trong chúng có thể bị mất mát, trong khi người nhận cần phải xác minh lại thông điệp Ta cần phải bảo vệ tính toàn vẹn của thông điệp
Trang 27Giải pháp cho các vấn đề vướng mắc đến chữ ký số là dùng “hàm băm” để trợ giúp cho việc ký số Các thuật toán băm với đầu vào là các bức thông điệp có dung lượng, kích thước tùy ý (vài KB đến vài chục MB …) – các bức thông điệp có thể là dạng văn bản, hình ảnh, âm thanh, file ứng dụng v.v… - và với các thuật toán băm: MD2, MD4, MD5, SHA cho các giá trị băm đầu ra có kích thước cố định: 128 bit với dòng MD, 160 bit với SHA1 Như vậy, bức thông điệp kích thước tùy ý sau khi băm sẽ được thu gọn thành những giá trị băm (còn được gọi là các “văn bản đại diện” nó có kích thước
cố định (128 bit hoặc 160 bit) tùy từng hàm băm cụ thể)
Với mỗi thông điệp đầu vào chỉ có thể tính ra được một văn bản đại diện (shay giá trị băm) tương ứng, duy nhất Hai thông điệp khác nhau chắc chắn có hai văn bản đại diện khác nhau Khi đã có văn bản đại diện duy nhất cho bức thông điệp, áp dụng các sơ đồ chữ ký số ký trên văn bản đại diện đó
Ví dụ về tính toàn vẹn dữ liệu khi sử dụng hàm băm:
Giả sử A muốn gửi cho B thông điệp x A thực hiện các bước sau: (1) A băm thông điệp x, thu được bản đại diện z = h(x) – có kích thước cố định 128 bit hoặc 160 bit
(2) A ký số trên bản đại diện z, bằng khóa bí mật của mình, thu được bản ký số y = sig(z)
(3) A gửi (x, y) cho B
Trang 28Hình 2.2: Mô hình ký gửi thông điệp sử dụng hàm băm
Khi B nhận được (x, y) B thực hiện các bước sau:
(4) B kiểm tra chữ ký số để xác minh xem thông điệp mà mình nhận được có phải được gửi từ A hay không bằng cách giải mã chữ ký số y, bằng khóa công khai của A, được z’ B dùng một thuật toán băm – tương ứng với thuật toán băm mà A dùng – để băm thông điệp x đi kèm, nhận được h(x)’
(5) B so sánh 2 giá trị băm h(x)’ và h(x), nếu giống nhau thì chắc chắn rằng thông điệp x – mà A muốn gửi cho B – còn nguyên vẹn, bên cạnh đó cũng xác thực được người gửi
Trang 29Hình 2.3: Mô hình xác minh chữ ký, kiểm tra tính toàn vẹn của thông điệp
Hàm băm được ứng dụng rất mạnh trong vấn đề an toàn thông tin trên đường truyền Các ứng dụng có sử dụng hàm băm không chỉ đảm bảo về mặt
an toàn thông tin, mà còn tạo được lòng tin của người dùng vì họ có thể dễ dàng phát hiện được thông tin của mình có còn toàn vẹn hay không, họ biết rằng thông tin của mình chắc chắn được bí mật với phía các nhà cung cấp
2.1.2 Một số hàm băm được sử dụng phổ biến
2.1.2.1 Họ hàm băm SHA (Secure Hash Algorithm)
Hàm băm SHA-1
SHA có nguồn gốc từ Viện chuẩn công nghệ quốc gia Hoa kỳ - NIST
& NSA vào năm 1993, sau đó được nâng cấp vào 1995 theo chuẩn US và chuẩn là FIPS 180-1 1995 và Internet RFC3174, được nhắc đến như SHA-1
Nó được sử dụng với sơ đồ chữ ký điện tử DSA (Digital Signature Algorithm)
Trang 30Thuật toán là SHA dựa trên thiết kế MD4 với một số khác biệt tạo nên giá trị Hash 160 bit Các kết quả nghiên cứu 2005 về an toàn của SHA-1 đề xuất sử dụng nó trong tương lai
Mô tả thụât toán SHA-1
Đầu vào của thuật toán là một thông điệp có chiều dài bất kỳ nhỏ hơn
264 bit, SHA-1 cho ra kết quả là một thông điệp rút gọn có độ dài là 160 bit
Mở rộng thông điệp:
f(t;B,C,D) được định nghĩa như sau
f(t;B,C,D) = (B AND C) OR ((NOT B) AND D) (0≤t≤19)
f(t;B,C,D) = B XOR C XOR D (20≤t≤39) f(t;B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40≤t≤59)
f(t;B,C,D) = B XOR C XOR D (60≤t≤79) Thông điệp M được mở rộng trước khi thực hiện băm Mục đích của việc mở rộng này là để đảm bảo cho thông điệp mở rộng có độ dài là bội số của 512
Giả sử độ dài của thông điệp là l bit Thêm bit 1 vào cuối thông điệp, theo sau là k bit 0 (k là số dương không âm nhỏ nhất sao cho l+1+k=448 (mod512)) Sau đó thêm khối 64 bit là biểu diễn nhị phân của l
Phân tích thông điệp mở rộng:
Sau khi thông điệp đã được mở rộng, thông điệp mở rộng được phân tích thành N khối 512 bit M(1),M(2),…,M(N) Trong đó 512 bit của khối dữ liệu đầu vào có thể được thể hiện bằng 16 từ 32 bit,
Khởi tạo giá trị băm:
Giá trị băm là một chuỗi bit có kích thước bằng kích thước của thông điệp băm (trừ SHA-384) gồm các từ ghép lại Trong đó Hj(i)
là từ j trong giá trị băm ở lần lặp i với 0≤i≤N (số block có được sau khi chia văn bản được đệm) và 0≤j≤(số từ trong giá trị băm -1).Trước khi thực hiện giá trị băm, với mỗi thuật toán băm an toàn, giá trị băm ban đầu H(0) phải được thiết lập Kích thước và số lượng từ trong H(0) tuỳ thuộc vào kích thước thông điệp rút gọn
Trang 31SHA-1 sử dụng dãy các hằng số K(0),…K(79) có giá trị như sau: K(t) = 5A827999 ( 0 <= t <= 19)
K(t) = 6ED9EBA1 (20 <= t <= 39)
K(t) = 8F1BBCDC (40 <= t <= 59)
K(t) = CA62C1D6 (60 <= t <= 79)
Thuật toán của bứơc tính giá trị băm SHA-1
SHA-1 được sử dụng để băm thông điệp M có độ dài l bit thoả mãn điều kiện 0≤l≤264
Thuật toán sử dụng:
- Một bảng phân bố thông điệp gồm 80 từ 32 bit
- 5 biến 32 bit
- Một giá trị băm gồm 5 từ 32 bit
Kết quả của SHA-1 là một thông điệp rút gọn có độ dài 160 bit Các từ của bảng phân bố thông điệp được ký hiệu W(0),W(1),…,W(79) 5 biến được ký hiệu là a,b,c,d,e Các từ của giá trị băm ký hiệu H0
(i)
,H1 (i)
, H2 (i)
Tính toán thông điệp băm
Định nghĩa: S^n(X)=(X<<n) or (X>>32-n)
X<<n có nghĩa là loại bỏ từ trái sang phải n bit và thêm vào kết quả n
số 0 vào bên phải X>> có nghĩa là loại bỏ từ phải qua trái n bit và thêm vào kết quả n số 0 vào bên trái
Trang 32- Đặt H0 = H0 + a,H1 = H1 + b,H2 = H2 + c,H3 = H3 + d,H4 = H4+ e Sau khi tính toán được hết M(n), thông điệp rút gọn là một chuỗi 160
Đánh giá thuật toán
SHA-1 được xem là an toàn đối với hiện tượng đụng độ vì rất khó tìm được hai thông điệp khác nhau có giá trị băm giống nhau
SHA-1 được coi là chuẩn của việc bảo vệ các kênh liên lạc trực tuyến tồn tại trong 9 năm qua
SHA-1 được thiết kế cho bộ xử lý 32 bit, thế hệ sắp tới của máy tính dùng các bộ xử lý 64 bit mà SHA-1 không hiệu quả trên bộ xử lý này
Tháng 2 năm 2005 SHA-1 bị tấn công bời 3 chuyên gia người Trung Quốc Thuật toán này đã bị giải mã thông qua phương pháp tính phân bổ
2.1.2.2 Họ hàm băm MD (Message-Digest algorithm)
Hàm băm MD4
Mô tả sơ lược về thuật toán
Thuật toán MD4 nhận dữ liệu vào là một chuỗi bit x có chiều dài b 0 tuỳ ý và sinh ra chuỗi mã băm của x có chiều dài cố định 128 bit Trước tiên, chuỗi bit x được định dạng lại bằng cách thêm r >0 bit phụ vào sao cho chiều dài của chuỗi bit mới (sau khi thêm) b’=b+r là bội số của 512 Sau đó, ta chia chuỗi bit mới này thành m khối (block) mỗi khối có độ dài đúng bằng 512 bit (tức là b’=512*m) Mỗi khối bit này được chia thành một dãy gồm 16 từ, mỗi từ có 32 bit Thuật toán MD4 tuần tự xử lý dãy m khối trong m lược tính toán, với dữ liệu đầu vào tại lược tính thứ k (1 k m) là khối thứ k trong dãy
và mã băm nhận được sau (k-1) lược tính toán trước đó (mã băm đầu vào ứng với bước k=1 được khởi tạo từ trước) để sinh ra mã băm của lược tính toán thứ k tại bước tính toán thứ k khối dữ liệu đầu vào 512 bit (xem như là dãy gồm 16 từ) liên tiếp đi qua 3 loạt (round) tính toán, trong mỗi loạt gồm
có 16 bước, mỗi bước thực hiện tính toán với dữ liệu vào là một từ trong dãy
và kết quả nhận được từ bước trước Kết quả sau khi qua 3 loạt tính toán trên
sẽ được kết hợp với mã băm trước đó để sinh ra mã băm mới Sau khi đã xử
lý hết m khối mã băm nhận được sau cùng là kết quả ta cần tìm