Ứ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

10 513 0
Ứ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

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

Thông tin tài liệu

Ứ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 http://eprint.iacr.org/2002/044/. 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. http://www.nvidia.com/object/cuda_home_new.html. 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. . 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. Ứ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. 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

Ngày đăng: 15/01/2015, 19:24

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan