1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Thực hiện mạch tạo số giả ngẫu nhiên PRNG trên công nghệ Skywater 130nm

6 21 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 742,42 KB

Nội dung

Bài viết Thực hiện mạch tạo số giả ngẫu nhiên PRNG trên công nghệ Skywater 130nm hướng đến xây dựng mạch tạo số ngẫu nhiên trên công nghệ Google SkyWater 130nm (SKY130). Đây là công cụ thiết kế vi mạch mã nguồn mở và miễn phí. Quá trình thực hiện mạch bao gồm toàn bộ quy trình thiết kế vi mạch số, từ hình thành ý tưởng và RTL đến khi xuất ra tập tin layout. Mời các bạn cùng tham khảo!

Hội nghị Quốc gia lần thứ 25 Điện tử, Truyền thông Công nghệ Thông tin (REV-ECIT2022) Thực mạch tạo số giả ngẫu nhiên PRNG công nghệ Skywater 130nm Nguyễn Thị Cẩm Nhung, Lê Đức Hùng(*) Khoa Điện tử Viễn Thông, Trường Đại học Khoa học Tự Nhiên TPHCM (*) Email: ldhung@hcmus.edu.vn Abstract— Trong báo này, mạch tạo số giả ngẫu nhiên PRNG thiết kế thực công nghệ Google SkyWater 130nm Mạch kết hợp ba thành phần: mạch tạo số giả ngẫu nhiên (PRNG), khối mã hóa (AES-128), khối hàm băm (SHA-256) Đầu vào mạch gồm số 64-bit làm mẫu cho lần chạy khóa (key) 128-bit Đầu mạch số ngẫu nhiên 128-bit Vì mạch tạo số ngẫu nhiên kết hợp với khối mã hóa AES-128 SHA-256 nên độ tin cậy mạch tạo số ngẫu nhiên cao, việc dự đoán ngược số ngẫu nhiên nhiều thời gian Mạch tạo số ngẫu nhiên PRNG đề xuất mơ Modelsim, sau áp dụng quy trình mã nguồn mở OpenLane, thư viện Skywater 130nm để tạo ASIC Kit) SkyWater130 Đây cơng cụ mơ tả quy trình chế tạo 130nm (SKY130) sử dụng nhà máy chế tạo hãng SkyWater PDK SKY130 sử dụng quy trình OpenLane Đây quy trình tự động từ RTL đến GDSII dựa số công cụ bao gồm OpenRoad, Yosys, Magic, NetGen tập lệnh tùy chỉnh để khám phá tối ưu hóa thiết kế B Quy trình thiết kế OpenLane Keywords-số giả ngẫu nhiên, PRNG, AES-128, SHA-256, OpenLane, Skywater 130nm I GIỚI THIỆU Bộ tạo số giả ngẫu nhiên (Random Number Generator - RNG) sử dụng nhiều lĩnh vực khoa học, nghệ thuật, thống kê, mật mã, chơi game, đánh bạc lĩnh vực khác Đặc biệt thời đại công nghệ phát triển nay, việc bảo mật an tồn thơng tin điều vơ quan trọng RNG thành phần quan trọng để tăng cường đảm bảo tính bảo mật thơng tin liên lạc điện tử Bài báo cáo muốn hướng đến xây dựng mạch tạo số ngẫu nhiên công nghệ Google SkyWater 130nm (SKY130) Đây công cụ thiết kế vi mạch mã nguồn mở miễn phí Q trình thực mạch bao gồm tồn quy trình thiết kế vi mạch số, từ hình thành ý tưởng RTL đến xuất tập tin layout Hình Quy trình thiết kế OpenLane [Nguồn: Github OpenLane] OpenLane công cụ tự động để biến thiết kế kỹ thuật số thành tập tin cần thiết để tạo ASIC OpenLane thực cách tự động hóa cần cấu hình xác sử dụng Theo mặc định, tất bước quy trình phải chạy theo trình tự Quy trình thể cụ thể qua Hình 1, gồm bước sau:  Tổng hợp mạch (RTL Synthesis): dùng cơng cụ Yosys  Phân tích thời gian tĩnh (STA): dùng công cụ OpenSTA  Thiết kế cho kiểm tra (DFT): công cụ Fault  Back-end: công cụ OpenROAD, gồm Floorplanning, Placement, Xlock Tree Synthesis – CTS, Routing Phần lại báo tổ chức sau: Phần II giới thiệu tổng quan công nghệ Google SkyWater 130nm Phần III trình bày kiến trúc thiết kế mạch tạo số ngẫu nhiên Phần IV trình bày kết thực Sau đó, báo kết luận Phần V II TỔNG QUAN VỀ CÔNG NGHỆ GOOGLE SKYWATER 130NM A Giới thiệu công nghệ Google SkyWater 130nm Vào tháng năm 2020, Google hợp tác với SkyWater Technology mắt PDK (Process Design ISBN 978-604-80-7468-5 364 Hội nghị Quốc gia lần thứ 25 Điện tử, Truyền thông Công nghệ Thông tin (REV-ECIT2022)     Standard), AES tính bảo mật PRNG xác nhận Sau tham khảo vài so sánh thuật toán AES (Advanced Encryption Standard) lựa cho thích hợp cho mạch PRNG, PRNG kết hợp với AES để đạt chất lượng tối ưu Với mong muốn hướng tới cấu trúc mạch tạo số ngẫu nhiên bảo đảm chất lượng đầu khơng thể dự đốn Khơng áp dụng sử dụng gần mà cịn đảm bảo tính bảo mật truyền số ngẫu nhiên đến nơi khác Cấu trúc đề xuất kết hợp mã hóa đầu PRNG mạch mã hóa đối xứng AES đầu ngẫu nhiên tăng cường lần hàm băm (SHA) với mục đích bảo đảm thơng tin q trình truyền khơng bị thay đổi Kiểm tra tương đương logic (LEC) Trích xuất RC thực STA Xuất file GDSII: công cụ Magic, Klayout Các kiểm tra thiết kế thực công cụ sau:  Magic – Thực kiểm tra DRC (Design Rule Check) kiểm tra Antenna  Klayout - Thực kiểm tra DRC  Netgen - Thực kiểm tra LVS (Layout Versus Schematic )  CVC - Thực kiểm tra tính hợp lệ mạch (Circuit Validity Checks) III KIẾN TRÚC VÀ THIẾT KẾ MẠCH TẠO SỐ NGẪU NHIÊN C Sơ đồ khối A Giới thiệu mạch tạo số ngẫu nhiên Mạch tạo số ngẫu nhiên (Random Number Generator - RNG) trình tạo số ngẫu nhiên Cụ thể dãy số ký hiệu tạo khơng thể dự đốn cách xác RNG thành phần để tăng cường đảm bảo tính bảo mật truyền thơng điện tử Có nhiều loại RNG báo cáo tập trung vào mạch tạo số ngẫu nhiên PRNG (Pseudo Random Number Generator) PRNG sử dụng thuật tốn tính tốn tạo chuỗi dài kết ngẫu nhiên, thực tế xác định hoàn toàn giá trị ban đầu ngắn hơn, gọi giá trị khởi đầu (seed) khóa (key) Vì PRNG sử dụng hàm số lập trình sẵn việc cịn lại thực phép tính nên hiệu quả, tốn nhớ, tiết kiệm thời gian chạy Tuy nhiên, PRNG có nhược điểm tạo số khơng hồn tồn ngẫu nhiên, đoán biết thuật toán giá trị khởi đầu (seed) Nhận thấy tính khả thi ưu điểm mạch PRNG báo hướng tới thực mạch tạo số giả ngẫu nhiên (PRNG) đồng thời đề xuất mơ hình PRNG khắc phục nhược điểm mạch Đề xuất mạch PRNG kết hợp với khối mạch mã hóa AES-128 hàm băm SHA-256 để làm giá trị giả ngẫu nhiên ngõ khó bị truy ngược Các khối mã hóa mơ tả Hình Ứng dụng mạch tạo số ngẫu nhiên sử dụng vào lĩnh vực bảo mật, mật mã nhằm bảo vệ thông tin liệu tài nguyên quan trọng thời đại công nghệ ngày phát triển Hình Sơ đồ khối mạch tạo số ngẫu nhiên Chức khối sơ đồ Hình trên:  Khối (PRNG): Tạo số giả ngẫu nhiên Ban đầu người dùng cần đưa giá trị khởi đầu vào để PRNG vận hành lần sinh số ngẫu nhiên đầu ngẫu nhiên biến đổi thông qua cổng logic để quay trở lại làm giá trị đầu vào cho PRNG tiếp tục hoạt động  Khối (AES): Mã hóa số giả ngẫu nhiên Tiếp nhận liệu từ mạch PRNG (bản rõ) khóa bí mật người dùng định nghĩa đưa vào khối mã hóa AES cho mã ngẫu nhiên  Khối (SHA): Băm liệu mã hóa từ đầu khối AES, đảm bảo liệu truyền không bị cơng hay bị sửa đổi q trình truyền D Khối – PRNG B Kiến trúc mạch tạo số ngẫu nhiên Mạch xây dựng dựa LFSR (Linear Feedback Shift Register) CASR (Cellular Automata Shift Register) để tạo số giả ngẫu nhiên Sau ứng dụng thêm cách tiếp cận phổ biến để xây dựng PRNG sử dụng mật mã khối đối xứng làm trung tâm chế PRNG Nếu sử dụng mật mã khối chứng thực DES (Data Encryption ISBN 978-604-80-7468-5 Hình Sơ đồ mơ tả thành phần PRNG Ở Hình 3, PRNG có 128-bit đầu ghép từ ngõ ba thành phần bên trong: 365 Hội nghị Quốc gia lần thứ 25 Điện tử, Truyền thông Công nghệ Thông tin (REV-ECIT2022)  Thanh ghi dịch chuyển tự động (CASR) với đầu 32-bit cung cấp 32-bit ngẫu nhiên cho đầu PRNG  Thanh ghi phản hồi tuyến tính (LFSR) với đầu 32-bit cung cấp 32-bit ngẫu nhiên cuối cho đầu PRNG  Còn 64-bit trung tâm đầu PRNG thực logic XOR mạch LFSR 64-bit mạch CASR 64-bit Các mạch LFSR CASR cần có giá trị khởi đầu (gọi seed) có độ dài bit tương ứng để vận hành mạch lần đầu Để đơn giản tất mạch LFSR CASR dùng chung giá trị khởi đầu với độ dài bit “giá trị khởi đầu” lớn 64-bit Những mạch cần 32-bit “giá trị khởi đầu” lấy đoạn bit từ 64-bit “giá trị khởi đầu” cấp cho mạch cần sử dụng 1) CASR 32-bit Mạch 32-bit CASR PRNG có mơ sau (do mơ hình dài nên cắt thành hai phần Hình 4): Hình Mơ hình mạch LFSR 32-bit Mạch thiết kế theo mơ hình Galois LFSR Giá trị khởi đầu mạch 32-bit lấy từ 64-bit seed đầu từ bit 16 đến 47 Mỗi ghi gắn với mux dùng biến “loadseed_i” điều khiển thực tải “giá trị khởi đầu” sau tắt đi, để mạch thực theo thuật toán LFSR Đa thức đặc trưng LFSR 32-bit biểu diễn phương trình (3): (3) P(x) = X32 + X29 + X16 + X + Đầu mạch 32-bit cuối mạch PRNG 3) CASR XOR LFSR Tiếp theo, 64-bit đầu PRNG tạo từ kết XOR CASR LFSR theo sơ đồ minh họa Hình Hình Mơ hình mạch CASR 32-bit Giá trị khởi đầu mạch 32-bit lấy từ 64-bit seed đầu từ bit 16 đến 47 Ở ghi 19 thực theo quy tắc CA150 (Cellular Automaton CA) tất ghi lại sử dụng quy tắc CA90 Quy tắc CA90 [6] định nghĩa theo phương trình (1) sau: (t + 1) = ai−1(t) ⊕ ai+1(t) (1) Và quy tắc CA150 [6] định nghĩa theo phương trình (2) sau: (t + 1) = ai−1(t) ⊕ ai(t) ⊕ ai+1(t) (2) Mỗi ghi gắn với mux dùng biến “loadseed_i” điều khiển thực tải “giá trị khởi đầu” sau tắt đi, để mạch thực theo thuật toán CASR Đầu mạch 32-bit đầu mạch PRNG 2) LFSR 32-bit Đối với mạch LFSR 32-bit PRNG có cấu trúc Hình (do mơ hình dài nên cắt thành hai đoạn): ISBN 978-604-80-7468-5 Hình Mơ tả cấu trúc kết hợp hai mạch CASR, LFSR Mạch CASR 74-bit với sơ đồ cấu trúc Hình bên Hình Mơ hình mạch CASR 74-bit 366 Hội nghị Quốc gia lần thứ 25 Điện tử, Truyền thông Công nghệ Thông tin (REV-ECIT2022) Mạch sử dụng quy tắc CA150 ghi 27 ghi 64, ghi lại sử dụng quy tắc CA90 Giá trị khởi đầu 74-bit ghép từ 64-bit bổ sung bit cho bit lại Mỗi ghi gắn với mux dùng biến “loadseed” điều khiển thực tải “giá trị khởi đầu” sau tắt đi, để mạch thực theo thuật toán CASR Đối với mạch LFSR 86-bit lấy giá trị khởi đầu cách ghép 64-bit seed bit Mỗi ghi gắn với mux dùng biến “loadseed_i” điều khiển thực nạp “giá trị khởi đầu” sau tắt đi, để mạch thực theo thuật tốn LFSR Mơ hình mạch Hình AES thuật tốn mã hóa khối đối xứng với độ dài khóa khác có tên gọi tương ứng AES128, AES-192, AES-256 Trong thiết kế sử dụng AES-128, phần số bit đầu vào AES-128 tương thích với khối PRNG trước từ dễ dàng kết hợp chúng với Mã hóa AES thực thơng qua chức AddRoundKey, SubBytes, ShiftRows, MixColumns KeyExpansion Các thành phần xếp Hình thực bước chính: Khởi tạo: plain_text [127:0] liệu cần mã hóa kết hợp với key [127:0] chức AddRoundKey Lặp mã hóa: sử dụng kết bước khởi tạo thực chức SubBytes, ShiftRows, MixColumns AddRoundKey Do sử dụng AES-128 có 10 vịng lặp bao gồm lần lặp bước lần lặp bước sau Tạo ngõ ra: tiếp tục sử dụng kết bước để thực chức SubBytes, ShiftRows AddRoundKey để tạo ngõ cipher_text [127:0] Trong q trình mã hóa, ma trận liệu gốc biến đổi hàm AddRoundKey, SubBytes, ShiftRows MixColumns để tạo liệu trung gian gọi ma trận trạng thái Ma trận khóa mã biến đổi chức KeyExpansion để tạo khóa mật mã trung gian gọi khóa vịng Hình Mơ hình mạch LFSR 86-bit Đa thức biểu diễn mạch LFSR 86-bit: P(x) = X84 + X63 + X44 + X41 + X20 + X + Cuối thực XOR 64-bit đầu hai mạch với cho đầu 64-bit, giá trị ngẫu nhiên 64-bit trung tâm mạch PRNG F Khối – SHA-256 SHA-256 hàm băm mạnh Ở thiết kế thực hàm băm SHA256 có mã băm cố định 256-bit (32-byte) giúp dễ dàng kết hợp với thành phần khác SHA dùng để băm thơng tin (M), có độ dài l-bit (0 < l < 264) Thuật toán sử dụng: Một danh sách thông tin (message schedule) 64word word gồm 32-bit Mỗi 32-bit thao tác với biến Một giá trị băm 8-word, word 32-bit Kết cuối SHA-256 chuỗi tóm lược thơng tin (message digest) có độ dài 256-bit E Khối – AES AES tiêu chuẩn mã hóa tiên tiến, thuật tốn tiêu chuẩn phủ Hoa Kỳ IV KẾT QUẢ THỰC HIỆN A Kết mô ModelSim Khối PRNG có chu kỳ ngắn chu kỳ khối AES-128 nên trình khối AES-128 xử lý liệu mà có liệu từ PRNG chen vào dẫn đến kết sai lệch khối AES-128 Bởi khơng đồng nên thiết kế cần sử dụng hai xung đồng hồ có chu kỳ khác Cụ thể, mạch PRNG sử dụng xung đồng hồ gấp 68 lần xung lại (chỉ số lấy theo số chu kỳ mạch liền kề với khối PRNG khối AES-128) Còn hai mạch AES-128 SHA-256 sử dụng chu kỳ với Hình Quy trình mã hóa mạch AES-128 ISBN 978-604-80-7468-5 367 Hội nghị Quốc gia lần thứ 25 Điện tử, Truyền thông Công nghệ Thông tin (REV-ECIT2022) chu kỳ mạch AES-128 lớn chu kỳ mạch SHA-256 nên không xảy ảnh hưởng đến hoạt động mạch SHA-256 Tất khối PRNG sử dụng ghi có tín hiệu reset khơng đồng tích cực mức thấp nên biến reset xuống lúc khơng kể tín hiệu xung đồng hồ mạch reset Quá trình reset đặt tất giá trị Các trình qua khối trình bày trước nên khơng nhắc lại Chỉ thể kết cuối Mô tả hoạt động thiết kế tổng thể sau: Khi trình PRNG có kết bắt đầu ghi liệu vào khối AES (Hình 10) Khi AES-128 kết thúc quy trình mã hóa cho phép ghi lệu vào khối SHA-256 (Hình 11) Kết SHA-256 xuất giá trị đầu thiết kế (Hình 12)  digest 256-bit: daa400a3094e96d299c2085350402186129ff23 38682cbe5db36df44656492b0 Hình 12 Dạng sóng mơ kết mạch tạo số giả ngẫu nhiên B Kết thực cơng nghệ Skywater 130nm 1) Cấu hình thiết kế Do mạch sử dụng hai xung đồng hồ nên thiết kế chạy CTS hai trường hợp Trong thiết kế sử dụng biến cấu hình chung cho hai trường hợp Bảng Bảng Các biến cấu hình chung cho thiết kế Tên biến PDK STD_CELL_LIBRARY DESIGN_NAME DESIGN_IS_CORE FP_PIN_ORDER_CFG FB_CORE_UTIL PL_BASIC_PLACEMENT PL_TARGET_DESITY VDD_NETS GND_NETS DIODE_INSERTION_STRATEGY RUN_CVC Hình 10 Dạng sóng mơ q trình mã hóa Kết tính tốn mơ khối thể Hình 12 Giá trị sky130a sky130_fd_sc_hd top_prng tập tin pin_order.cfg 20 0.25 list{vcc1} list {vssd1} Tập tin pin_order.cfg cấu hình vị trí chân thiết kế theo hướng sau đây:  Hướng Đông (E): đặt cổng digest digest_valid_sha  Hướng Tây (W): đặt cổng load_seed, clk, clk_2, reset, reset_2, next_aes, init_aes, init_sha  Hướng Nam (S): đặt cổng result_valid_aes, ready_aes ready_sha  Hướng Bắc (N): đặt cổng key_aes, seed Cấu hình xung đồng hồ dành cho mạch AES-128 SHA-256 (clk) trình bày Bảng Bảng Các biến cấu hình cho trường hợp clock Hình 11 Dạng sóng mơ q trình băm toàn khối Tên biến CLOCK_PORT CLOCK_NET CLOCK_PERIOD PL_RESIZER_HOLD_SLACK_MARGIN GLB_RESIZER_HOLD_SLACK_MARGIN Cụ thể giá trị random, message digest có giá trị sau:  random 128-bit: b4d80cb77950258d2a9c5d4745bef090  message 128-bit: 3914f9cb102f30b540b8af197fe5b8ee ISBN 978-604-80-7468-5 368 Giá trị Clk Clk 40 0.35 0.35 Hội nghị Quốc gia lần thứ 25 Điện tử, Truyền thông Công nghệ Thông tin (REV-ECIT2022) PL_RESIZER_SETUP_SLACK_MARGIN GLB_RESIZER_SETUP_SLACK_MARGIN PL_RESIZER_MAX_SLEW_MARGIN PL_RESIZER_MAX_CAP_MARGIN V KẾT LUẬN 0.35 0.35 35 35 Mạch tạo số ngẫu nhiên đề xuất thiết kế dựa mạch tạo số giả ngẫu nhiên (PRNG) kết hợp với mạch mã hóa (AES-128) hàm băm (SHA-256) Trong trình thiết kế chức kiểm tra mô ModelSim thiết kế vật lý công nghệ Google SkyWater 130nm với kết cho tập tin thiết kế (.gds) Mạch có kích thước layout 1103.79µm  1114.51µm cơng suất tiêu thụ ước tính khoảng 17.7mW tần số 25MHz Với thiết kế này, PRNG đề xuất có độ bảo mật cao góp phần nâng cao độ tin cậy, bảo đảm số ngẫu nhiên tạo dự đoán Thiết kế loại bỏ nhược điểm lớn mạch PRNG dễ bị dự đoán Mạch tạo số giả ngẫu nhiên đề xuất ứng dụng vào bảo mật an tồn thơng tin, q trình giao dịch điện tử phần cứng gửi mã OTP xác nhận giao dịch Cấu hình xung đồng hồ dành cho mạch PRNG (clk_2) trình bày Bảng Chu kỳ clk_2 lớn gấp 68 lần so với clk: clk_2 = 68 x 40 = 2720 Bảng Các biến cấu hình cho trường hợp clock Tên biến CLOCK_PORT CLOCK_NET CLOCK_PERIOD Giá trị Clk_2 Clk_2 2720 Kết công suất mạch PRNG công nghệ Skywater 130nm xấp xỉ 17.7mW (1.7710-2 W) biểu diễn Hình 13 đây: TÀI LIỆU THAM KHẢO [1] Hình 13 Kết báo cáo cơng suất Skywater 130nm [2] 2) Kết layout Bảng biểu diễn kết thực mạch tạo số giả ngẫu nhiên PRNG đề xuất sau thực PnR công nghệ SkyWater 130nm Kết layout mạch tạo số giả ngẫu nhiên PRNG trình bày Hình 14 [3] [4] Bảng Kết layout mạch PRNG Thơng số Cơng nghệ Kích thước Tần số (clock 1) Tần số phụ (clock 2) Số cell Ước tính cơng suất Giá trị SKY130 1103.79µm  1114.51µm 25 MHz 0.37 MHz 25.652 cells 17.7 mW [5] [6] Hình 14 Kết layout mạch PRNG công nghệ Skywater 130nm ISBN 978-604-80-7468-5 369 Guillermo Cotrina, Alberto Peinado, Andrés Ortiz “Gaussian Pseudorandom Number Generator Using Linear,” Mathematics, 2021 Luca Baldanzi, Luca Crocetti, Francesco Falaschi , Matteo Bertolucci, Jacopo Belli, Luca Fanucci and Sergio Saponara “Cryptographically Secure Pseudo-Random Number Generator IP-Core Based on SHA2 Algorithm,” Department of Information Engineering University, 27 March 2020 N Sklavos, P Kitsos, K Papadomanolakis, O Koufopavlou “Random Number Generator,” Electrical and Computer Engineering Department, January, 2002 Shabbir Hassan, Prof Mohammad Ubaidullah Bokhari “Design of Pseudo Random Number Generator using Linear Feedback Shift Register,” International Journal of Engineering and Advanced Technology (IJEAT), December, 2019 Tkacik, T.E “A Hardware Random Number Generator.” CHES2002, Lecture Notes in Computer Science, vol 2523, 13, 2003 Wolfram, Stephen “Cellular Automata and Complexity,” Westview Press, pp.513-591, 1994 ... kết thực mạch tạo số giả ngẫu nhiên PRNG đề xuất sau thực PnR công nghệ SkyWater 130nm Kết layout mạch tạo số giả ngẫu nhiên PRNG trình bày Hình 14 [3] [4] Bảng Kết layout mạch PRNG Thơng số Cơng... )  CVC - Thực kiểm tra tính hợp lệ mạch (Circuit Validity Checks) III KIẾN TRÚC VÀ THIẾT KẾ MẠCH TẠO SỐ NGẪU NHIÊN C Sơ đồ khối A Giới thiệu mạch tạo số ngẫu nhiên Mạch tạo số ngẫu nhiên (Random... thời đại công nghệ ngày phát triển Hình Sơ đồ khối mạch tạo số ngẫu nhiên Chức khối sơ đồ Hình trên:  Khối (PRNG) : Tạo số giả ngẫu nhiên Ban đầu người dùng cần đưa giá trị khởi đầu vào để PRNG vận

Ngày đăng: 31/12/2022, 13:34

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN