SHA1 vs md5 vs SHA256: sử dụng để đăng nhập PHP?


133

Tôi đang tạo một đăng nhập php và tôi đang cố gắng quyết định nên sử dụng SHA1 hay Md5, hay SHA256 mà tôi đã đọc trong một bài viết stackoverflow khác. Có ai trong số họ an toàn hơn những người khác? Đối với SHA1 / 256, tôi vẫn sử dụng muối?

Ngoài ra, đây có phải là một cách an toàn để lưu trữ mật khẩu dưới dạng băm trong mysql?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);


Xem thêm câu trả lời này và đọc phần về băm mật khẩu.
Ja͢ck 17/03/2015

Câu trả lời:


110

Cũng không. Bạn nên sử dụng bcrypt. Tất cả các băm mà bạn đề cập đều được tối ưu hóa để nhanh chóng và dễ dàng trên phần cứng, và vì vậy việc bẻ khóa chúng có chung phẩm chất. Nếu bạn không có lựa chọn nào khác, ít nhất hãy chắc chắn sử dụng một loại muối dài và băm lại nhiều lần.

Sử dụng bcrypt trong PHP 5.5+

PHP 5.5 cung cấp các chức năng mới để băm mật khẩu . Đây là phương pháp khuyến nghị để lưu trữ mật khẩu trong các ứng dụng web hiện đại.

// Creating a hash
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10

// Verifying the password against the stored hash  
if (password_verify($password, $hash)) {
    // Success! Log the user in here.
}

Nếu bạn đang sử dụng phiên bản PHP cũ hơn, bạn thực sự nên nâng cấp , nhưng cho đến khi bạn có thể sử dụng password_compat để hiển thị API này.

Ngoài ra, hãy để password_hash()tạo ra muối cho bạn. Nó sử dụng CSPRNG .

Hai cảnh báo của bcrypt

  1. Bcrypt sẽ âm thầm cắt bất kỳ mật khẩu nào dài hơn 72 ký tự.
  2. Bcrypt sẽ cắt ngắn sau bất kỳ NULký tự nào .

( Bằng chứng về khái niệm cho cả hai hãy cẩn thận ở đây.)

Bạn có thể muốn giải quyết cảnh báo đầu tiên bằng cách băm trước mật khẩu của mình trước khi chạy chúng qua bcrypt , nhưng làm như vậy có thể khiến ứng dụng của bạn chạy đầu tiên vào lần thứ hai.

Thay vì viết sơ đồ của riêng bạn, hãy sử dụng một thư viện hiện có được viết và / hoặc đánh giá bởi các chuyên gia bảo mật.

TL; DR - Sử dụng bcrypt .


1
Ngoài ra, tôi rất mới về điều này: là sha1, sha256 và md5 tất cả các 'băm' mà bạn đề cập đến?
Tony Stark

3
Đúng. Tôi đang đề cập đến SHA1, SHA256 và MD5 và một loạt các giá trị băm khác được tối ưu hóa cho tốc độ. Bạn không muốn sử dụng hàm băm được tối ưu hóa cho tốc độ để bảo mật mật khẩu. Có rất nhiều bài viết hay thảo luận về lý do tại sao, và tôi đặc biệt thích bài viết này: Chargeen.matasano.com/chargeen/2007/9/7/ Kẻ
Julian Gorset

4
Nó được bao gồm trong hàm "mật mã" kể từ PHP 5.3. Nếu bạn có phiên bản cũ hơn, tôi sẽ xem xét khung "phpass" cho điều tốt nhất tiếp theo.
Julian Gorset

3
@Stanislav Palatnik SHA512 là một lựa chọn tốt. Đừng hiểu lầm tôi; Tôi không nói rằng băm SHA512 kéo dài và mặn là không an toàn. Nó an toàn. Mặc dù vậy, thực tế vẫn là bcrypt an toàn hơn , và vì vậy tôi thấy không có lý do gì để không sử dụng nó.
Julian Gorset

10
@Cypher: bcryptđược thiết kế để chậm vì lợi ích của việc chậm như nhau để bẻ khóa.
Julian Gorset

23

Tôi nghĩ rằng việc sử dụng md5 hoặc sha256 hoặc bất kỳ hàm băm nào được tối ưu hóa cho tốc độ là hoàn toàn tốt và tôi rất tò mò muốn nghe bất kỳ người dùng nào khác có thể có. Đây là lý do của tôi

  1. Nếu bạn cho phép người dùng sử dụng các mật khẩu yếu như Thần, tình yêu, chiến tranh, hòa bình thì dù mã hóa bạn vẫn sẽ cho phép người dùng nhập mật khẩu chứ không phải băm và những mật khẩu này thường được sử dụng trước, vì vậy điều này KHÔNG xảy ra có bất cứ điều gì để làm với mã hóa.

  2. Nếu bạn không sử dụng SSL hoặc không có chứng chỉ thì những kẻ tấn công nghe lưu lượng sẽ có thể lấy mật khẩu và mọi nỗ lực mã hóa bằng javascript hoặc tương tự là phía máy khách và dễ dàng bị bẻ khóa và khắc phục. Một lần nữa, điều này sẽ không liên quan gì đến mã hóa dữ liệu ở phía máy chủ.

  3. Các cuộc tấn công vũ lực sẽ lợi dụng mật khẩu yếu và một lần nữa vì bạn cho phép người dùng nhập dữ liệu nếu bạn không có giới hạn đăng nhập 3 hoặc thậm chí hơn một chút thì vấn đề sẽ lại không liên quan đến mã hóa dữ liệu.

  4. Nếu cơ sở dữ liệu của bạn bị xâm phạm thì rất có thể mọi thứ đã bị xâm phạm bao gồm cả các kỹ thuật băm của bạn cho dù bạn đã tạo ra mật mã như thế nào. Một lần nữa, đây có thể là một cuộc tấn công XSS của nhân viên bất mãn hoặc tiêm sql hoặc một số cuộc tấn công khác không liên quan đến mã hóa mật khẩu của bạn.

Tôi tin rằng bạn vẫn nên mã hóa nhưng điều duy nhất tôi có thể thấy mã hóa là ngăn những người đã có hoặc bằng cách nào đó có được quyền truy cập vào cơ sở dữ liệu chỉ đọc to mật khẩu. Nếu đó là một người không được phép truy cập vào cơ sở dữ liệu thì bạn có vấn đề lớn hơn phải lo lắng về lý do tại sao Sony đã lấy vì họ nghĩ rằng mật khẩu được mã hóa bảo vệ mọi thứ, kể cả số thẻ tín dụng, tất cả những gì nó làm là bảo vệ một lĩnh vực đó.

Lợi ích thuần túy duy nhất tôi có thể thấy đối với việc mã hóa mật khẩu phức tạp trong cơ sở dữ liệu là trì hoãn nhân viên hoặc những người khác có quyền truy cập vào cơ sở dữ liệu chỉ bằng cách đọc mật khẩu. Vì vậy, nếu đó là một dự án nhỏ hoặc một cái gì đó tôi sẽ không lo lắng nhiều về bảo mật ở phía máy chủ thay vào đó tôi sẽ lo lắng hơn về việc bảo mật bất cứ thứ gì khách hàng có thể gửi đến máy chủ như tiêm sql, tấn công XSS hoặc vô số cách khác bạn có thể bị xâm phạm. Nếu ai đó không đồng ý, tôi mong được đọc một cách mà mật khẩu siêu mã hóa là bắt buộc từ phía khách hàng.

Lý do tôi muốn thử và làm rõ điều này là vì mọi người thường tin rằng mật khẩu được mã hóa có nghĩa là họ không phải lo lắng về việc nó bị xâm phạm và họ không còn lo lắng về việc bảo mật trang web.


1
Vâng nêu rõ. Cyber ​​Security sẽ được ưu tiên hơn các kỹ thuật băm, chúng không chỉ lưu dữ liệu của bạn mà còn giữ cho máy chủ phòng thủ sẵn sàng.
CᴴᴀZ

14
Điều này thực sự là thông tin sai. Tất nhiên, mật khẩu băm an toàn trong cơ sở dữ liệu không cải thiện bảo mật ở cấp ứng dụng hoặc cấp cơ sở dữ liệu. Nó không phải là một bắt tất cả cho an ninh. Bạn muốn băm an toàn mật khẩu người dùng trong cơ sở dữ liệu của mình vì 2 lý do; Đầu tiên khách hàng tin tưởng bạn với mật khẩu của họ, họ có thể hoặc không thể sử dụng trên các trang web khác, vì vậy bạn muốn đảm bảo rằng điều này không thể phục hồi được, ngay cả khi bạn bị xâm phạm, thứ hai, bạn muốn xóa trách nhiệm pháp lý trong trường hợp bảo mật vi phạm. Tôi không biết bất kỳ vụ kiện nào, nhưng mật khẩu bị rò rỉ làm cho công ty của bạn trông rất tệ.
James McMahon

6
Đây là lời khuyên tồi. Nếu ai đó đánh cắp cơ sở dữ liệu của bạn và lấy tất cả mật khẩu băm của bạn, ngay cả khi họ cũng đã xâm phạm các phần khác trong cơ sở dữ liệu của bạn, điều quan trọng là phải ngăn chặn họ bẻ khóa mật khẩu và đăng nhập. (Ví dụ, nghĩ về một trang web ngân hàng.) Các thuật toán được tối ưu hóa tốc độ cho phép kẻ tấn công kiểm tra nhiều ứng cử viên chống lại các băm bị đánh cắp cho đến khi họ tìm thấy một trận đấu. Các thuật toán như bcrypt và scrypt khiến việc kiểm tra ứng viên trở nên chậm và tốn kém, ngay cả khi họ biết bạn sử dụng thuật toán nào. Vì vậy, họ bảo vệ tốt hơn nếu ai đó ăn cắp băm.
Richard

6
"Nếu cơ sở dữ liệu của bạn bị xâm phạm thì rất có thể mọi thứ đã bị xâm phạm bao gồm cả kỹ thuật băm của bạn cho dù bạn đã tạo ra nó khó hiểu đến mức nào." Đó là lý do tại sao bcrypt rất quan trọng. Với bcrypt, sẽ không có vấn đề gì nếu ai đó có băm. Với thuật toán băm nhanh như SHA1 / MD5, nó thực hiện.
ceejayoz

Tôi nghĩ rằng điểm mà một số bạn đang thiếu là không có vấn đề gì nếu mật khẩu được bảo mật 1000% khi tất cả các dữ liệu khác là văn bản rõ ràng. Ví dụ, nếu toàn bộ cơ sở dữ liệu bị xâm phạm, thì giờ đây hacker có tất cả các số thẻ tín dụng rõ ràng. Có, nhiều người sử dụng cùng một mật khẩu trên các trang web khác nhau, nhưng họ đã được thông báo rằng không nên làm điều đó, vì vậy đó không còn là vấn đề của chúng tôi nữa. Nếu cơ sở dữ liệu chứa thông tin nhạy cảm và sự thỏa hiệp của nó là một mối quan tâm, thì hãy mã hóa toàn bộ cơ sở dữ liệu, mạnh mẽ như bạn nghĩ là cần thiết.
UncaAlby

15

Như Johannes Gorset đã chỉ ra, bài đăng của Thomas Ptacek từ Matasano Security giải thích tại sao các hàm băm đơn giản, đa năng như MD5, SHA1, SHA256 và SHA512 là những lựa chọn băm mật khẩu kém .

Tại sao? Chúng quá nhanh - bạn có thể tính toán ít nhất 1.000.000 MD5 băm một giây trên một lõi với một máy tính hiện đại, do đó, sức mạnh vũ phu là khả thi đối với hầu hết mật khẩu mọi người sử dụng. Và đó là ít hơn nhiều so với một cụm máy chủ bẻ khóa dựa trên GPU!

Ướp muối mà không kéo dài khóa chỉ có nghĩa là bạn không thể tính toán trước bảng cầu vồng, bạn cần xây dựng nó một cách đặc biệt cho loại muối cụ thể đó. Nhưng nó sẽ không thực sự làm cho mọi thứ khó khăn hơn nhiều.

Người dùng @Will nói:

Mọi người đang nói về điều này giống như họ có thể bị hack qua internet. Như đã nêu, việc giới hạn các nỗ lực khiến không thể bẻ khóa mật khẩu qua Internet và không liên quan gì đến hàm băm.

Họ không cần. Rõ ràng, trong trường hợp LinkedIn, họ đã sử dụng lỗ hổng SQL tiêm phổ biến để lấy bảng DB đăng nhập và bẻ khóa hàng triệu mật khẩu ngoại tuyến.

Sau đó, anh ta quay lại kịch bản tấn công ngoại tuyến:

Bảo mật thực sự phát huy tác dụng khi toàn bộ cơ sở dữ liệu bị xâm phạm và sau đó một hacker có thể thực hiện 100 triệu lần thử mật khẩu mỗi giây so với băm md5. SHA512 chậm hơn khoảng 10.000 lần.

