Tải bản đầy đủ (.pdf) (5 trang)

KYYEU_REV2022_final - 62

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (718.95 KB, 5 trang )

Hội nghị Quốc gia lần thứ 25 về Điện tử, Truyền thông và Công nghệ Thông tin (REV-ECIT2022)

Thực thi sinh khóa RSA-2048 bit trên lõi ARM
của chíp Infineon ứng dụng cho thẻ thông minh
Lục Như Quỳnh 1,*, Nguyễn Tất Thắng2, Đào Thanh Toản3, Trần Minh Tiên4
1

2

Học viện Kỹ thuật mật mã, 141 Chiến Thắng, Tân Triều, Thanh Trì, Hà Nội
Cục Quản lý mật mã dân sự và Kiểm định sản phẩm mật mã, 23 Ngụy Như Kon Tum, Nhân Chính, Thanh Xuân,
Hà Nội, Việt Nam
3
Trường Đại học Giao thông Vận tải, Số 3 Cầu Giấy, Hà Nội
4
Cục Đăng Kiểm Việt Nam, Số 18 Phạm Hùng, Hà Nội
Email: ,

Abstract— Ý tưởng trong nghiên cứu này, cài đặt thực thi
các thuật tốn mật mã khóa cơng khai trên hệ điều hành
chun dụng sử dụng trong các hệ thống hạ tầng khóa
cơng khai. Xây dựng hệ điều hành Native OS tích hợp
thuật tốn mật mã khóa cơng khai trên các thiết bị
Smartcard (sử dụng chíp vi xử lý ARM) là có ý nghĩa
thực tiễn trong hệ thống chứng thư số cho nền tảng
chuyển đổi số. Trong bài này, tác giả đưa ra một kết quả
tính tốn và tài ngun sử dụng của thuật tốn sinh khóa
RSA 2048 bit trên chip SLE97 của Infineon. Kết quả
chạy mô phỏng bằng công cụ SLE90 Simulator trên
µKeil ARM và SmartCardManager của Infineon có tốc
độ xử lý xấp xỉ khoảng 78.480 giây (trên chip SLE97 thực


tế xấp xỉ khoảng 2.5 giây). Kết quả này cho thấy thời
gian thực thi đáp ứng yêu cầu để triển khai trong thực tế
với các thiết bị ký số ứng dụng trong hạ tầng chuyển đổi
số cần thời gian ngắn.

những thiết bị hạng nhẹ, thẻ thơng minh SmartCard thì
vấn đề tối ưu tài nguyên bộ nhớ sử dụng và thời gian
thực thi ngắn của thuật tốn mật mã khóa cơng khai
RSA cho các ứng dụng là một vấn đề lớn [5]. Trong bài
này, tác giả đưa ra một kết quả về tính tốn và tài
ngun sử dụng của thuật tốn sinh khóa RSA 2048 bit
trên chip SLE97 của Infineon [6]. Đưa ra kết quả chạy
mô phỏng bằng công cụ SLE90 Simulator (Infineon)
trên µKeil ARM và SmartCardManager (Infineon) của
thuật tốn sinh khóa RSA 2048 bit này.
II.

Bài toán RSA [7]: Cho một số nguyên dương n là tích
của hai số nguyên tố lẻ p và q phân biệt, e là số
nguyên dương sao cho gcd(e, ( p  1).(q  1))  1 và
một số nguyên c. Tìm một số nguyên m thỏa mãn:

Keywords- ARM, Native OS, RSA 2048-bit, Simulation,
SLE97, SmartCard.

I.

me  c mod n .

GIỚI THIỆU


(1)

Thuật tốn sinh khóa RSA được xây dựng dựa trên bài
toán RSA với những số nguyên rất lớn [3], [8]. Trong
nghiên cứu này, tác giả đã tham khảo các công bố [9]
để sinh các tham số cho hệ thống mật mã khóa cơng
khai RSA đảm bảo an tồn. Trong đó, bước lựa chọn
hai số ngun tố bí mật phân biệt p và q được tác giả
làm theo phương pháp của cơng bố [10]; Tính n = p.q
và tính tham số bí mật  (n)  LCM ( p  1, q  1) theo
công bố [11], [12] [13]; Số mũ khóa cơng khai e theo
[14]; Khóa bí mật d  e 1 (mod  (n)) [15].

