Sử dụng hàm “băm” để bảo vệ mật khẩu

Thùy Linh, Nguyễn Thị Tám| 08/07/2019 16:11
Theo dõi ICTVietnam trên

Vụ vi phạm dữ liệu gần đây của FlipBoard, dịch vụ tổng hợp tin tức và chia sẻ xã hội phổ biến với hơn 150 triệu người dùng trên toàn thế giới, đã nhấn mạnh một lần nữa tầm quan trọng của bảo mật mật khẩu và yêu cầu các tổ chức cần phải thận trọng hơn. Lưu trữ mật khẩu là một khu vực quan trọng, nơi các công ty thực hiện những điều cần thiết để giữ cho bản thân mình và dữ liệu khách hàng không bị xâm phạm.

Kết quả hình ảnh cho The art and science of password hashing

Lưu mật khẩu ở định dạng văn bản thuần túy, dạng văn bản bình thường mà con người có thể đọc hiểu được, bị coi là một sai lầm nghiêm trọng trong bảo mật mạng. Mặc dù vậy, nhiều công ty, bao gồm cả Facebook và Google, vẫn đang áp dụng điều ngớ ngẩn này. Khi tin tặc có quyền truy cập vào cơ sở dữ liệu mật khẩu ở định dạng văn bản, chúng sẽ có được mật khẩu, tức quyền truy cập vào mọi tài khoản người dùng trong hệ thống đó, và thông thường, do mật khẩu thường xuyên bị sử dụng lại, nó có thể tạo ra hiệu ứng vi phạm liên hoàn (domino) ảnh hưởng tới các tổ chức khác.

Tại sao “băm” mật khẩu là cần thiết

Băm mật khẩu từ lâu đã được quảng cáo là câu trả lời cho vấn đề này. Hiểu một cách đơn giản, băm mật khẩu là việc sử dụng một thuật toán toán học (hàm băm hay còn gọi là hàm hash) để chuyển đổi mật khẩu có độ dài tùy ý thành một chuỗi ký tự có độ dài cố định gần như là duy nhất (vẫn có khả năng xảy ra việc trùng lặp trong trường hợp sử dụng các thuật toán yếu) được gọi là giá trị băm. Giá trị băm thường được biểu diễn ở định dạng thập lục phân (hệ đếm có 16 ký tự, từ 0 đến 9 và A đến F). Và bạn không thể dễ dàng đảo ngược lại quá trình này, tức đưa giá trị băm vào để ra lấy ra dữ liệu ban đầu.

Khi người dùng tạo một mật khẩu mới, nó sẽ được chuyển qua một hàm băm cụ thể. Sau các biến đổi toán học, chúng ta có một giá trị băm. Giá trị băm này là thứ duy nhất được lưu trữ cho mật khẩu người dùng. Do thuật toán băm chỉ hoạt động một chiều nên truy ngược lại mật khẩu ban đầu bằng cách sử dụng giá trị băm là không khả thi. Tuy nhiên, vẫn có nhiều cách khác để suy ra mật khẩu gốc từ giá trị băm nhưng đó không phải là thứ có thể thực hiện trong một vài phút.

Ý tưởng là lưu trữ mật khẩu băm thay vì mật khẩu ở dạng văn bản sẽ làm giảm đáng kể khả năng tin tặc có thể truy xuất tất cả mật khẩu trong hệ thống ngay cả khi chúng có quyền truy cập vào cơ sở dữ liệu.

Sau này, khi người dùng đăng nhập và chúng ta phải xác minh xem người dùng có nhập đúng mật khẩu không, quy trình tương tự được thực hiện lại: mật khẩu nhập vào được biến đổi bằng chính thuật toán được sử dụng khi người dùng tạo mật khẩu mới như đề cập ở trên và hệ thống sẽ so sánh giá trị băm được tạo ra ở đây với giá trị đang được lưu trữ trong cơ sở dữ liệu. Nếu chúng khớp nhau, người dùng được phép truy cập.

Hiểu cách tiếp cận của các kỹ thuật băm mật khẩu khác nhau là rất quan trọng vì không phải mọi thuật toán băm đều như nhau.

Hàm băm cơ bản

Các thuật toán băm lấy đầu vào có độ dài bất kỳ và trả về đầu ra có độ dài cố định. Đầu ra này không hề giống với mật khẩu ban đầu. Mặc dù có vẻ như thuật toán đang tạo ra những con số ngẫu nhiên nhưng thực tế đó là một quá trình có tính xác định. Một công thức toán học và một bảng băm sẽ quyết định biểu tượng nào trong dữ liệu đầu vào tương ứng với biểu tượng nào trong dữ liệu đầu ra. Tin tặc không thể trực tiếp quy ngược một giá trị băm ra mật khẩu nhưng chúng có thể xác định mật khẩu là gì nếu liên tục tạo ra các giá trị băm từ các mật khẩu cho đến khi tìm thấy một mật khẩu trùng khớp. Kỹ thuật này được gọi là tấn công Brute Force, kiểu tấn công áp dụng cho mọi loại mã hóa hoạt động bằng cách thử tất cả các chuỗi mật khẩu có thể để tìm ra mật khẩu đúng.

