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

Ứng dụng công nghệ tính toán CUDA trong bài toán khôi phục mật khẩu tệp nén zip

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 (351.05 KB, 10 trang )

Ứng dụng công nghệ tính toán CUDA trong bài
toán khôi phục mật khẩu tệp nén Zip
Phan Đức Dũng, Dương Nhật Tân, Phạm Hồng Phong, Nguyễn Hữu Đức, and
Nguyễn Thanh Thủy
Trung tâm Tính toán Hiệu năng cao
Đại học Bách khoa Hà Nội
Tóm tắt nội dung Bảo vệ dữ liệu bằng mật khẩu như trong các tệp
tài liệu D OC, PDF hay tệp nén RAR, ZIP đã đ ược minh chứng là yếu
dưới những tấn công dạng từ điển. Tuy nhiên thời gian khôi phục mật
khẩu cho các tệp này phụ thuộc nhiều vào kh ông gian tìm kiếm mật
khẩu và hệ thống tính toán. Trong bài báo này, chúng tôi đ ưa ra cách
tiếp cận sử dụng năng lực tính toán song song rất lớn của các bộ xử lý
đồ họa nhằm tăng tốc độ quá trình tìm kiếm khôi phục mật khẩu các
tệp nén. Chúng tôi đã thực hiện khôi phục mật khẩu tệp nén ZIP trên
môi trường lập trình song song CUDA, sử d ụng bộ xử lý đồ họa tính
toán GeForce GTX295 của nVidia. Các kết quả thực nghiệm cho thấy
tốc độ sinh khóa tăng khoảng từ 45 đến 180 lần so với chương trình tuần
tự thực thi trên bộ xử lý Intel Core 2 Quard Q8400 2.66 Ghz. Các kết
quả n ày minh chứng khả năng ứng dụng của công nghệ tính toán trên
các bộ xử lý đồ họa trong lĩnh vực thám mã.
1 Đặt vấn đề
Trong khi khoa học mật mã nghiên cứu các phương pháp mã hóa dữ liệu nhằm
chống lại sự rò rỉ thông tin trong quá trình lưu trữ và trao đổi dữ liệu thì khoa
học thám mã, ngược lại, tìm cách khám phá những thô ng tin được bảo vệ bởi
mật mã. Hai nhánh nghiên cứu này được xem như hai mặt của cùng vấn đề an
toàn an ninh thông tin: sự phát triển của mộ t nhánh luôn thúc đẩy sự phát triển
của nhánh kia và ngược lại.
Trong lịch sử phát triển, sự phát triển vượt trước của mộ t nhánh so với
nhánh còn lại đôi khi mang đến những lợi ích to lớn cho đời sống, thậm chí còn
quyết định vận mệnh của cả một đất nước. Ví dụ như sự thành công trong việ c
thám mã Zimmermann Telegram tr ong thế chiến thứ nhất đã kéo Hoa Kỳ vào


cuộc chiến, hay việc thám mã thành công hệ mã German được đánh giá góp
phần rút ngắn thế chiến thứ hai đi vài tháng[4].
Xuất phát từ cùng một quan điểm về tầm quan tr ọng của thám mã, trong
bài báo này chúng tôi đặt mục tiêu nghiên cứu phương pháp thám mã cho đối
tượng là các tệp nén Zip được bảo vệ bởi mật khẩu. Nguyên thủy, các phương
pháp nén như PKZip, Deflate, LZMA được sử dụng nhằm giảm thiểu kích thước
dữ liệu, từ đó giúp cho việc lưu trữ cũng như tr ao đổi chúng được hiệu quả. Do
việc bảo mật thông tin thường luôn đi kèm với các kỹ thuật lưu trữ và trao đổi
thông tin nên bên cạnh các giải thuật nén hiệu quả, những công cụ nén phổ
biến như WinZip hay WinRar thườ ng tích hợ p khả năng mã hoá thông tin nén,
thông thường là sử dụng những hệ mã đối xứng phổ biến như DES hay AES.
Để thuận tiện cho người dùng, khoá bí mật cho các hệ mã này được sinh ra từ
một mật khẩu do người gửi nhập vào thông qua một hàm băm và được sử dụng
để mã hoá tài liệu. Sau đó mật khẩu được người gửi chuyển đến cho người nhận
qua một kênh an toàn và được ng ười nhận sử dụng để sinh khoá cho quá trình
giải mã. Quá trình mã hoá và giải mã tệp nén Zip được mô tả như trong hình
1.
Nén
Tài liệu
Tài liệu nén
Giải nén
Mã hóa
Giải mã
Hình 1. Mã hóa, giải mã tệp nén Zip
Bài toán thám mã tệp nén Zip được đặt ra ở đây là: cho mộ t tệp nén Zip
được bảo vệ bởi mật khẩu, hãy xác định nội dung tài liệu trong đó mà không cần
sử dụng mật khẩu này. Trong thực tế, với các hệ mã yếu như RC4 hay DES, việc
thám mã có thể được tiến hành thông qua phương pháp tấn công vét cạn trên
không gian khoá trong thời gian chấp nhận được . Các kết quả [3, 5] là những
minh chứng cho kỹ thuật này.

Với các hệ mã mạnh như AES (hệ mã được sử dụng phổ biến trong các phiên
bản mới của WinZip) việc tấn công vét cạn như vậy là không khả thi. AES
[1],tiêu chuẩn mã hóa tiên tiến, là một thuật toán mã hóa khối. AES làm việc
với các khối dữ kiệu 128 bít (4x4 bytes) và khóa của nó có độ dài là 128, 192
hoặc 256 bít. AES có thể dễ dàng thực hiện với tốc độ cao bằng phần mềm
hoặc phần cứng và không đòi hỏi nhiều bộ nhớ. Là một hệ thống mã hóa mạnh,
AES-128/AES-256 với kích thước khóa là 128/256 bít có đến 2
128
/2
256
khả năng
phải thử để có thể tìm ra được mật khẩu ban đầu. Một số nghiên cứu gần đây
như giải thuật XSL[2] cho phép giảm không gian k hóa từ 2
128
khả năng xuống
còn khoảng 2
100
khả năng. Tuy nhiên, ngay cả như vậy, việc thử hết tất cả các
khả năng đó vẫn là không chấp nhận được đối với các hệ thống tính toán thông
dụng.
Tiếp cận của chúng tôi trong bài báo này là không trực tiếp tấn công trên
không gian khoá AES. Thay vào đó chúng tôi nhận thấy rằng khoá cho các hệ
mã của tệp nén Zip được sinh từ mật khẩu ngườ i dùng thông qua một hàm băm
được công bố trong đặc tả tệp nén[8]. Không gian mật khẩu mặc dù lớn nhưng
tính khả thi cho việc thám mã tệp nén dựa trên khô ng gian mật khẩu cao hơn
nhiều so với thám mã dựa tr ên không gian khoá do có thể áp dụng các phương
pháp tấn công từ điển.
Trở ngại lớn nhất cho phương pháp thám mã dưạ trên không gian mật khẩu
này là độ phức tạp tính toán của hàm băm khá cao, cộng thêm với kỹ thuật
salting nhằm chống tấn công tính toán trước của tệp nén Zip khiến cho v iệ c tấn

công vét cạn trở nên rất kém hiệu quả trên các hệ thống tính toán thông dụng.
Để vượt qua trở ngại này, chúng tôi ứng dụng công ng hệ tính toán trên các bộ
xử lý đồ hoạ trong việc sinh khoá và kiểm tra sơ bộ mật khẩu của tệp nén. Đây
là bước quan trọng đầu tiên trong quá trình thám mã tệp nén.
Các phần tiếp theo của bài báo giới thiệu sơ bộ về công nghệ tính toán trên
các bộ xử lý đồ hoạ và kết quả nghiên cứu của chúng tôi trong việc thám mã
tệp nén Zip.
2 CUDA và công nghệ tính toán song song trên các bộ
xử lý đồ hoạ
Trong vài năn gần đây, năng lực tính toán của các bộ xử lý đồ hoạ (GPU) đã
tăng lên với tốc độ đáng kể so với CPU. Tính đến tháng 6/2008, GPU thế hệ
GT200 của NVidia đã đạt tới ngưỡng 933GFlops gấp hơ n 10 lần so với bộ xử lý
hai lõi Intel Xeon 3.2 GHz tại cùng thời điểm. Hình 2 thể hiện sự tăng tố c về
năng lực tính toán của các bộ xử lý đồ hoạ nVidia so với bộ xử lý Intel.
Hình 2. Biểu đồ năng lực tính toán GPU-CPU
Tuy vậy, sự vượt trội về hiệu năng này không đồng nghĩa với sự v ượt trội
về công nghệ. GPU và CPU được phát triển theo hai hướng khác biệt: trong
khi công nghệ C PU cố gắng tăng tốc cho một nhiệm vụ đơn lẻ thì công nghệ
GPU lại tìm cách tăng số lượng nhiệm vụ có thể thực hiện song hành. Chính vì
vậy, trong khi số lượng lõi tính toán trong CPU chưa đạt đến con số 8 lõi thì số
lượng lõi xử lý GPU đã đạ t đến 240 và còn hưá hẹn tiếp tục tăng tới trên 500
lõi trong năm 2010.
Để trả giá cho năng lực tính toán, GPU hy sinh tính linh động của các lõi
xử lý. Hiện tại các lõi xử lý của GPU tại một thời điểm chỉ thực hiện được một
nhiệm vụ duy nhất, do vậy GPU chỉ thích hợp với những bài toán song so ng dữ
liệu trong đó cùng một đoạn mã chương trình được thực thi song song cho nhiều
bộ dữ liệu khác nhau. Rất may là đa số các bài toán yêu cầu năng lực tính toán
lớn đều có thể quy về dạng song song dữ liệu này.
Bên cạnh việc phát triển các bộ xử lý đồ hoạ có năng lực tính toán lớn, các
hãng sản xuất cũng quan tâm tới môi trường phát triển ứng dụng cho các bộ

xử lý đồ hoạ này. CUDA[7] là môi trường phát triển ứng dụng cho các bộ xử lý
đồ hoạ của nVidia, bao gồm một ngôn ngữ lập trình song song dữ liệu cùng với
các công cụ biên dịch, gỡ rối, và giám sát thực thi cho các ứng dụng trên các bộ
xử lý này. Dưới đây là một số đặc điểm chính của ngôn ngữ lập trình do CUDA
hỗ trợ (gọi tắt là ngôn ngữ CUDA).
– Ngôn ngữ CUDA là mở rộng của ngôn ngữ C, do vậy quen thuộc với đa số
người phát triển ứng dụng.
– Mã CUDA chia làm 2 phần: phần thực thi trên CPU và phần thực thi trên
GPU. Phần thực thi trên GPU, còn gọi là kernel, k hi đượ c gọi có thể thực
hiện song song trên hàng ngàn tiến tr ình riêng biệt. Mỗi tiến trình có một
định danh riêng dùng để xác định nhiệm vụ của tiến trình đó.
– Để tránh sự phụ thuộc vào phần cứng, CUDA cho phép người lập trình tùy
ý xác định số lượng tiến trình song s ong, tuy nhiên các tiến trình này cần
được phân theo từng lô (hay còn gọi là các blo ck) với số lượng không quá
512. Cách phân lô này giúp người lập trình không cần quan tâm tơí năng
lực của phần cứng, đồng thời giúp việc tổ chức thực thi được hiệ u quả thậm
chí là trên các GPU khác nhau.
– Bộ nhớ được tổ chức phân cấp bao gồm các lớp sau:
• Bộ nhớ chính: là vùng bộ nhớ dành cho phần mã CPU. Chỉ có phần mã
này có thể truy nhập và sửa đổi thông tin trên đó.
• Bộ nhớ toàn cục GPU: là vùng bộ nhớ mà tất cả các tiến trình của GPU
có thể truy nhập. Người lập trình có thể chuyển dữ liệu từ bộ nhớ chính
sang bộ nhớ này thông qua một số hàm thư viện của CUDA. Bộ nhớ
này thông thường được sử dụng để lưu trữ các dữ liêụ đầu vào và đầu
ra cho các tiến trình song song trên GPU.
• Bộ nhớ chia sẻ: là vùng bộ nhớ mà chỉ các tiến trình trong cùng một
block mới có thể truy nhập được. Đây là bộ nhớ tích hợp ngay trên chip
xử lý nên tốc độ truy nhập dữ liệu cao hơn rất nhiều so với bộ nhớ toàn
cục. Bộ nhớ này thường được sử dụng để lưu trữ các dữ liệu chia sẻ tạm
thời nhằm tăng tốc quá trình sử dụng bộ nhớ.

• Bộ nhớ cục bộ GPU: Là vùng bộ nhớ được cấp phát cho các biến cục bộ
của từng tiến trình GPU và không thể truy nhập được từ các tiến tr ình
khác.
Với khả năng song song hoá dữ liệu với cực nhiều tiến trình như vậy, GPU là
giải pháp thích hợp cho bài toán thám mã mật khâủ tệp nén trong đó mỗi tiến
trình có thể đảm nhận việc thử một mật khẩu trên không gian tìm kiếm. Phần
tiếp theo của bài báo sẽ giới thiệu cách tiếp cận của chúng tôi trong việc thám
mã tệp nén Zip, hay c ụ thể hơn là việc khôi phục lại mật khẩu của tệp nén, trên
GPU sử dụng CUDA.
3 Khôi phục mật khẩu tệp nén Zip trên bộ xử lý đồ họa
Như đã giới thiệu trong chương 1, cách tiếp cận của chúng tôi trong bài toán
thám mã tệp nén Zip là tấn công trên không gian mật khẩu thay vì tấn công
trực tiếp trên không gian khoá AES. Theo đặc tả của tệp nén Zip [8], việc kiểm
tra một mật khẩu hợp lệ bao gồm các bước:
1. Sinh khoá AES từ mật khẩu cho trước sử dụng hà m băm PBKDF2(pw,salt,dkLen)
với đầu vào là mật khẩu pw, mộ giá trị ngẫu nhiên salt được lưu trong tệp
nén, và kích thước khoá dkLen. Hàm PBKDF2 có độ phức tạp tính toán khá
lớn. Thực tế hàm này thực hiện 1000 lần liên tiếp giải thuậ t HMAC-SHA1,
do vậy ngăn chặn phần nà o những tấn công từ các hệ thống tính toán thông
dụng. Giá tr ị salt được sử dụng nhằm chống lại các tấn c ông tính toán
trước.
2. Sử dụng khoá AES để giải mã và giải nén tài liệu đồng thời sinh ra một giá
trị kết quả. Nếu việ c giải mã thành công thì giá tr ị kiểm tra này sẽ khớp với
một giá trị kiểm tra lưu trữ trong tệp nén.
Với đặc tả như vậy, nếu với mỗi mật khẩu ta thực hiện đầy đủ các tiến trình
này thì thời gian cần thiết để kiểm tra một không gian mật khẩu cũng sẽ là cực
lớn do việc giả i mã, giải nén toàn bộ tài liệu là cực kỳ tốn kém. Thay vào đó,
ở bước 2 ta có thể áp dụng kỹ thuật giải mã giải nén một phần cùng với các
kỹ thuật nhận dạng bản rõ để phát hiện nhanh xem khoá AES đưa vào có phải
là khoá hợp lệ không. Thêm vào đó, để thuận tiện cho ngườ i dùng, các công cụ

như WinZip cho phép phát hiện nhanh mật khẩu k hông chính xác bằ ng cách
lưu trong header của tệp nén một giá trị kiểm tra mật khẩu PVV có kích thướ c
2 byte. Giá trị này sẽ được đối sánh với một phần kết quả được sinh ra bởi hàm
băm PBKDF2 kể trên. Kết quả đối s ánh sẽ từ chôí phần lớn những mậu khẩu
không hợp lệ. Một mật khẩu khô ng bị từ chối cũng chưa chắc là mật khẩu hợp
lệ, tuy nhiên số lượng những mật khẩu không bị từ chối này nhỏ hơn đáng kể so
với không gian mật khẩ u ban đầu. Chúng tôi gọi những mật k hẩu đó là những
mật khẩu ứng cử.
Dựa trên những phân tích như trên, quá trình khôi phục mật k hẩu tệp nén
được chúng tôi phân chia ra làm 2 pha:
– Pha 1. Xác định tập mật khẩu ứng cử. Pha này dựa trên giá tr ị kiểm
tra mật khẩu PVV để sinh ra một tập mật khẩu ứng cử từ một không gian
mật khẩu cho trước.
– Pha 2. Kiểm tra từng mật khẩu ứng cử bằng kỹ thuật nhận dạng
bản rõ
Trong bài báo này, chúng tôi tập trung giải quyết pha thứ nhất của quá trình
này. Nội dung còn lại của phần này mô tả ý tưởng và giải pháp thực hiện cho
việc xác định các mật khẩu ứng cử từ không gian mật khẩu cho trước.
3.1 Ý tưởng chung
Do các tiến trình trên GPU cần phải được phân chia thành các block như đã
trình bày trong phần 2, không gian mật khẩu cũng cần được phân chia thành
các lô tương ứng. Giả sử tạ i mỗi thời điểm, mỗi tiến trình GPU có thể kiểm tra
một mật khẩu và mỗi block có tối đa p tiến trình, thì không gian mật khẩu có
thể được phân chia thành các lô chưá không quá p mật khẩu. Hình 3 mô tả việc
kiểm tra mật khẩu theo lô như vậy.
Hình 3. Kiểm tra mật khẩu theo lô
Tuy nhiên, do mật khẩu thực chất là các xâu ký tự, việc phân chia đều không
gian mật khẩu không đơn giản, cũng như không phù hợp với các phương thức
xử lý trên GPU. Vì vậy, ban đầu chúng tôi chia không gian mật khẩu theo độ
dài của chúng, sau đó mới phân lô cho từng tập con này. Không gian mật khẩu

