Mã hoá bảo mật thông tin và ứng dụng trong thương mại điện tử - Pdf 25



ĐẠI HỌC QUỐC GIA HÀ NỘI
KHOA CÔNG NGHỆ NGUYỄN VIỆT PHƢƠNG Mã hoá bảo mật thông tin và ứng dụng
trong thƣơng mại điện tử

LUẬN VĂN THẠC SĨ CÔNG NGHỆ

2.5 Một số loại mã hoá bất đối xứng 41
2.5.1 RSA 41
2.5.2 El Gamal 42
2.5.3 Elliptic Curve Cryptosystems (ECCs) 42
2.6 Các phương pháp mã hoá lai (hybrid) 42
2.6.1 Hệ thống khoá mã công khai 43
2.6.2 Khoá mã phiên (session key) 46
Chương 3: Ứng dụng các hệ thống mã hoá trong môi trường thương mại
điện tử 48
3.1 Hạ tầng cơ sở hệ thống khoá mã công khai - PKI 48
3.1.1 Đơn vị cấp phát chứng chỉ - CA 49
3.1.2 Chứng chỉ (Certificates) 51

3.1.3 Đơn vị đăng ký (Registration Authority) 51
3.1.4 Các bước trong PKI 52
3.2 Hàm một chiều và chữ ký điện tử 53
3.2.1 Tính toàn vẹn của thông tin 54
3.2.2 Hàm Hash một chiều 55
3.2.3 Hàm một chiều sử dụng trong mã hoá so với hàm hash một
chiều 56
3.2.4 Chữ ký điện tử (Digital Signatures) 56
3.2.5 Tiêu chuẩn chữ ký điện tử Quốc gia Hoa kỳ - DSS 59
3.2.6 Các thuật toán Hash 59
3.3 Quản lý khoá mã 61
3.3.1 Nguyên tắc quản lý khoá mã 63
3.4 Bảo mật Internet 65
3.4.1 HTTP 65
3.4.2 S-HTTP 66
3.4.3 HTTPS 67
3.4.4 SSL 67

Ngày nay chúng ta đang sống trong kỷ nguyên của công nghệ thông tin và thương
mại điện tử với phần lớn cơ sở dữ liệu, giao dịch và đàm phán thương mại của các
tổ chức, doanh nghiệp đều được lưu trữ, thực hiện thông qua các hệ thống mạng
máy tính.
Tuy nhiên, trộm cắp thông tin và tội phạm máy tính ngày càng gia tăng với mức độ
nguy hiểm ngày càng nghiêm trọng hơn. Theo những nghiên cứu gần đây của Cục
điều tra Liên bang Mỹ (FBI) và Tổ chức Bảo mật Máy tính (CSI), trong vòng 12
tháng qua 85% trong số các công ty được hỏi thừa nhận rằng hệ thống của họ có
những lỗ hổng bảo mật. Và theo báo cáo tổn thất tài chính từ các công ty này, tổng
số thiệt hại lên đến 377 triệu USD - tăng 42% so với mức thiệt hại 265 triệu USD
trong năm 2000. Trong số này, mức độ thiệt hại do trộm cắp thông tin là 151 triệu
USD và do gian lận thương mại là 93 triệu USD – những con số rất lớn mặc dù số
vụ trộm cắp, gian lận thông tin không nhiều bằng số vụ virus tấn công hay số vụ
trộm cắp máy tính cá nhân. Chính vì vậy vấn đề đảm bảo an toàn cơ sở dữ liệu,
thông tin cá nhân là vấn đề sống còn của bất kỳ một tổ chức nào và bảo mật thông
tin là nền móng cơ bản để phát triển các dịch vụ thương mại điện tử.
Tại Việt Nam, sau bước đầu hoàn thành quá trình tin học hoá, thiết lập các mạng
máy tính cục bộ nhằm chia sẻ dữ liệu, trao đổi thông tin…, các ban nghành, tổ chức
và các doanh nghiệp đã bắt đầu lập các website, quảng bá thông tin, cho phép truy
vấn thông tin và tiến hành giao dịch trực tuyến thông qua mạng Internet. Vì lý do
đó, vấn đề bảo mật mạng máy tính, hạn chế sự tấn công, phá hoại của tin tặc
(hacker) đã bắt đầu thu hút được nhiều sự quan tâm, chú ý và trở thành đề tài nóng
bỏng trong thời gian gần đây.
Bảo mật mạng máy tính có nhiều khía cạnh nhưng chủ yếu được chia thành hai
loại:
1. Bảo mật hệ thống máy tính, chống lại các cuộc thâm nhập bất hợp pháp
bằng cách thiết lập, sử dụng các hệ thống Firewall, IDS,…
– 5 –
2. Chống lại việc gian lận, ăn cắp, sửa đổi thông tin giao dịch trên mạng
bằng cách thiết lập các hệ thống mã hoá thông tin, chữ ký điện tử…

thành một phần quan trọng trong thế giới vi tính.
Chuyên khoa mật mã có thể được chia thành hai nghành khác nhau: mã hoá
(cryptography) và phá mã (cryptanalysis) [5].
Mã hoá là phương pháp lưu trữ và truyền thông tin dưới dạng sao cho chỉ có những
người có thẩm quyền mới đọc và xử lý được. Mã hoá là một phương pháp hiệu quả
để bảo vệ các thông tin nhạy cảm khi lưu trữ hoặc khi truyền trên các kênh truyền
thông.
Mặc dù mục tiêu cơ bản của mã hoá là bảo vệ, che giấu thông tin khỏi con mắt của
những kẻ tò mò bất hợp pháp, nhưng phần lớn các thuật toán đều có thể bị phá vỡ
và thông tin được giải mã (một cách bất hợp pháp) nếu kẻ tấn công có đủ thời gian
và các phương tiện cần thiết.
Phá mã là một lĩnh vực khoa học nhằm nghiên cứu độ an toàn và tìm cách phá vỡ
các thuật toán mã hoá cũng như các thành phần của chúng. Việc nghiên cứu độ an
toàn của thuật toán có thể tiến hành bởi các viện nghiên cứu nhằm tìm ra những
điểm yếu để ngăn chặn những kẻ gian lận, phá hoại hoặc tiến hành bởi các kẻ tấn
công (hackers) với mục đích thoả mãn trí tò mò và tìm cách gian lận, trộm cắp
– 7 –
thông tin.
Các chuyên gia mã hoá (cryptographer) nghiên cứu cải tiến và phát triển các thuật
toán nhằm bảo vệ và mã hoá thông tin còn các chuyên gia phá mã (cryptanalyst) thì
tìm cách giải mã, phá vỡ hệ thống do các chuyên gia mã hoá xây dựng lên. Mục
tiêu của các chuyên gia phá mã có thể không tốt nhưng những nỗ lực của họ, cộng
với sự phát triển mạnh mẽ sức mạnh xử lý của máy tính phần nào đã tác động
ngược trở lại, thôi thúc các chuyên gia mã hoá làm việc tốt hơn và thúc đẩy ngành
mã hoá phát triển nhanh hơn.
1.1 Lịch sử của mã hoá
Mã hoá có nguồn gốc khoảng 2000 năm trước công nguyên khi người Ai Cập cổ
đại sử dụng chữ tượng hình trang trí trên hầm mộ để miêu tả cuộc sống của người
đã khuất. Thực chất hành động này không nhằm che giấu thông tin, nhưng làm cho
hầm mộ trở nên lộng lẫy hơn, sang trọng hơn, tức là ẩn chứa một thông điệp rằng

