Những ƣu điểm của GPU so với CPU

Một phần của tài liệu Nghiên cứu độ an toàn của hàm băm MD5 (Trang 48)

Trong những năm gần đây, sức mạnh tính tốn của GPU xử lý đồ họa đã tăng đáng kể so với CPU. Cho đến tháng 6 năm 2008, thế hệ GPU GT200 của NVIDIA đã đạt đến ngƣỡng 933 GFLOPS, gấp hơn 10 lần so với bộ vi xử lý lõi kép Intel Xeon 3,2 GHz cùng thời điểm. Đồ thị sau đây cho thấy một sự gia tăng về sức mạnh tính tốn của bộ xử lý đồ họa NVIDIA so với bộ vi xử lý Intel.

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

Hình 3. 3. Biểu đồ so sánh sự phát triển của GPU và CPU

Sự vƣợt trội này khơng bao hàm là sự vƣợt trội về cơng nghệ, bởi vì GPU và CPU đƣợc phát triển theo hai hƣớng khác nhau: trong khi cơng nghệ CPU tăng tốc là nhiệm vụ duy nhất, thì cơng nghệ GPU sẽ cố gắng tăng số lƣợng các nhiệm vụ cĩ thể đƣợc thực hiện song song. Nhƣ vậy, trong khi số lƣợng lõi trong CPU thơng thƣờng đã khơng đạt đƣợc 8 lõi đƣợc nêu ra, số lƣợng lõi trong GPU đơn đã đạt đến 240 và cũng hứa hẹn sẽ tiếp tục tăng đến 600 lõi trong năm 2013 [11][12].

Hình 3.4. So sánh số nhân của GPU và CPU

GPU chỉ phù hợp với các vấn đề về dữ liệu song song, trong đĩ các mã cùng một chƣơng trình sẽ đƣợc thực hiện song song cho một số bộ dữ liệu khác nhau. Một điều may mắn là hầu hết các vấn đề yêu cầu sức mạnh tính tốn lớn cĩ thể đƣợc chuyển đổi sang một kiểu dữ liệu song song. Bên cạnh

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

những nỗ lực cải thiện khả năng tính tốn GPU, các nhà sản xuất GPU cũng quan tâm cung cấp mơi trƣờng phát triển ứng dụng tốt hơn cho các nhà phát triển để cĩ thể lập trình cho GPU dễ dàng hơn. NVIDIA CUDA là một ví dụ điển hình cho những nỗ lực đĩ. Sau đây là một số tính năng chính của ngơn ngữ lập trình hỗ trợ CUDA (gọi là ngơn ngữ CUDA):

Ngơn ngữ CUDA là một phần mở rộng của ngơn ngữ C, do đĩ quen thuộc với hầu hết các nhà phát triển.

Mã CUDA được chia thành hai phần: một phần thực thi trên CPU và phần khác thực thi trên GPU – gọi là các lõi song song, cĩ thể được thực thi song song trên hàng ngàn các đường thực hiện. Mỗi đường cĩ một định danh duy nhất được sử dụng để xác định nhiệm vụ của mình.

Memory is hierarchically organized for easy usage Bộ nhớ được tổ chức theo kiểu thức bậc (hệ thống dọc) để dễ dàng cho việc sử dụng.

Với khả năng thực hiện trên các dữ liệu song song đồng thời trên nhiều các thread, GPU là một sự lựa chọn thích hợp cho việc giải mã MD5, ở đĩ, mỗi thread thực hiện kiểm tra một mật khẩu trong khơng gian mật khẩu cần xác minh. [11][12]

3.3.2. Sử dụng 5

Đa số việc giải mã MD5 trên GPU đều chỉ thực hiện trên một nút đƣợc trang bị nhiều card đồ họa. Chƣa cĩ bất kỳ một thực nghiệm nào đƣợc tiến hành trên một cụm bao gồm các nút, mỗi nút đƣợc trang bị nhiều card.

