Password là gì?
Password thường là một chuỗi tổ hợp ký tự có độ dài giới hạn bao gồm tất cả các ký tự mà bảng mã ký tự lớn nhất hành tinh hiện nay có thể đánh mã số – bảng mã Unicode.
Sức mạnh của password nằm ở 2 điểm:
- Chỉ một hoặc một số ít người biết nội dung làm password. Điều này đem tới thứ lợi ích đầu tiên là “bí mật“.
- Nếu một người không biết nội dung của password thì buộc phải cướp hoặc đoán. Tức là phải tốn công sức ở một mức độ nào đó để lấy được Password. Điều này đem đến lợi ích thứ 2 “bảo vệ“.
Theo như trên thì chúng ta hình thành được một số con đường để phá vỡ lợi ích “bảo mật” (bảo vệ bí mật) của password.
- Dí dao lấy password từ thằng giữ mật khẩu
- Thông qua tấn công APT, nghe lén, keylogging
Tuy nhiên nếu như người có password là người không dễ để có thể lấy được password. Ví dụ: không thể dí dao vào cổ Tổng Thống Mỹ để lấy password (bạn sẽ bị phơ ngay 1 viên kẹo), hoặc attack vào máy tính của một chuyên gia bảo mật (kiểu như lão mrro, gamma95) bạn sẽ bị phản “damage” nếu thử attack họ (ví dụ stl chơi dại khi đụng vào anh TQN).
Vậy thì chúng ta có cách khác, đó là Đoán mò password. Đúng bạn phải “đoán” và “mò” password, đây là 2 động từ tiếng Việt của 2 phương pháp kỹ thuật tấn công password dưới đây:
- Đoán: Dictionary Attack
- Mò: Brute Force Attack
Bruteforce Attack
Tôi sẽ nói về cái này trước. Đây là kiểu tấn công mà bạn sẽ “mò” tất cả các tổ hợp ký tự có thể là password cho đến khi có một tổ hợp ký tự trùng khớp với tổ hợp ký tự được dùng làm password.
Phương pháp tấn công này giúp ta thấy rõ được điểm mạnh cốt lõi của password. Password là bí mật, không ai biết được nó có độ dài bao nhiêu và tổ hợp từ những ký tự gì ngoài người sở hữu nó.
Người tấn công về mặt lý thuyết buộc phải thử “tất cả” các trường hợp có thể có của tổ hợp ký tự cho đến khi tìm ra tổ hợp đúng. Chính cái “tất cả” này làm cho password an toàn. Do năng lực tính toán là có “giới hạn” nên việc “mò” hết “tất cả” các tổ hợp sẽ tốn 1 thứ là “thời gian”. Nếu một password có thể đẩy việc mò ra nó tới một thời gian xa xôi trong tương lai (tính bằng ngàn năm) thì coi như nó thắng người tấn công vì người đó không thể chờ tới lúc mò ra được password.
Công thức tính số lượng tổ hợp password có thể: (Số lượng ký tự) ^ (Độ dài password)
Các ký tự chuẩn utf-8 gồm 65 ký tự: a-z, A-Z, 0-9.
Ví dụ: một mật khẩu “XinchaoVN2022” có độ dài 13 ký tự. Vậy tôi có 369,720,589,101,871,000,000,000 tổ hợp.
Giả sử tôi có một máy tính với khả năng tạo 80,000,000 tổ hợp ký tự trên 1 giây. Thì tôi cần:
Computing Power 80,000,000 hash/s
Time 4,621,507,363,773,390 second (or)
77,025,122,729,557 minutes (or)
1,283,752,045,493 hours (or)
53,489,668,562 days (or)
1,782,988,952 months (or)
148,582,413 years
Rất nhiều thiên niên kỷ trôi qua để làm công việc này. Do đó password này đạt được thứ lợi ích là “bảo mật”.
Tóm lại, với kiểu tấn công Brute force password tôi sẽ chết già trước khi mò các mật khẩu có độ dài lớn. Và các password sẽ an toàn trước tôi.
Dictionary Attack
Vấn đề của Brute Force Attack là việc “mò” hết “tất cả” các tổ hợp làm tôi “mất thời gian”. Thể nên kỹ thuật Dictionary Attack ra đời. Kỹ thuật này thay hành động “mò” vô tội vạ bằng hành động “đoán” có tính toán.
Bạn có thể hiểu sơ sơ về phương thức tấn công này dựa vào cái tên của chính nó “Dictionary” tức “từ điển”, hay nói ngắn gọn bạn có một danh sách các tổ hợp ký tự có “khả năng cao” là password rồi mang dò coi trong cái danh sách đó có cái nào là password không.
Keyword ở đây là “khả năng”. Chính xác thứ làm cho phương pháp tấn công này trở nên yếu ớt trước password là “khả năng” của từ điển của bạn là “giới hạn”. Việc cần làm ở đây là “đoán” về “cấu trúc” của password rồi từ đó hình thành một từ điển “ngắn gọn” và có “khả năng cao”.
Theo như tôi thống kê từ khá nhiều database tôi tiếp cận được của các hacker trên các diễn đàn mạng. Ví dụ một cấu trúc của password ở Việt nam thường là:
- Ngôn ngữ: tiếng Việt
- Tổ hợp từ có nghĩa
- Số từ trong mật khẩu: 2 hoặc 3
- Chữ cái đầu viết hoa
- 2 hoặc 4 chữ số theo ngày tháng năm sinh hoặc quy luật
- Ký tự đặc biệt @#$!
Công thức tính số lượng tổ hợp password có thể: (Số lượng ký tự) ^ (Độ dài password)
Các tổng hợp từ tiếng Việt đơn có nghĩa: 1556
Ví dụ: một mật khẩu “Phucdeptrai” có 3 từ tiếng việt có nghĩa. Vậy tôi có khoảng 3,767,287,616 tổ hợp từ.
Bạn sẽ thấy sự khác biệt ở đây là tôi có 3,767,287,616 tổ hợp “từ” chứ không phải tổ hợp ‘ký tự”, mà từ thì có thể dài tới 21 ký tự trong trường hợp password có 3 chữ “nghieng” (từ dài nhất trong tiếng Việt)
Tương tự, với trường hợp này tôi cần:
Computing Power 80,000,000 hash/s
Time 47 second (or)
1 minutes (or)
0 hours (or)
0 days (or)
0 months (or)
0 years
Chính xác là còn khoảng 47 giây để crack mật khẩu dài 21 kí tự!
Điều cốt lõi ở đây là số tổ hợp “từ” sẽ ít hơn số tổ hợp “ký tự” do không gian tổ hợp bị thu hẹp xuống rất nhiều lần. Với một password 3 từ thì nó cũng không khác mấy khi so với một password 3 ký tự trong trường hợp này.