RSA là ký hiệu viết tắt của Ron Rivest, Adi Shamir
và Leonard Adleman [1]. Hiện tại, hệ mật RSA đã
được ứng dụng rất nhiều trong các vấn đề truyền thơng
khác nhau có bảo mật [1]. Đối với lĩnh vực chứng thư
số, thì hệ mật RSA được sử dụng là một thành phần
chính trong thiết bị ký số. Thuật tốn sinh khóa RSA là
thuật tốn rất cần thiết sử dụng trong hệ mật khóa công
khai RSA [2]. Vấn đề thiết kế và phát triển của các
thuật toán trong hệ mật RSA đã được nghiên cứu rất
nhiều và được nâng cấp dần từ 1024 bit đến bây giờ là
2048 bit [2], [3]. Đã có những thư viện mã nguồn mở
giúp thuận tiện trong việc nghiên cứu và tùy biến các
thuật toán mật mã này trong các hệ điều hành chuyên
dụng, thiết bị và trên các chíp vi xử lý khác nhau, như
là thư viện miracl, SSL/TLS, openVPN [4].


Vấn đề tính tốn số ngun dương d chính là tìm
nghiệm cho d nhỏ nhất thỏa mãn phương trình:
d .e  1 (mod  (n)) .

(2)

Trong đó, e thường có độ dài bit ngắn và trọng số
Hamming nhỏ để có hiệu quả hơn trong mã hóa, hầu
hết các ứng dụng hiện tại sử dụng e  216  1  65537 .
Một số giá trị e nhỏ hơn như là e = 3 đã có chứng
minh khơng đảm bảo an toàn [16], [1]. Số e là thành

Hệ điều hành Native OS là một hệ điều hành
chuyên dụng, được xây dựng phục vụ mục đích trong
các hệ thống chứng thư số, các thiết bị sử dụng công
nghệ thẻ thông minh trong chuyển đổi số. Đối với

ISBN 978-604-80-7468-5

CÁC NGHIÊN CỨU LIÊN QUAN THUẬT
TỐN SINH KHĨA RSA

359


Hội nghị Quốc gia lần thứ 25 về Điện tử, Truyền thơng và Cơng nghệ Thơng tin (REV-ECIT2022)

phần mũ khóa cơng khai, d là thành phần mũ khóa bí
mật [17], [18], [19].
Biểu diễn khóa cơng khai là cặp (n, e) gồm 2 thành

phần modulus n và thành phần mũ e. Khóa bí mật là
cặp (n, d), với modulus n và thành phần mũ bí mật d.
Trong một số ứng dụng, biểu diễn khóa bí mật thường
là cặp ( p, q, dP, dQ, qInv) , với p, q là 2 số nguyên tố
phân biệt, dP là số nguyên dương thỏa mãn
e.dP  1 mod ( p  1) , dQ là số nguyên dương thỏa
mãn e.dQ  1 mod (q  1) , qInv là số nguyên dương
thỏa mãn q.qInv  1 mod p .
Hình 2: Thành phần của hệ điều hành Native OS

Hiện tại hầu hết các ứng dụng đều sử dụng lược đồ
sinh khóa RSA như vậy, nhưng các thành phần của nó
như p, q, d, modulus n, e, …đều phải được kiểm tra
vượt được qua một loạt các tiêu chuẩn đảm bảo an
toàn của tổ chức tiêu chuẩn quốc tế (như NIST,
ISO/IEC) thì mới được sử dụng trong thực tế.
III.

Cấu trúc các thành phần trong hệ điều hành Native OS
được chỉ ra ở Hình 2. Các thành phần của hệ điều hành
Native OS là 2 tầng phía trên của tầng Hardware và
các thành phần này được thiết kế đảm bảo theo chuẩn
ISO 7816 [5]. I/O fucntion là hàm tương tác điều khiển
phần cứng liên quan đến chức năng về truyền nhận
I/O. Memory fucntion là hàm tương tác điều khiển
phần cứng tương tác bộ nhớ FLASH. Crypto fucntion
là hàm tương tác điều khiển phần cứng hỗ trợ các thuật
toán mã hóa/giải mã. T=0 protocol library là tập hợp
các hàm thực hiện đầy đủ tính năng của protocol theo
ISO 7816. Memory library là tập hợp các hàm nhằm

quản lý 1 vùng bộ nhớ, cho phép người sử dụng có thể
tương tác đến vùng bộ nhớ đó theo định danh. Initial
System Routine thực hiện việc khởi động hệ thống, bắt
tay với Reader để cho thẻ bắt đầu có thể hoạt động.
Command Process Module cho việc xử lý lệnh. Thành
phần mật mã được tùy biến trong modulus Crypto lib
của Native OS lựa chọn ở đây là thuật tốn sinh khóa
RSA 2048 bit. Thuật tốn sinh khóa RSA 2048 bit sử
dụng được lấy từ thư viện miracl [4].

CẤU TRÚC HỆ ĐIỀU HÀNH NATIVE OS

Hầu hết các hệ điều hành Smartcard đều được thiết kê
và xây dựng dựa trên chuẩn ISO 7816 phù hợp với các
ứng dụng về chữ ký số. Một hệ điều hành SmartCard
cơ bản là MULTOS [5] có thể được chỉ ra trong Hình
1.

IV.

Thiết kế và phát triển của thuật tốn sinh khóa RSA
2048 bit là sử dụng cơng cụ lập trình µKeil phiên bản
từ 4.73 trở lên của hãng ARM [20] và tích hợp thư
viện SDK SLE90 [21] của hãng Infineon trên cơng cụ
µKeil. Ngồi ra, cịn sử dụng thêm SmartCardManager
của Infineon để thuận tiện trong q trình chạy mơ
phỏng cho thuật toán sinh RSA 2048 bit. Việc thiết kế
hệ điều hành Native OS này chỉ có một số hàm cơ bản
đủ để thực thi thuật tốn sinh khóa RSA 2048 bit được
tùy biến có hỗ trợ chuẩn P1363 và các hàm số học

trong thư viện mã nguồn mở miracl [4].

Hình 1: Các tầng của JavaCard OS

Trong bài này hướng tới việc tùy biến chức năng mật
mã trong tầng O.S & Native Functions (đây là hệ điều
hành Native OS) hoạt động ở tầng giao tiếp giữa phần
cứng và các ứng dụng phía trên thơng qua tầng
Javacard VM (tầng cơ chế máy ảo Java). Thiết kế
trình biên dịch giao tiếp mật mã đảm bảo theo chuẩn
PKCS#11 và PKCS#1 [1].

ISBN 978-604-80-7468-5

KẾT QUẢ VÀ THẢO LUẬN

Kết quả khi biên dịch chương trình trên cơng cụ
µKeil-ARM thì thơng tin được lưu trên hai file
“DemoOS_SLE97.build_log.htm”

“DemoOS_SLE97.axf”.

360


Hội nghị Quốc gia lần thứ 25 về Điện tử, Truyền thông và Công nghệ Thông tin (REV-ECIT2022)

Bảng 1 cho thấy, kết quả tài ngun kích thước
chương trình sinh khóa RSA 2048 bit chiếm dụng tài
nguyên của chíp SLE97 là Code=19860 ROdata=2124 RW-data=52 ZI-data=28788 (chủ yếu là sử

dụng ROM và RAM của chíp SLE97).

Depth=11264, trong đó IF_KEY_PAIR có Max
Depth= 10944.
Hình 3 và Hình 4, cho thấy kết quả chạy mơ phỏng
bằng cơng cụ SLE90 Simulator (Infineon) trên µKeil –
ARM đạt được tốc độ xử lý chỉ mất 78.480 giây – xấp
xỉ khoảng 1.308 phút và số lệnh (instructions) của các
hàm khi hàm sinh khóa RSA 2048 bit.

Bảng 1: Kết quả Tài nguyên sinh khóa trên SLE97 trong file
DemoOS_SLE97.build_log.htm
src\libCrypto\bcyarth2.c: 9 warnings, 0 errors
compiling bcybits.c...
compiling bcymonty.c...
src\libCrypto\bcymonty.c(249): warning: #550-D:
variable "w0g" was set but never used
mr_small carry,delay_carry,m,ndash,*w0g,*mg;
src\libCrypto\bcymonty.c(249): warning: #550-D:
variable "mg" was set but never used
mr_small carry,delay_carry,m,ndash,*w0g,*mg;
src\libCrypto\bcymonty.c(261): warning: #177-D:
variable "dbled" was declared but never referenced
mr_large dbled,ldres;
src\libCrypto\bcymonty.c(261): warning: #177-D:
variable "ldres" was declared but never referenced
mr_large dbled,ldres;
src\libCrypto\bcymonty.c: 4 warnings, 0 errors
compiling bcyshs256.c...
compiling bcystrong.c...