Trong đề tài này, học viên đề xuất ý tƣởng giải mã MD5 trên một cụm máy tính bao gồm hai nút, mỗi nút đƣợc trang bị nhiều card đồ họa NVIDIA (gọi là một cụm GPU) [14][16][17].

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

Bởi vì các tiến trình trên GPU cĩ thể đƣợc chia thành các khối nhƣ đã nêu trên, do vậy khơng gian tìm kiếm mật khẩu cũng phải đƣợc chia ra từng

đoạn tƣơng ứng. Giả sử rằng khơng gian mật khẩu đầu vào bao gồm n mật

khẩu, để kiểm tra n mật khẩu, chúng ta cần phải gọi liên tục (n / p) lần, mỗi

lần kiểm tra song song một nhĩm p mật khẩu, do đĩ, việc tìm kiếm mật khẩu

khơng gian cĩ thể chia thành các lơ tƣơng ứng, nhƣ đƣợc mơ tả trong hình sau (Kiểm tra mật khẩu song song)

Hình 3.5. Mơ tả chiến lược kiểm tra mật khẩu song song

Đầu tiên, chia khơng gian tìm kiếm mật khẩu bằng độ dài của mật khẩu, sau đĩ chia thành nhiều đợt cho từng các tập con. Khơng gian tìm kiếm mật khẩu đƣợc xác định nhƣ sau:

- Các bộ ký tự đƣợc sử dụng cho mật khẩu tạo ra đƣợc ký hiệu là S (charset), n = | S | là số phần tử của tập S.

- PW i là tập hợp các mật khẩu cĩ độ dài i.

- k là chiều dài tối đa của mật khẩu.

- PW = PW 1 U PW 2 U … U PW k là tập hợp của tất cả các mật khẩu

cĩ độ dài là nhỏ hơn so với chiều dài tối đa k.

Chia mật khẩu vào các nhĩm đƣợc áp dụng cho mỗi tập PWi. Hình dƣới mơ tả

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

Hình 3. 6. Chia mật khẩu vào các nhĩm

Ví dụ, giả sử rằng các bộ ký tự cơ bản S là {az, AZ ,0-9}, với số lƣợng ký tự n = 62, số lƣợng tối đa các thread cĩ thể chạy song song trong một đợt (nhĩm) là p = 1024. Do đĩ, tập đầu tiên cĩ 62 mật khẩu (tƣơng ứng với tập hợp các mật khẩu cĩ độ dài bằng1), đƣợc chia vào một nhĩm. Tập thứ 2 cĩ

3844 mật khẩu (tƣơng ứng với các thiết lập mật khẩu cĩ độ dài của 2 = 62 1 +

62 2), đƣợc chia thành 8 nhĩm. Các thiết lập thứ ba chứa 238.328 mật khẩu,

chia thành 466 nhĩm, … Chia nhĩm theo chiều dài mật khẩu

Các thuật tốn kiểm tra đƣợc cài đặt nhƣ một hạt nhân - kernel . Kích

hoạt hạt nhân này, chƣơng trình sẽ tiến hành kiểm tra đồng thời một nhĩm p mật khẩu. Vì vậy, các nhĩm mật khẩu đƣợc kiểm tra liên tục, và các mật khẩu trong mỗi nhĩm đƣợc kiểm tra một cách song song trên các GPU[14][16][17].

Thực hiện thuật tốn

Nhƣ đã đề cập ở trên, việc giải mã thuật tốn MD5 đƣợc thực hiện song song bằng độ dài của mật khẩu. Đầu tiên thuật tốn sẽ tính tốn số các nhĩm cần thiết cho một tập hợp các mật khẩu cĩ độ dài i. Sau đĩ, với mỗi lơ p mật khẩu, thuật tốn sẽ tính tốn các số thứ tự cho mỗi mật khẩu trong nhĩm đĩ, giá trị này là một đầu vào cho các chức năng kiểm tra mật khẩu thực hiện trên mỗi thread. Mã giả của thuật tốn đƣợc mơ tả trong hình.

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

Trong hình, chức năng tạo ra và kiểm tra mật khẩu K i cĩ đầu vào: số

thứ tự của các mật khẩu đầu tiên trong nhĩm của tập PW i – base và số thứ tự

của các mật khẩu cần phải đƣợc kiểm tra trong nhĩm này – id. Số thứ tự id đƣợc tự động tạo ra khi kích hoạt hạt nhân một nhĩm và các thread thực hiện tính tốn này dựa trên một số biến hệ thống của CUDA.

for i = 1 to k {

/*the total number of passwords having the length of i */

m = |PWi|;

/*the maximum number of threads in parallel*/ p = thread_numbers;

/*the necessary number of batches for verifying passwords having the length of i*/

l = CEIL(m/ p); for j = 0 to l – 1 {

/*the order number of the first password in the batch*/ base = j*p;

for id = 0 to p-1 in parallel

Ki(base, id); /*the function of generating and checking passwords*/

} }

Giả mã của thuật tốn giải mã MD5 trên GPU

Hàm K i (base, id) sẽ tạo ra các mật khẩu tại vị trí (base+id)th trong khơng

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

của hàm băm này đƣợc đem so sánh với MD5 ban đầu để xem mật khẩu là chính xác hay khơng. Giả mãcủa hàm này nhƣ sau:

int Ki(base, id){ pw = GenPWi(base, id); TestMD5hash = MD5encode(pw); return (TestMD5hash == MD5hash);

}

Giải mã của hàm tạo và kiểm tra mật khẩu

Hàm GenPWi (base, id) sẽ tạo ra mật khẩu dựa trên các giá trị base và id. Một

GPU cĩ hàng nghìn thread song song, mỗi thread cam kết tạo ra và kiểm tra một mật khẩu độc lập, quyết định cĩ mật khẩu là chính xác hay khơng. Khĩ khăn là ở chỗ làm thế nào các mật khẩu khơng bị lặp lại trên các GPU. Thuật tốn sinh các mật khẩu tạo ra (các chuỗi) đƣợc thiết kế dựa trên định danh của thread. Mỗi thread cĩ một id xác định, thêm nữa thuật tốn cũng cần dộ dài của mật khẩu i và vị trí cơ bản base. Về lý thuyết, nếu số lƣợng các thread

trên GPU bằng |PWi| sau đĩ tại một thời điểm, mỗi thread sẽ kiểm tra chỉ cĩ

một mật khẩu và giá trị base là 0. Nhƣng nếu giá trị | PWi| lớn hơn số lƣợng

tối đa của các thread trên một GPU thì base là số thứ tự của mật khẩu đầu tiên của nhĩm tiếp theo cần phải đƣợc kiểm tra. Chức năng tạo ra các chuỗi (mật khẩu) đƣợc định nghĩa nhƣ sau: GenPWi(base, id) = xi−1...x0 with:

x0 = S[((base + id) div n0) mod n] x1 = S[((base + id) div n1) mod n] . . .

xi-1 = S[((base + id) div ni−1) mod n] Chức năng tạo mật khẩu

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

Ví dụ, giả định rằng S = {abc123}, độ dài của mật khẩu cần phải đƣợc tạo ra len là 3, thứ tự để mật khẩu = base + id là 100. Tính tốn dựa trên cơng thức

trên, phân tích 100, nhƣ sau: 100 = 2.6 2

+ 4.6 1 + 4.60. Vì vậy, chuỗi (mật

khẩu) cần phải đƣợc tạo ra là "c22" [14][16][17].

Thực hiện các thuật tốn trên cụm GPU

Căn cứ vào chiến lƣợc song song các thuật tốn trên card đồ họa nhƣ đã

đề cập ở trên, chúng ta cần phân chia dữ liệ ật khẩu) vào các nút

của cluster GPU để thực hiện các thuật tốn trên mỗi GPU của từng nút của cluster.

Giả sử rằng cụm GPU cĩ n_client các nút, mỗi nút đƣợc trang bị

GPUs_node i GPU. Các dữ liệu ban đầ ở và chiều dài tối đa

của mật khẩu cần phải đƣợc tạ ợc cập nhật trong quá