Ngày nay các kỹ thuật này quá đơn giản nhưng thời đó rất ít người có thể đọc được
nên kỹ thuật ấy là một phương pháp để bảo vệ thông tin hiệu quả có độ an toàn cao.
– 9 –
Cuộc cách mạng mã hoá tiếp tục phát triển khi người châu Âu phát minh ra những
phương pháp và công cụ mã hoá mới dùng trong suốt thời kỳ Trung đại. Đến cuối
những năm 1800, mã hoá đã được sử dụng phổ biến trong các liên lạc truyền tin
giữa các đơn vị quân đội.
Trong cuộc chiến tranh Thế giới lần thứ II, các thiết bị mã hoá đơn giản đã được cải
tiến đáng kể bằng các kỹ thuật cơ khí, điện từ tạo ra các thiết bị truyền tin điện báo
và sử dụng sóng vô tuyến.
Chiếc máy mã hoá sử dụng các trục quay rotor khác nhau để tạo ra thông điệp phức
tạp rất khó giải mã là một bước đột phá quan trọng trong lĩnh vực mã hoá thông tin
quân sự. Chiếc máy nổi tiếng nhất do người Đức chế tạo có tên là Enigma. Chiếc
máy Enigma có 3 trục quay, một bàn phím và một trục quay hồi tiếp. Từ khoá gốc
được cấu hình cho máy trước khi tiến hành quá trình mã hoá. Khi người điều khiển
gõ một ký tự, máy sẽ thay thế ký tự ấy bằng một ký tự khác và trả về cho người
điều khiển. Quá trình mã hoá này được thực hiện bằng cách tịnh tiến trục quay một
số lần định trước để thay thế ký tự gõ vào bằng một ký tự khác. Nếu người điều
khiển gõ vào chữ T, máy Enigma có thể trả về ký tự M. Người điều khiển viết ký tự
M ra giấy rồi tịnh tiến trục quay và nhập ký tự tiếp theo. Sau mỗi một ký tự mã hoá,
người điều khiển lại tịnh tiến trục quay đến một vị trí mới. Quá trình này tiếp diễn
cho đến khi toàn bộ thông điệp được mã hoá. Việc lựa chọn ký tự thay thế cho từng
ký tự phụ thuộc vào cấu hình của trục quay. Do đó bí mật của quá trình xử lý này
(khoá mã) là cách người điều khiển tịnh tiến trục quay khi mã hoá và giải mã thông
tin.
Người điều khiển tại hai đầu phải thống nhất quy tắc tịnh tiến này để điều khiển
trục quay cho phù hợp. Mặc dù tại thời điểm đó, cơ chế mã hoá của máy Enigma
khá phức tạp nhưng một nhóm kỹ sư người Ba lan đã giải mã thành công và cung
cấp các thông tin về kế hoạch tấn công, di chuyển quân sự của người Đức cho
người Anh. Có thể nói rằng việc phá mã thành công đã giúp kết thúc chiến tranh

lẫn phần mềm để bảo vệ dữ liệu, các giao dịch ngân hàng, mạng extranet, thư tín
điện tử, giao dịch trên web, giao dịch trên mạng không dây, lưu trữ thông tin…
Con người ngày càng lệ thuộc vào sự phát triển của công nghệ, do đó con người sẽ
ngày càng lệ thuộc vào mã hoá, bởi vì bí mật luôn cần phải giữ kín.
– 11 –
1.2 Định nghĩa mã hoá
Mã hoá là phương pháp biến đổi dữ liệu ban đầu gọi là cleartext hay plaintext thành
dạng xuất hiện ngẫu nhiên không thể đọc được - gọi là ciphertext. Plaintext có thể
là các hình thức thông tin mà con người có thể hiểu được (văn bản) hoặc là dạng dữ
liệu mà máy tính có thể hiểu được (mã máy). Khi được biến đổi thành dạng
ciphertext, cả máy tính và con người đều không thể hiểu và xử lý được cho đến khi
nó được giải mã. Quá trình mã hoá cho phép truyền các thông tin bí mật qua các
kênh thông tin có tính chất không an toàn. Khi dữ liệu được lưu trữ trên máy tính,
dữ liệu có thể được đảm bảo an toàn bằng cách kiểm soát truy nhập về mặt logic và
về mặt vật lý. Tuy nhiên khi các thông tin nhạy cảm này truyền trên mạng, việc
kiểm soát truy nhập về mặt logic và vật lý không còn thực hiện được và thông tin
rất dễ bị rò rỉ [1].

Hình 1.3: Quá trình mã hoá biến đổi plaintext thành ciphertext
và giải mã biến đổi ciphertext thành plaintext
Plaintext thường được gọi là
M
(có nghĩa là thông điệp - message) hoặc là
P
.
Plaintext có thể là một chuỗi bits, một file văn bản, đồ hoạ hoặc một chuỗi âm
thanh được số hoá… Trong lĩnh vực máy tính,
M

P

D
thao thác trên
C
để tạo ra
M
:
– 12 –
 
MCD 

Do toàn bộ quá trình mã hoá rồi giải mã thông tin để khôi phục lại thông tin dạng
plaintext ban đầu nên ta có thể viết:
  
MMED 