Không, SHA512 không chậm hơn 10000 lần so với MD5 - nó chỉ mất khoảng gấp đôi. Mặt khác, Crypt / SHA512 là một quái thú rất khác, giống như đối tác BCrypt của nó, thực hiện việc kéo dài khóa , tạo ra một hàm băm rất khác với một muối ngẫu nhiên tích hợp và sẽ mất khoảng 500 đến 999999 lần để tính toán (kéo dài là điều chỉnh).

SHA512 => aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
Crypt/SHA512 => $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

Vì vậy, sự lựa chọn cho PHP là Crypt / Blowfish (BCrypt), Crypt / SHA256 hoặc Crypt / SHA512. Hoặc ít nhất là Tiền điện tử / MD5 (PHK). Xem www.php.net/manual/en/feft.crypt.php


Băm mật khẩu đơn giản là ổn, tùy thuộc vào tường lửa để giữ an toàn cho máy chủ .. và theo "tường lửa", tôi có nghĩa là tường lửa phản ứng chặn / làm chậm lực lượng vũ trang (con người chỉ có thể gõ THAT nhanh) .. điều này cuộc thi là vô nghĩa .. .. "điều gì sẽ xảy ra nếu một số hacker đột nhập và bây giờ có tất cả mọi thứ" (face-Desk) - nếu một hacker xâm nhập vào máy chủ của bạn - nó đã kết thúc. Mật khẩu bị bẻ khóa chủ yếu là do chúng quá đơn giản hoặc các nhà phát triển phần mềm quá lười biếng để suy nghĩ như một tội phạm mạng.

@argon Vui lòng đọc lại. Toàn bộ mục đích của việc băm mật khẩu là để khi DB đăng nhập của bạn bị xâm phạm (và đến một lúc nào đó), bạn sẽ không ngay lập tức rò rỉ tất cả mật khẩu của người dùng, thường được người dùng sử dụng trên các trang web khác nhau. trì hoãn sau khi đầu vào sẽ làm. Và "trò chơi kết thúc nếu họ vào máy chủ của bạn" là một điểm cần thiết, bởi vì họ không cần phải vào bên trong máy chủ của bạn. Các tin tặc dễ bị tổn thương phổ biến nhất được sử dụng là SQL SQL (xem trường hợp Linkedin), sau đó chúng đánh cắp băm. Đó là lý do tại sao bạn cần muối và kéo dài.
LexLythius

nếu yêu cầu bảo mật thực sự rất mãnh liệt, thì việc lưu trữ mật khẩu ở nơi khác có thể là một ý tưởng tốt. Có nhiều cách để bảo vệ dữ liệu của bạn (và mã nguồn) -cho "nếu / khi" ... .. -nhưng băm mật khẩu lên đến "bit gazillion" chỉ an toàn như: trình tạo mật khẩu / hệ thống khách , việc truyền dữ liệu và con người phục vụ phần cứng máy chủ. .. điều đó được nói: Tôi KHÔNG nói băm là vô ích, tuy nhiên tôi đang nói rằng nếu giải pháp của bạn chỉ là băm phức tạp hơn thì tôi sợ nó sẽ không hoạt động trong tương lai gần, liên quan đến máy tính lượng tử.

Băm đệ quy thêm công việc / chi phí cho bất kỳ nỗ lực hack nào. Càng lặp nhiều, càng khó bẻ khóa, do đó, ngay cả băm nhanh như SHA256 cũng có thể được sử dụng. Lặp lại phải ngẫu nhiên và có thể được công khai. password_hash()cho thấy chi phí trong chính hàm băm.
Victor Stoddard

@VictorStoddard Có, bạn có thể cuộn sơ đồ băm của riêng mình và cung cấp khả năng kéo dài khóa có thể điều chỉnh. Nhưng tại sao bạn muốn làm điều đó thay vì sử dụng các thuật toán đã được xem xét kỹ lưỡng, kỹ lưỡng hơn nhiều mà các chuyên gia đã tạo ra và cung cấp cho chính xác mục đích này?
LexLythius

13

Sử dụng SHA256. Nó không hoàn hảo, vì SHA512nó sẽ là lý tưởng cho một hàm băm nhanh, nhưng trong số các tùy chọn, đó là sự lựa chọn nhất định. Theo bất kỳ công nghệ băm nào, hãy đảm bảo muối băm để tăng cường bảo mật.

Như một ghi chú bổ sung, FRKT, xin vui lòng chỉ cho tôi nơi ai đó có thể dễ dàng bẻ khóa băm SHA256 mặn? Tôi thực sự rất thích thú khi thấy điều này.

Chỉnh sửa quan trọng:

Di chuyển về phía trước xin vui lòng sử dụng bcryptnhư là một băm cứng. Thêm thông tin có thể được tìm thấy ở đây .


Chỉnh sửa trên Salting:

Sử dụng một số ngẫu nhiên hoặc luồng byte ngẫu nhiên, v.v. Bạn có thể sử dụng trường duy nhất của bản ghi trong cơ sở dữ liệu của mình dưới dạng muối, theo cách này, muối khác nhau cho mỗi người dùng.


1
Nhưng chúng được tối ưu hóa cho tốc độ, có nghĩa là chúng cho phép hack vũ phu.
arbales

6
Thực tế vẫn còn, đây là để bảo mật một mật khẩu. Bằng cách sử dụng hàm băm với muối, sau đó thêm giới hạn 3 lần thử trên trang web, bạn sẽ làm chậm đáng kể các nỗ lực của tin tặc (thậm chí là ung thư vũ phu). Sử dụng bất kỳ mã hóa thuần túy nào, giờ đây bạn có một vấn đề khác - bảo mật khóa. Nếu khóa được tìm thấy, toàn bộ cơ sở dữ liệu của bạn bị xâm phạm (nếu không thêm muối). Tuy nhiên, băm, bạn sẽ không bao giờ lấy được mật khẩu gốc ra khỏi hệ thống và đó là cách nó phải như vậy.
Kyle Rosendo

1
Như đã lưu ý, vấn đề với MD và SHA-series là chúng được tối ưu hóa cho tốc độ. Không thể tránh khỏi việc băm của bản chất này ngày càng trở nên không an toàn khi điện toán phát triển.
Julian Gorset

1
Bất cứ điều gì trở nên ngày càng xấu / không an toàn / vv khi điện toán phát triển. Vào thời điểm SHA512, vv bị hack, sẽ có nhiều thuật toán an toàn hơn. Đây là bản chất của điện toán trong mọi trường hợp.
Kyle Rosendo

1
một cách tốt để tạo ra một muối trong php là gì? có mã ví dụ? tôi tưởng tượng mình không nên chọn thứ gì đó như 'hươu cao cổ'
Tony Stark

4

Điều mà mọi người dường như đang thiếu là nếu hacker có quyền truy cập vào cơ sở dữ liệu thì có lẽ anh ta cũng có quyền truy cập vào tệp php băm mật khẩu và có thể chỉ cần sửa đổi để gửi cho anh ta tất cả các combo mật khẩu tên người dùng thành công. Nếu anh ta không có quyền truy cập vào thư mục web, anh ta luôn có thể chọn mật khẩu băm nó và ghi nó vào cơ sở dữ liệu. Nói cách khác, thuật toán băm không thực sự quan trọng bằng bảo mật hệ thống và cũng hạn chế các lần đăng nhập nếu bạn không sử dụng SSL thì kẻ tấn công chỉ có thể lắng nghe kết nối để lấy thông tin. Trừ khi bạn cần thuật toán mất nhiều thời gian để tính toán (cho mục đích riêng của bạn), thì SHA-256 hoặc SHA-512 với một loại muối cụ thể của người dùng là đủ.

Là một biện pháp bảo mật bổ sung, thiết lập một tập lệnh (bash, batch, python, v.v.) hoặc đặt cho nó một cái tên khó hiểu và kiểm tra xem liệu login.php có thay đổi không (kiểm tra dấu ngày / giờ) và gửi email cho bạn nếu nó có Cũng có thể nên đăng nhập tất cả các lần thử khi đăng nhập với quyền quản trị viên và ghi nhật ký tất cả các lần thử không đăng nhập vào cơ sở dữ liệu và gửi nhật ký qua email cho bạn.


"Điều mà mọi người dường như đang thiếu là nếu tin tặc có quyền truy cập vào cơ sở dữ liệu thì có lẽ anh ta cũng có quyền truy cập vào tệp php băm mật khẩu ..." Điều này không đúng. Một trong những lỗ hổng phổ biến nhất là SQL SQL, sẽ cung cấp khả năng đọc / ghi cho cơ sở dữ liệu nhưng không có quyền truy cập vào mã PHP.
ceejayoz

Nếu bạn có quyền truy cập vào mã thì bạn có thể sửa đổi và lưu trữ tất cả mật khẩu mà người dùng đang gửi trong một văn bản thuần túy. Vì vậy, không, nếu mã bị xâm phạm thì TRÒ CHƠI TRÊN.
magallanes

3

Mọi người đang nói về điều này giống như họ có thể bị hack qua internet. Như đã nêu, việc giới hạn các nỗ lực khiến không thể bẻ khóa mật khẩu qua Internet và không liên quan gì đến hàm băm.

Muối là điều bắt buộc, nhưng độ phức tạp hoặc nhiều muối thậm chí không quan trọng. Bất kỳ muối nào cũng ngăn chặn kẻ tấn công sử dụng bảng cầu vồng. Một loại muối duy nhất cho mỗi người dùng ngăn kẻ tấn công tạo bảng cầu vồng mới để sử dụng đối với toàn bộ cơ sở người dùng của bạn.

Bảo mật thực sự phát huy tác dụng khi toàn bộ cơ sở dữ liệu bị xâm phạm và sau đó một hacker có thể thực hiện 100 triệu lần thử mật khẩu mỗi giây so với băm md5. SHA512 chậm hơn khoảng 10.000 lần. Một mật khẩu phức tạp với sức mạnh ngày nay vẫn có thể mất 100 năm để phá hủy với md5 và sẽ mất gấp 10.000 lần với SHA512. Các muối không ngăn chặn được sự tàn bạo vì chúng luôn phải được biết đến, nếu kẻ tấn công tải xuống cơ sở dữ liệu của bạn, dù sao thì anh ta cũng có thể ở trong hệ thống của bạn.


1

MD5 rất tệ vì sự cố va chạm - hai mật khẩu khác nhau có thể tạo ra cùng md-5.

Sha-1 sẽ rất an toàn cho việc này. Lý do bạn lưu trữ phiên bản mật khẩu sha-1 đã được ướp muối là để máy chủ của bạn không lưu giữ mật khẩu của người dùng trong tệp, mà họ có thể đang sử dụng với máy chủ của người khác. Nếu không, nó có gì khác biệt?

Nếu tin tặc đánh cắp toàn bộ cơ sở dữ liệu không được mã hóa của bạn bằng cách nào đó, điều duy nhất mật khẩu được băm được thực hiện là ngăn anh ta mạo danh người dùng để đăng nhập trong tương lai - tin tặc đã có dữ liệu.

Kẻ tấn công có giá trị băm có ích gì, nếu những gì người dùng của bạn nhập là mật khẩu đơn giản?

Và ngay cả khi tin tặc với công nghệ tương lai có thể tạo ra một triệu khóa sha-1 một giây cho một cuộc tấn công vũ phu, thì máy chủ của bạn có xử lý một triệu đăng nhập một giây để tin tặc kiểm tra khóa của mình không? Đó là nếu bạn cho phép tin tặc cố gắng đăng nhập bằng sha-1 đã được muối thay vì mật khẩu như đăng nhập bình thường.

Đặt cược tốt nhất là hạn chế các lần đăng nhập xấu vào một số hợp lý - chẳng hạn 25, và sau đó thời gian người dùng hết trong một hoặc hai phút. Và nếu các lần đăng nhập xấu tích lũy đạt 250 trong vòng 24 giờ, hãy đóng quyền truy cập tài khoản và gửi email cho chủ sở hữu.


Ngay cả khi tôi đang sử dụng mã hóa yếu hơn, thực tế không có hệ thống nào có thể tổ chức một cuộc tấn công tàn bạo trong hơn 1 triệu lần thử mỗi giây.
magallanes

1
Ba lần đăng nhập thất bại và bạn bị khóa. Thời kỳ, kết thúc câu chuyện. Ngay cả những mật khẩu siêu ngu ngốc như "1234" cũng được bảo mật, nếu hacker lần đầu tiên thử "mật khẩu", "pa $$ word" và "passw0rd" (khóa!). Làm thế nào người dùng lấy lại quyền truy cập bây giờ trở thành điểm gắn bó bảo mật của bạn và những gì bạn làm phụ thuộc vào kích thước của cơ sở người dùng của bạn. 200 người dùng? Có họ điện thoại để được giúp đỡ.
UncaAlby