trình này là số thứ tự củ . Nhƣ đã nêu trên, việc

tính tốn giá trị base phù hợp với GPU trên mỗi nút tính tốn là rất quan trọng

bở ị ải đƣợc kiểm tra. Để làm điều này, chúng ta

khởi tạo base ở hai cấ .

, chƣơng trình cần phải xác định base cho n_client ựa trên

số lƣợng GPU của mỗi nút - GPUs_node i (0 <= i <= n_client-1) Với nút 0,

base sẽ là số thứ tự củ ầu tiên của khơng gian mật khẩu (0). Với nút

1, base sẽ là số thứ tự (GPUs_node 0) . Nhìn chung, vớ

(GPUs_node0 + GPUs_node1 + ...+ GPUs_node i-1

.

Sau khi xác định base cho mỗi nút, chƣơng trình sẽ thực hiện phân tích

mật mã song song trên GPU với giá trị khởi tạ ỗi GPU nhƣ sau:

cơ sở của GPU thứ = cơ bản của nút i + j. Một khi hồn tồn kiể

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

. Tơi biểu thị totalGPU

là tổng số GPU trên tất cả các nút, do đĩ, căn cứ số thứ tự của mỗi GPU cần

phải đƣợc bổ , tức là trong mỗi lần lặ

ểm tra song song[14][16][17].

Giả mã mơ tả nhiệm vụ thực hiện trên cụm đƣợc thể hiện trong hình sau.

/*******************ASSUMPTION******************** np -> the number of processes of MPI, is equal to the number nodes of cluster – n_client.

base_nodei->the value base initialized on the ith node.

GPUs_nodei -> the number of GPUs on the ith node.

p -> the number of passwords on one batch, is equal to the number of threads in parallel.

k -> the maximum length of passwords.

**********************************************/ Initialize_MPI;

Calculate the number of GPUs on each node;

for i = 0 to np-1 in parallel

/* Initialize base at node level */

base_nodei = (GPUs_node0 + GPUs_node1 + ... +

+ GPUs_nodei-1)*p;

/* Initialize base at GPU level */

for j = 0 to GPUs_nodei

base_GPUj = base_nodei + j*p;

for len = 1 to k do {

/*Call kernels on each node to inspect batches of passwords;*/

for id = 0 to p-1 in parallel

Klen(base_GPUi, id);

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

base_GPUi += totalGPU*p;

}

while ( not end of PWlen)

Thực hiện các thuật tốn trên cụm GPU.

Kết quả thử nghiệm

Việc giải mã MD5 dựa trên các cluster GPU, đã đƣợc triển khai trên mơi trƣờng thử nghiệm, một cụm GPU bao gồm hai nút, một nút đƣợc trang bị một card đồ họa kép NVIDIA GeForce GTX 295, một card Tesla C1060, và nút cịn lại đƣợc trang bị 2 card đồ họa kép NVIDIA GeForce GTX 295.

Kết quả đƣợc kiểm tra bởi các đầu vào: S = {az, AZ ,0-9}, số thread trong một khối là 128, số các khối là 256 (16x16). Các thuật tốn song song thực hiện trên mơi trƣờng phần cứng nêu trên chỉ ra rằng tốc độ tạo ra và kiểm tra mật khẩu, tốc độ khơi phục mật khẩu tăng đáng kể khi so sánh với phiên bản dựa trên CPU. Bảng sau so sánh tốc độ tạo và kiểm tra mật khẩu trên GPU và trên CPU.

Số lƣợng CPU / GPU Số lƣợng các mật khẩu đƣợc kiểm tra trong một giây

1CPU 1,436,192 khĩa/s

1GPUs 194,379,500 khĩa/s

2GPUs 352,468,356 khĩa/s

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

7GPUs 918,472,592 khĩa/s

Bảng 3.3. So sánh tốc độ của Tạo và Kiểm tra các khĩa trên CPU / GPU

Thời gian cho Phục hồi mật khẩu trên GPU Chiều dài tối đa

của mật khẩu

Số lƣợng mật khẩu 1 GPU 2GPUs 4GPUs 7GPUs

1 62 0.33ms 0.28ms 0.25ms 0.23ms 2 3,906 0.65ms 0.58ms 0.44ms 0.47ms 3 242,234 2 ms 1.4ms 0.88ms 0.87ms 4 15,018,571 76 ms 47ms 22ms 16ms 5 931,151,403 5 s 2.9s 1.4 s 1s 6 57,731,386,987 318s 194s 91 s 66s 7 3,579,345,993,195 5h 7m 2h 59m 1h 38m 1h 14m 8 221,919,451,578,091 13d 5h 8m 7d 6h 54m 3d 18h 54m 2d 19h 7m

Bảng 3.4. Thời gian cho Phục hồi mật khẩu trên GPU

Theo bảng 3.16 ta cĩ thể thấy, trong 1 giây cĩ thể kiểm tra đƣợc 918.472.592 mật khẩu. Nếu so với việc kiểm tra trên các CPU thì tốc độ tạo

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

và kiểm tra mật khẩu tăng khoảng 135 lần (trên một GPU), 472 lần (4 GPU) và 639 lần (với 7 GPU) so với các phiên bản dựa trên CPU. Bảng 3.17 là thời gian để khơi phục mật khẩu (cĩ chiều dài tối đa 1-8 ký tự) trên GPU. Với hệ thống thử nghiệm hiện tại, thời gian để cĩ thể khơi phục mật khẩu MD5 với độ dài 7 ký tự - thuộc tập hợp{az, AZ ,0-9} – là cĩ thể chấp nhận đƣợc. Các thí nghiệm chứng minh các ứng dụng tiềm năng của Cluster GPU trong lĩnh vực phân tích mật mã.

3.3.3. Kết luận về độ an tồn MD5

Với sự phát triển mạnh mẽ về cơng nghệ chế tạo các thiết bị phần cứng giúp tăng tốc quá trình tính tốn và đặc biệt là khả năng thực hiện trên các dữ liệu song song của GPU. MD5 trở nên khơng thật sự an tồn trong việc bảo vệ dữ liệu ngƣời dùng. Một mật khẩu cĩ độ dài 10 kí tự cĩ thể bị tìm ra trong vịng vài giờ đồng hồ. Vì vậy các tổ chức đang dần chuyển sang sử dụng các phƣơng thức mã hĩa an tồn hơn nhƣ SHA-384, SHA-512 nhƣng do MD5 đƣợc sử rộng rãi trong thực tế nên việc chuyển đổi cũng cần nhiều thời gian. Giải pháp đƣợc đƣa ra là sử dụng kết hợp các phƣơng pháp mã hĩa nhằm mang lại hiệu quả.

3

Tìm hiểu các phƣơng pháp tấn cơng hàm băm phổ biến: -Tấn cơng dựa trên lý thuyết ngày sinh

-Tấn cơng mở rộng chiều dài trên MD5 (Length-Extension Attack) -Tấn cơng thuật tốn

-Tấn cơng theo nguyên lý vét cạn

Đề xuất sử dụng các bộ xử lí đồ họa đa nhân tấn cơng khơi phục mật khẩu MD5 theo nguyên lý vét cạn nhằm đánh giá độ an tồn.

Số hóa bởi Trung tâm Học liệu http://lrc.tnu.edu.vn/

Trả lời câu hỏi đặt ra ở đầu chƣơng: Làm thế nào để chủ động đánh giá mức độ an tồn của MD5?

PHỤ LỤC

Mơ phỏng quá trình demo tấn cơng MD5 bằng cluster GPU

Nhƣ chúng ta đã biết các hệ thống sử dụng phƣơng thức mã hĩa mật khẩu bằng MD5 sẽ lƣu vào database các giá trị băm tƣơng ứng với đầu vào là

Một phần của tài liệu Nghiên cứu độ an toàn của hàm băm MD5 (Trang 48)

Tải bản đầy đủ (PDF)

(65 trang)