Một hệ thống cho phép mã hoá và giải mã được gọi là hệ thống mã hoá
(cryptosystem). Hệ thống mã hoá có thể được tạo bởi các phần cứng chuyên dụng
hoặc bởi các đoạn chương trình trong phần mềm ứng dụng. Các hệ thống mã hoá có
thể sử dụng các thuật toán đơn giản hoặc phức tạp khác nhau nhưng nhìn chung các
thuật toán này là tập hợp những phép toán phức tạp biến đổi chuỗi plaintext. Phần
lớn các phương pháp mã hoá đều sử dụng một giá trị bí mật - thường là một chuỗi
dài các bit gọi là khoá mã (key) để kết hợp với thuật toán làm nhiệm vụ mã hoá và
giải mã [6].

Hình 1.4: Khoá mã chèn vào thuật toán
áp dụng lên thông điệp để tạo ra ciphertext
Thuật toán mã hoá (cryptographic algorithm hay còn gọi là cipher) là một tập hợp
các hàm toán học dùng trong tiến trình mã hoá và giải mã. Thông thường có hai
hàm tương quan với nhau, một hàm dùng cho quá trình mã hoá và một hàm dùng
cho quá trình giải mã.


Hình 1.5: Khoảng mã lớn hơn cho phép lựa chọn nhiều khóa mã hơn
Nếu kẻ nghe trộm bắt được thông tin truyền giữa hai người, kẻ nghe trộm có thể
xem được nội dung thông tin. Nhưng do các thông tin ấy được mã hoá nên kẻ nghe
trộm không thể hiểu được nội dung thông tin. Thậm chí nếu kẻ nghe trộm biết được
thuật toán mã hoá sử dụng nhưng nếu không có khoá mã thích hợp, kẻ nghe trộm
cũng không thể giải mã được thông tin. Như vậy thông tin nghe trộm được trở nên
không có giá trị.

Hình 1.6: Nếu không có khoá mã thích hợp,
thông tin trở nên không có giá trị đối với kẻ nghe trộm
Cả hai quá trình mã hoá và giải mã đều sử dụng khoá mã và có thể biểu thị dưới
– 15 –
dạng biểu thức toán học như sau:
 
CME
K


 
MCD
K


Các biểu thức này có tính chất:

  
MMED
KK


Độ an toàn của các thuật thuật toán theo mô hình này hoàn toàn phụ thuộc vào khoá
mã mà không phụ thuộc vào thuật toán [1]. Điều này cũng có nghĩa là thuật toán
mã hoá có thể được công bố rộng rãi và được phân tích kỹ lưỡng.
Encryption Decryption
CipheretextPlaintext
Original
Plaintext
KeyKey

Hình 1.7a: Mã hoá và giải mã với cùng một khoá mã
Encryption Decryption
CipheretextPlaintext
Original
Plaintext
Decryption
Key
Encryption
Key

Hình 1.7b: Mã hoá và giải mã với hai khoá mã khác nhau
– 16 –
1.3 Mục tiêu của hệ thống mã hoá
Các hệ thống mã hoá hiện đại được phát triển nhằm đảm bảo 4 mục đích: xác thực
người sử dụng (user authentication), xác định tính toàn vẹn và nguồn gốc của thông
tin (data authentication), chống phủ nhận nguồn gốc thông tin (non-repudiation) và
đảm bảo tính riêng tư hay an toàn của thông tin (privacy or data confidentiality) [5].
1.3.1 Xác thực ngƣời sử dụng (User Authentication)
Khi người sử dụng muốn truy nhập vào một hệ thống máy tính, thông thường, bằng
cách này hay cách khác, người sử dụng cần cung cấp các thông tin nhận dạng cho
máy tính. Khi nhận được các thông tin ấy, máy tính kiểm tra xem người sử dụng có

[5].
Kiểm tra tính toàn vẹn của thông tin (Data integrity)
Kiểm tra tính toàn vẹn của thông tin là một quá trình cho phép đảm bảo nội dung
của thông tin được gửi đi không bị sửa đổi bất hợp pháp trên đường truyền. Bản
thân quá trình kiểm tra tính toàn vẹn của thông tin không có ý nghĩa nếu không
đảm bảo được rằng thông tin đó có được gửi trực tiếp từ người hợp lệ hay không.
Hay nói cách khác không thể biết được thông tin có bị thay đổi hay chưa nếu nó
được gửi qua một người trung gian. Do đó kiểm tra tính toàn vẹn của thông tin bắt
buộc phải kết hợp với việc kiểm tra nguồn gốc của thông tin [6].
Khi người sử dụng A truyền một thông điệp đến cho người sử dụng B, trên đường
truyền có thể có một kẻ nghe trộm C. Nếu không có khả năng kiểm tra tính toàn
vẹn của thông tin, C có thể thay đổi nội dung thông điệp và chuyển tiếp cho B. B
không biết rằng thông điệp đã bị thay đổi và cho rằng đó là điều mà A muốn gửi.
Xác định nguồn gốc của thông tin (Data origin authentication)
Như đã nói ở trên, nếu chỉ xác định tính toàn vẹn của thông tin mà không xác định
nguồn gốc của nó thì quá trình xác thực thông tin trở nên vô nghĩa. Khi người A
gửi một thông điệp đến cho người B, trên đường truyền thông điệp bị người nghe
trộm C đánh cắp. Sau đó người nghe trộm C giả danh người A gửi một thông điệp
đến cho người B. Không có gì đảm bảo rằng thông điệp do C gửi giống với thông
điệp A muốn gửi cho B.
– 18 –
Chính vì vậy nhiệm vụ của hệ thống mã hoá là phải vừa đảm bảo tính toàn vẹn của
dữ liệu, vừa phải xác định nguồn gốc của dữ liệu.
1.3.3 Chống phủ nhận thông tin (Non-repudiation of origin)
Chống phủ nhận thông tin nhằm mục đích ngăn chặn các đối tượng tham gia quá
trình truyền tin phủ nhận thực tế rằng họ đã tham gia đầy đủ quá trình truyền tin
[5]. Hệ thống mã hoá có tính năng chống phủ nhận thông tin sẽ cung cấp các bằng
chứng về nguồn gốc của thông tin ngăn không cho người gửi phủ nhận rằng mình
là người gửi thông tin. Bên cạnh đấy hệ thống mã hoá có tính năng chống phủ nhận
thông tin cũng cung cấp các bằng chứng về quá trình truyền tin để ngăn không cho

cùng sử dụng chung một khoá mã [7]. Hệ thống này còn được gọi là hệ thống mã
hoá bí mật bởi vì phương pháp mã hoá này yêu cầu đối tượng truyền tin và nhận tin
phải giữ bí mật thông tin về khoá mã. Nếu khoá mã lọt vào tay đối tượng nghe
trộm, đối tượng nghe trộm có thể dùng khoá mã đó để giải mã và ăn cắp thông tin.
Trong hệ thống mã hoá đối xứng, từng cặp đối tượng muốn trao đổi thông tin với
nhau cần có một khoá mã riêng. Điều này có nghĩa nếu A muốn trao đổi thông tin
với B, cả A và B cần phải có chung một khoá mã. Nếu A cũng muốn trao đổi thông
tin với C và D thông qua phương pháp mã hoá đối xứng, A cần phải có 3 mã khoá
khác nhau, mỗi khoá mã ứng với một đối tượng liên lạc. Điều này không được
thuận tiện khi A phải trao đổi thông tin với hàng trăm, hàng ngàn đối tượng khác
nhau trong một thời gian dài. Khi đó A phải giữ rất nhiều khoá mã và phải sử dụng
đúng khoá mã cho từng đối tượng trao đổi thông tin. Nếu trong hệ thống mã hoá
đối xứng có 10 đối tượng, số khoá mã cần thiết để các đối tượng có thể trao đổi
thông tin với nhau là n*(n-1)/2 = 45 (với n là số người sử dụng trong hệ thống) và
nếu hệ thống mã hoá đối xứng có 100 người thì số khoá mã cần thiết là 4,950 [2].

