1. Trang chủ
  2. » Tất cả

Đề tài ứng dụng Hàm băm MD5

25 32 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Đề tài ứng dụng Hàm băm MD5
Trường học Trường Đại học Công nghiệp Hà Nội
Chuyên ngành An Toàn Mạng Máy Tính
Thể loại Báo cáo bài tập môn
Thành phố Hà Nội
Định dạng
Số trang 25
Dung lượng 449,22 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO BÀI TẬP MÔN AN TOÀN MẠNG MÁY TÍNH ĐỀ TÀI TÌM HIỂU ỨNG DỤNG CỦA HÀM BĂM VÀ XÂY DỰNG DEMO MỤC LỤC Chương 1 TỔNG QUAN VỀ HÀM BĂM 1 1 Định nghĩa hàm băm 1 1 2 Tính chất cơ.

Trang 1

KHOA CÔNG NGHỆ - THÔNG TIN

BÁO CÁO BÀI TẬP MÔN

AN TOÀN MẠNG MÁY TÍNH

ĐỀ TÀITÌM HIỂU ỨNG DỤNG CỦA HÀM BĂM VÀ XÂY DỰNG

DEMO

MỤC LỤ

Trang 2

Chương 1 TỔNG QUAN VỀ HÀM BĂM

1.1 Định nghĩa hàm băm 1

1.2 Tính chất cơ bản của hàm băm 1

1.3 Vai trò hàm băm trong mật mã hiện đại 2

1.4 Phân loại hàm băm 3

1.5 Một số giải thuật Băm thông dụng 5

1.5.1 Thuật toán MD5 (Message-Digest algorithm 5) 5

1.5.2 Thuật toán hàm băm SHA-1 9

1.5.3 So sánh 2 phương thức mã hóa MD5 và SHA1 11

Chương 2 ỨNG DỤNG CỦA HÀM BĂM 2.1 Xác thực mật khẩu 13

2.2 Xác thực thông điệp (Message authentication - Thông điệp tóm tắt -message digests) 13

2.3 Bảo vệ tính toàn vẹn của tập tin, thông điệp được gửi qua mạng 13

2.3.1 Tạo chữ ký điện tử (Digital signatures) 14

Chương 3 XÂY DỰNG DEMO 3.1 Mã hóa dữ liệu 15

3.2 Tạo chữ ký số 17

TÀI LIỆU THAM KHẢO 21

Trang 3

DAH MỤC TỪ VIẾT TẮT

Trang 4

Chương 1 TỔNG QUAN VỀ HÀM BĂM 1.1 Định nghĩa hàm băm

Hàm băm (Hash function) là một hàm toán học chuyển đổi một thông điệp đầu vào có độ dài bất kỳ thành một dãy bit có độ dài cố định (tuỳ thuộc vàothuật toán băm) Dãy bit này được gọi là thông điệp rút gọn (message digest) hay giá trị băm (hash value), đại diện cho thông điệp ban đầu [9]

Hàm băm (hash function) là hàm một chiều mà nếu đưa một lượng dữ liệubất kì qua hàm này sẽ cho ra một chuỗi có độ dài cố định ở đầu ra

Hình 1.1 Ví dụ mô tả hàm băm.

1.2 Tính chất cơ bản của hàm băm

Tính đụng độ: Theo nguyên lý Diricle: Nếu có (n+1) con thỏ được bỏ vào

n cái chuồng thì phải tồn tại ít nhất một cái chuồng mà trong đó có ít nhất là hai con thỏ ở chung Rõ ràng với không gian giá trị băm nhỏ hơn rất nhiều so với không gian tin về mặt kích thước thì chắc chắn sẽ tồn tại đụng độ, nghĩa là có hai tin x # x’ mà giá trị băm của chúng là giống nhau, tức h(x) = h(x’)

Sau đây chúng ta sẽ xét các dạng tấn công có thể có, từ đó rút ra các tính chất của hàm băm:

- Tính chất 1: Hàm băm không va chạm yếu

Hàm băm h là không va chạm yếu nếu khi cho trước một bức điện x, không thể tiến hành về mặt tính toán để tìm ra một bức điện x’ ^ x mà h(x’) = h(x)

Ví dụ: Người A gửi cho B (x, y) với y = SigA(h(x)) Nhưng trên đường truyền, tin bị lấy trộm Tên trộm, bằng cách nào đó tìm được một bản thông điệp

Trang 5

x’ có h(x’) = h(x) mà x’ ^ x Sau đó, tên trộm đưa x’ thay thế x rồi truyền tiếp cho người B Người B nhận được và vẫn xác thực được thông tin đúng đắn.

Để tránh tấn công trên, hàm băm phải không va chạm yếu

để nhận được y Khi đó (x’, y) là bức điện giả mạo nhưng hợp lệ

Để tránh kiểu tấn công này, hàm h phải thỏa mãn tính không va chạm mạnh

1.3 Vai trò hàm băm trong mật mã hiện đại

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ố

Mộ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

Các hàm băm lấy một thông báo đầu vào và tạo một đầu ra được xem nhưlà:

- Mã băm (hash code)

- Kết quả băm (hash result)

- Hoặc giá trị băm (hash value) [9]

Trang 6

1.4 Phân loại hàm băm

Hình 1.2 Phân loại hàm băm.

Trang 7

Kích thước khối

Độ dài

Kích thước world

Xung đột

khả năng lớn

Trang 8

1.5 Một số giải thuật Băm thông dụng

1.5.1 Thuật toán MD5 (Message-Digest algorithm 5)

1.5.1.1 Giới thiệu giải thuật MD5

MD5 là một hàm băm mật mã học được sử dụng phổ biến với giá trị Hashdài 128-bit Là một chuẩn Internet (RFC 1321), MD5 đã được dùng trong nhiều ứng dụng bảo mật, và cũng được dùng phổ biến để kiểm tra tính toàn vẹn của tập tin Một bảng băm MD5 thường được diễn tả bằng một số hệ thập lục phân

32 ký tự

MD5 được thiết kế bởi Ronald Rivest vào năm 1991 để thay thế cho hàm băm trước đó, MD4 Vào năm 1996, người ta phát hiện ra một lỗ hổng trong MD5; trong khi vẫn chưa biết nó có phải là lỗi nghiêm trọng hay không, những chuyên gia mã hóa bắt đầu đề nghị sử dụng những giải thuật khác, như SHA-1 (khi đó cũng bị xem là không an toàn) Trong năm 2004, nhiều lỗ hổng hơn bị khám phá khiến cho việc sử dụng giải thuật này cho mục đích bảo mật đang bị đặt nghi vấn

1.5.1.2 Nguyên lý thuật toán MD5 [5]

- Bước 1: Nhồi dữ liệu

Nhồi thêm các bits sao cho dữ liệu có độ dài l ≡ 448 mod 512 hay l = n *

512 + 448 (n, l nguyên)

Luôn thực hiện nhồi dữ liệu ngay cả khi dữ liệu ban đầu có độ dài mong muốn Ví dụ, dữ liệu có độ dài 448 được nhồi thêm 512 bits để được độ dài 960 bits

Số lượng bit nhồi thêm nằm trong khoảng 1 đến 512

Các bit được nhồi gồm 1 bit “1” và các bit 0 theo sau

Hình 1.3 Nhồi dữ liệu.

- Bước 2: Thêm vào độ dài

Độ dài của khối dữ liệu ban đầu được biểu diễn dưới dạng nhị phân 64-bit

và được thêm vào cuối chuỗi nhị phân kết quả của bước 1

Nếu độ dài của khối dữ liệu ban đầu > 264, chỉ 64 bits thấp được sử dụng,nghĩa là giá trị được thêm vào bằng K mod 264

Trang 9

Kết quả có được từ 2 bước đầu là một khối dữ liệu có độ dài là bội số của

512 Khối dữ liệu được biểu diễn:

Bằng một dãy L khối 512-bit Y0, Y1,…, YL-1

Bằng một dãy N từ (word) 32-bit M0, M1, MN-1 Vậy N = L x 16 (32 x 16)