Có phải câu trả lời này không có ý nghĩa với bất kỳ ai khác, hoặc đó chỉ là tôi?
tự đại diện

1

Dưới đây là so sánh giữa MD5 và SHA1. Bạn có thể có được một ý tưởng rõ ràng về cái nào là tốt hơn.

nhập mô tả hình ảnh ở đây


1

Sử dụng argon2i . Các argon2 chức năng mật khẩu băm đã giành Password Băm cạnh tranh.

Các lựa chọn hợp lý khác, nếu sử dụng argon2 không có sẵn, là tiền điện tử , bcryptPBKDF2 . Wikipedia có các trang cho các chức năng này:

MD5, SHA1 và SHA256 là các thông báo, không phải là chức năng băm mật khẩu. Chúng không phù hợp cho mục đích này.

Chuyển đổi từ MD5 sang SHA1 hoặc SHA512 sẽ không cải thiện tính bảo mật của công trình rất nhiều. Tính toán băm SHA256 hoặc SHA512 rất nhanh. Kẻ tấn công có phần cứng thông thường vẫn có thể thử hàng chục triệu (với một CPU) hoặc thậm chí hàng tỷ (với một GPU) băm mỗi giây. Các chức năng băm mật khẩu tốt bao gồm một yếu tố công việc để làm chậm các cuộc tấn công từ điển.

Đây là một gợi ý cho các lập trình viên PHP: đọc Câu hỏi thường gặp về PHP sau đó sử dụng password_hash () .


0

Hãy giả sử điểm tiếp theo: tin tặc đánh cắp cơ sở dữ liệu của chúng tôi bao gồm cả người dùng và mật khẩu (được mã hóa). Và tin tặc đã tạo một tài khoản giả bằng mật khẩu mà họ biết.

MD5 yếu vì ngắn và phổ biến và thực tế mọi thế hệ băm không có mật khẩu đều yếu khi bị tấn công từ điển. Nhưng..

Vì vậy, giả sử rằng chúng tôi vẫn đang sử dụng MD5 với SALT. Các tin tặc không biết SALT nhưng chúng biết mật khẩu của một người dùng cụ thể. Vì vậy, họ có thể kiểm tra: ????? 12345 trong đó 12345 là mật khẩu biết và ????? là muối. Các tin tặc sớm hay muộn cũng có thể đoán được SALT.

Tuy nhiên, nếu chúng tôi sử dụng MD5 + SALT và chúng tôi đã áp dụng MD5, thì không có cách nào để khôi phục thông tin. Tuy nhiên, tôi nhắc lại, MD5 vẫn còn ngắn.

Ví dụ: giả sử mật khẩu của tôi là: 12345. SALT là BILLCLINTON

md5: 827ccb0eea8a706c4c34a16891f84e7b

md5 với hàm băm: 56adb0f19ac0fb50194c312d49b15378

mD5 với hàm băm trên md5: 28a03c0bc950decdd9ee362907d1798a Tôi đã thử sử dụng dịch vụ trực tuyến đó và tôi không tìm thấy dịch vụ nào có thể bẻ khóa được. Và MD5 duy nhất của nó! (có thể như ngày hôm nay nó sẽ bị bẻ khóa vì tôi đã tạo md5 trực tuyến)

Nếu bạn muốn làm quá mức thì SHA256 là quá đủ nếu nó được áp dụng với một muối và hai lần.

tldr MD5 (HASH + MD5 (mật khẩu)) = ok nhưng ngắn, SHA256 là quá đủ.


Vấn đề với việc sử dụng MD5 với muối là các máy tính có thể tạo ra một cuộc tấn công vũ phu vào một mật khẩu với tốc độ cực nhanh. shylor.com/2015/09/14/php-5-5-secure-password-hashing
Shylor 9/2/2016

0

Mã hóa md5 là một trong những điều tồi tệ nhất, bởi vì bạn phải bật mã và nó đã được giải mã. Tôi muốn giới thiệu cho bạn SHA256. Tôi đang lập trình lâu hơn một chút và đã có trải nghiệm tốt. Dưới đây cũng sẽ là một mã hóa.

password_hash() example using Argon2i

<?php
echo 'Argon2i hash: ' . password_hash('rasmuslerdorf', PASSWORD_ARGON2I);
?>
The above example will output something similar to:

Argon2i hash: $argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.