Những kiến thức căn bản trong luận văn này là kết quả của ba năm (2013-2016) tôi có may mắn được các thầy cô giáo trong trường Học viện Kỹ thuật Quân sự trực tiếp giảng dậy, đào tạo và dìu dắt. Tôi xin bày tỏ lời cảm ơn chân thành tới các thầy cô giáo trong khoa Công nghệ thông tin – Học viện Kỹ thuật Quân sự, Phòng đào tạo sau đại học – Học viện Kỹ thuật Quân sự đã tạo điều kiện thuận lợi cho tôi trong thời gian học tập tại trường. Tôi xin bày tỏ lòng biết ơn chân thành, lời cảm ơn sâu sắc nhất với thầy giáo PGS.TS Nguyễn Hiếu Minh đã trực tiếp hướng dẫn, định hướng cho tôi giải quyết các vấn đề trong luận văn. Tôi cũng xin cảm ơn các anh chị em đồng nghiệp ở trường Cao đẳng Thống kê đã ủng hộ giúp đỡ tôi trong quá trình thực hiện luận văn. Luân văn cũng xin được là lời chia vui với người thân, đồng nghiệp, bạn bè và các bạn đồng môn lớp Cao học K25A. Hà Nội, tháng 09 năm 2016 Học viên Phạm Văn Sỹ MỤC LỤC Trang Trang phụ bìa Bản cam đoan Mục lục Tóm tắt luận văn Danh mục các bảng Danh mục hình vẽ MỞ ĐẦU 1 Chương 1. TỔNG QUAN VỀ BẺ KHÓA MẬT KHẨU 4 1.1. Bẻ khóa mật khẩu 4 1.2. Kỹ thuật bẻ khóa mật khẩu 5 1.2.1. Tấn công Từ điển 5 1.2.2. Tấn công vét cạn 6 1.2.3. Tấn công lai 6 1.2.4. Tấn công âm tiết 6 1.2.5. Tấn công theo quy tắc 6 1.3. Các loại tấn công mật khẩu 7 1.3.1. Tấn công thụ động trực tuyến 7 1.3.2. Tấn công chủ động trực tuyến 7 1.3.3. Tấn công ngoại tuyến 8 1.3.4. Tấn công phi điện tử 8 1.4. Cơ sở lý thuyết xác thực Microsoft 9 1.4.1. Cơ sở dữ liệu SAM 9 1.4.2. Xác thực NTLM 9 1.4.2.1. Giá trị băm LM 10 1.4.2.2. Giá trị băm NTLM 12 1.4.3. Giao thức Kerberos 13 1.5. Một số công cụ dùng để bẻ khóa mật khẩu 13 1.5.1. pwdump7 và fgdump 13 1.5.2. L0phtCrack 15 1.5.3. Ophcrack 16 1.5.4. Cain & Abel 17 1.6. Phòng chống tấn công mật khẩu 18 Chương 2. NGHIÊN CỨU CÔNG NGHỆ GPU VÀ LẬP TRÌNH CUDA 22 2.1. Giới thiệu công nghệ GPU 22 2.1.2. Kiến trúc GPU 22 2.1.2.1. Đường ống dẫn đồ họa 22 2.1.2.2. Tiến hóa của kiến trúc GPU 24 2.1.2.3. Kiến trúc GPU hiện đại 25 2.1.3. So sánh GPU và CPU 27 2.2. Lập trình CUDA 29 2.2.1. Giới thiệu về môi trường phát triển CUDA 29 2.2.2. Mô hình lập trình 31 2.2.2.1. Bộ đồng xử lý đa luồng mức cao 31 2.2.2.2. Gom lô các luồng 32 2.2.2.3. Mô hình bộ nhớ 33 2.2.2.4. Lập trình không đồng nhất 34 2.2.3. Thiết lập phần cứng 35 2.2.3.1. Kiến trúc SIMT 36 2.2.3.2. Phần cứng đa luồng 38 2.3. Hướng dẫn thực thi 39 2.3.1. Chiến lược tối ưu hóa hiệu suất tổng thể 39 2.3.2. Tối ưu hóa sử dụng 40 2.3.2.1. Mức ứng dụng 40 2.3.2.2. Mức thiết bị 40 2.3.2.3. Mức bộ đa xử lý 41 2.3.3. Tối ưu thông lượng bộ nhớ 44 2.3.3.1. Truyền dữ liệu giữa máy chủ và thiết bị 44 2.3.3.2. Truy cập bộ nhớ thiết bị 45 Chương 3. XÂY DỰNG ỨNG DỤNG BẺ KHÓA MẬT KHẨU DỰA TRÊN LẬP TRÌNH SONG SONG TRÊN GPU 49 3.1. Bài toán vét cạn tìm mật khẩu Windows 49 3.1.1. Bài toán vét cạn chạy tuần tự 53 3.1.1.1. Ý tưởng 53 3.1.1.2. Xây dựng bài toán 53 3.1.2. Bài toán vét cạn chạy trên GPU 55 3.1.2.1. Ý tưởng 55 3.1.2.2. Xây dựng bài toán 58 3.2. Mô tả chương trình 60 3.2.1. Chương trình tuần tự 61 3.2.1.1. Mô tả chương trình 61 3.2.1.2. Sử dụng chương trình 62 3.2.2. Chương trình chạy trên GPU 63 3.2.2.1. Mô tả chương trình 63 3.2.2.2. Sử dụng chương trình 63 3.2.3. Một số kết quả chạy thử nghiệm giữa tuần tự và song song 64 3.2.3.1. Kết quả 64 3.2.3.2. Đồ thị 66 KẾT LUẬN VÀ KHUYẾN NGHỊ 69 1. Kết luận 69 2. Khuyến nghị 69 TÀI LIỆU THAM KHẢO 70
Trang 1LỜI CẢM ƠN
Những kiến thức căn bản trong luận văn này là kết quả của ba năm(2013-2016) tôi có may mắn được các thầy cô giáo trong trường Học viện Kỹthuật Quân sự trực tiếp giảng dậy, đào tạo và dìu dắt
Tôi xin bày tỏ lời cảm ơn chân thành tới các thầy cô giáo trong khoaCông nghệ thông tin – Học viện Kỹ thuật Quân sự, Phòng đào tạo sau đại học– Học viện Kỹ thuật Quân sự đã tạo điều kiện thuận lợi cho tôi trong thời gianhọc tập tại trường
Tôi xin bày tỏ lòng biết ơn chân thành, lời cảm ơn sâu sắc nhất với thầygiáo PGS.TS Nguyễn Hiếu Minh đã trực tiếp hướng dẫn, định hướng cho tôigiải quyết các vấn đề trong luận văn
Tôi cũng xin cảm ơn các anh chị em đồng nghiệp ở trường Cao đẳngThống kê đã ủng hộ giúp đỡ tôi trong quá trình thực hiện luận văn
Luân văn cũng xin được là lời chia vui với người thân, đồng nghiệp, bạn
bè và các bạn đồng môn lớp Cao học K25A
Hà Nội, tháng 09 năm 2016
Học viên
Phạm Văn Sỹ
Trang 2MỤC LỤC
Trang
Trang phụ bìa
Bản cam đoan
Mục lục
Tóm tắt luận văn
Danh mục các bảng
Danh mục hình vẽ
Trang 3DANH MỤC VIẾT TẮT
Trang 4DANH MỤC HÌNH VẼ
Trang 5DANH MỤC BẢNG BIỂU
Trang 6TÓM TẮT LUẬN VĂN
Họ và tên học viên: Phạm Văn Sỹ
Chuyên ngành: Khoa học máy tính khóa: 25
Cán bộ hướng dẫn: PGS.TS Nguyễn Hiếu Minh
Tên đề tài: Nghiên cứu một số kỹ thuật bẻ khóa mật khẩu và thử nghiệm trên GPU
Tóm tắt: Luận văn nghiên cứu hai phần chính một là nghiên cứu tổngquan về mật khẩu trên Windows, một số phương pháp tấn công mật khẩu,cách thức phòng chống tấn công mật khẩu trên Windows Hai là nghiên cứu
về công nghệ GPU, lập trình CUDA Từ những nghiên cứu trên tác giả luậnvăn áp dụng phương pháp vét cạn, sử dụng thuật toán song song tính giá trịbăm chạy trên GPU để tìm mật khẩu Windows giúp giảm thiểu thời gian tìmmật khẩu
Trang 7cụ thể trong khoảng thời gian 2 năm từ năm 2003 đến năm 2005 tốc độ củaCPU chỉ tăng từ 3GHz lên 3.8GHz Trong quá trình tăng tốc độ xung củaCPU các nhà sản xuất đã gặp phải vấn đề về nhiệt độ của CPU Các côngnghệ làm mát có thể không đáp ứng được do bề mặt tiếp xúc của CPU ngàycàng nhỏ.
Trước tình hình này, các nhà nghiên cứu vi xử lý đã chuyển hướng sangphát triển công nghệ đa lõi, nhiều lõi, với cơ chế xử lý song song trong cácmáy tính nhằm tăng hiệu năng và tiết kiệm năng lượng
Một trong các công nghệ xử lý song song ra đời đó là GPU (GraphicsProcessing Unit - bộ xử lý đồ họa) Ban đầu, việc chế tạo GPU chỉ với nhữngmục đích công việc phù hợp với khả năng là tăng tốc độ xử lý đồ họa, cũngnhư trong ngành trò chơi là chủ yếu Tuy nhiên ngày nay với công nghệCUDA được phát triển bởi hãng NVIDIA đã cho phép thực hiện các tính toánsong song với các phép tính phức tạp như dấu chấm động Với hiệu suất cảngàn lệnh trong một thời điểm Chính vì vậy một xu hướng nghiên cứu mới rađời đó là phát triển các thuật toán song song thực hiện trên GPU Với CUDA,các lập trình viên có thể nhanh chóng phát triển các ứng dụng song song trongrất nhiều lĩnh vực khác nhau như: Điện toán, sắp xếp, tìm kiếm, xử lý tín hiệu
số, ảnh,…
Trang 8CUDA là bộ công cụ phát triển phần mềm trên GPU được xây dựngbằng ngôn ngữ lập trình C Với CUDA các lập trình viên dùng để điều khiểnGPU để xử lý, tính toán song song các dữ liệu lớn.
Mật khẩu là hàng phòng thủ đầu tiên chống lại tội phạm mạng, tội phạm
hệ thống, thế nhưng hầu hết người dùng đều chọn mật khẩu dựa trên nhữngthông tin có sẵn, dẫn đến một lượng lớn các tài khoản các tài khoản ngườidùng có nguy có bị chiếm đoạt dựa vào một số suy đoán đơn giản và logicđiều này sẽ giúp cho kẻ tấn công mật khẩu sẽ giới hạn được số ký tự tạo mậtkhẩu và sẽ dễ dàng chiếm đoạt được tài khoản người dùng Bên cạnh đó cũng
có nhiều người dùng đặt mật khẩu chưa đủ mạnh Kẻ tấn công sẽ lợi dụngnhững thói quen của người dùng như trên và kết hợp với những công cụ xử lýtrên thiết bị có tốc độ tính toán cao như GPU để dò tìm mật khẩu
Xuất phát từ những ưu điểm của GPU và tầm quan trọng của mật khẩu
tôi đã chọn đề tài: “Nghiên cứu một số kỹ thuật bẻ khóa mật khẩu và thử nghiệm trên GPU”.
Luận văn gồm 3 chương:
Chương 1: Tổng quan về bẻ khóa mật khẩu, chương này nghiên cứu
các kiến thức tổng quan về mật khẩu, một số phương pháp tấn công mật khẩutrên Windows và cách thức phòng chống tấn công mật khẩu trên Windows
Chương 2: Nghiên cứu công nghệ GPU và lập trình CUDA, chương
này nghiên cứu hai phần chính một là nghiên cứu các kiến thức cơ bản vềcông nghệ GPU, sự khác nhau giữa GPU và CPU Hai là nghiên cứu về lậptrình CUDA
Chương 3: Xây dựng ứng dụng bẻ khóa mật khẩu dựa trên lập trình song song trên GPU, trên cơ sở các kiến thức được trình bày ở hai chương
trên, tác giả luận văn đã tiến hành cài đặt và thử nghiệm mô phỏng bài toántrên CPU và GPU
Trang 9Chương trình được tác giả luận văn xây dựng với mục đích nghiên cứu,học hỏi và mong muốn giúp người sử dụng lấy lại mật khẩu trong trường hợpngười dùng bị quên mật khẩu, hoặc người dùng bị chiếm đoạt tài khoản và bịthay đổi mật khẩu đăng nhập vào Windows Tác giải luận văn lên án mọi hành
vi lợi dụng chương trình bẻ khóa mật khẩu Windows vào mục đích trái phápluật
Trang 10Chương 1 TỔNG QUAN VỀ BẺ KHÓA MẬT KHẨU
Nội dung chính trong chương 1sẽ nghiên cứu các kiến thức tổng quan vềmật khẩu trên hệ điều hành Windows, các kỹ thuật và phương pháp tấn côngmật khẩu trên Windows, cách thức phòng chống tấn công mật khẩu trênWindows
1.1 Bẻ khóa mật khẩu
Bẻ khóa mật khẩu là quá trình khôi phục mật khẩu từ các dữ liệu đã đượctruyền bởi một hệ thống máy tính hoặc lưu giữ trong nó Mục đích của việc bẻmật khẩu có thể giúp người dùng khôi phục mật khẩu bị quên hoặc bị mất, nócũng có thể được sử dụng để truy cập trái phép vào hệ thống [5]
Mật khẩu là phần quan trọng của thông tin cần thiết để truy cập vào hệthống Do đó, hầu hết kẻ tấn công sử dụng các kỹ thuật bẻ mật khẩu để truycập trái phép vào hệ thống và làm cho hệ thống dễ bị tổn thương, không hoạtđộng Mật khẩu có thể bị bẻ khóa các công cụ tự động như một từ điển hoặcphương pháp vét cạn
Các chương trình bẻ khóa mật khẩu có chức năng kiểm tra số lượng mậtkhẩu trên mỗi giây Thông thường người dùng trong khi tạo mật khẩu, chọnmật khẩu sẽ dễ mắc phải mật khẩu yếu như sử dụng tên của một con vật cưnghoặc lựa chọn mật khẩu đơn giản để dễ nhớ Hầu hết các kỹ thuật bẻ mật khẩuthành công là do mật khẩu yếu hoặc dễ dàng đoán
Mật khẩu phức tạp đóng một vai trò quan trọng trong việc cải thiện anninh chống lại các cuộc tấn công Nó là yếu tố quan trọng mà người dùng nênđảm bảo trong khi tạo ra một mật khẩu Mật khẩu không nên đơn giản vì mậtkhẩu đơn giản là dễ bị tấn công Các mật khẩu khi chọn nên luôn luôn phứctạp, dài và khó nhớ Các mật khẩu mà bạn thiết lập cho tài khoản phải đápứng các yêu cầu thiết lập phức tạp Mật khẩu ký tự phải là một sự kết hợp củacác ký tự chữ và số Chữ và số ký tự bao gồm chữ cái, số, dấu chấm câu, các
Trang 11ký hiệu toán học và các ký tự thông thường khác Chúng ta có thể đặt theoquy tắc sau:
• Mật khẩu có chứa chữ cái, ký tự đặc biệt, và con số: apl@ 52
• Mật khẩu chỉ chứa số: 23698217
• Mật khẩu chỉ chứa các ký tự đặc biệt: &*#@!(%)
• Mật khẩu chỉ chứa các chữ cái và các chữ số: meetlt23
• Mật khẩu chỉ chứa các chữ cái: POTHMYDE
• Mật khẩu mà chỉ chứa các chữ cái và ký tự đặc biệt: bob@&ba
• Mật khẩu hứa các ký tự đặc biệt và các chữ số: 123@$4
1.2 Kỹ thuật bẻ khóa mật khẩu [5]
Bẻ khóa mật khẩu là kỹ thuật được sử dụng để phát hiện ra mật khẩu.Đây là cách cổ điển để đạt được các đặc quyền cho một hệ thống máy tínhhoặc mạng Các phương pháp phổ biến để bẻ khóa mật khẩu là cố gắng đoánmật khẩu với các kết hợp khác nhau cho đến khi bạn có được mật khẩu chínhxác Có năm kỹ thuật để bẻ mật khẩu, như sau:
1.2.1 Tấn công Từ điển [5]
Trong một cuộc tấn công từ điển, một tập tin từ điển được nạp vào cácứng dụng bẻ khóa để dò tài khoản người dùng Chương trình sử dụng tất cảcác từ có trong từ điển để tìm mật khẩu Các cuộc tấn công từ điển có nhiềuhữu ích hơn so với các cuộc tấn công vét cạn Tấn công từ điển không thể dòtìm mật khẩu với hệ thống sử dụng cụm từ làm mật khẩu
Tấn công từ điển có thể áp dụng theo hai tình huống:
- Trong phân tích mật mã, nó được sử dụng để tìm ra khóa giải mã để cóđược bản rõ từ bản mã
- Trong bảo mật máy tính, để tránh xác thực và truy cập vào máy tínhbằng cách đoán mật khẩu
1.2.2 Tấn công vét cạn [5]
Các thuật toán mã hóa phải đủ mạnh để ngăn chặn một cuộc tấn công vétcạn Tìm kiếm vét cạn, là những kỹ thuật cơ bản để dò lần lượt khóa cho đếnkhi khóa chính xác được xác định
Trang 12Khi kẻ tấn công cố tạo ra tất cả khóa mã đơn cho dữ liệu cho đến khi tìm
ra mật khẩu, đây là thuật ngữ tấn công hàng loạt Cho đến ngày này, kiểu tấncông này đã được thực hiện bởi những máy tính có khả năng xử lý mạnh mẽ.Việc tấn công bằng vét cạn luôn là:
- Là quá trình tốn nhiều thời gian
- Mật khẩu cuối cùng cũng được tìm ra
1.2.3 Tấn công lai [5]
Là cấp độ tiếp theo của kẻ tấn công, một nỗ lực nếu mật khẩu không thểđược tìm thấy bằng cách sử dụng tấn công bằng từ điển Các cuộc tấn công laibắt đầu với một tệp tin từ điển và thay thế các con số và các ký hiệu cho các
ký tự trong mật khẩu Ví dụ, nhiều người sử dụng thêm số 1 vào cuối mậtkhẩu của họ để đáp ứng yêu cầu mật khẩu mạnh Tấn công lai được thiết kế
để tìm những loại bất thường trong mật khẩu
1.2.4 Tấn công âm tiết [5]
Là sự kết hợp của tấn công vét cạn và tấn công từ điển Kỹ thuật nàyđược sử dụng khi mật khẩu không phải là một từ Những kẻ tấn công sử dụng
từ điển và các phương pháp khác để bẻ khóa và cũng có thể sử dụng sự kếthợp có thể có của mỗi từ có trong từ điển
1.2.5 Tấn công theo quy tắc [5]
Kiểu tấn công này được sử dụng khi những kẻ tấn công biết được một sốthông tin về mật khẩu Đây là kiểu tấn công mạnh mẽ nhất bởi vì kẻ tấn côngbiết rõ về mật khẩu Ví dụ, nếu kẻ tấn công biết rằng mật khẩu có chứa một sốhai, hoặc ba chữ số, sau đó chúng sẽ sử dụng một số kỹ thuật và trích xuất cácmật khẩu trong thời gian ngắn
1.3 Các loại tấn công mật khẩu
Bẻ mật khẩu là một trong những giai đoạn quan trọng của một hệ thốngtấn công Bẻ mật khẩu sử dụng cho các mục đích hợp pháp khôi phục mậtkhẩu bị quên lãng của một người sử dụng; nếu nó được sử dụng bởi ngườidùng bất hợp pháp, thì chúng có thể có đặc quyền trái phép vào mạng hoặc hệ
Trang 13thống Các cuộc tấn công mật khẩu được phân loại dựa trên các hành độngcủa kẻ tấn công để bẻ khóa mật khẩu Thông thường có bốn loại như sau:1.3.1 Tấn công thụ động trực tuyến
Một cuộc tấn công thụ động trực tuyến là đánh hơi (sniffing) để tìm cácdấu vết, các mật khẩu trên mạng Mật khẩu bị bắt (capture) trong quá trìnhxác thực và sau đó có thể được so sánh với một từ điển (dictionary) hoặc làdanh sách mật khẩu (word list) Tài khoản người dùng có mật khẩu thườngđược băm (hashed) hoặc mã hóa (encrypted) trước khi gửi lên mạng để ngănchặn truy cập trái phép và sử dụng Nếu mật khẩu được bảo vệ bằng cách trên,một số công cụ đặc biệt giúp kẻ tấn công có thể phá vỡ các thuật toán mã hóamật khẩu Có ba dạng tấn công thụ động trực tuyến là [5]:
Đánh hơi (Wire sniffing)
Người trung gian (Man-in-the-middle)
Tấn công lặp lại (Replay)
Chích băm (Hash injection)
Lừa đảo (Phishing)
1.3.3 Tấn công ngoại tuyến
Các cuộc tấn công ngoại tuyến xảy ra khi kẻ đột nhập sẽ kiểm tra tínhhợp lệ của các mật khẩu Nếu tên người dùng và mật khẩu được lưu trữ trongmột tệp tin có thể đọc được, nó sẽ trở nên dễ dàng cho kẻ xâm nhập để đạtđược quyền truy cập vào hệ thống Để bảo vệ danh sách các mật khẩu củangười dùng, thì danh sách mật khẩu đó luôn luôn được mã hóa
Trang 14Cuộc tấn công ngoại tuyến thường tốn thời gian Tấn công ngoại tuyếnthành công là vì các hàm băm dễ bị phá vỡ.
Để ngăn chặn tấn công ngoại tuyến ta có thể sử dụng các kỹ thuật sau:
Sử dụng mật khẩu phải mạnh
Xóa hàm băm LM trên hệ thống
Sử dụng phương pháp mã hóa an toàn cho các mật khẩu
Có ba dạng của tấn công ngoại tuyến:
Tấn công tính giá trị băm
Tấn công mạng phân tán
Bảng cầu vồng
1.3.4 Tấn công phi điện tử
Các cuộc tấn công phi điện tử được gọi là các cuộc tấn công phi kỹ thuật.Loại tấn công này không yêu cầu bất kỳ kiến thức kỹ thuật về các phươngpháp xâm nhập vào một hệ thống Do đó, nó được gọi là một cuộc tấn côngphi điện tử Có ba loại tấn công phi điện tử
Thế vai (Shoulder surfing)
Kỹ thuật xã hội (Social engineering)
Tìm kiếm thùng rác (Dumpster diving)
1.4 Cơ sở lý thuyết xác thực Microsoft
1.4.1 Cơ sở dữ liệu SAM
Cơ sở dữ liệu SAM (Security Accounts Manager) [5] được sử dụng bởiWindows để quản lý tài khoản người dùng và mật khẩu trong các định dạngbăm (định dạng băm này là một chiều) Thông tin trong SAM được lưu trữ ởđịnh dạng băm để bảo vệ khỏi các cuộc tấn công Cơ sở dữ liệu SAM đượcthực hiện như một tệp tin Registry và Windows sẽ giữ một khóa hệ thống tệptin độc quyền trên tệp tin SAM Khi tệp tin này được cung cấp với một khóatệp tin hệ thống, điều này cung cấp một số biện pháp bảo đảm cho việc lưu trữcác mật khẩu Không thể sao chép tệp tin SAM đến một vị trí khác trongtrường hợp là các cuộc tấn công trực tuyến Khi tệp tin SAM được khóa vớikhóa hệ thống độc quyền thì nó không thể sao chép hay di chuyển trong khiWindows đang chạy Các khóa này sẽ không được phát hành trừ khi lỗi màn
Trang 15hình xanh ngoại lệ hoặc hệ điều hành đã tắt Tuy nhiên, có thể tấn công ngoạituyến giá trị băm của mật khẩu bằng phương pháp vét cạn, và việc sao chéptệp tin SAM có thể sử dụng các kỹ thuật khác nhau.
Microsoft giới thiệu chương trình SYSKEY trong Windows NT 4.0 đểcải thiện bảo mật cho cơ sở dữ liệu SAM chống lại các phần mềm bẻ khóa.Bản sao trên máy tính của tệp tin SAM được mã hóa khi SYSKEY được kíchhoạt Bằng cách này tất cả các giá trị băm của mật khẩu của các tài khoảnngười dùng cục bộ lưu trong SAM sẽ được mã hóa với một khóa
Ngay cả khi nội dung của nó đã được phát hiện thì khóa của nó được mãhóa với hàm băm một chiều, việc giải mã là vô cùng khó
1.4.2 Xác thực NTLM
NTLM (NT LAN Manager) [5] là một giao thức độc quyền được sửdụng bởi nhiều sản phẩm của Microsoft để thực hiện chứng thực tháchthức/đáp ứng (challenge/response), và nó là cơ chế xác thực mặc định màtường lửa và máy chủ proxy sử dụng Việc xác thực NTLM bao gồm hai giaothức: giao thức xác thực NTLM và giao thức xác thực LM Hai giao thức nàydùng phương pháp băm khác nhau để lưu trữ mật khẩu của người dùng trong
cơ sở dữ liệu SAM
1.4.2.1 Giá trị băm LM
Hàm băm LM (LAN Manager) [5] là băm chính mà Microsoft LANManager và Microsoft Windows sử dụng để lưu mật khẩu người dùng, và mậtkhẩu được tự động thêm vào cho tới 14 ký tự, và được sử dụng trong cácphiên bản Microsoft Windows từ Windows NT trở về trước Nó vẫn hỗ trợcho các phiên bản Windows sau này cho tương thích nhưng được Micosoftkhuyến cáo lên tắt nó
Microsoft Windows NT lưu hai dạng của mật khẩu [9]: mật khẩu LANManager và mật khẩu Windows NT Ví dụ, chúng ta giả sử mật khẩu là
‘PassWord123’ Khi mật khẩu này được mã hóa bằng thuật toán LM, trướctiên phải được chuyển đổi thành chữ hoa: ‘PASSWORD123’ Nếu mật khẩu
Trang 16có độ dài ngăn hơn độ dài của 14 ký tự thì mật khẩu sẽ được đệm thêm các ký
tự 0 để mật khẩu có độ dài là 14 ký tự Ở giai đoạn này mật khẩu trở thành
‘PASSWORD123000’ Trước khi mã hóa 14 ký tự của mật khẩu sẽ được chialàm hai phần 7 byte Một chuỗi 7 byte với ‘PASSWOR’ và chuỗi 7 byte cònlại là ‘D123000’ Mỗi một phần 7 byte sẽ được mã hóa riêng Nối hai chuỗi
mã hóa riêng biệt ta sẽ thu được kết quả Từ mỗi 7 byte đầu, 8 byte khóa DESđược xây dựng, mỗi 8 byte khóa DES được mã hóa với một số ma thuật(magic number) Kết quả mã hóa số ma thuật được nối vào một giátrị băm một chiều mười sáu byte
Giá trị này là LAN Manager băm một chiều của mật khẩu 8 byte đầutiên được bắt đầu từ 7 ký tự đầu của mật khẩu, 8 byte thứ hai được bắt đầu từ
ký tự thứ 8 của 14 ký tự mật khẩu Kết hợp là một giá trị băm 16 byte đượcxây dựng từ mật khẩu có độ dài không quá 14 ký tự
Có thể tóm tắt quá trình sinh giá trị băm LM bằng một quá trình 6 bướcnhư sau:
1 Mật khẩu người dùng được chuyển đổi thành tất cả các ký tự in hoa
2 Mật khẩu được bổ sung thêm các ký tự 0 vào cho tới khi có đủ 14 ký tự
3 Mật khẩu mới được chia thành hai hash có 7 ký tự
4 Các giá trị này được sử dụng để tạo hai khóa mã hóa DES, mỗi nửa đều đượcthêm vào một bit chẵn lẻ để tạo các khóa 64 bit
5 Mỗi khóa DES sẽ được sử dụng để mã hóa một chuỗi ASCII định sẵn (KGS!
@#$%), cho kết quả ra trong hai chuỗi văn bản mật 8 byte
6 Hai chuỗi văn bản mật 8 byte này sẽ được kết hợp để tạo thành một giá trị byte, giá trị này chính là một hash LM hoàn chỉnh
Vậy mật khẩu “PassWord123” sẽ được chuyển đổi như sau:
1 PASSWORD123
2 PASSWORD123000
3 PASSWOR and D123000
Trang 18NTLM được chấp nhận như một phương pháp thẩm định mới đáng để lựachọn và được thực thi trong Windows NT 4.
Quá trình tạo một giá trị băm NTLM (hay còn gọi là băm NT) là một quátrình đơn giản, nó dựa vào thuật toán băm MD4 để tạo giá trị băm nhờ mộtloạt các tính toán toán học Sau khi chuyển đổi mật khẩu sang ký tự Unicode,thuật toán MD4 được sử dụng để tính giá trị băm NT Trong thực tế, mật khẩu
“PassWord123” qua một lần chuyển đổi, sẽ có kết quả là:
“67A54E1C9058FCA16498061B96863248”
Thuật toán MD4 được xem là mạnh hơn nhiều so với thuật toán DES vì
nó cho phép mật khẩu có độ dài hơn, phân biệt giữa chữ hoa và chữ thường vàkhông chia mật khẩu thành phần nhỏ hơn
Có lẽ phàn nàn lớn nhất với các hàm băm NTLM là Windows không sửdụng kỹ thuật mang tên salting (thêm giá trị phụ) Salting là một kỹ thuật màtrong đó một số ngẫu nhiên được tạo ra để tính toán giá trị băm cho mật khẩu.Điều này có nghĩa là cùng một mật khẩu có thể có hai giá trị giá trị băm khácnhau hoàn toàn, đây thực sự là điều lý tưởng
1.4.3 Giao thức Kerberos
Là một giao thức xác thực mạng [5] Nó được thiết kế để cung cấp cơchế xác thực mạnh cho các ứng dụng client/server bằng cách sử dụng mậtkhẩu khóa bí mật, điều này cung cấp việc xác thực lẫn nhau Cả máy chủ vàngười dùng kiểm chứng nhận dạng của nhau Bản tin được gửi thông qua giaothức Kerberos được bảo vệ chống lại các cuộc tấn công lặp lại và xem trộm.Kerberos sử dụng trung tâm phân phối khóa và cần một bên thứ ba mà cảhai phía tham gia giao dịch tin tưởng Do đó việc xác thực sẽ bao gồm hai
Trang 19phần riêng biệt: là máy chủ xác thực, và máy chủ cung cấp vé Kerberos làmviệc trên cơ sở của "vé" để chứng minh danh tính của người dùng.
1.5 Một số công cụ dùng để bẻ khóa mật khẩu
1.5.1 pwdump7 và fgdump
Pwdump7 [5] là một ứng dụng lấy giá trị băm mật khẩu từ cơ sở dữ liệuSAM Pwdump7 sẽ trích xuất giá trị băm LM và NTLM của tài khoản ngườidùng cục bộ từ cơ sở dữ liệu SAM Một tính năng rất mạnh của pwdump7 là
nó có thể vượt qua được chế độ bảo vệ tệp tin SAM
Hình 1.2: pwdump7 trích xuất băm mật khẩu trong Windows
Từ hình 1.2 ta thấy hệ thống đã tắt tính năng băm LM Tài khoảnAdministrator có giá trị băm NTLM là:
3DBDE697D71690A769204BEB12283678
Tài khoản Admin có giá trị băm là:
Trang 20Tài khoản Guest đã bị hệ thống khóa nên không có giá trị băm
Fgdump hoạt động cơ bản là giống với pwdump Fgdump có đầy đủ tínhnăng của pwdump và fgdump có khả năng lấy thông tin lưu trữ và cho phépthực hiện từ các mạng từ xa
Hình 1.3: fgdump trích xuất giá trị băm mật khẩu Windows ra tệp tin txt.1.5.2 L0phtCrack
L0phtCrack [5] là một công cụ được thiết kế để kiểm toán mật khẩu vàphục hồi các ứng dụng Nó được sử dụng để phục hồi mật khẩu đã mất củaWindows với từ điển, tấn công lai, bảng cầu vòng, vét cạn và nó cũng được sửdụng để đánh giá độ mạnh của mật khẩu Các khiếm khuyết về bảo mật đang
cố hữu trong hệ thống xác thực mật khẩu của Windows có thể được tiết lộ dễdàng với công cụ L0phtCrack
Hệ điều hành Windows xác thực dựa trên giao thức mạng LAN Manager,
sử dụng xác thực hệ thống gồm 8 byte thách thức (challenge) trả về 24 bytephản ứng (response) trên mạng từ máy khách đến máy chủ trong định dạngthách thức/phản ứng (challenge/response)
Trang 21Máy chủ so khớp đáp ứng độc lập với 24 byte đáp ứng, xác thực thànhcông khi việc so khớp 24 byte trùng nhau Thuật toán chia mật mã thành 7 kí
tự rồi băm một cách riêng lẻ, kẻ tấn công lợi dụng điều này để hạn chế kí tự
dò tìm mật khẩu dưới 7 kí tự làm cho việc tấn công hệ thống dễ dàng hơn rấtnhiều
Điểm yếu của băm mật khẩu cùng với truyền các băm qua mạng trongđịnh dạng thách thức/phản ứng làm cho hệ thống dựa trên LM rất dễ bị bắtgói tin và tiếp theo là dùng từ điển, vét cạn để có mật khẩu bởi L0phtCrack.L0phtCrack6 có khả năng nhập mật khẩu từ Windows ở xa, bao gồm cả phiênbản 64 bit của Windows Vista, Windows 7 và các máy UNIX mà không yêucầu tiện ích của bên thứ ba
Hình 1.4: L0phtCrack trích xuất giá trị băm trong tệp tin SAM
1.5.3 Ophcrack
Trang 22Ophcrack [5] là một công cụ bẻ khóa mật khẩu Windows sử dụng bảngcầu vồng để dò tìm mật khẩu Ophcrack sử dụng giao diện người dung đồ họa
và có thể chạy được trên nhiều hệ điều hành khác nhau như Windows,Linux,/Unix,…
Tính năng của OPhcrack
- Bẻ khóa băm LM và NTLM
- Vét cạn những mật khẩu đơn giản
- Đồ thị thời gian thực phân tích mật khẩu
- Trích xuất băm từ file SAM
Hình 1.5: Trích xuất giá trị băm từ tệp tin SAM
Trang 231.5.4 Cain & Abel
Cain & Abel [5] là một công cụ dùng để khôi phục mật khẩu Nó chạytrên hệ điều hành Microsoft Cain & Abel cho phép phục hồi lại các mật khẩubằng cách đánh hơi mạng, tìm mật khẩu sử dụng từ điển, vét cạn và các cuộctấn công giải mã mật khẩu, ghi âm cuộc gọi thoại VoIP, phục hồi mật khẩumạng wifi, khám phá bộ nhớ cache mật khẩu và phân tích các giao thức địnhtuyến Với sự giúp đỡ của Cain & Abel, mật khẩu và các thông tin từ cácnguồn khác có thể được phục hồi dễ dàng Nó bao gồm APR (Arp PoisonRouting) cho phép đánh hơi trên chuyển mạch mạng LAN và tấn công ngườitrung gian Chức năng phân tích mạng trong công cụ này cũng có khả năngphân tích các giao thức mã hóa như HTTP và SSH 1, và chứa các bộ lọc đểnắm bắt thông tin từ một loạt các cơ chế xác thực
1.6 Phòng chống tấn công mật khẩu
Để ngăn ngừa tấn công mật khẩu chúng ta cần áp dụng các chính sáchmật khẩu mạnh có độ dài trên 8 kí tự, với sự kết hợp của nhiều dạng ký tựkhác nhau gồm các ký tự đặc biệt, chữ hoa, chữ thường và các số sẽ làm choquá trình tấn công dò từ điển hay vét cạn sẽ trở nên khó khăn Bên cạnh đóngười dùng nên sử dụng ứng dụng Syskey trên Windows, một chức năng bảo
vệ và mã hóa mật khẩu nâng cao có thể phòng chống rất tốt các công cụ nhưL0phtCrack, Ron The Ripper
Để sử dụng Syskey ta chỉ cần thực thi dòng lệnh Syskey trên cửa sổdòng lệnh và chọn update như hình dưới
Trang 24Hình 1.6: Bật hộp thoại Syskey.
Sau đây là một số quy tắc đặt mật khẩu cần tuân theo để phòng chốngtấn công mật khẩu
- Không bao giờ sử dụng mật khẩu mặc định
- Không bao giờ sử dụng các mật khẩu đơn giản có thể tấn công thông qua từđiển, như các mật khẩu: password, abcdef, 123456 là những mật khẩu đượcthống kê là bị tấn công nhiều nhất
- Không bao giờ sử dụng mật khẩu liên quan đến tên máy tính, tên miền haynhững thông tin mà kẻ tấn công dễ dàng tìm kiếm qua Whois
- Không bao giờ sử dụng mật khẩu liên quan đến thú cưng, ngày sinh của bạnhay người yêu vì đây là những đối tượng mà kẻ tấn công sẽ nghĩ đến đầu tiênkhi dò tìm mật khẩu
Thay đổi mật khẩu thường xuyên là một trong những tiêu chí hàng đầutrong việc bảo vệ mật khẩu, theo khuyến nghị của chính sách an toàn thôngtin ISO 27001:2005 thì người dùng nên thay đổi mật khẩu sau 24 ngày hoặc
48 ngày tuỳ vào nhu cầu của tổ chức Mặc dù điều này sẽ gây ra chút bất tiệncho người dùng nhưng sẽ hạn chế được rất nhiều khả năng mật khẩu bị tấncông và tái sử dụng để truy cập bất hợp pháp vào hệ thống Việc thiết lập
Trang 25chích sách này có thể thực hiện qua Group Policy Editor trong phần SecuritySetting\Account Policies như hình dưới.
Hình 1.7: Các chính sách bảo mật của hệ thống Windows
Hình 1.7 minh họa vị trí chính sách dùng để thay đổi thời gian tồn tại củamật khẩu trên Windows 8.1 Đối với hệ thống Windows phiên bản khác tacũng có thể thực hiện thông qua Local Group Policy Editor dễ dàng Tuynhiên, để đạt hiệu quả cao hơn người dùng nên thiết lập chính sách này chungcho toàn bộ hệ thống thông qua máy tính điều khiển miền Mặc dù vớiphương pháp này chúng ta không thể hoàn toàn ngăn ngừa bị tấn công mậtkhẩu dạng vét cạn nhưng sẽ gây trở ngại lớn cho kẻ tấn công khi siết chặtchính sách bảo mật (Security Policy) ví dụ như nếu kẻ tấn công đăng nhập saimật khẩu quá 5 lần sẽ bị khoá trong vòng 15 phút
Theo dõi Event Viewer Log, trong vai trò quản trị hệ thống hay ngườiphụ trách vấn đề an ninh mạng của tổ chức các bạn cần thường xuyên theo dõi
Trang 26tệp tin nhật ký Event View, điều này sẽ giúp chúng ta phát hiện ra những hànhđộng khả nghi như xâm nhập trái phép của kẻ tấn công, hoặc có các virusđang lây lan trên mạng đang cố gắng kết nối đến những máy tính khác nhaubằng netbios và các mật khẩu mặc định Có nhiều công cụ giám sát Event Logchuyên dụng cho từng hệ thống máy chủ riêng biệt như các sản phẩm của GFIhay chương trình VisuaLast hỗ trợ các quản trị mạng trong công việc phântích tệp tin đăng nhập thông qua các báo cáo về tình trạng đăng nhập tươngđối rõ ràng Đối với những chương trình chuyên dụng thì hệ thống có sự cốxảy ra sẽ có những cảnh báo thích hợp bằng thư điện tử, tin nhắn hay cả gọiđiện thoại tự động đến cho quản trị viên.
Tệp tin nhật kí được lưu trữ tại c:\\windows\system32\config\, lưu ý rằngtrong một số tình huống tệp tin này rỗng do quản trị không hiệu lực chúngtrong chính sách bảo mật Để thiết lập Event View Log ta vào mục SecuritySetting\ Local Policies
Trong chương 1 luận văn đã đạt được các kết quả nghiên cứu tổng quan
về mật khẩu:
- Hiểu về bẻ khóa mật khẩu
- Nghiên cứu một số kỹ thuật bẻ khóa mật khẩu
- Các loại tấn công mật khẩu
- Xác thực trong Windows, giá trị băm mật khẩu trong Windows
- Tìm hiểu một số phần mềm giúp bẻ khóa mật khẩu
- Luận văn nghiên cứu cách phòng chống tấn công mật khẩu, giúp bảo vệtài khoản người dùng một cách an toàn
Qua quá trình nghiên cứu về mật khẩu trên hệ thống Windows, tác giảluận văn nhận thấy có rất nhiều phương pháp bẻ khóa mật khẩu mạnh mẽ, tuyvậy các hãng bảo mật, các nhà quản trị hệ thống cũng đưa ra các phương phápphòng chống và hướng dẫn bảo mật hiệu quả, khiến cho các kẻ tấn công khó
Trang 27mà bẻ khóa được mật khẩu, nhưng trên thực tế thì có rất nhiều hệ thống đã bị
bẻ khóa mật khẩu và rò rỉ thông tin, một trong những lý do cốt lõi để xảy rađiều này là do sự chủ quan của người sử dụng hệ thống, không tuân thủ theokhuyến nghị bảo mật
Ví dụ như người dùng vẫn đặt mật khẩu dễ nhớ, độ dài mật khẩu khôngđảm bảo, không chứa các ký tự đặc biệt, thời gian sử dụng lâu,
Trang 28Chương 2 NGHIÊN CỨU CÔNG NGHỆ GPU VÀ LẬP TRÌNH CUDA
Chương 2 sẽ trình bày hai phần chính một là nghiên cứu các kiến thức cơbản về công nghệ GPU, sự khác nhau giữa GPU và CPU Hai là nghiên cứu
về ngôn ngữ lập trình CUDA
2.1 Giới thiệu công nghệ GPU
Bộ xử lý đồ họa (Graphics Processing Unit) [2] hay gọi tắt là GPU là bộ
xử lý chuyên dụng cho biểu diễn hình ảnh 3D từ bộ vi xử lý của máy tính Nóđược sử dụng trong các hệ thống nhúng, điện thoại di động, máy tính cá nhân,máy trạm, và điều khiển game Bộ xử lý đồ họa ngày nay rất hiệu quả trongcác thao tác đồ họa máy tính, và cấu trúc song song cao cấp làm cho chúng cónăng lực xử lý tốt hơn nhiều so với bộ vi xử lý thông thường trong các thuậttoán phức tạp Trong máy tính cá nhân, một GPU được biết tới như một cardmàn hình (video card) hoặc được tích hợp luôn trên bảng mạch chủ Hơn 90%các máy tính cá nhân hoặc máy tính xách tay hiện đại đã có tích hợp GPUnhưng thường yếu hơn nhiều so với GPU tích hợp trên các card màn hìnhchuyên dụng
2.1.2 Kiến trúc GPU
GPU [1] là một bộ xử lý với dư thừa tài nguyên tính toán Tuy nhiên, xuhướng quan trọng nhất gần đây đó là trưng bày khả năng tính toán đó cho cáclập trình viên Những năm gần đây, GPU đã phát triển từ một hàm cố định, bộ
xử lý chuyên dụng tới bộ xử lý lập trình song song, đầy đủ tính năng độc lậpvới việc bổ sung thêm các chức năng cố định và các chức năng chuyên biệt.Hơn bao giờ hết các khía cạnh về khả năng lập trình của bộ xử lý chiếm vị trítrung tâm
2.1.2.1 Đường ống dẫn đồ họa
Các đầu vào của GPU là [1] danh sách các hình học nguyên thủy, điểnhình là tam giác, trong một thế giới không gian ba chiều Qua nhiều bước,
Trang 29những khối hình nguyên thủy đó được làm bóng mờ (shade) và được tô vẽ lênmàn hình, nơi chúng được lắp ráp để tạo ra một hình ảnh cuối cùng Đây làkiến thức cơ bản đầu tiên để giải thích các bước cụ thể trong đường ống dẫnkinh điển trước khi cho thấy làm cách nào mà các đường ống đã trở thành lậptrình được.
Thao tác trên mảnh
Sử dụng thông tin màu sắc từ vector và có thể lấy dữ liệu bổ sung từ bộnhớ toàn cục trong các hình dạng của sự kết hợp (sự kết hợp là hình ảnh đượcánh xạ lên bề mặt), mỗi mảnh được làm bóng mờ để xác định màu sắc cuốicùng của nó Cũng như trong kịch bản vector, mỗi mảnh có thể được tính toán
Trang 30song song Giai đoạn này thường đòi hỏi nhiều tính toán nhất trong đườngống dẫn đồ họa.
Thành phần
Các mảnh được lắp ráp thành hình ảnh cuối cùng với một màu cho mỗiđiểm ảnh bằng cách giữ lại mảnh gần ống kính nhất cho mỗi vị trí điểm ảnh.Trước đây, các phép toán hiện có tại khung cảnh vector và mảnh đã được cấuhình nhưng không thể lập trình được Ví dụ, một trong những tính toán chính
ở khung cảnh vector là tính toán các màu sắc ở mỗi vector như là một chứcnăng của thuộc tính vector và các độ sáng trong bối cảnh đó Trong đườngống chức năng cố định, lập trình viên có thể kiểm soát được vị trí, màu sắccủa các vector và ánh sáng nhưng không phải là mô hình chiếu sáng mà xácđịnh tương tác giữa chúng
2.1.2.2 Tiến hóa của kiến trúc GPU
Các đường ống chức năng cố định thiếu tính tổng quát để có biểu diễnhiệu quả các trường hợp làm bóng mờ phức tạp hơn và các phép toán ánhsáng, mà đó lại là những điều kiện tiên quyết cho các hiệu ứng phức tạp.Bước then chốt trên đã được thay thế bằng các hàm cố định chức năng trênmỗi vector và các phép toán trên mỗi mảnh với chương trình chỉ định người
sử dụng chạy trên từng vector và từng mảnh Trong hơn sáu năm qua, cácchương trình vector và chương trình mảnh đã có ngày càng nhiều khả năng,với giới hạn lớn hơn về kích cỡ và tiêu thụ tài nguyên, với bộ chỉ thị (tậplệnh) đầy đủ tính năng và với các phép toán điều khiển luồng linh hoạt hơn.Sau nhiều năm các bộ chỉ thị lệnh riêng rẽ cho các phép toán trên vector
và mảnh, GPU hiện tại hỗ trợ mô hình bóng mờ thống nhất 4.0 (unifiedShader Model 4.0) trên cả bóng mờ vector và mảnh:
- Các phần cứng phải hỗ trợ các chương trình đổ bóng mờ ít nhất là 65nghìn chỉ thị tĩnh và chỉ thị động không giới hạn
Trang 31- Các tập lệnh, lần đầu tiên, hỗ trợ cả số nguyên 32 bit và số dấu phảyđộng 32 bit.
- Các phần cứng phải cho phép số lượng tùy ý thao tác đọc trực tiếp vàgián tiếp từ bộ nhớ toàn cục (kết cấu - texture)
- Cuối cùng, điều khiển luồng động trong các dạng vòng lặp và rẽ nhánhphải được hỗ trợ
Khi mô hình đổ bóng ra đời và phát triển mạnh hơn, tất cả các loại ứngdụng GPU đã tăng độ phức tạp chương trình vector và mảnh, kiến trúc GPUngày càng tập trung vào các bộ phận lập trình được của đường ống dẫn đồhọa Quả thực, trong khi các thế hệ trước đây của GPU có thể được mô tảchính xác nhất như là phần thêm vào khả năng lập trình được cho đường ốngchức năng cố định, GPU ngày nay được khắc họa tốt hơn, như là công cụ lậptrình được bao quanh bởi các đơn vị hỗ trợ có chức năng cố định
2.1.2.3 Kiến trúc GPU hiện đại
GPU được xây dựng cho các nhu cầu ứng dụng khác nhau so với CPU,
đó là các yêu cầu tính toán lớn chạy song song, với trọng tâm là thông lượnghơn là độ trễ Do đó, các kiến trúc của GPU phát triển theo một hướng khác
so với CPU
GPU phân chia các nguồn lực của bộ xử lý theo các khung cảnh khácnhau, sao cho đường ống được chia theo không gian chứ không phải thờigian Các phần của bộ vi xử lý làm việc trên một trong những khung cảnh cấp
dữ liệu đầu ra trực tiếp vào một phần khác mà sẽ hoạt động trong giai đoạntiếp theo Cơ chế tổ chức này đã rất thành công tại GPU cố định chức năng vìhai lý do Đầu tiên, phần cứng trong bất kỳ khung cảnh nào có thể khai thác
cơ chế song song dữ liệu trong khung cảnh đó, xử lý nhiều phần tử cùng mộtlúc vì nhiều cơ chế song song công việc được chạy bất kỳ lúc nào, GPU cóthể đáp ứng nhu cầu tính toán rất lớn của các đường ống dẫn đồ họa Thứ hai,
Trang 32phần cứng của mỗi khung cảnh có thể được tùy chỉnh với phần cứng chuyêndụng cho công việc đã đưa ra của nó, cho phép tính toán lớn hơn đáng kể vàmức độ hiệu quả vượt qua giải pháp cho mục đích chung Ví dụ, giai đoạnrasterization, cần tính thông tin bao phủ điểm ảnh của từng điểm ảnh tam giácđầu vào, hiệu quả hơn khi thực hiện trên phần ứng dụng Theo các khungcảnh lập trình được (chẳng hạn như các chương trình vector và mảnh) thaythế khung cảnh cố định chức năng, các mục đích chuyên dụng, các thành phần
cố định chức năng được đơn giản thay thế bằng thành phần lập trình được,nhưng nhiệm vụ tổ chức thực hiện song song không thay đổi
Kết quả là một đường ống GPU dài, có tính chất feed-forward có nhiềukhung cảnh, mỗi khung cảnh thường tăng tốc cho một mục đích đặc biệt vàthích hợp với phần cứng song song Trong CPU, bất kỳ phép toán nào cũng cóthể mất khoảng 20 chu kỳ hoạt động theo thứ tự tính từ lúc bắt đầu đến khi rờikhỏi đường ống CPU Trên GPU, một phép toán đồ họa cho trước có thể mấthàng ngàn chu kỳ từ khi bắt đầu đến khi kết thúc Độ trễ của bất kỳ phép toánnào thường là lâu Tuy nhiên, cơ chế song song tác vụ, dữ liệu từ khung cảnhnày tới khung cảnh khác và giữa các khung cảnh tạo ra thông lượng cao Bấtlợi chính của đường ống GPU song song tác vụ là vấn đề cân bằng tải Giốngnhư bất kỳ đường ống nào, hiệu suất của đường ống GPU phụ thuộc vàokhung cảnh chậm nhất của nó Nếu các chương trình vector rất phức tạp vàchương trình mảnh là đơn giản, tổng thể thông qua là phụ thuộc vào hiệu suấtcủa các chương trình vector Trong những ngày đầu của các khung cảnh lậptrình được, tập chỉ thị của các chương trình vector và các chương trình mảnhkhá khác nhau Do đó, những khung cảnh này được tách biệt Tuy nhiên, khi
cả hai chương trình vector và chương trình mảnh trở nên đầy đủ tính năng vàtập chỉ thị lệnh hội tụ như nhau, kiến trúc GPU xem xét lại đường ống songsong tác vụ nghiêm ngặt trong lợi thế của kiến trúc đổ bóng hợp nhất (unified
Trang 33shader), trong đó tất cả đơn vị lập trình được trong đường ống chia sẻ mộtđơn vị phần cứng lập trình được duy nhất Trong khi phần lớn các đường ốngcòn là song song tác vụ, các đơn vị lập trình bây giờ phân chia thời gian của
nó giữa công việc vector, công việc mảnh và công việc hình học (với DirectX
có bộ đổ bóng mười loại hình học khác nhau) Các đơn vị này có thể khai thác
cả hai cơ chế song song tác vụ và song song dữ liệu Khi các bộ phận lập trìnhđược của đường ống chịu trách nhiệm tính toán ngày càng nhiều trong cácđường ống dẫn đồ họa thì kiến trúc của GPU chuyển từ kiến trúc song songtác vụ trong một đường ống nghiêm ngặt sang kiến trúc được phát triển xungquanh một đơn vị lập trình được theo cơ chế song song dữ liệu thống nhất.AMD giới thiệu các kiến trúc đổ bóng hợp nhất đầu tiên cho sản phẩm GPUXenos GPU của nó trong Xbox 360 (2005) Ngày nay, cả GPU của AMD vàNVIDIA đều có tính năng đổ bóng hợp nhất (unified shaders) Lợi ích chongười sử dụng GPU là cân bằng tải tốt hơn với chi phí cho phần cứng phứctạp hơn Lợi ích cho người dùng GPGPU đã rõ ràng: Với tất cả nguồn lực lậptrình được trong một đơn vị phần cứng duy nhất, lập trình viên GPGPU bâygiờ có thể tiếp cận đơn vị lập trình được theo cách trực tiếp, hơn hẳn trướccách tiếp cận trước đây là phân chia công việc trên nhiều đơn vị phần cứng.2.1.3 So sánh GPU và CPU [1]
CPU là bộ vi xử lý trung tâm dùng để tính toán và xử lý các chương trình
vi tính, dữ kiện và đóng vai trò điều phối hoạt động của các thiết bị khác.Còn GPU là bộ vi xử lý chuyên xử lý các dữ liệu về hình ảnh, đồ họa.Ngày nay cả CPU và GPU đều có những bước phát triển thần tốc, một GPUcao cấp có khả năng xử lý đạt tốc độ hàng tỷ phép tính trên giây( TetaFLops /s)
Trang 34Hình 2.1 so sánh kiến trúc CPU và GPU, cho thấy số phần tử toán họcGPU nhiều hơn hẳn CPU, điều này mang đến cho GPU một khả năng xử lýsong song cực kỳ hiệu quả [12].
Hình 2.1: So sánh kiến trúc CPU và GPUSau đây là đồ thị so sánh khả năng xử lý giữa GPU và CPU được mô tảqua Hình 2.2 [12]
Hình 2.2: So sánh phép tính dấu phẩy động trên GPU và CPU
Trang 352.2 Lập trình CUDA
2.2.1 Giới thiệu về môi trường phát triển CUDA
CUDA (Compute Unified Device Architecture) [2] là kiến trúc mới baogồm cả phần cứng và phần mềm để phát triển và quản lý việc tính toán trênGPU như một thiết bị tính toán song song mà không cần ánh xạ vào các hàmlập trình đồ họa Kiến trúc này có trong giải pháp của GeForce 8 Series,Quadro FX 5600/4600, và Tesla của NVIDIA Cơ chế đa nhiệm của hệ điềuhành chịu trách nhiệm cho việc quản lý truy cập tới GPU bởi các ứng dụngCUDA và ứng dụng đồ họa chạy song song Bộ phần mềm CUDA bao gồmcác lớp mô tả trong hình 2.3, driver cho phần cứng, API lập trình, môi trườngthực thi; và hai thư viện toán học mức cao hơn của các hàm thường dùng,CUFFT và CUBLAS Phần cứng được thiết kế để hỗ trợ driver hạng nhẹ vàlớp môi trường thực thi, từ đó cho tốc độ cao
Hình 2.3: Kiến trúc bộ phần mềm CUDA
Trang 36Thư viện lập trình CUDA bao gồm các hàm mở rộng của ngôn ngữ C.CUDA cung cấp cách đánh địa chỉ DRAM thường dùng như mô tả trong hình2.4 cho việc lập trình linh hoạt hơn, bao gồm cả thao tác cấp phát và thu hồi
bộ nhớ Từ góc độ lập trình, điều đó tương ứng với khả năng đọc và ghi dữliệu tại bất kỳ địa chỉ nào trong DRAM, giống như CPU
Thu hồi
Cấp phátHình 2.4: Các thao tác thu hồi cấp phát bộ nhớ
CUDA có đặc tính lưu dữ liệu đệm song song vào bộ nhớ chia sẻ trênchíp với tốc độ đọc ghi rất cao, các luồng dùng bộ nhớ này để chia sẻ dữ liệuvới nhau Như mô tả trong hình 2.5, ứng dụng có thể đạt kết quả tốt với việctối thiểu việc lấy/trả dữ liệu từ DRAM, từ đó giảm phụ thuộc băng thôngtruyền bộ nhớ DRAM
Trang 37Không có vùng nhớ dùng chung
Có vùng nhớ dùng chungHình 2.5: Vùng nhớ dùng chung mang dữ liệu gần ALU
2.2.2 Mô hình lập trình
2.2.2.1 Bộ đồng xử lý đa luồng mức cao
Trong lập trình CUDA, GPU được xem như là một thiết bị tính toán cókhả năng thực hiện một số lượng rất lớn các luồng song song Nó hoạt độngnhư là một bộ đồng xử lý với CPU chính Nói cách khác, dữ liệu song song,phần tính toán chuyên dụng của các ứng dụng chạy trên máy chủ (host) đượctách rời (off-loaded) khỏi thiết bị
Chính xác hơn, một phần của một ứng dụng được thực hiện nhiều lần,nhưng độc lập về mặt dữ liệu, có thể nhóm thành một chức năng được thựchiện trên thiết bị như nhiều luồng khác nhau Để có điều đó, một chức năng