Hình 1.4 Thêm vào độ dài.

- Bước 3: Khởi tạo bộ đệm MD (MD buffer)

Một bộ đệm 128-bit được dùng lưu trữ các giá trị băm trung gian và kết quả Bộ đệm được biểu diễn bằng 4 thanh ghi 32-bit với các giá trị khởi tạo ở dạng little-endian (byte có trọng số nhỏ nhất trong từ nằm ở địa chỉ thấp nhất) như sau:

- Bước 4: Xử lý các khối dữ liệu 512-bit

Trọng tâm của giải thuật là hàm nén (compression function) gồm 4

“vòng” xử lý Các vòng này có cấu trúc giống nhau nhưng sử dụng các hàm luận

Trang 10

Mảng 64 phần tử được tính theo công thức T[i] = 232 × abs(sin(i)), I được tính theo radian.

Kết quả của 4 vòng được cộng (theo modul 232 với đầu vào CVq để tạo

CVq+1

Hình 1.5 Xử lý các khối dữ liệu 512-bit.

Trang 11

Bảng 3.2 Các giá trị T.

- Bước 5: Xuất kết quả

Sau khi xử lý hết L khối 512-bit, đầu ra của lần xử lý thứ L là giá trị băm

128 bits Giải thuật MD5 được tóm tắt như sau:

+ CV0 = IV

+ CVq+1 = SUM32[CVq,RFI(Yq,RFH(Yq,RFG(Yq,RFF(Yq,CVq))))]

+ MD = CVL - 1

Với các tham số:

+ IV bộ đệm gồm 4 thanh ghi ABCD

+ Yq khối dữ liệu thứ q gồm 512 bits

+ L số khối 512-bit sau khi nhồi dữ liệu

+ CVq đầu ra của khối thứ q sau khi áp dụng hàm nén

+ RFx hàm luận lý sử dụng trong các “vòng” (F,G,H,I)

+ MD message digest - giá trị băm

+ SUM32 cộng modul 232

Trang 12

1.5.2 Thuật toán hàm băm SHA-1

1.5.2.1 Giới thiệu hàm băm SHA-1 [1]

Năm 1990, Ron Rivest đã sáng tạo ra hàm băm MD4 Sau đó năm 1992, ông cải tiến MD4 và phát triển một hàm băm khác MD5 Năm 1993, Cơ quan

An ninh Quốc gia Hoa Kỳ/Cục An ninh Trung ương (NSA) đã công bố,một hàmbăm rất giống với MD5 được gọi là SHA Vào năm 1995, sau việc khắc phục những lỗ hổng kỹ thuật, NSA đã thay đổi SHA trở thành một hàm băm mật mã khác gọi là SHA-1

SHA-1 (Sercue Hash Algorithm) là thuật toán cũng được xây dựng trên thuật toán MD4, đang được sử dụng rộng rãi Thuật toán SHA-1 tạo ra chuỗi mãbăm có chiều dài cố định 160 bit từ chuỗi bit dữ liệu đầu vào x có chiều dài tùy ý

1.5.2.2 Thuật toán SHA-1

Input thông điệp với độ dài tối đa 264 bits

Output thông điệp rút gọn (message digest) có độ dài 160 bits

Giải thuật gồm 5 bước trên khối 512 bits:

- 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 mod 512 luôn đồng dư là448

Thông điệp luôn luôn được nhồi thêm các bit

Số bit nhồi thêm phải nằm trong khoảng 1-512

Phần thêm vào cuối dữ liệu gồm 1 bit 1 và theo sau là các bit 0

- Bước 2 Thêm độ dài:

Độ dài khối dữ liệu ban đầu sẽ được biểu diễn dưới dạng nhị phân 64 bit

và được thêm cuối chuỗi nhị phân mà ta thu được ở bước 1

Độ dài được biểu diễn dưới dạng nhị phân 64 bit không dấu

Kết quả thu được từ 2 bước là một khối dữ liệu có độ dài là bội số của

512 (Với cứ 512 bit là một khối dữ liệu)

- Bước 3 Khởi tạo bộ đệm MD (MD buffer):

Một bộ đệm 160 bit được dùng để lưu trữ các giá trị băm trung gian và kếtquả Bộ đệm được biểu diễn bằng 5 thanh ghi 32-bit với các giá trị khởi tạo ở dạng big-endian (byte có trọng số lớn nhất trong từ nằm ở địa chỉ thấp nhất) và

có hai bộ đệm Năm thanh ghi của bộ đệm đầu tiên được đánh đặ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):