Với đủ thời gian và quyền truy cập vào các bảng băm, tin tặc có thể đảo ngược mật khẩu. Ví dụ, chúng sẽ biết giá trị băm cho các mật khẩu phổ biến nhất như “Password1” hoặc “qwerty” bằng cách sử dụng bảng cầu vồng, bảng hiển thị những mật khẩu phổ biến và giá trị băm tương ứng của chúng. Điều này có nghĩa là, nếu không có bất kỳ bảo mật bổ sung nào, khi bạn nhập cùng một mật khẩu, bạn sẽ thấy cùng một đầu ra mỗi lần.

Để bảo vệ mật khẩu hơn nữa, một số ký tự ngẫu nhiên, được gọi là “muối”, sẽ được thêm vào cuối mật khẩu của người dùng để tạo ra một đầu ra hoàn toàn khác.

Các thuật toán băm

Băm SHA-256 - Với thuật toán băm mật mã, các đầu vào mặc dù gần giống nhau nhưng giá trị băm của chúng có sự khác biệt rất lớn. Trình tạo hàm băm SHA-256 tạo ra những giá trị băm hoàn toàn khác nhau ngay cả khi chỉ có một ký tự được thay đổi. Điều này khiến tin tặc gặp khó khăn hơn nhiều trong việc đảo ngược giá trị đầu vào từ giá trị đầu ra. Do đó, SHA-256 là thuật toán băm được sử dụng trong tiền điện tử Bitcoin.

MD5 là thuật toán mã hóa luôn tạo ra một đầu ra 128 bit (thường được biểu thị dưới dạng 32 ký tự trong hệ thập lục phân) bất kể độ dài ký tự của đầu vào. Nó là một trong những thuật toán băm được sử dụng rộng rãi nhất nhưng hiện không còn được khuyến khích nữa. MD5 không có khả năng chống trùng lắp, tức là nó có thể tạo ra cùng một giá trị băm với các đầu vào khác nhau, điều này khiến cho nó bị coi là thuật toán băm kém.

Sự sụp đổ của MD5 là do nó quá nhanh và quá phổ biến. Các cuộc tấn công Brute-Force có nhiều khả năng thành công do hàng ngàn đầu vào đã được thử nghiệm và sự phổ biến của việc này đã khiến nó trở nên hấp dẫn đối với tin tặc. Ngày nay, bạn có thể tìm thấy các giá trị đầu vào của hàm băm MD5 trong vài giây bằng cách tra Google. Chính vì thế, nhiều doanh nghiệp sử dụng MD5 hiện nay đã phải thực hiện thêm “muối” vào nó.

MD5Crypt - MD5Crypt đã thêm chức năng bổ sung vào MD5 để làm cho nó có khả năng chống lại các cuộc tấn công Brute-Force hơn. Tuy nhiên, vào năm 2012, tác giả của MD5Crypt, Poul-Hennin Kamp, tuyên bố rằng nó không an toàn do tốc độ của phần cứng hiện đại.

SHA-1 - SHA-1 có nhiều vấn đề tương tự như MD5. Nó rất nhanh, có khả năng bị trùng lắp và hiện được coi là không an toàn. Tính toán nhanh dẫn đến các cuộc tấn công Brute-Force được thực hiện nhanh hơn, điều này khiến cho việc sử dụng SHA-1 để lưu trữ mật khẩu trở nên không an toàn.

BCrypt - Không giống như SHA-1 và MD5, Bcrypt được cố tình làm chậm đi, khi nói về bảo mật mật khẩu, đây là một điều tốt vì nó hạn chế khả năng thành công của các cuộc tấn công Brute-Force. Một khía cạnh quan trọng của băm là nó phải là một hình thức mã hóa một chiều, tức là dễ dàng chuyển đổi đầu vào thành đầu ra nhưng không thể tìm thấy đầu vào từ đầu ra. Chức năng băm chậm này làm cho việc bẻ khóa băm trở nên bất khả thi hơn vì nó tốn thời gian và sử dụng nhiều năng lực tính toán.

Các công ty phải thận trọng trong việc giữ cho dữ liệu khách hàng của mình không bị xâm phạm. Hiện có sẵn nhiều tùy chọn băm khác nhau, do vậy, biết được rằng không phải tất cả các thuật toán băm đều như nhau là một điều rất quan trọng. Một số có thể bị phá với rất ít thời gian và công sức, một số khác thì việc bẻ khóa đòi hỏi nhiều sức mạnh và thời gian hơn.

Băm là một thành phần quan trọng của bảo mật mật khẩu. Các tổ chức phải đảm bảo rằng mình đang sử dụng những thuật toán băm hiện đại và mạnh mẽ nhất khiến tin tặc gần như không thể đảo ngược quá trình và có thể đọc được mật khẩu ở dạng văn bản thuần túy. Bằng cách thực hiện tiếp cận chủ động, các công ty có thể giảm nguy cơ bị xâm phạm và tin tặc giành được quyền truy cập vào dữ liệu khách hàng có giá trị.

Nổi bật Tạp chí Thông tin & Truyền thông
Đừng bỏ lỡ
Sử dụng hàm “băm” để bảo vệ mật khẩu
POWERED BY ONECMS - A PRODUCT OF NEKO