được định nghĩa như sau:
– Gọi S là tập hợp tất cả c ác ký tự sinh mật khẩu (bảng chữ cái), n = |S| là
số các ký tự trong bảng chữ cái.
– P W
i
là tập mật khẩu có độ dài i
– k là độ dài tố đa của mật khẩu
– P W = P W
1
∪ P W
2
∪ · · · ∪ P W
k
là tập tất cả các mật khẩu có độ dài tối đa
k
Việc phân lô được thực hiện cho từng tậ p P W
i
. Hình 4 mô tả sự phân lô
đó. Ví dụ, giả sử tập ký tự S là {a-z, A-Z, 0-9}, số lượng ký tự trong S sẽ là
n = 62 ký tự, số lượng tiến trình chạy tối đa trong một lô là p = 1024. Như vậy
nhóm 1 (tương ứng tập mật khẩu có độ dài 1) có 62 mật khẩu, được chia làm
1 lô. Nhóm 2 (tương ứng tập mật k hẩu có độ dài 2) gồm 3844 mật khẩu được
chia làm 8 lô. Nhóm 3 gồm 238 328 mật khẩu được chia thành 466 lô, vv
Giải thuật kiểm tra mật khẩu sẽ được cài đặt thành một kernel. Mỗi lần kích
hoạt kernel này sẽ thực hiện kiểm tra cho một lô p mật khẩu như đã phân chia.
3.2 Giải thuật thực hiện
Như đã giải thích bên trên, giải thuật kiểm tra mật khẩu ứng cử được thực hiện
song song, theo độ dài của mật khẩu. Đầu tiên, giải thuật tính số lô cần thiết
của một nhóm mật khẩu có độ dài xác định i. Sau đó, với mỗi một lô p mật
Hình 4. Phân lô mật khẩu theo độ dài

khẩu, giải thuật tính số thứ tự của các mật khẩu trong lô đó làm đầu vào cho
hàm kiểm tra mật khẩu được thực hiện trên một tiến trình. Mã giả của giải
thuật như sau:
for i = 1 to k
{
m = |S
i
| ; // tổng số mật khẩu cần thử có độ dài i
p = thread_numbers; // số tiến trình s ong song tối ưu cho GPU
l = CEIL(m/ p); // Số lô của các mật khẩu có độ dài i
for j = 0 to l - 1
{
base = j*p; // thứ tự mật khẩu đầ u tiên của lô;
for id = 0 to p-1 in parallel
K
i
(base, id); //Hàm sinh và kiểm tr a mật khẩu
}
}
Hàm sinh kiểm tr a mậ t khẩu ứng cử K
i
nhận đâù vào là thứ tự của mật
khẩu đầu tiên của lô trong nhó m i (base) cùng với thứ tự trong lô id của mật
khẩu cần kiểm tra. Trong thực tế, thứ tự id được sinh ra một cách tự động khi
kích hoạt kernel cho một lô, và tiến trình xử lý có thể lâý được giá trị này thông
qua một số biến hệ thống của CUDA.
Hàm K
i
(base, id) sẽ sinh ra mật khẩu tại vị trí base + id của nhóm, sau
đó truyền mật khẩu vào hàm băm P BKDF 2 để sinh khóa AES và một giá trị

