Cũng giống như nhiều hệ thống quản trị nội dung khác, các thông tin trong hệ thống có thể dễ dàng thu thập nếu như người tấn công thu được thông tin mật khẩu của người dùng.. Để bảo vệ,
Trang 10
MỤC LỤC
CHƯƠNG MỞ ĐẦU ………3
CHƯƠNG 1: HỆ QUẢN TRỊ NỘI DUNG DOTNETNUKE ……… 5
1 Giới thiệu hệ quản trị nội dung DotNetNuke………… 5
1.1 Khái niệm 5
1.2 Các tính năng cơ bản của DotNetNuke 5
1.3 Kiến trúc nền tảng của DotNetNuke 7
2 Cơ chế bảo vệ mật khẩu người dùng trong DotNetNuke………8
2.1 Sơ lược về ASP NET Membership 8
2.2 Phương thức lưu trữ mật khẩu của ASP.NET Membership 9
2.3 Các hàm băm thường dùng 10
2.3.1 Hàm băm MD5 11
2.3.2 Hàm băm Chuẩn SHA (Secure Hash Algorithm) 16
2.3.3 So sánh MD5 và SHA 19
CHƯƠNG 2: HỒI PHỤC MẬT KHẨU DOTNETNUKE……… 21
1 Sơ lược về phương pháp hồi phục mật khẩu cho DNN………21
2 Phân tích yêu cầu cho hệ thống hồi phục mật khẩu……… 23
3 Kiến trúc hệ thống hồi phục mật khẩu……… 23
4 Thiết kế các thành phần của hệ thống hồi phục mật khẩu………25
4.1 Thiết kế thành phần WebUI 25
4.2 Thiết kế thành phần WebAPIs 28
4.3 Thiết kế thành phần CSDL 30
4.4 Thiết kế phân hệ back-end 31
4.4.1 Thành phần Master 33
4.4.2 Thành phần Worker 34
4.4.3 Tìm kiếm mật khẩu tương ứng mã băm MD5, SHA1 trên CPU 36
4.4.4 Tìm kiếm mật khẩu tương ứng mã băm MD5, SHA1 trên GPU 37
CHƯƠNG 3: THỬ NGHIỆM VÀ ĐÁNH GIÁ……… 40
Trang 21
1 Môi trường thử nghiệm……… 40
2 Một số kết quả thử nghiệm ………41
2.1 Một số giao diện hệ thống 41
2.1.1 Đăng nhập hệ thống 41
2.1.2 Giao diện chính 42
2.1.3 Giao diện theo dõi tài nguyên hệ thống 42
2.1.4 Danh sách các tác vụ đã thực hiện giải mã SHA1 43
2.1.5 Thực hiện tác vụ mới 43
2.1.6 Thông tin người dùng 44
2.1.7 Danh sách các tài khoản 44
2.2 Kịch bản thử nghiệm 44
2.2.1 Qui trình làm việc của thao tác Khởi tạo tác vụ 44
2.2.2 Qui trình làm việc của thao tác Theo dõi tác vụ 45
2.2.3 Qui trình làm việc của thao tác Hủy tác vụ 45
2.3 Kết quả thử nghiệm 46
3 Đánh giá kết quả……… 47
KẾT LUẬN……….48
Tài liệu tham khảo……… 50
Trang 32
DANH MỤC HÌNH VẼ
Hình1: Kiến trúc nền tảng của DNN
Hình2 Lưu trữ thông tin người dùng trên DNN………
Hình3 Một thao tác MD5—MD5 bao gồm 64 tác vụ thế này, nhóm trong 4 vòng, mỗi vòng 16 tác vụ ………
Hình4 Thuật toán SHA-1………
Hình5 Kiến trúc hệ thống hồi phục mật khẩu ………
Hình6 Luồng thực thi của CodeIgnitor………
Hình7 Các lớp của WebUI………
Hình8 Lược đồ quan hệ………
Hình9 Trình tự thực thi công việc………
Hình10 Trình tự cập nhật tài nguyên………
Hình11 Biểu đồ trạng thái của luồng tìm kiếm ………
Hình12 Giao diện đăng nhập hệ thống………
Hình13 Giao diện chính………
Hình14 Giao diện quản lý tài nguyên………
Hình15 Giao diện quản lý tác vụ………
Hình16 Giao diện tạo lập tác vụ mới………
Hình17 Giao diện thay đổi thông tin người dùng………
Hình18 Giao diện quản lý tài khoản………
Hình 19: Mật khẩu 6,8,10 ký tự của hàm băm SHA1 cho việc thử nghiệm………
Hình 20: Thời gian tìm kiếm thành công trên CPU và GPU ………
Hình 21: Độ tăng tốc (speedup) so vớiss CPU ………
7
9
12
17
24
28
28
30
31
32
36
42
42
42
43
43
44
44
46
46
47
Trang 43
CHƯƠNG MỞ ĐẦU
DotNetNuke (DNN) là hệ quản trị nội dung mã nguồn mở viết bằng ngôn ngữ lập trình VB.NET trên nền tảng ASP.NET DNN được đánh giá là một trong những hệ thống quản trị nội dung mã nguồn mở NET phát triển mạnh nhất hiện nay với số lượng thành viên đông đảo và phát triển rất nhanh trên khắp thế giới, trong đó có cả Việt Nam (ví dụ cộng đồng NukeViet) DNN hiện được nhiều tổ chức sử dụng như công cụ để quảng bá, trao đổi thông tin
Cũng giống như nhiều hệ thống quản trị nội dung khác, các thông tin trong hệ thống có thể dễ dàng thu thập nếu như người tấn công thu được thông tin mật khẩu của người dùng Để bảo vệ, DNN mã hóa mật khẩu người dùng bằng một
mã băm, lưu trữ chúng trên cơ sở dữ liệu và dùng các mã băm này làm cơ sở để đối sánh chúng với mã băm của các mật khẩu được nhập vào khi người dùng đăng nhập Bằng cách đó, kể cả khi người tấn công thâm nhập được vào hệ thống, thu được các mã băm mật khẩu, cũng khó có thể dùng chúng để lấy được các nội dung thông tin cần thiết Khi đó, chỉ có một khả năng để làm được việc này là dựa trên
mã băm, dò ngược lại để tìm ra mật khẩu đúng của người dùng Do bản chất của các mã băm là kết quả của các hàm băm một chiều, việc dò ngược này thường đòi hỏi một năng lực tính toán rất lớn cho việc thử sai
Mục tiêu chính của luận văn là việc nghiên cứu khả năng bảo mật của DNN thông qua việc thử nghiệm hồi phục mật khẩu người dùng của DNN dựa trên các mã băm đã thu thập Công cụ chính để thực hiện việc này là các hệ thống tính toán hiệu năng cao, có sử dụng các bộ xử lý đồ họa đa dụng có năng lực tính toán lớn
Việc nghiên cứu khả năng bảo mật của các hệ thống quản trị nội dung như DNN đóng vai trò quan trọng trong việc quyết định ứng dụng công cụ này cho việc quảng bá và trao đổi thông tin
Các nhiệm vụ chính của đề tài bao gồm:
Trang 54
Thiết kế, xây dựng, và thử nghiệm hệ thống hồi phục mật khẩu của hệ quản trị nội dung DNN sử dụng các hệ thống tính toán hiệu năng cao có trang bị bộ xử lý đồ họa đa dụng
Đánh giá khả năng bảo mật của DNN dựa trên các kết quả thử nghiệm Luận văn được chia ra làm 3 chương chính cụ thể như sau:
CHƯƠNG 1: Giới thiệu Hệ quản trị nội dung DotNetNuke
CHƯƠNG 2: Trình bày thiết kế của hệ thống hồi phục mật khẩu cho DotNetNuke
CHƯƠNG 3: Thử nghiệm và đánh giá
Trang 65
CHƯƠNG 1: HỆ QUẢN TRỊ NỘI DUNG DOTNETNUKE
Chương này tập trung giới thiệu hệ quản trị nội dung DotNetNuke (DNN), đặc biệt là cơ chế lưu trữ và bảo vệ mật khẩu người dùng của DNN
1 Giới thiệu hệ quản trị nội dung DotNetNuke
1.1 Khái niệm
DotNetNuke là một hệ thống quản lý nội dung mã nguồn mở viết bằng ngôn ngữ lập trình VB.NET trên nền tảng ASP.NET, hệ quản trị cơ sở dữ liệu có thể là MS SQL server hoặc Oracle, tùy biến dựa trên Skin và Module DNN được đánh giá là một trong những hệ thống quản trị nội dung mã nguồn mở NET phát triển mạnh nhất hiện nay với số lượng thành viên đông đảo và phát triển rất nhanh trên khắp thế giới
1.2 Các tính năng cơ bản của DotNetNuke
Hệ thống quản lý nội dung trực quan:
- DNN quản lý nội dung theo menu tình huống, mỗi module sẽ có một menu tương ứng xuất hiện ngay tại một biểu tượng bên trái tiêu đề của Module Người sử dụng sẽ dễ dàng tìm ra các chức năng điều khiển hay quản trị của module này một cách nhanh chóng tương ứng với quyền quản trị của mình
- Các module được hiển thị và phân bố trên giao diện dễ dàng nhờ vào các
từ khoá định trước trên các vùng khác nhau của giao diện Chúng ta có thể di chuyển một module từ khu vực này sang khu vực khác bằng một lệnh trên menu tình huống hoặc dùng cách kéo thả
- Nội dung thông tin được soạn thảo trên công cụ được hỗ trợ với các công cụ thuận tiện và hiện đại nhất: với khả năng chèn Flash file, Movie, … điều chỉnh các thuộc tính của đối tượng, làm sạch code…
- Cấu trúc site (Site Map) được quản lý một cách dễ dàng Người sử dụng
có thể thêm một trang mới vào hệ thống và cho phép hoặc không cho phép chúng xuất hiện trên Menu
Quản lý giao diện độc lập, linh hoạt
Trang 76
- Giao diện được phát triển riêng độc lập với chương trình, một nhà thiết
kế giao diện cho Website có thể làm việc độc lập, chỉ cần một số tiêu chuẩn về giao diện phải tuân thủ, các nhà thiết kế không phải quan tâm nhiều đến vấn đề kỹ thuật của hệ thống, giao diện sau khi làm xong sẽ được tích hợp nhanh chóng vào
hệ thống
- Hệ thống quản lý giao diện của DNN là một trong những ưu điểm nổi bật so với các hệ quản trị nội dung khác Do vậy DNN phù hợp cho các Website có yêu cầu giao diện cao và phục vụ công tác đối ngoại cho các doanh nghiệp, tổ chức…
Quản trị hệ thống với đầy đủ chức năng
- Quản lý phân quyền là một trong những chức năng quan trọng của DNN
Hệ thống phân quyền của DNN được cung cấp rất chặt chẽ, cho phép nhà quản trị
có thể tạo ra nhiều nhóm quyền (role) khác nhau và sau đó phân công cho người dùng (user)
- Hệ thống phân quyền của các module có thể tích hợp và phân công thông qua các quyền đã tạo ra của hệ thống; do vậy việc phân quyền có thể thực hiện đến từng chức năng nhỏ của module
- Hệ thống cũng cung cấp sẵn công cụ quản lý thành viên
- DNN cung cấp công cụ quản lý File/ Folder qua giao diện Admin web với đầy đủ các chức năng như tạo thư mục, Upload, Download, Zip/Unzip cũng như việc phân quyền truy xuất vào hệ thống
- Đối với việc quản lý các trang thông tin, hệ thống cũng cho phép khôi
phục dữ liệu đã xoá (recylce bin) Việc này làm giảm rủi ro trong quản lý nội
dung
- Ngoài ra trong việc quản trị hệ thống, giải pháp này còn cung cấp nhiều chức năng khác như: thống kê truy cập, quản lý nhật ký truy xuất, quản lý bộ nhớ đệm, thời khoá biểu vận hành của ứng dụng trên DNN, cơ chế cài đặt Module mới
thuận tiện và khả năng quản lý nhiều Website thành viên
An toàn và bảo mật
- Mức người dùng: Hệ thống được quản lý phân quyền tập trung và chủ
động tạo các quyền, nhóm quyền riêng cho từng phân hệ hoặc toàn bộ website, do
Trang 87
đó những thành viên phụ trách phần nào sẽ chỉ có quyền truy xuất thông tin vào phần đó
- Mức dữ liệu:Mã hoá dữ liệu (Password được mã hóa theo chuẩn
SHA1), Sử dụng SSL(Security Socket Layer) dành cho hệ thống thành viên, đăng
nhập
1.3 Kiến trúc nền tảng của DotNetNuke
DNN được xây dựng dựa trên một kiến trúc nền tảng như mô tả trong hình 1
Hình 1: Kiến trúc nền tảng của DNN
Trong đó:
Tầng giao diện (Presentation Layer): là những gì có thể nhìn thấy và tác động được trên bề mặt của trang Web Các thành phần này đại diện cho sự giao tiếp giữa người sử dụng và trang web Chúng được xây dựng từ các User Controls (.ascx)
Trang 98
Tầng logic nghiệp vụ (Business Logic Layer - BLL): là tầng cung cấp/xử lý
dữ liệu cho giao diện người sử dụng (tầng giao diện) Đây là nơi mà DNN xây dựng các đoạn mã xử lý các hàm, các yêu cầu nghiệp vụ
Tầng truy cập dữ liệu (Data Access Layer - DAL): là tầng tương tác trực tiếp đến cơ sở dữ liệu, thực hiện một mục đích cụ thể lên dữ liệu mà tầng BLL đưa ra như xử lý các hàm, các yêu cầu liên quan đến việc trích dẫn, cập nhật
và xóa nội dung trong cơ sở dữ liệu
2 Cơ chế bảo vệ mật khẩu người dùng trong DotNetNuke
Cũng như đa số hệ quản trị nội dung (và cả các ứng dụng web) khác, DNN bảo mật theo cơ chế sử dụng tên truy nhập/mật khẩu Người dùng được cấp quyền chỉnh sửa nội dung của một hệ thống DNN có thể thông qua tên truy nhập
và mật khẩu để đăng nhập và sau đó thực hiện các thao tác theo quyền hạn được giao Là một hệ thống quản trị nội dung xây dựng trên nền tảng NET, DNN kế thừa, sử dụng hệ thống quản lý tài khoản và quyền hạn truy nhập có sẵn của NET (ASP.NET Membership)
2.1 Sơ lược về ASP NET Membership
ASP.NET cung cấp một phương thức sẵn có để lưu trữ tài khoản và chứng thực người dùng cho mọi ứng dụng trên nền tảng NET Thành phần này hỗ trợ các chức năng chính sau:
Tạo tài khoản người dùng và mật khẩu
Lưu trữ thông tin tài khoản người dùng và mật khẩu trong một cơ sở dữ liệu Microsoft SQL Server, Active Directory hoặc một cơ sở dữ liệu khác
Thực hiện chứng thực bằng giao diện lập trình hoặc thông qua login control
Quản lý mật khẩu, bao gồm việc tạo mật khẩu, thay đổi mật khẩu, khởi tạo lại (reset) mật khẩu
Có tính mở - người dùng có thể bổ sung, thay thế các phương thức quản lý tài khoản có sẵn của người dùng
Trang 109
2.2 Phương thức lưu trữ mật khẩu của ASP.NET Membership
Thông tin người dùng và mật khẩu của DNN nói riêng hay các ứng dụng ASP.NET nói chung được lưu trữ trên cơ sở dữ liệu theo lược đồ quan hệ sau:
Hình 2 Lưu trữ thông tin người dùng trên DNN
Trong cơ sở dữ liệu này, thông tin người dùng được lưu trữ ở bảng
aspnet_Users Do cơ sở dữ liệu người dùng này có thể phục vụ cho nhiều ứng
dụng đồng thời, mỗi bản ghi người dùng sẽ có một khóa ApplicationID đại diện cho ứng dụng Thông tin cụ thể về ứng dụng được lưu trữ trong bảng
Trang 11- Clear: lưu trữ nguyên dạng
- Encrypted: Mã hóa mật khẩu
- Hashed: Băm mật khẩu PasswordSalt Muối của mật khẩu – sử dụng để mã hóa hoặc băm mật khẩu
Mật khẩu trong DNN có thể được lưu trữ theo ba cách:
- Dễ dàng sinh mã băm từ mật khẩu: từ đó có thể nhanh chóng tạo lập hoặc chúng thực người dùng
- Cực kỳ khó khăn để xác định mật khẩu từ mã băm: để bảo vệ mật khẩu kể
cả khi cơ sở dữ liệu bị rò rỉ
2.3 Các hàm băm thường dùng
Về nguyên tắc, ASP.NET Membership cho phép lựa chọn bất kỳ hàm băm nào bằng cách thay thế hoặc ghi đè lên một số phương thức do thư viện cung cấp Tuy nhiên các hàm băm thường dùng nhất trong việc lưu trữ mật khẩu là MD5 và SHA1 (trong đó SHA1 là hàm băm mặc định của ASP.NET Membership) Nội dung trong mục này giới thiệu hai hàm băm thường dùng này
Trang 1211
2.3.1 Hàm băm MD5
Giải thuật mã hóa Md5 nhận đầu vào là một bản tin có độ dài bất kỳ và sinh ra một bản tin tóm lược (message digest) có độ dài 128 bit Giải thuật được dự đoán rằng không thể tính toán để sinh ra hai bản tin mà có cùng tóm lược, hay để sinh ra bản tin mà có tóm lược của nó biết trước Giải thuật MD5 được sử dụng trong các ứng dụng chữ ký số, ở đó một file kích thước lớn phải được nén lại theo một nghĩa an toàn trước khi được mã hóa bằng một khóa riêng (bí mật) trong một
hệ mật mã khóa công khai như là RSA
MD5 chuyển một đoạn thông tin chiều dài thay đổi thành một kết quả chiều dài không đổi 128 bit Mẩu tin đầu vào được chia thành từng đoạn 512 bit; mẩu tin sau đó được độn sao cho chiều dài của nó chia chẵn cho 512 Công việc độn vào như sau: đầu tiên một bit đơn, 1, được gắn vào cuối mẩu tin Tiếp theo là một dãy các số zero sao cho chiều dài của mẩu tin lên tới 64 bit ít hơn so với bội số của 512 Những bit còn lại được lấp đầy bằng một số nguyên 64-bit đại diện cho chiều dài của mẩu tin gốc
Giải thuật MD5 chính hoạt động trên trạng thái 128-bit, được chia thành 4
từ 32-bit, với ký hiệu A, B, C và D Chúng được khởi tạo với những hằng số cố
định Giải thuật chính sau đó sẽ xử lý các khối tin 512-bit, mỗi khối xác định một
trạng thái Quá trình xử lý khối tin bao gồm bốn giai đoạn giống nhau, gọi là vòng; mỗi vòng gồm có 16 tác vụ giống nhau dựa trên: hàm phi tuyến F, cộng mô đun,
và dịch trái
Hình 3 mô tả một tác vụ trong một vòng; một hàm F được dùng trong mỗi
vòng M i chỉ ra một khối tin nhập vào 32-bit, và K i chỉ một hằng số 32-bit, khác nhau cho mỗi tác vụ
s chỉ sự xoay bit về bên trái s đơn vị; s thay dổi tùy theo từng tác vụ
là phép cộng thêm với modulo 232
Trang 13
1) Một số quy ước
Một từ (word) là tương đương với 32-bit, và một byte tương được 8-bit
Một chuỗi các bit có thể được hiểu theo nghĩa như là một chuỗi các byte,
và mỗi nhóm 8 bit được xem như một byte với bit MSB (bit cao) được viết trước
Một chuỗi các byte được hiểu như là một chuỗi các từ (word) 32 bit Trong đó, mỗi nhóm 4 byte này được xem là một từ (word) với byte thấp được viết trước
Dấu “+” biểu thị phép cộng các word
X<<<s : biểu thị giá trị 32 bit thu được từ phép dịch bit quay vòng sang trái s bit từ X
Not(X) : phép bù từng bit của X
X v Y : phép OR từng bit X và Y
X xor Y : phép XOR từng bit X và Y
Trang 1413
XY : phép AND từng bit X và Y
2) Mô tả giải thuật MD5
Giả sử chúng ta có một bản tin đầu vào độ dài b và muốn tìm một tóm lược của nó
Ở đây b là một số nguyên không âm bất kỳ; b có thể là 0, b không cần là bội của 8,
và có thể lớn tùy ý Hình dung rằng các bit của bản tin được viết như sau :
Việc độn được tiến hành như sau : Một bit đơn “1” được chèn vào sau bản tin, sau
đó các bit “0” được chèn vào tiếp sao cho chiều dài tính theo bit của bản tin đã được độn là đồng dư với 448 theo modulo 512 Nói chung, có ít nhất là một bit và nhiều nhất là 512 bit sẽ được chèn vào phía sau
Bước 2 Chèn độ dài
Một số 64 bit biểu diễn cho b (chiều dài của bản tin ban đầu) được chèn vào kết quả ở bước 1 Thậm chí nếu b > 2^64, thì chỉ 64 bit thấp của b được sử dụng Các bit này (64 bit) được xem như là 2 từ 32-bit và được chèn theo thứ tự thấp của từ trước như theo quy ước ở trên
Như vậy bản tin sau khi độn các bit và b, có chiều dài là bội của 512 bit Hay, bản tin này cũng có chiều dài là bội của 16 word (32-bit) Đặt M[0,1 N-1] là các từ của bản tin kết quả, ở đây N là bội của 16
Bước 3 Khởi tạo bộ đệm MD
Có một bộ đệm gồm 4 word (A, B, C, D) được dùng để tính toán bản tin tóm lược
Ở đây mỗi từ A, B, C, D là một thanh ghi 32-bit Các thanh ghi này được khởi tạo với các giá trị Hexa với các byte thấp viết trước, như sau :
word A: 01 23 45 67
word B: 89 ab cd ef
word C: fe dc ba 98
Trang 1514
word D: 76 54 32 10
Bước 4 Xử lý bản tin theo từng khối 16-word
Trước tiên ta định nghĩa các hàm sau, đều nhận đầu vào là 3 từ 32-bit và sinh ra một từ 32-bit
F(X,Y,Z) = XY v not(X) Z
G(X,Y,Z) = XZ v Y not(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X v not(Z))
Ở bước này cần thêm một mảng bảng T có 64 phần tử được xây dựng từ hàm sine Giả sử T[i] biểu thị phần tử thứ i của bảng, công thức cho T là như sau
T[i] = 2^32 * abs(sin(i)) (abs là hàm lấy giá trị tuyệt đối)
Sau khi có các hàm và bảng T, thực hiện tính toán như sau :
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]
/* Vòng 2 */
/* Ký hiệu [abcd k s i] là phép toán
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s) */
/* Thực hiện 16 phép toán */
Trang 1615
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]
/* Vòng 3 */
/* Ký hiệu [abcd k s t] là phép toán
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s) */
/* Thực hiện 16 phép toán */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]
/* Vòng 4 */
/* Ký hiệu [abcd k s t] là phép toán
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s) */
/* Thực hiện 16 phép toán */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]
/* Sau đó thực hiện các phép cộng sau */
Bước 5 Lấy kết quả đầu ra
Bản tin tóm lược bao gồm bốn từ liên tiếp A, B ,C, D Bắt đầu với byte thấp của A
và kết thúc với byte cao của D
3) Tổng kết MD5
Giải thuật mã hóa MD5 đơn giản khi thực hiện, cung cấp cho ta một tóm lược của một bản tin có chiều dài bất kỳ Và sẽ là khó khăn để tìm ra hai bản tin mà có cùng một tóm lược Một số ví dụ về mã hóa MD5
MD5 ("") = d41d8cd98f00b204e9800998ecf8427e
MD5 ("a") = 0cc175b9c0f1b6a831c399e269772661
Trang 1716
MD5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
MD5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
2.3.2 Hàm băm Chuẩn SHA (Secure Hash Algorithm)
Năm 1990, Ron Rivest đã sáng tạo ra hàm băm MD4 Sau đó năm 1992, ông cải tiến MD4 và phát triển một hàm băm khác: MD5 Năm 1993, Cơ quan An ninh Quốc gia Hoa Kỳ/Cục An ninh Trung ương (NSA) đã công bố,một hàm băm rất giống với MD5 được gọi là SHA Vào năm 1995, sau việc khắc phục những lỗ hổng kỹ thuật, NSA đã thay đổi SHA trở thành một hàm băm mật mã khác gọi là SHA-1
SHA-1 (Secure Hash Algorithm) là thuật toán cũng được xây dựng trên thuật toán MD4, đang được sử dụng rộng rãi Thuật toán SHA-1 tạo ra chuỗi mã băm có chiều
dài cố định 160 bit từ chuỗi bit dữ liệu đầu vào x có chiều dài tùy ý
Thuật toán SHA-1
Input: thông điệp với độ dài tối đa 2^64 bits
Output: thông điệp rút gọn (message digest) có độ dài 160 bits
Giải thuật gồm 5 bước trên khối 512 bits
Bước 1: Nhồi dữ liệu
Thông điệp được nhồi thêm các bit sao cho độ dài L mod 512 luôn đồng dư là
448
Thông điệp luôn luôn được nhồi thêm các bit
Số bit nhồi thêm phải nằm trong khoảng 1-512
Phần thêm vào cuối dữ liệu gồm 1 bit 1 và theo sau là các bit 0
Bước 2: Thêm độ dài:
Độ dài khối dữ liệu ban đầu sẽ được biểu diễn dưới dạng nhị phân 64 bit và được thêm cuối chuỗi nhị phân mà ta thu được ở bước 1
Độ dài được biểu diễn dưới dạng nhị phân 64 bit không dấu
Kết quả thu được từ 2 bước là một khối dữ liệu có độ dài là bội số của 512 ( Với cứ 512 bit là một khối dữ liệu)
Bước 3: Khởi tạo bộ đệm MD ( MD buffer)
Một bộ đệm 160 bit được dùng để lưu trữ các giá trị băm trung gian và kết quả Bộđệm được biểu diễn bằng 5 thanh ghi 32-bit với các giá trị khởi tạo ở dạng big-endian
Trang 18Bước 4: Xử lý các khối dữ liệu 512 bit
Hình 4 Thuật toán SHA-1
Trọng tâm của giải thuật bao gồm 4 vòng lặp thực hiện tất cả 80 bước
4 vòng lặp có cấu trúc như nhau, chỉ khác nhau ở hàm logic
Trang 1918
(0≤ t ≤ 19) =F(B, C,D) (B AND C) OR ( (NOT
B) AND D) (20≤ t ≤ 39) =F(B, C,D) B XOR C XOR D
(40≤ t ≤ 59) =F(B, C,D) (B AND C) OR (B AND
D) OR (C AND D) (60≤ t ≤ 79) =F(B, C,D) B XOR C XOR D
Mỗi vòng có đầu vào gồm khối 512-bit hiện thời và một bộ điệm 160 bit A, C,
Trang 20 MD5 sử dụng mỗi hằng số duy nhất cho mỗi bước biến đổi, SHA sử dụng mỗi hằng số cho mỗi vòng biến đổi, hằng số dịch này là một số nguyên tố đối với độ lớn của word (giống với MD4)
Trong MD5 với mỗi bước được cộng kết quả của bước trước đó Với SHA
là cột thứ 5 được cộng (không phải b, c hay d như trong MD5), điều này làm cho phương pháp tấn công của Boer-Bosselaers đối với SHA bị thất bại
Khả năng chống lại tấn công brute-force:
o Để tạo ra thông điệp có giá trị băm cho trước, cần 2128
thao tác với MD5 và 2160
thao tác với SHA-1
o Cho đến nay, chưa có một công bố nào được đưa ra trong việc tấn công SHA, bởi vì độ dài của hàm Băm SHA là 160-bit, nó có thể chống lại phương pháp tấn công bằng vét cạn (kể cả birthday attack) tốt hơn so với MD5 128-bit
Khả năng chống lại thám mã (cryptanalysis): cả 2 đều có cấu trúc tốt
Cả hai dựa trên phép toán 32 bit, thực hiện tốt trên các kiến trúc 32 bit
Trang 2221
CHƯƠNG 2: HỒI PHỤC MẬT KHẨU DOTNETNUKE
Chương này trình bày phương pháp hồi phục mật khẩu cho các hệ quản trị nội dung DNN dựa trên việc thu thập các mã băm mật khẩu của DNN và kỹ thuật hồi phục mật khẩu từ mã băm sử dụng công nghệ tính toán hiệu năng cao trên các
bộ xử lý đồ họa đa dụng
1 Sơ lược về phương pháp hồi phục mật khẩu cho DNN
Như đã đề cập trong chương trước, để bảo vệ mật khẩu người dùng, DNN không lưu trữ trực tiếp các giá trị mật khẩu mà mã hóa hoặc băm chúng bằng một hàm băm (mặc định là SHA1) Hiện tại, luận văn chỉ giới hạn việc hồi phục mật khẩu cho các hệ quản trị nội dung DNN sử dụng phương pháp băm mật khẩu để lưu trữ Đây cũng là phương pháp được khuyến khích sử dụng khi cấu hình cho DNN
Việc hồi phục được mật khẩu người dùng của DNN được thực hiện theo hai pha:
Pha 1: Thu thập các mã băm mật khẩu người dùng
Pha 2: Tìm kiếm mật khẩu tương ứng các mã băm
Trong pha thứ nhất, mã băm của mật khẩu được thu thập từ cơ sở dữ liệu của DNN, cụ thể là từ bảng Membership Ví dụ, có thể sử dụng câu lệnh truy vấn SQL sau:
SELECT Password, PasswordSalt FROM Membership
Dĩ nhiên, để thực hiện được câu lệnh SQL như vậy trước tiên cần có quyền truy nhập cơ sở dữ liệu Tuy nhiên công việc này nằm ngoài phạm vi quan tâm của luận văn Mục tiêu chính của luận văn tập trung vào pha 2 - tìm kiếm mật khẩu tương ứng với mã băm
Đặc điểm chung của các mã băm, chúng là kết quả của một hàm băm một chiều Có thể dễ dàng tính được mã băm bằng cách áp dụng hàm băm này, tuy nhiên sẽ cực kỳ khó khăn để làm ngược lại, tức là tìm mật khẩu khi biết được mã băm Đây cũng chính là lý do để mã băm được sử dụng cho việc bảo vệ mật khẩu người dùng
Trang 2322
Để tìm được mật khẩu từ mã băm, không có cách nào khác ngoài việc thử/sai trên từng mật khẩu thuộc không gian mật khẩu để tìm ra mật khẩu có mã băm cho trước Giải thuật này được định nghĩa đơn giản như sau:
Tìm mật khẩu từ mã băm
Đầu vào:
- Hàm băm h, mã băm cho trước hash
- Không gian mật khẩu P
Đầu ra: p P sao cho h(P) = hash
Giải thuật:
for each p in P
if h(p) = hash then return p
Giải thuật này có một số vấn đề cần quan tâm sau:
- Có thể tồn tại nhiều mật khẩu có cùng giá trị mã băm (đụng độ)
- Số lượng mật khẩu trong không gian P quá lớn
Với vấn đề thứ nhất, thực chất chúng ta không thể làm gì khác ngoài việc xác định tất cả mật khẩu đụng độ, vì bản chất của các hàm băm là làm mất đi thông tin (khác với phương pháp mã hóa không mất thông tin) Tuy nhiên điều này cũng không phải là một hạn chế thực sự vì bản chất của việc hồi phục mật khẩu là để sử dụng chúng cho việc đăng nhập vào hệ thống Với bất kỳ mật khẩu nào có trùng
mã băm, chúng ta đều có thể sử dụng để đăng nhập
Vấn đề thứ hai tạo ra sự khó khăn hơn rất nhiều Giả sử mật khẩu sử dụng
a chữ cái và có độ dài tối đa n ký tự Khi đó không gian mật khẩu sẽ có tất cả là: (a1 + a2 + … + an) mật khẩu Với việc sử dụng tất cả ký tự gõ được trên bàn phím,
số lượng mật khẩu sẽ là một con số dẫn đến việc thử/sai trở nên bất khả thi trên một máy tính tiêu chuẩn
Cách tiếp cận của luận văn là áp dụng các hệ thống tính toán hiệu năng cao cho công việc thử/sai không thể tránh khỏi Công nghệ tính toán hiệu năng cao được lựa chọn trong luận văn là các hệ thống GPU cluster - nhiều máy tính được trang bị GPU đa dụng được kết nối với nhau để cùng giải quyết một bài toán Khi
đó không gian mật khẩu lớn được chia nhỏ ra cho từng đơn vị xử lý để áp dụng kỹ thuật thử/sai Hiện nay, với số lượng đơn vị xử lý cực lớn (hàng ngàn lõi tính toán)
Trang 242 Phân tích yêu cầu cho hệ thống hồi phục mật khẩu
Tiếp cận chính của luận văn là sử dụng một hệ thống GPU Cluster cho việc tìm kiếm mật khẩu người dùng tương ứng với các mã băm thu được từ cơ sở
dữ liệu (pha 1) Hệ thống này cần đáp ứng một số yêu cầu sau:
- Quản lý người dùng: Hệ thống hỗ trợ nhiều người sử dụng đồng thời, người sử dụng muốn tìm kiếm mật khẩu trên hệ thống cần đăng ký một tài khoản Các tác vụ tìm kiếm mật khẩu của người sử dụng sẽ được tạo ra, quản lý, và thực thi dưới tài khoản này
- Quản lý tài nguyên tính toán: Cụm tính toán được thiết kế theo nguyên tắc co dãn (dễ dàng mở rộng hoặc thu hẹp) Mỗi cụm tính toán có một nút chủ (master) và nhiều nút thợ (worker) Mỗi nút thợ này có thể được trang bị các bộ xử lý đa dụng của NVIDIA nhằm tăng tốc độ tìm kiếm mật khẩu Hệ thống cần hỗ trợ các tính năng để bổ sung, gỡ bỏ hoặc giám sát hoạt động của các nút tính toán
- Tạo lập, quản lý và thực thi các tác vụ tìm kiếm mật khẩu:
Hệ thống không chỉ hỗ trợ tìm kiếm mật khẩu tương ứng với một mã băm của một hàm băm duy nhất, mà cần phải hỗ trợ tìm kiếm đồng thời cho nhiều mã băm, với nhiều hàm băm khác nhau cũng như cấu trúc không gian mật khẩu khác nhau Để đạt được điều này, luận văn định nghĩa mỗi công việc tìm kiếm mật khẩu trên một không gian mật khẩu cho một mã băm như là một tác vụ Người sử dụng được phép định nghĩa các tác vụ này và đệ trình chúng vào hàng đợi thực thi của
hệ thống Khi tài nguyên của hệ thống nhàn rỗi, tác vụ sẽ được lấy từ hàng đợi để tiến hành thực thi
3 Kiến trúc hệ thống hồi phục mật khẩu
Để đáp ứng các yêu cầu đặt ra, hệ thống hồi phục mật khẩu được thiết kế với kiến trúc như trong hình vẽ:
Trang 25b Web UI: Giao diện người sử dụng của hệ thống, xây dựng trên nền web Thành phần này có trách nhiệm chính là tiếp nhận các yêu cầu từ người sử dụng và chuyển các yêu cầu này tới hệ thống Các giao diện của Web UI cần đáp ứng những yêu cầu đặt ra cho hệ thống, bao gồm các nhóm chức năng Quản lý người dùng, Quản lý tài nguyên, Quản lý tác vụ
c Web APIs: Để tách biệt các chức năng nghiệp vụ của hệ thống khỏi giao diện tương tác (WebUI), thành phần WebAPIs được xây dựng độc lập với WebUI, cung cấp cho WebUI một tập API dưới dạng dịch vụ mạng Các API này có thể được hiểu như những nguyên tử cơ bản để cấu thành nên các chức năng nghiệp vụ của WebUI Các API này cũng được chia thành ba nhóm tương ứng với các nhóm nghiệp vụ: API quản lý người dùng, API quản lý tài nguyên, API quản lý tác vụ
Thông thường các API này tiếp nhận yêu cầu từ WebUI, sau đó chuyển đổi và lưu trữ các yêu cầu này vào một cơ sở dữ liệu để từ đó hệ thống bên dưới có thể nhận được chúng và thực thi chúng