Mô hình thử nghiệm

Một phần của tài liệu Thám mật khẩu các file word (Trang 63 - 68)

phương pháp vét cạn phân tích cấu trúc mật khẩu

Hình 4.1. Sơ đồ mô hình thử nghiệm

Ở bước mã hóa, khi người dùng nhập mật khẩu vào để bảo vệ file DOCX, hệ thống Office sẽ sử dụng giải thuật để sinh khóa mã hóa. Ban đầu nó sẽ sinh ra một giá trị ngẫu nhiên salt, giá trị này có độ dài tương ứng là 8, 12, hoặc 16 byte tùy theo lựa chọn của người dùng khi mã hóa là AES-128 bit/ AES-192 bit hoặc AES- 256 bit. Giá trị salt và độ dài khóa dkLen được lưu trong dữ liệu file DOCX dưới dạng dữ liệu bản rõ (dữ liệu này không được mã hóa). Khóa mã hóa được sinh một lần bởi hàm băm một chiều, sử dụng ngay tại thời điểm mã hóa và sau đó hủy không lưu. Ngoài salt và dkLen, nó còn lưu giá trị kiểm tra mật khẩu Verifier và mã xác thực (10byte) – Authentication Code (AC).

Bảng ký tự, độ dài ký tự File DOCX Từ điển, định nghĩa cấu trúc

Sinh không gian mật khẩu

Sinh không gian mật khẩu Trích giá trị

salt và verifier

Sinh mật khẩu ứng cử

Kiểm tra mật khẩu đúng bằng hàm API hoặc bằng cách nhận dạng bản rõ

64

Giá trị salt được sử dụng để trộn với mật khẩu đúng của file, dùng để chống tấn công tính toán trước, giúp tăng tính bảo mật.

Salt và dkLen được lưu lại trong file DOCX, giúp hệ thống Office sinh lại khóa từ mật khẩu người dùng nhập vào khi cần xem nội dung của file đã được bảo vệ. Muốn sinh lại khóa từ mật khẩu, ta chỉ cần gọi lại giải thuật điều chế khóa, với đầu vào là salt, dkLen và mật khẩu.

Giá trị Verifier cho phép loại bỏ những mật khẩu thử chắc chắn không phải là mật khẩu file DOCX, bằng cách này giúp cho hệ thống Office không phải thực hiện quá trình giải mã, giải nén tốn kém thêm chi phí. Tuy nhiên điều này lại là điểm yếu đối với tấn công lên không gian mật khẩu với hệ thống tính toán mạnh chẳng hạn như tính toán trên các bộ xử lý đồ họa GPU.

Giá trị Authentication Code giúp phát hiện chính xác mật khẩu người dùng. Với mỗi mật khẩu thử cho giá trị Verifier trùng khớp với giá trị Verifier lưu trong file DOCX, khóa sinh ra dùng thực hiện quá trình giải mã, giải nén và cho ra là giá trị Authentication Code. Nếu giá trị này trùng với Authentication Code lưu trong file DOCX thì nó là mật khẩu đúng. Ngoài ra, AC cũng giúp phát hiện dữ liệu file DOCX khi trao chuyển qua đường mạng có bị thay đổi nội dung hay không. Nếu bị thay đổi, giá trị AC này không còn trùng với giá trị AC lưu trong file DOCX.

Sơ đồ chương trình thực hiện lấy ra các thông tin dkLen, salt, và verifier bên trong file:

65

66

Sau đó xác thực một mật khẩu thử có phải là mật khẩu ứng cử hay không. Giải thuật được mô phỏng như sau:

Hình 4.3. Giải thuật kiểm tra một mật khẩu

Các bước chi tiết thực hiện giải thuật

- Nếu dkLen > (232 – 1)*hLen, đầu ra “độ dài khóa quá lớn” và dừng chương trình

- Đặt l là số khối hLen ở khóa được sinh ra, l = CEIL(dkLen / hLen)

Ở đây, kí hiệu CEIL(x) là hàm làm tròn, là số nguyên lớn nhất còn nhỏ hơn hoặc bằng x.

- Với mỗi khối như vậy, gọi thực hiện hàm băm HMAC-SHA1 một ngàn lần, cho đầu ra là các T_k, k chạy từ 1 đến l.

67