T estP V V tương ứng với mật khẩu đó. Giá trị khóa này được đem so sánh với
giá trị kiểm tra mật khẩu P V V lưu trong phần header của tệp nén để xác định
xem mật khẩu vừa được sinh có phải là một mật khẩu ứng cử hay không. Mã
giả của hàm này như sau:
int K
i
(base, id)
{
pw = GenP W
i
(base, id);
TestPVV = PBKDF2(pw, salt, dkLen);
return (TestPVV == PVV);
}
Trong đoạn mã trên hàm GenP W
i
(base, id) có chức năng sinh mật khẩu dựa
vào số thứ tự của mật khẩu base và id. Mỗi GPU có hàng ngàn tiến trình chạy
song song, mỗi tiến trình tự đảm nhiệm sinh mật khẩu và kiểm tra độc lập một
mật khẩu, cho biết mật khẩu đó có phải là một phần tử trong tập các mật khẩu
ứng cử hay không. Vấn đề đặt ra là làm sao để mỗi tiến trình trên GPU sinh
không lặp lại mật khẩu. Giải thuật sinh xâu song song được thiết kế dựa vào
định danh tiến trình. Mỗi tiến trình có một đinh danh riêng id . Ngoài id, còn
cần thêm độ dài mật khẩu cần sinh i và vj trí cơ sở base. Về lý thuyết, nếu số
tiến trình trên GPU đúng bằng |P W
i
| thì tại một thời điểm mỗi tiến trình sẽ
kiểm tra đúng mộ t mật khẩu và base = 0. Nhưng nếu |P W
i
| lớn hơn số tiến

trình tối ưu trên một GPU thì base là thứ tự của xâu đầu tiên của lô tiếp theo
cần kiểm tra. Hàm GenP W
i
(base, id) được định nghĩa như sau:
GenP W
i
(base, id) = x
i−1
· · · x
0
x
0
= S[((base + id) div n
0
) mod n]
x
1
= S[((base + id) div n
1
) mod n]
x
i−1
= S[((base + id) div n
i−1
) mod n]
3.3 Thử nghiệm và đánh giá
Giải thuật sinh mã và kiểm tra mật khẩu ứng cử cho pha 1 của bài toán khôi
phục mật khẩu tệp nén Zip đã được chúng tôi xây dựng và triển khai thử nghiệm
tại trung tâm tính toán hiệu năng cao trường Đại học Bách khoa Hà Nội. Môi
trường thử nghiệm bao gồm một máy tính PC được trang bị

– Bộ xử lý Intel Core 2 Quad Q8400 2.66 Ghz
– 8GB RAM
– Hai card đồ hoạ kép NVIDIA GeForce GTX 295 (tổng cộng 4 GPU)
– Hệ điều hành Centos OS 5.3
Kết quả là với đầu vào là tập ký tự chữ cái hoa, chữ cái thường và các chữ
số S = {a − z, A − Z, 0 − 9} và số tiến trình tối ưu chạy song song là p = 512.
Các giải thuật song song được c ài đặt trên môi trường phần cứng như trên cho
thấy tốc độ sinh khóa và kiểm tra khóa, tốc độ tìm ra mật khẩu ban đầu tăng
rõ rệt so với việc thực hiện trên một tiến trình CPU. Hình 3.3 minh hoạ hiệu
năng thực hiện công việc xác định tập mật khẩu ứng cử trên CPU và GPU.
Kết quả này cho thấy hiệu năng kiểm tra mật khẩu ứng cử tă ng đáng kể (sấp
xỉ 45 lần cho 1 GPU và 180 lần cho hệ thống 4 GPU) khi thực hiện trên GPU.
Mặc dù chưa thử nghiệm được với những không gian mật khẩu có độ dài lớn,
nhưng thử nghiệm cho thấy khả năng ứng dụng cao của GPU trong bài toán
khôi phục mật khẩu tệp nén.
Độ dài mật khẩu Số lương mật khẩu CPU 1 GPU 2 GPU 4 GPU
1 62 4s 22381ms 22384ms 22384ms
2 3906 8m 22382ms 22395ms 22391ms
3 242234 2.25h 180s 90s 45s
4 15018570 5.25d 168m 84m 42.5m
Hình 5. Thời gian xác định tập mật khẩu ứng cử trên CPU và GPU
4 Kết luận
Với mục tiêu nghiên cứu ba n đầu đã đặt ra là khôi phục mật khẩu cho tệp nén
Zip, các kết quả nghiên cứu đã hoàn thành được pha đầu tiên là bước sinh ra tập
hợp mật khẩu ứng cử, đây là một bướ c rất quan trọng trong quá trình giải mã,
giải nén tệp đã được mã hóa, tiến tới khôi phục mật khẩu cho tệp nén. Và các
kết quả đã cho thấy tốc độ thực hiện bằng giải thuật song song cho hiệu năng
lớn hơn đáng kể (45 lần cho hệ thống 1GPU và 180 lần cho hệ thống 4GPU) so
với giải thuật tuần tự trên 1 CPU.
Có nhiều kỹ thuật khác mà chúng tôi nhận thấy có thể áp dụng để cải thiện

