Nguyên lý cơ bản của hệ thống mã hoá khoá đối xứng được chỉ ra trong hình 1 Có thể thấy rằng bản chất của mã hoá đối xứng là cả phía thu và phía phát đều sử dụngcùng một khoá bí mật SK,
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
_ _
BÀI THU HOẠCH MÔN HỌC
TOÁN CHO KHOA HỌC MÁY TÍNH
Trang 2TP HCM, 01/2014
MỤC LỤC
LỜI MỞ ĐẦU 1
I./ TỔNG QUAN VỀ MÃ HÓA 2
1./ KHÁI NIỆM MÃ HÓA 2
2./ CÁC THUẬT TOÁN MÃ HÓA 2
A./ MÃ HÓA ĐỐI XỨNG 2
B./ MÃ HOÁ BẤT ĐỐI XỨNG 3
C./ HỆ MÃ HÓA RSA 5
II./ TỔNG QUAN VỀ HÀM BĂM VÀ THUẬT TOÁN HÀM BĂM MD5 11
1./ GIỚI THIỆU HÀM BĂM MẬT MÃ 11
A./ TÍNH CHẤT 11
B./ ỨNG DỤNG 12
2./ HÀM BĂM DỰA TRÊN MÃ KHỐI 13
3./ CẤU TRÚC MERKLE-DAMGÅRD 14
4./ BIRTHDAY ATTACK 14
5./ HÀM BĂM MẬT MÃ 15
6./ CẤU TRÚC HÀM BĂM 15
7./ TÍNH AN TOÀN HÀM BĂM VÀ HIỆN TƯỢNG ĐỤNG ĐỘ 16
8./ TÍNH MỘT CHIỀU 16
9./ SỬ DỤNG CHO CÁC NGUYÊN THỦY MẬT MÃ 17
10./ GHÉP CÁC HÀM BĂM MẬT MÃ 17
11./ THUẬT TOÁN BĂM MẬT MÃ 18
12./ PHƯƠNG PHÁP SECURE HASH STANDARD 19
13./ MỘT SỐ HÀM BĂM NỔI TIẾNG 19
14./ HÀM BĂM MD5 19
A./ GIỚI THIỆU 19
B./ THUẬT GIẢI 20
C./ KHẢ NĂNG BỊ TẤN CÔNG 21
III./ XÂY DỰNG ỨNG DỤNG MÔ PHỎNG THUẬT TOÁN MD5 22
1./ MÃ GIẢ CHO THUẬT TOÁN MD5 22
2./ CHƯƠNG TRÌNH MINH HỌA 24
Trang 3A./ CÔNG CỤ & YÊU CẦU CÀI ĐẶT 24
B./ MINH HỌA CHƯƠNG TRÌNH 24
IV KẾT LUẬN 25
V./ TÀI LIỆU THAM KHẢO 26
LỜI MỞ ĐẦU
Ngày nay, các ứng dụng Công nghệ thông tin đã và đang ngày càng phổ biến rộng rãi đã ảnh hưởng rất lớn đến diện mạo của đời sống, kinh tế, xã hội Mọi công việc hàng ngày của chúng ta đều có thể thực hiện được từ xa với sự hổ trợ của máy vi tính và mạng internet (từ việc học tập, giao dịch,… đến việc gửi thư) Tất cả thông tin liên quan đến những công việc này đều do máy vi tính quản lý và truyền đi trên hệ thống mạng
Đối với những thông tin bình thường thì không có ai chú ý đến, nhưng đối với những thông tin mang tính chất sống còn đối với một số cá nhân (hay tổ chức) thì vấn đề bảo mật thật sự rất quan trọng, vấn đề khó khăn đặt ra là làm sao giữ được thông tin bí mật và giữ cho đến đúng được địa chỉ cần đến Nhiều tổ chức, cá nhân đã tìm kiếm và đưa ra nhiều giải pháp bảo mật phương pháp mã hóa khóa công khai được xem là phương pháp có tính an toàn khá cao
Như vậy việc đảm bảo an toàn thông tin, tránh mọi nguy cơ bị thay đổi, sao chép hoặc mất mát dữ liệu trong các ứng dụng trên mạng luôn là vấn đề bức xúc, được nhiều người quan tâm Trong bài thu hoạch này, em trình bày những vấn đề liên quan đến mã hóa thông tin, thuật toán mã hóa RSA, thuật toán băm MD5 Từ đó viết ứng dụng minh họa giải thuật MD5
Em xin chân thành cám ơn PGS.TS Đỗ Văn Nhơn, và các thầy cô trong trường Đại học CNTT- ĐHQG TP HCM cùng các bạn bè đã giúp em hoàn thành tốt môn học này
Trang 4I./ TỔNG QUAN VỀ MÃ HÓA:
1./ Khái niệm mã hóa:
Mã hoá là một tiến trình biến đổi thông tin, sử dụng các thuật toán nhằm mục đíchkhông cho người khác có thể nắm bắt được nếu thiếu một vốn thông số nhất định (key)
để dịch ngược Đi kèm với mã hoá là giải mã
Mã hóa là ngành khoa học nghiên cứu về giấu thông tin Cụ thể mã hóa là ngànhnghiên cứu cách chuyển đổi thông tin từ dạng "có thể hiểu được" thành dạng "không thểhiểu được" Mã hóa giúp đảm bảo các tính chất sau cho thông tin:
không thể chối bỏ việc đã gởi (hoặc nhận) thông tin
Có rất nhiều loại thuật toán mã hoá cho dữ liệu máy tính, chúng được gọi tên theothuật toán và có thể so sánh trực tiếp với nhau, ví dụ mã hoá 128-bit, Triple-DES, 2048-bit RSA
2./ Các thuật toán mã hóa:
a./ Mã hóa đối xứng:
Trang 5Mã hóa đối xứng sử dụng cùng một khóa cho việc mã hóa và giải mã Có thể nói
mã đối xứng là mã một khoá hay mã khóa riêng hay mã khoá thỏa thuận
Nguyên lý cơ bản của hệ thống mã hoá khoá đối xứng được chỉ ra trong (hình 1)
Có thể thấy rằng bản chất của mã hoá đối xứng là cả phía thu và phía phát đều sử dụngcùng một khoá bí mật (SK), và thuật toán ở cả hai phía cũng đều giống nhau Mã hoá đốixứng như trên dựa vào việc phân phối khoá một cách bảo mật giữa cả hai phía Nhưng
thực tế là khoá chung đó lại phân phối tới tất cả mọi người trong mạng, và vấn đề “kênh
bảo mật” đã làm đau đầu những nhà quản trị mạng Điều nguy hiểm nhất là bất cứ ai
chiếm được khoá trong quá trình phân phối cũng có toàn quyền truy nhập tới dữ liệu do
khoá đó bảo vệ Do đó, quá trình phân phối khoá phải trên “kênh bảo mật”, bất kể là kênh
logic hay kênh vật lý (hình 3)
Hình 2: Kênh nguyên lý trong hệ thống mã hoá đối xứng.
b./ Mã hoá bất đối xứng:
Ngược lại với mã hoá đối xứng, thuật toán bất đối xứng hoạt động theo ít nhất làhai khoá, hay chính xác hơn là một cặp khoá (hình 1) Khoá sử dụng được biết đến như là
khoá bí mật và khoá công khai và do đó có khái niệm mã hoá khoá công khai Mỗi khoá
được sử dụng để mã hoá hay giải mã, nhưng khác với thuật toán đối xứng, giá trị củakhoá ở mỗi phía là khác nhau
Trong hệ thống RSA, dữ liệu được mã hoá bằng khoá bí mật (KXu) và chỉ có thểgiải mã được bằng khoá công khai của cặp khoá đó Cặp khoá này được tạo ra cùng nhau
và do đó có liên quan trực tiếp với nhau Mặc dù có quan hệ với nhau nhưng nếu biết haytruy nhập được khoá công khai thì cũng không thể tính toán được giá trị của khoá bí mật
Trang 6Do đó, công khai khoá mã cũng không làm ảnh hưởng tới tính bảo mật của hệ thống, nócũng chỉ như một địa chỉ thư tín còn khoá bí mật vẫn luôn được giữ kín Bản chất của mãhoá khoá công khai RSA là bất cứ bản tin mật mã nào đều có thể được nhận thực nếu như
nó được mã hoá bằng khoá bí mật còn giải mã bằng khoá công khai Từ đó, phía thu cònxác định được cả nguồn gốc của bản tin Bất cứ người nào giữ khoá công khai đều có thểnghe trộm bản tin mật mã bằng cách tính toán với kho bí mật, không chỉ đảm bảo tính tin
cậy của bản tin (trong một nhóm) mà còn được nhận thực, hay còn gọi là không thể từ
chối, ví dụ như người gửi không thể từ chối rằng chính họ là tác giả của bản tin đó Nó
hoàn toàn trái ngược với hoạt động của khoá đối xứng, trong đó bản tin mật mã được đảmbảo tính toàn vẹn giữa phía mã hoá và giải mã, nhưng bất kỳ ai có được khoá chung đều
có thể phát bản tin và từ chối rằng chính mình đã phát nó, còn phía thu thì không thể biếtđược đâu là tác giả của bản tin đó Thuật toán đối xứng yêu cầu khả năng tính toán lớnhơn và do đó, tốc độ quá trình mã hoá chậm hơn so với mã hoá đối xứng Đó cũng là trởngại chính trong các hệ thống cho phép tỷ lệ lỗi lớn như trong truyền thông thoại Do đó,
mã hoá khoá công khai không phù hợp với các bản tin có chiều dài thông thường, tuynhiên khi kết hợp cả hai chế độ với nhau lại có thể đảm bảo tính nhận thực, tin cậy vàtoàn vẹn của bản tin Nói chung, các ứng dụng sử dụng thuật toán bất đối xứng là:
Sử dụng một giá trị “băm” nhỏ làm chữ ký điện tử
Mã hoá các khoá bí mật được sử dụng trong thuật toán đối xứng
Thỏa thuận khóa mã bí mật giữa các phía trong truyền thông
Trang 7c./ Hệ mã hóa RSA:
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vàonă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ả Hệ mã hoá này dựa trên cơ sở của hai bài toán
Bài toán Logarithm rời rạc (Discrete logarith)
Bài toán phân tích thành thừa số
Trong hệ mã hoá RSA các bản rõ, các bản mã và các khoá (public key và privatekey) thuộc tập số nguyên ZN = {1, , N-1} Trong đó tập ZN với N = p × q là các sốnguyên tố khác nhau cùng với phép cộng và phép nhân Modulo N tạo ra modulo số họcN
Khoá mã hoá EKB là cặp số nguyên (N, KB) và khoá giải mã Dkb là cặp số nguyên(N, kB), các số là rất lớn, số N có thể lên tới hàng trăm chữ số
Các phương pháp mã hoá và giải mã là rất dễ dàng
Công việc mã hoá là sự biến đổi bản rõ P (Plaintext) thành bản mã C (Ciphertext)dựa trên cặp khoá công khai KB và bản rõ P theo công thức sau đây:
Trang 8Trong toán học đã chứng minh được rằng, nếu N là số nguyên tố thì công thức (4)
sẽ có lời giải khi và chỉ khi KB.kB = 1 (mod N-1), áp dụng thuật toán ta thấy N = p × q với
p, q là số nguyên tố, do vậy (4) sẽ có lời giải khi và chỉ khi :
trong đó γ(N) = LCM(p-1, q-1)
LCM (Lest Common Multiple) là bội số chung nhỏ nhất
Nói một cách khác, đầu tiên người nhận B lựa chọn một khoá công khai KB mộtcách ngẫu nhiên Khi đó khoá bí mật kB được tính ra bằng công thức (5) Điều này hoàntoàn tính được vì khi B biết được cặp số nguyên tố (p, q) thì sẽ tính được γ(N)
Hình 4: Sơ
Độ 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ó
Trang 9(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 Phá mã một phần phải được ngăn chặn bằng các phương phápchuyển đổi bản rõ an toàn
Một nhận định chung là tất cả các cuộc tấn công giải mã đều mang mục đíchkhông tốt Trong phần độ an toàn của hệ mã hoá RSA sẽ đề cập đến một vài phương thứctấn công điển hình của kẻ địch nhằm giải mã trong thuật toán này
Chúng ta xét đến trường hợp khi kẻ địch nào đó biết được modulo N, khoá côngkhai KB và bản tin mã hoá C, khi đó kẻ địch sẽ tìm ra bản tin gốc (Plaintext) như thế nào
Để làm được điều đó kẻ địch thường tấn vào hệ thống mật mã bằng hai phương thức sauđây:
Phương thức thứ nhất:
Trước tiên dựa vào phân tích thừa số modulo N Tiếp theo sau chúng sẽ tìmcách tính toán ra hai số nguyên tố p và q, và có khả năng thành công khi đó sẽtính được λ(N) và khoá bí mật kB Ta thấy N cần phải là tích của hai số nguyên
tố, vì nếu N là tích của hai số nguyên tố thì thuật toán phân tích thừa số đơngiản cần tối đa √N bước, bởi vì có một số nguyên tố nhỏ hơn √N Mặt khác,nếu N là tích của n số nguyên tố, thì thuật toán phân tích thừa số đơn giản cầntối đa N1/n bước
Một thuật toán phân tích thừa số có thể thành phức tạp hơn, cho phép phântích một số N ra thành thừa số trong O(√P)bước, trong đó p là số chia nhỏ nhấtcủa N, việc chọn hai số nguyên tố là cho thuật toán tăng hiệu quả
Phương thức thứ hai:
Phương thức tấn công thứ hai vào hệ mã hoá RSA là có thể khởi đầu bằngcách giải quyết trường hợp thích hợp của bài toán logarit rời rạc Trường hợpnày kẻ địch đã có trong tay bản mã C và khoá công khai KB tức là có cặp(KB,C)
Cả hai phương thức tấn công đều cần một số bước cơ bản, đó là :
(exp√lnNln(lnN )) trong đó N là số modulo
Trang 10 Trong các hệ mật mã RSA, một bản tin có thể được mã hoá trong thời gian tuyến tính.
Đối với các bản tin dài, độ dài của các số được dùng cho các khoá có thểđược coi như là hằng Tương tự như vậy, nâng một số lên luỹ thừa được thực hiệntrong thời gian hằng, các số không được phép dài hơn một độ dài hằng Thực ratham số này che dấu nhiều chi tiết cài đặt có liên quan đến việc tính toán với cáccon số dài, chi phí của các phép toán thực sự là một yếu tố ngăn cản sự phổ biếnứng dụng của phương pháp này Phần quan trọng nhất của việc tính toán có liênquan đến việc mã hoá bản tin Nhưng chắc chắn là sẽ không có hệ mã hoá nào hếtnếu không tính ra được các khoá của chúng là các số lớn
toán quá nhiều
Một lần nữa, ta lại nói đến các phương pháp kiểm tra số nguyên tố Mỗi sốnguyên tố lớn có thể được phát sinh bằng cách đầu tiên tạo ra một số ngẫu nhiênlớn, sau đó kiểm tra các số kế tiếp cho tới khi tìm được một số nguyên tố.Mộtphương pháp đơn giản thực hiện một phép tính trên một con số ngấu nhiên, vớixác suất 1/2 sẽ chứng minh rằng số được kiểm tra không phải nguyên tố Bướccuối cùng là tính p dựa vào thuật toán Euclid
Như phần trên đã trình bày trong hệ mã hoá công khai thì khoá giải mã(private key) kB và các thừa số p,q là được giữ bí mật và sự thành công củaphương pháp là tuỳ thuộc vào kẻ địch có khả năng tìm ra được giá trị của kB haykhông nếu cho trước N và KB Rất khó có thể tìm ra được kB từ KB cần biết về p và
q, như vậy cần phân tích N ra thành thừa số để tính p và q Nhưng việc phân tích
ra thừa số là một việc làm tốn rất nhiều thời gian, với kỹ thuật hiện đại ngày naythì cần tới hàng triệu năm để phân tích một số có 200 chữ số ra thừa số
Độ an toàn của thuật toán RSA dựa trên cơ sở những khó khăn của việc xácđịnh các thừa số nguyên tố của một số lớn Bảng dưới đây cho biết các thời gian
dự đoán, giả sử rằng mỗi phép toán thực hiện trong một micro giây
Trang 11Tính chất an toàn của phương pháp RSA dựa trên cơ sở chi phí cho việc giải mãbất hợp lệ thông tin đã được mã hóa sẽ quá lớn nên xem như không thể thực hiện được.
Vì khóa là công cộng nên việc tấn công bẻ khóa phương pháp RSA thường dựavào khóa công cộng để xác định được khóa riêng tương ứng Điều quan trọng là dựa vào
n để tính p, q của n, từ đó tính được d
Giả sử người tấn công biết được giá trị φ(n) Khi đó việc xác định giá trị p,
q được đưa về việc giải hai phương trình sau:
ϕ(n) = (p - 1)(q - 1) (7)Thay q = n/p, ta được phương trình bậc hai:
p2 - (n - ϕ(n) + 1)p + n=0 (8)
p, q chính là hai nghiệm của phương trình bậc hai này Tuy nhiên vấn đề
phát hiện được giá trị ϕ(n) còn khó hơn việc xác định hai thừa số nguyên tố của
n
Simons và Norris: hệ thống RSA có thể bị tổn thương khi sử dụng tấncông lặp liên tiếp Nếu đối thủ biết cặp khóa công cộng {n, b} và từ khóa Cthì có thể tính chuỗi các từ khóa sau:
C1=Ce (mod n)
C2=C1e (mod n)
Trang 12Hệ thống RSA có đặc điểm là thông tin không phải luôn được che dấu.Giả sử người gởi có e = 17, n = 35 Nếu anh ta muốn gởi bất cứ dữ liệu nàothuộc tập sau:
Với mỗi giá trị n, có ít nhất 9 trường hợp kết quả mã hóa chính là dữ liệu
nguồn ban đầu Thật vậy,
M = M e mod n
hay:
M = M e mod p và M = M e mod q
Với mỗi e, mỗi đẳng thức trong (*) có ít nhất 3 giải pháp thuộc tập {0,1,-1}
Số thông điệp không được che dấu (không bị thay đổi sau khi mã hóa):
Nếu số nguyên n có thể được phân tích ra thừa số nguyên tố, tức là giá trị p
và q có thể được xác định thì xem như tính an toàn của phương pháp RSA
Trang 13không còn được bảo đảm nữa Như vậy, tính an toàn của phương pháp RSAdựa trên cơ sở các máy tính tại thời điểm hiện tại chưa đủ khả năng giải quyếtviệc phân tích các số nguyên rất lớn ra thừa số nguyên tố Năm 1994, PeterShor, một nhà khoa học tại phòng thí nghiệm AT&T, đã đưa ra một thuật toán
có thể phân tích một cách hiệu quả các số nguyên rất lớn trên máy tính lượngtử
II./ TỔNG QUAN VỀ HÀM BĂM VÀ THUẬT TOÁN HÀM BĂM MD5
1./ Giới thiệu hàm băm mật mã:
Hàm băm mật mã là một thủ tục tất định có đầu vào là khối dữ liệu bất kỳ và trả vềmột xâu bit có độ dài cố định, gọi là giá trị băm (mật mã), mà bất kỳ sự thay đổi vô tìnhhay các ý trên dữ liệu sẽ thay đổi giá trị băm Dữ liệu đem mã hóa thường được gọi làthông điệp (message), và giá trị băm đôi khi còn được gọi là tóm lược thông điệp(message digest) hay giá trị tóm lược (digest)
Hàm băm mật mã lý tưởng có 4 tính chất chính sau:
Dễ dàng tính giá trị băm với bất kỳ thông điệp cho trước nào
Không thể tìm được một thông điệp từ một giá trị băm cho trước
Không thể sửa được một thông điệp mà không làm thay đổi giá trị băm của nó
Không thể tìm ra 2 thông điệp khác nhau mà có cùng giá trị băm
Hàm băm mật mã có rất nhiều ứng dụng trong an toàn thông tin, nhất là cho chữ
ký điện tử (Digital Signatures), mã xác thực thông điệp (MACs – MessageAuthentication Codes), và một số dạng xác thực khác Chúng cũng có thể sử dụng nhưcác hàm băm thông thường, để đánh chỉ số dữ liệu trong bảng băm: như điểm chỉ, đểnhận diện dữ liệu lặp hay xác định tệp dữ liệu duy nhất: hay như checksums để nhận biết
sự thay đổi dữ liệu
a./ Tính chất:
Đa số các hàm băm mật mã được thiết kế với đầu chuỗi đầu vào có độ dài tùy ý vàkết quả đầu ra là một giá trị băm có độ dài cố định Hàm băm mật mã phải có thể chốnglại được tất cả các kiểu tấn công phân tích đã biết Tối thiểu, nó phải có các tính chất sau:
Trang 14 Kháng tiền ảnh (Preimage resistance): cho trước một giá trị băm h, khó tìm rathông điệp m thỏa mã h = hash(m) Khái niệm như là hàm một chiều (one wayfunction) Các hàm thiếu tính chất này sẽ bị tổn thương bởi các tấn công tiền ảnh(preimage attacks).
Kháng tiền ảnh thứ 2 (Second preimage resistance): cho trước một đầu vào m1,khó có thể tìm ra đầu vào m2 khác (không bằng m1) thỏa mãn hash(m1) = hash(m2).Tính chất này đôi khi như là kháng va chạm yếu (weak collision resistance) Cáchàm thiếu tính chất này sẽ bị tổn thương bởi các tấn công tiền ảnh thứ 2 (secondpreimage attacks)
Kháng va chạm (Collision resistance): khó có thể tìm ra 2 thông điệp m1 và m2
thỏa mãn hash(m1) = hash(m2) Một cặp như vậy được gọi là một va chạm băm(mật mã), và tính chất này đôi khi như là kháng va chạm mạnh (strong collisionresistance) Tính chất này yêu cầu rằng một giá trị băm tối thiểu cũng mạnh hơnyêu cầu kháng tiền ảnh, hơn nữa các va chạm có thể tìm được bởi tấn công ngàysinh (birthday attack)
Các tính chất trên nói lên rằng đối phương ác ý không thể thay hoặc sửa dữ liệuđầu vào mà không làm thay đổi giá trị tóm lược của nó Do đó, nếu 2 chuỗi có cùng mộtgiá trị tóm lược, thì người ta tin tưởng rằng chúng là giống nhau
Một hàm có các tiêu chí này vẫn có thể có các tính chất không mong muốn Hiệntại các hàm băm mật mã thông thường vẫn bị tổn thương bởi các tấn công mở rộng độ dài(length-extension attacks): cho trước h(m) và len(m) nhưng không biết m, bằng cáchchọn m' hợp lý, kẻ tấn công có thể tính h(m || m'), với || ký hiệu là phép ghép chuỗi Tínhchất này có thể được sử dụng để phá vỡ các lược đồ xác thực đơn giản dựa vào hàm băm.Cấu trúc HMAC (Hash Message Authentication Code) gặp phải các vấn đề như vậy
Về mặt lý tưởng, người ta có thể muốn các điều kiện mạnh hơn Kẻ tấn côngkhông thể tìm ra 2 thông điệp có các giá trị tóm lược gần giống nhau; hoặc luận ra bất kỳthông tin có ích nào về dữ liệu, mà chỉ cho trước giá trị tóm lược Do đó, hàm băm mật
mã phải tiến gần tới hàm ngẫu nhiên (đến mức có thể) mà vẫn là tất định và tính toán hiệuquả
Thuật toán checksum, như là CRC32 và các CRC (Cyclic Redundancy Check)khác, được thiết kế nhiều yêu cầu yếu hơn, và nói chung không giống như là các hàmbăm mật mã Ví dụ, có một CRC đã được sử dụng kiểm tra tính toàn vẹn trong chuẩn mãWEP (Wired Equivalent Privacy), nhưng đã có một tấn công khai thác tính tuyến tính củachecksum