- Ghép T_1 đến T_l, rồi lấy hai byte ở vị trí dkLen*2 và dkLen*2 + 1 làm giá trị TestVerifier, các byte từ vị trí 0 đến dkLen -1 làm khóa mã hóa. Giá trị TestVerifier được đem so sánh với giá trị Verifier lưu trong file DOCX, nếu trùng khớp chứng tỏ mật khẩu thử có khả năng là mật khẩu đúng. Tập các mật khẩu như vậy được gọi là tập mật khẩu ứng cử.

Tổng quan về quá trình khôi phục mật khẩu cho file word qua các bước như sau:

- Bước 1: Hình thành ra không gian mật khẩu hiệu quả.

- Bước 2: Với mỗi mật khẩu trong không gian mật khẩu kiểm tra xem có phải là mật khẩu ứng cử.

- Bước 3: Với mỗi mật khẩu ứng cử, thực hiện giải mã, giản nén và nhận dạng bản rõ để tìm lại mật khẩu đúng cho file.

Chi phí tính toán chủ yếu tập trung ở bước 2, vì MS Office sử dụng số lượng vòng lặp lớn (1,000 vòng) hàm băm HMAC-SHA1, mục đích gia tăng độ phức tạp chống tấn công brute-force. Một ngàn vòng lặp HMAC-SHA1 này không thể thực hiện song song được vì có sự giàng buộc về dữ liệu – dữ liệu đầu vào ở vòng sau sử dụng dữ liệu đầu ra của vòng trước đó. (adsbygoogle = window.adsbygoogle || []).push({});

Ta đánh giá sơ lược độ phức tạp của hàm băm nói riêng và bài toán khôi phục mật khẩu tệp tin nói chung. Trước tiên, nếu chọn tấn công trực tiếp lên không gian khóa AES với kích thước là dkLen, chúng ta cần phải duyệt trong trường hợp xấu nhất là 2dkLen khóa, đảm bảo tìm ra được khóa đúng. Vậy độ phức tạp của bài toán là O(2dkLen) – là hàm số mũ với mũ là kích thước khóa. Chẳng hạn với khóa AES – 128 bit, thì số lượng khóa 2128 ~= 3.4e10+38. Nếu một siêu máy tính thực hiện kiểm tra được 1,000 tỷ khóa / giây thì cũng phải mất chừng 10e+10 năm. Còn nếu thực hiện tấn công vét cạn trên không gian mật khẩu, với số lượng kí tự cơ sở là k, n là độ dài tối đa mật khẩu sinh ra, thì bài toán cần phải sinh ra số lượng khóa là ~ kn, kn

= 2nlog2(k) , độ phức tạp của bài toán thám mã là O(kn) = O(2nlog2(k)) vẫn là hàm số mũ, tăng rất nhanh. Với cách làm tấn công lên không gian mật khẩu, người ta mong rằng nlog2(k) << dkLen (*). Như vậy thì cần phải có hoặc là mật khẩu đặt cho tệp nén có tập kí tự cơ sở nhỏ (k nhỏ) hoặc độ dài mật khẩu nhỏ (n nhỏ) thì sẽ hiệu quả hơn so với tấn công lên không gian khóa. Ví dụ, dkLen = 128, k = 62, thì n cần nhỏ hơn 21 để (*) vẫn còn thỏa mãn. Đây là độ phức tạp nói chung của các bài toán thám mã.

Còn với thám mã file DOCX, việc tấn công ngược lên hệ mã AES không khả thi mà tấn công xuôi cũng khó vì thực thi hàm băm rất tốn kém chi phí. Trên lý thuyết, thì với mỗi mật khẩu đầu vào, hàm băm thực hiện với số lượng phép tính không thay đổi để điều chế khóa, do đó hàm băm có độ phức tạp là O(1) đối với một mật khẩu và là O(m) với m là số lượng mật khẩu trong không gian mật khẩu tìm kiếm. Tuy nhiên, hằng số O(1) rất lớn so với hàm băm khác, chính vì thế, tốc độ

68

sinh khóa của hàm băm được cài đặt tốt (có tối ưu mã) cũng chỉ cho tốc độ 300 khóa trên giây trên một chiếc máy tính Intel Core I3 2.6GHz.

Một phần của tài liệu Thám mật khẩu các file word (Trang 63 - 68)