giải thuật đã đề xuất. Hiện tại chúng tôi sử dụng cách tiếp cận sinh mật khẩu
song song, số lượng mật khẩu cần kiểm tra phụ thuộc độ dài của mật khẩu cần
kiểm tra. Khi số kí tự bảng chữ cái cơ sở tăng lên và độ dài mật khẩu cần kiểm
tra tăng lê n, thì số lượng mật khẩu tăng lên rất nhanh kéo theo tính khả thi
của giải pháp thấp. Hơn nữa, việc sinh các xâu là độc lập nhau, và đã coi xác
suất xuất hiện của mỗi xâu là tương đương nhau. Nhưng trên thực tế, mỗi x âu
sinh khác nhau, xác suất nó là một mật khẩu người dùng là khác nhau, dựa trên
nghiên cứu về sự nhớ mật khẩu và thói quen của người dùng. Trong khâu sinh
xâu mật khẩu song song, ta có thể áp dụng các k ỹ thuật phâ n tích cấu trúc mật
khẩu [9, 6], ưu tiên duyệt các cấu trúc mật khẩu có khả năng xuất hiện cao, từ
đó có thể cải thiện được tốc độ tìm kiếm mật khẩu chính xác.
Một hướng tiếp theo cho bà i toán hôì phục mật khẩu là việc ứng dụng công
nghệ tính toán trên GPU cho pha thứ ha - pha giải mã, giải nén và nhận dạng
bản rõ. Với không gian mật khẩu ban đâù lớn, số lượng các mật khẩu ứng cử
cũng không nhỏ (có thể giảm 6 5536 lần nếu sử dụng 2 byte giá trị PVV). Việc
tận dụng năng lực tính toán của GPU trong bài toán, giải mã, giải nén,và kiểm
tra bản rõ cũng sẽ mang laị những lợi ích đáng kể về hiệu năng.
Để giảm thời gian tìm kiếm mật khẩu, việc tăng cường năng lực tính toán
hệ thống cũng là một giải pháp đáng quan tâm. Giải pháp cụm tính toán GPU,
kết chùm các máy tính có cài đặt GPU, đáng được quan tâm cho việc mở rộng
năng lực tính toán này.
Cuối cùng, những giải pháp được đề xuất trong bài báo này hoàn toàn có
thể chỉnh sửa để áp dụng cho những bài toán thám mã khác như thám mã tệp
DOC, tệp PDF có bảo vệ bở i mật khẩu.
Tài liệu
1. F. I. P. S. P. 197. Advanced encryption standard (aes), 2001.
2. N. T. Courtois and J. Pieprzyk. Cryptanalysis of block ciphers with overdefined sys-
tems of equations, 2002. Preprint is available at />3. E. F. Foundation. Cracking DES: Secrets of Encryption Research, Wiretap Politics
and Chip Design. O’Reilly & Associates, Inc, 1998.
4. D. Kahn. The Codebreakers - The Story of Secret Writing. 1967.

5. A. Klein. Attacks on the rc4 stream cipher. Des. Codes Cryptography, 48(3):269–286,
2008.
6. A. Narayanan and V. Shmatikov. Fast dictionary attacks on passwords using time-
space tradeoff. In CCS05: Proceedings of the 12th ACM conference on Computer
and communications security, pages 364–372, New York , NY, USA, 2005. ACM.
7. NVI DIA. />8. PKWARE. Zip file format specification, 2007.
9. M. Weir, S. Aggarwal, B. d. Medeiros, and B. Glodek. Password cracking using
probabilistic context-free grammars. In SP09: Proceedings of the 2009 30th IEEE
Symposium on Security and Privacy, pages 391–405, Washington, DC, USA, 2009.
IEEE Computer Society.

×