compiling bcyxgcd.c...
compiling bcygcd.c...
compiling bcycore.c...
src\libCrypto\bcycore.c(252): warning: #177-D:
variable "ldres" was declared but never referenced
mr_large ldres,p=(mr_large)a*b+c;
src\libCrypto\bcycore.c(1072): warning: #111-D:
statement is unreachable
return mirsys_basic(mr_mip,nd,nb);
src\libCrypto\bcycore.c: 2 warnings, 0 errors
compiling bcyprime.c...
compiling bcypower.c...
linking...
Program Size: Code=28620 RO-data=2124 RW-data=56 ZIdata=28792
".\obj\DemoOS_SLE97.axf" - 0 Error(s), 31 Warning(s)

Hình 3: Kết quả về tốc độ xử lý sinh khóa RSA 2048-bit key

Hình 4: Kết quả về số lệnh thực hiện sinh hóa RSA 2048-bit
trên SLE97

Bảng 2: Các hàm trên chip SLE97
#<CALLGRAPH># ARM Linker, 5990286: Last Updated:
Sun Jul 09 09:45:07 2017
1)
Maximum
Stack
Usage
=
11264

bytes
Unknown(Cycles, Untraceable Function Pointers)
2) Call chain for Maximum Stack Depth:
main ⇒ cmd_SinhkhoaRSA_2048 ⇒ SINHKHOA_RSA_2048
IF_KEY_PAIR ⇒ isprime ⇒ powltr ⇒ prepare_monty
invmodp ⇒ xgcd ⇒ mad ⇒ divide ⇒ mr_psub ⇒ copy
zero
3) Mutually Recursive functions
NMI_Handler ⇒ NMI_Handler
HardFault_Handler

HardFault_Handler
MemManage_Handler

MemManage_Handler
BusFault_Handler

BusFault_Handler
UsageFault_Handler

UsageFault_Handler
SVC_Handler

SVC_Handler
DebugMon_Handler

DebugMon_Handler
PendSV_Handler

PendSV_Handler

SysTick_Handler

SysTick_Handler
CRYPTO_IRQHandler

CRYPTO_IRQHandler

Kết quả trên SmartCardManager cụ thể:

+