Hình 2.2: Hệ thống mã hoá đối xứng, đối tượng truyền tin và nhận tin sử dụng
chung một khoá mã cho quá trình mã hoá và giải mã
Độ an toàn của phương pháp mã hoá đối xứng hoàn toàn phụ thuộc vào việc các
đối tượng bảo vệ khoá mã như thế nào. Điều này rất nguy hiểm khi hệ thống có
hàng ngàn đối tượng vì khi đó rất khó có thể đảm bảo rằng tất cả các đối tượng
– 21 –
tham gia truyền tin đều giữ khoá mã một cách an toàn.
Khi đối tượng A muốn trao đổi thông tin với B, A cần phải tìm cách để có khoá mã
của B. Việc này sẽ không an toàn nếu khoá mã của B được gửi cho A dưới dạng e-
mail bởi vì khoá mã đó không được bảo vệ và kẻ tấn công có thể đọc trộm e-mail
để lấy thông tin về khoá mã. A cũng có thể lấy khoá mã của B thông qua phương
pháp không sử dụng đường truyền (out-of-band): khi A muốn liên lạc với B, B có
thể lưu khoá mã của mình ra một đĩa mềm rồi chuyển cho A qua đường bưu điện
hoặc qua thư bảo đảm. Tuy nhiên việc đó rất phức tạp, không thuận tiện và cũng

- Blowfish
- IDEA
- RC4, RC5, and RC6
Các thuật toán này sẽ được trình bày chi tiết hơn trong phần mã hoá theo luồng
thông tin và mã hoá theo khối.
2.2 Mã hoá bất đối xứng
Một thuật toán sử dụng khoá mã để mã hoá thông tin khác với khoá mã để giải mã
thông tin được gọi là thuật toán mã hoá bất đối xứng [7]. Trong một hệ thống sử
dụng thuật toán mã hoá bất đối xứng, mỗi đối tượng có một cặp khoá mã: một là
khoá mã công khai (public key) và một khoá mã cá nhân hay còn gọi khoá mã bí
mật (private key). Khoá mã công khai có thể công bố cho mọi người cùng biết còn
khoá mã cá nhân phải giữ bí mật. Nếu một thông điệp được mã hoá bởi khoá mã
công khai thì khoá mã cá nhân được dùng để giải mã và ngược lại.
Phần lớn các hệ thống mã hoá bất đối xứng lưu khoá mã công khai được trong thư
mục, cơ sở dữ liệu nên mọi đối tượng đều có thể sử dụng các khoá mã công khai
này để mã hoá và giải mã khi muốn trao đổi thông tin với nhau.
– 23 –

Hình 2.2: Hệ thống mã hoá bất đối xứng
Khoá mã công khai và khoá mã cá nhân có những mối quan hệ với nhau về mặt
toán học nhưng không thể dùng khoá mã cá nhân để tìm ra khoá công khai và
ngược lại. Điều đó có nghĩa nếu một kẻ nghe trộm lấy được khoá mã công khai của
B thì anh ta cũng không có cách nào tính toán để tìm ra được khoá mã cá nhân của
B.
Nếu đối tượng B mã hoá thông tin bằng khoá mã cá nhân và gửi cho A, đối tượng
A phải sử dụng khoá mã công khai của B để giải mã. A có thể giải mã thông điệp
của B và trả lời B dưới dạng mã hoá. Tất cả việc A cần làm là mã hoá thông điệp
trả lời B bằng khoá mã công khai của B, sau đó B có thể giải mã thông điệp ấy
bằng khoá mã cá nhân của mình.
Trong hệ thống mã hoá bất đối xứng, không thể dùng chung một khoá mã để đồng

PubB

Người nhận:
 
MCD 
PriB

Nếu vấn đề xác thực nguồn gốc của thông tin là điều quan trọng nhất, người gửi có
thể mã hoá thông điệp gửi đi bằng khoá mã cá nhân của anh ta. Người nhận sử
dụng khoá mã công khai của người gửi để giải mã thông tin và đồng thời biết được
nguồn gốc của thông tin đó. Phương pháp này được gọi là định dạng thông điệp mở
(open message format) do bất kỳ người nào có khoá mã công khai của người gửi
đều có thể giải mã được thông tin, cũng chính vì vậy phương pháp này không cung
cấp khả năng bảo vệ tính riêng tư của thông tin. Ta có thể biểu diễn quá trình này
dưới dạng toán học như sau:
Người gửi:
 
CME 
PriA

Người nhận:
 
MCD 
PubA

Trích đoạn Mã hoá theo khối Mã hoá theo luồng dữ liệu (Stream Cipher) Advanced Encryption Standard (AES) Thiết lập các báo cáo theo yêu cầu Đơn giản, hiệu quả độ an toàn cao
Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status