H =67452301

Trang 13

H3= 98BADCFE

H4= 10325476

H5= 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 bốn vòng lặp thực hiện tất cả 80 bước

+ Bốn vòng lặp có cấu trúc như nhau, chỉ khác nhau ở hàm logic Ft

Trang 14

Đầu ra của 4 vòng (bước 80) được cộng với giá trị của bộ đệm để tạo ra một chuỗi kết quả dài 160 bit.

- Bước 5 Xuất kết quả:

Sau khi thao tác trên toàn bộ N khối dữ liệu (blocks) Kết quả của khối thứ N là chuỗi băm 160 bit

có thể tạo ra chữ ký giả để vét sạch tài khoản ngân hàng của người sử dụng không may

MD5 và SHA1 đều cộng thêm các bit “giả” để tạo thành những khối chia hết cho 512 bit, nhưng SHA1 sử dụng cùng một hàm phi tuyến f cho cả bốn

- Trong hàm phi tuyến thứ 2 của MD5 có sự cải tiến so với MD4, SHA thì

sử dụng lại hàm phi tuyến của MD4, tức (X and Y) or (X and Z) or (Y and Z)

- Trong MD5 với mỗi bước được cộng kết quả của bước trước đó Sự

Trang 15

MD5), điều này làm cho phương pháp tấn công của Boer-Bosselaers đối với SHA bị thất bại (Den Boer và Bosselaers là hai người đã phá thành công 2 vòng cuối trong MD4)

Input: MD5 là chuỗi có độ dài bất kì còn SHA1 là chuỗi có độ dài tối đa

264 bits

- Hao tốn tài nguyên

- Tốc độ

- Cả hai dựa trên phép toán 32 bit, thực hiện tốt trên các kiến trúc 32 bit

- SHA1 thực hiện nhiều hơn 16 bước và thao tác trên thanh ghi 160 bit nên tốt độ thực hiện chậm hơn

- Độ an toàn (khả năng chống tấn công)

- Để tạo ra thông điệp có giá trị băm cho trước, cần 2128 thao tác với MD5

và 2160 với SHA1

- Để tìm 2 thông điệp có cùng giá trị băm, cần 264 thao tác với MD5 và 280

với SHA1 [10]

Trang 16

Chương 2 ỨNG DỤNG CỦA HÀM BĂM

2.1 Xác thực mật khẩu

Mật khẩu thường không được lưu dưới dạng văn bản rõ (clear text), mà ở dạng tóm tắt Để xác thực một người dùng, mật khẩu do người đó nhập vào được băm ra bằng hàm Hash và so sánh với kết quả băm được lưu trữ

2.2 Xác thực thông điệp (Message authentication - Thông điệp tóm tắt -message digests)

Giá trị đầu vào (tin nhắn, dữ liệu ) bị thay đổi tương ứng giá trị băm cũng bị thay đổi Do vậy nếu 1 kẻ tấn công phá hoại, chỉnh sửa dữ liệu thì server

có thể biết ngay lập tức [9]

2.3 Bảo vệ tính toàn vẹn của tập tin, thông điệp được gửi qua mạng

Hàm băm mật mã có tính chất là hàm 1 chiều Từ khối dữ liệu hay giá trị đầu vào chỉ có thể đưa ra 1 giá trị băm duy nhất Như chúng ta đã biết đối với tính chất của hàm 1 chiều Một người nào đó dù bắt được giá trị băm họ cũng không thể suy ngược lại giá trị, đoạn tin nhắn băm khởi điểm