Atr : 09:45:48:684 3b 18 96 44 65 6d
4f 53 31 2e 30 - ;..DemoOS1.0
Send: 09:45:51:459 c2 68 00 00 96 .h...
Rec : 10:07:04:518 95 12 86 70 db 85
9b 85 55 60 fb 4f 71 be b4 e0 b9 15
a8 c4 ec a1 d4 79 c6 f8 77 a1 77 f1
71 e2 79 3f a4 f7 5a fd 06 05 6b f6
be 69 fc 8b d7 7e 4a fc b5 94 f3 7b
03 f4 76 c2 31 fd 87 a9 aa b7 68 46
f1 07 7f 8f 78 86 58 8b 5e ba 48 dc
42 56 82 db ca 1a 73 ca 90 00 .p....U`.Oq..........y..w.w.q.y?..Z.
..k..i...~J....{..v.1.....hF..•.x.X.
^.H.BV....s...





IF_KEY_PAIR (Thumb, 1472 bytes, Stack size 10360

bytes, bcyp1363.o(.text))[Stack]




Max Depth = 10944

Để đánh giá kết quả, tác giả đã sử dụng công cụ mô
phỏng SLE90 Simulator và SmartCardManager do
Infineon cung cấp theo tài liệu kỹ thuật trong chương
trình thỏa thuận riêng giữa Việt Nam và Infineon [23].
Điều này chỉ ra khi thực hiện mô phỏng trên thiết bị
Token bằng cách kết hợp trình mơ phỏng SLE90

Call Chain = IF_KEY_PAIR ⇒ isprime ⇒
powltr ⇒ prepare_monty ⇒ invmodp ⇒ xgcd ⇒ mad ⇒
divide ⇒ mr_psub ⇒ copy ⇒ zero

Bảng 2, chỉ ra kết quả tiến trình sâu nhất sử dụng trong
chip SLE97 là hàm cmd_Sinhkhoa_2048 với Max

ISBN 978-604-80-7468-5

361


Hội nghị Quốc gia lần thứ 25 về Điện tử, Truyền thông và Công nghệ Thông tin (REV-ECIT2022)

Simulator và SmartCardManager thì kết quả mất
khoảng 1.308 phút. Điều này, nghĩa là nếu thuật tốn

sinh khóa RSA 2048 bit chạy trực tiếp trên chíp
SLE97 thì sẽ chỉ mất khoảng xấp xỉ 2.5 giây (tốc độ
trên chíp thực sự sẽ nhanh hơn khoảng gấp 30 lần so
với mô phỏng).

TÀI LIỆU THAM KHẢO
[1]

[2]

[3]

Bảng 3: So sánh hiệu suất của thuật tốn sinh khóa RSA 2048
bit với các thuật tốn sinh khóa khác
Thuật tốn
Trong nghiên cứu (trên chíp thực SL97)
Sinh cặp khóa RSA 2048-bit
Trong cơng bố [24]
Sinh cặp khóa RSA (2048-bit)
(MAXQ1103 EV Kit at 12MHz)
Sinh cặp khóa RSA (2048-bit)
(DS5250 EV Kit at 22.1MHz)

Tốc độ thực thi
trên các nền tảng
phần cứng (giây)
2.5

[4]
[5]


15.63

[6]

122.4
[7]

Các kết quả trong nghiên cứu này [24] về việc thực thi
sinh khóa RSA 2048 bit đã được tích hợp vào chíp
MAXQ1103 và DS5250. Kết quả bảng 3 cho thấy kết
quả thực thi sinh khóa RSA 2048 bit của nhóm tác giả
khi thực hiện trên chip SLE97 đã có nhiều cải thiện so
với thuật tốn sinh khóa trên chíp MAXQ1103 và
DS5250 trong cơng bố [24]

[8]

[9]

Kết quả này đã đạt được tốc độ tương ứng với việc
sinh khóa RSA 2048 bit trên thiết bị ký số Smartsign,
HSM của Utimaco [22] và thiết bị SecureToken ST3
của SecureMetric [22]. Như vậy, thuật tốn sinh khóa
RSA 2048 bit đã cải thiện được tốc độ và đáp ứng
được yêu cầu triển khai trong thực tế. Nó giúp được
thực hiện các giao dịch số an tồn, chống lại được các
tấn cơng hiện tại.

V.


[10]

[11]

[12]

[13]

KẾT LUẬN

Trong nghiên cứu này, sử dụng công cụ µKeil – ARM
có tích hợp cơng cụ mơ phỏng SLE90 Simulator,
SmartCardManager của Infineon để thực hiện tùy biến
thuật toán sinh khóa RSA 2048 bit trong hệ điều hành
Native OS trên chíp SLE97 của Infineon. Kết quả đã
cho thấy được tốc độ xử lý cải thiện rất nhiều và tối ưu
được tài nguyên chiếm dụng của thuật toán trên chip
SLE97. Kết quả này cũng cho thấy, thuật tốn hồn
tồn là đáp ứng được các yêu cầu thực tế để triển khai
thuật toán trong các hệ điều hành Native OS phục vụ
trong các giao dịch ký số điện tử. Áp dụng được thuật
tốn sinh khóa RSA 2048 bit để đảm bảo an tồn thơng
tin của người dùng và chống lại được các tấn cơng hiện
tại.

[14]

[15]


[16]
[17]

[18]

LỜI CẢM ƠN
Nhóm tác giả xin chân thành cảm ơn Học viện Kỹ
thuật mật mã đã tạo điều kiện giúp đỡ nhóm hỗ trợ
trong nghiên cứu này.

ISBN 978-604-80-7468-5

[19]

[20]

362

P. R. C. Standard, “ />N. Stoianov and A. Ivanov, “Public Key Generation
Principles Impact Cybersecurity,” Inf. Secur. An Int. J., vol.
47, no. 2, pp. 249–260, 2020, doi: 10.11610/isij.4717.
T. K. Frederiksen, Y. Lindell, V. Osheter, and B. Pinkas,
“Fast Distributed RSA Key Generation for Semi-honest and
Malicious Adversaries,” 2018, pp. 331–361. doi: 10.1007/9783-319-96881-0_12.
“ /> />W. Rankl and W. Effing, Smart Card Handbook. Wiley,
2010. doi: 10.1002/9780470660911.
P. Ramesh, “ScholarWorks: UMass Amherst Accelerating
RSA Public Key Cryptography via Hardware Acceleration,”
no. April, 2020.
S. Sarna and R. Czerwinski, “Small Prime Divisors Attack

and Countermeasure against the RSA-OTP Algorithm,”
Electronics, vol. 11, no. 1, p. 95, Dec. 2021, doi:
10.3390/electronics11010095.
S. B. Belhaouari, Y. Hamdi, and A. Hamdi, “Revisited
Carmichael’s Reduced Totient Function,” Mathematics, vol. 9,
no. 15, p. 1800, Jul. 2021, doi: 10.3390/math9151800.
S. Rahman, I. Triana, S. Khairani, A. Yasir, and S. Sundari,
“RSA key development using fingerprint image on text
message,” J. Phys. Conf. Ser., vol. 930, p. 012037, Dec. 2017,
doi: 10.1088/1742-6596/930/1/012037.
A. Mohammed and A. Alkhelaifi, “RSA: A number of
formulas to improve the search for p + q p+q,” J. Math.
Cryptol., vol. 11, no. 4, Dec. 2017, doi: 10.1515/jmc-20160046.
K. Li and Q. Cai, “Practical Security of RSA Against NTCArchitecture Quantum Computing Attacks,” Int. J. Theor.
Phys., vol. 60, no. 8, pp. 2733–2744, Aug. 2021, doi:
10.1007/s10773-021-04789-x.
B. Fagin, “Composite Numbers That Give Valid RSA Key
Pairs for Any Coprime p,” Information, vol. 9, no. 9, p. 216,
Aug. 2018, doi: 10.3390/info9090216.
N. Ramanjaneya Reddy, P. C. Reddy, and M.
Padmavathamma, “Study the Impact of Carmichael Function
on RSA,” 2016, pp. 752–756. doi: 10.1007/978-981-10-34336_90.
F. A. AL-Maamori and M. S. Rashid, “Counting Functions to
Generate The Primes in the RSA Algorithm and DiffieHellman Key Exchange,” Ibn AL- Haitham J. Pure Appl. Sci.,
p. 423, Apr. 2018, doi: 10.30526/2017.IHSCICONF.1805.
Z. Zheng and F. Liu, “On the High Dimensional RSA
Algorithm -- A Public Key Cryptosystem Based on Lattice and
Algebraic Number Theory,” pp. 1–18, 2022, [Online].
Available: />“ />H. J. Mahanta and A. K. Khan, “Securing RSA against power
analysis attacks through non‐uniform exponent partitioning

with randomisation,” IET Inf. Secur., vol. 12, no. 1, pp. 25–33,
Jan. 2018, doi: 10.1049/iet-ifs.2016.0508.
K. Suresh, R. Pal, and S. R. Balasundaram, “Two-factorbased RSA key generation from fingerprint biometrics and
password for secure communication,” Complex Intell. Syst.,
vol. 8, no. 4, pp. 3247–3261, Aug. 2022, doi: 10.1007/s40747022-00663-3.
L. Matysiak, “Generalized RSA cipher and Diffie-Hellman
protocol,” J. Appl. Math. Informatics, vol. 39, no. 1–2, pp. 93–
103, 2021, doi: 10.14317/jami.2021.093.
“ />

Hội nghị Quốc gia lần thứ 25 về Điện tử, Truyền thông và Công nghệ Thông tin (REV-ECIT2022)

[21] “www.infineon.com/cms/en/product/security.../sle97/channel.
html”.
[22] “ /> />
ISBN 978-604-80-7468-5

[23] “Infineon-Security-Solutions-PortfolioProductSelectionGuide-v20_02-EN.pdf.”; “UserManual_CardAdapter 3.6 2013-07.pdf.”
[24] M. A. Accelerator and A. Note, “Application Note 4347 RSA
Key Generation Using the DeepCover Secure,” pp. 1–6, 2008.

363



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×