Ví dụ việc xác định xem một file hay một thông điệp có bị sửa đổi hay không có thể thực hiện bằng cách so sánh tóm tắt được tính trước và sau khi gửi (hoặc một sự kiện bất kỳ nào đó) Còn có thể dùng tóm tắt thông điệp làm một phương tiện đáng tin cậy cho việc nhận dạng file

Hàm băm thường được dùng trong bảng băm nhằm giảm chi phí tính toán khi tìm một khối dữ liệu trong một tập hợp Giá trị băm đóng vai trò gần như một khóa để phân biệt các khối dữ liệu [9]

Trang 17

2.4 Tạo chữ ký điện tử (Digital signatures)

Chữ ký số có được bằng cách đem mã hoá bản tóm tắt của thông điệp bằng khoá bí mật của người ký:

Hình 2.6 Quy trình tạo chữ ký điện tử có kết hợp hàm băm.

Chứng thực:

Chứng thực chữ ký điện tử.

Nếu kết quả băm giống nhau, thông điệp được xác thực vì nếu bất kỳ bit nào của M hay SIG bị thay đổi, kết quả băm sẽ khác

Trang 18

Chương 3 XÂY DỰNG DEMO

Sử dụng chương trình Demo minh họa các hàm và thuật toán dùng trong chữ ký điện tử

3.1 Mã hóa dữ liệu

Bước 1: Nhấn vào nút “Mã hóa MD5 và SHA1”

Bước 2: Tại form “Mã hóa MD5 và SHA1” nhập vào chuỗi muốn mã hóa

Trang 19

Bước 3: Chọn kiểu mã hóa và số lần mã hóa.

Bước 4: Bấm vào nút “encrypt” để thực hiện mã hóa

Trang 20

3.2 Tạo chữ ký số

Người gửi:

- Tạo khóa bí mật, khóa công khai, gửi khóa công khai cho người nhậnBước 1: Nhấn vào button “Chữ ký số”

Bước 2: Nhập vào cặp số p, q với p, q là hai số nguyên tố trong đó p > q

Bước 3: Bấm vào nút tạo khóa Chương trình xử lý tạo ra các số D, N, E, cặp (D, N) là khóa bí mật mã hóa thông điệp Cặp (N, E) là khóa công khai để giải mã

Trang 21

Bước 4: Gửi khóa công khai cho người nhận thông điệp trước.

- Băm thông điệp

Nhập thông điệp vào ô textbox Nhấn nút “Hash” để tiến hành băm thông điệp (ở đây nhóm chọn hàm băm MD5 để băm thông điệp) Thông điệp sẽ đượcbăm thành thông điệp rút gọn

Tạo chữ ký với khóa bí mật

Trang 22

Tạo chữ ký số bằng cách mã hóa thông điệp bằng khóa bí mật vừa tạo Gửi thông điệp và chữ ký số cho người nhận, nhấn vào nút tạo chữ ký số, thông điệp sau khi băm sẽ được mã hóa bằng khóa bí mật vừa tạo.

Người nhận: Sau khi nhận được thông điệp và chữ ký số người nhận tiến hành xác thực chữ ký số

Bước 1: Băm thông điệp vừa được nhận từ người gửi

Bước 2: Giải mã chữ ký số bằng khóa công khai

- Nhập chữ ký số nhận được vào ô textbox

- Nhập cặp khóa công khai vào hai ô tương ứng với số E, số N (khóa côngkhai được người gửi tạo ra và gửi cho người nhận trước lúc nhận thông điệp)

Trang 23

- Nhấn vào nút “Giải Mã” Chữ ký số sẽ được giải mã thành thông điệp rút gọn.

Bước 3: Xác thực thông điệp bằng cách so sánh thông điệp sau khi băm với chữ ký số sau khi giải mã

- Nhấn vào nút xác thực để thực hiện so sánh chuỗi thông điệp sau khi băm với chuỗi chữ ký số sau khi giải mã

- Nếu thông điệp được truyền đi chính xác hai thông điệp sẽ giống nhau, ngược lại, kết thúc chương trình

Trang 24

TÀI LIỆU THAM KHẢO

Tiếng Việt

[1] Mạnh Thiên Lý 2006 Đồ án xây dựng phần mềm ứng dụng chữ ký

điện tử.

[2] Nguyễn Ngọc Hoá, Phạm Tâm Long 2008 Mô hình xác thực hộ

chiếu điện tử, Khoa CNTT, ĐHCN-ĐHQGHN, Hội thảo Quốc gia lần thứ XI.

[3] GS.TS Phan Đình Diệu 2009 Lý thuyết mật mã và an toàn thông

tin, Nhà xuất bản Đại học Quốc gia Hà Nội.

[4] ThS Trương Hoài Phan 2010 Giới thiệu mã hóa dữ liệu SHA1, MD5

và đề mô ứng dụng

[5] ThS Trương Hoài Phan.2010 Tìm hiểu về hàm băm.

[6] Nguyễn Xuân Dũng 2011 Bảo mật thông tin và mô hình ứng dụng [7].TS Nguyễn Hoài Anh 2011 Thương mại điện tử.

[8] ĐH Ngoại Thương 2012 Giáo trình thương mại điện tử.

[9] TS Nguyễn Khanh Văn 2012 Giáo trình an toàn và bảo mật thông tin

[10] Nguyễn Hải Nhật Khóa luận tốt nghiệp 2014 Tìm hiểu về chữ ký điện tử và ứng dụng

Tiếng Anh

[11] Ningh Draft 2006 Machine Readable Travel Documents

[12] NIST - U.S, National Institute of Standards and Technology, Trang 50-51, 68-73

[13] Xiaoyun Wang, Dengguo Feng, Xuejja Lai, Hongbo Yu.2006 Conllisions for Hash Functions MD4, MD5, HAVAL - 128 and RIPEMD

Trang web

[14] http://vi.wikipedia.org/wiki/chữ_ký_số

[15] http://vi.wikipedia.org/wiki/Hàm_băm

[16] http://www.3c.com.vn/Story/vn/hotrokhachhang/thuongmaidientu/

Ngày đăng: 26/11/2022, 08:56

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. Mạnh Thiên Lý. 2006. Đồ án xây dựng phần mềm ứng dụng chữ ký điện tử Khác
[2]. Nguyễn Ngọc Hoá, Phạm Tâm Long. 2008. Mô hình xác thực hộ chiếu điện tử, Khoa CNTT, ĐHCN-ĐHQGHN, Hội thảo Quốc gia lần thứ XI Khác
[3]. GS.TS. Phan Đình Diệu. 2009. Lý thuyết mật mã và an toàn thông tin, Nhà xuất bản Đại học Quốc gia Hà Nội Khác
[4]. ThS Trương Hoài Phan. 2010. Giới thiệu mã hóa dữ liệu SHA1, MD5 và đề mô ứng dụng Khác
[5]. ThS Trương Hoài Phan.2010. Tìm hiểu về hàm băm Khác
[6]. Nguyễn Xuân Dũng. 2011. Bảo mật thông tin và mô hình ứng dụng Khác
[7].TS Nguyễn Hoài Anh. 2011. Thương mại điện tử Khác
[8]. ĐH Ngoại Thương. 2012. Giáo trình thương mại điện tử Khác
[9]. TS Nguyễn Khanh Văn. 2012. Giáo trình an toàn và bảo mật thông tin Khác
[10]. Nguyễn Hải Nhật Khóa luận tốt nghiệp. 2014. Tìm hiểu về chữ ký điện tử và ứng dụng.Tiếng Anh Khác
[11]. Ningh Draft. 2006. Machine Readable Travel Documents Khác
[12]. NIST - U.S, National Institute of Standards and Technology, Trang 50-51, 68-73 Khác
[13]. Xiaoyun Wang, Dengguo Feng, Xuejja Lai, Hongbo Yu.2006.Conllisions for Hash Functions MD4, MD5, HAVAL - 128 and RIPEMD.Trang web Khác

TỪ KHÓA LIÊN QUAN

w