SHA-1 có an toàn để lưu trữ mật khẩu không?


148

Kết luận: SHA-1 an toàn như mọi thứ chống lại các cuộc tấn công tiền giả, tuy nhiên nó rất dễ tính toán, điều đó có nghĩa là dễ dàng hơn để thực hiện một cuộc tấn công từ điển bruteforce hoặc từ điển. (Điều tương tự cũng đúng đối với những người kế nhiệm như SHA-256.) Tùy thuộc vào hoàn cảnh, hàm băm được thiết kế để có thể tính toán đắt tiền (như bcrypt) có thể là lựa chọn tốt hơn.


Một số người ném xung quanh những nhận xét như "SHA-1 bị hỏng" rất nhiều, vì vậy tôi đang cố gắng hiểu chính xác điều đó có nghĩa là gì. Giả sử tôi có một cơ sở dữ liệu băm mật khẩu SHA-1 và kẻ tấn công có thuật toán phá vỡ SHA-1 hiện đại và một mạng botnet với 100.000 máy được truy cập vào nó. (Có quyền kiểm soát hơn 100 nghìn máy tính gia đình có nghĩa là họ có thể thực hiện khoảng 10 ^ 15 thao tác mỗi giây.) Họ cần bao nhiêu thời gian để

  1. tìm ra mật khẩu của bất kỳ một người dùng nào?
  2. tìm ra mật khẩu của một người dùng nhất định?
  3. Tìm ra mật khẩu của tất cả người dùng?
  4. tìm cách đăng nhập như một trong những người dùng?
  5. tìm cách đăng nhập như một người dùng cụ thể?

Làm thế nào để thay đổi nếu mật khẩu được muối? Liệu phương pháp tạo muối (tiền tố, hậu tố, cả hai hoặc một cái gì đó phức tạp hơn như xor-ing) có quan trọng không?

Đây là sự hiểu biết hiện tại của tôi, sau một số googling. Hãy sửa trong câu trả lời nếu tôi hiểu nhầm điều gì đó.

  • Nếu không có muối, một cuộc tấn công cầu vồng sẽ ngay lập tức tìm thấy tất cả mật khẩu (ngoại trừ những mật khẩu cực kỳ dài).
  • Nếu có một muối ngẫu nhiên đủ dài, cách hiệu quả nhất để tìm ra mật khẩu là tấn công từ điển hoặc tấn công từ điển. Các cuộc tấn công va chạm cũng không phải là tiền đề đều không giúp ích gì trong việc tìm ra mật khẩu thực tế, vì vậy các cuộc tấn công bằng mật mã chống lại SHA-1 không giúp ích gì ở đây. Nó thậm chí không quan trọng bằng thuật toán nào được sử dụng - người ta thậm chí có thể sử dụng MD5 hoặc MD4 và mật khẩu sẽ an toàn (có một chút khác biệt vì tính toán hàm băm SHA-1 chậm hơn).
  • Để đánh giá mức độ "an toàn" an toàn như thế nào, hãy giả sử rằng một lần chạy sha1 cần 1000 thao tác và mật khẩu chứa chữ hoa, chữ thường và chữ số (nghĩa là 60 ký tự). Điều đó có nghĩa là kẻ tấn công có thể kiểm tra 10 15 * 60 * 60 * 24/1000 ~ = 10 17 mật khẩu tiềm năng mỗi ngày. Đối với một cuộc tấn công vũ phu, điều đó có nghĩa là kiểm tra tất cả mật khẩu tối đa 9 ký tự trong 3 giờ, tối đa 10 ký tự trong một tuần, tối đa 11 ký tự trong một năm. (Mất 60 lần cho mỗi ký tự bổ sung.) Một cuộc tấn công từ điển nhanh hơn nhiều (thậm chí một kẻ tấn công với một máy tính có thể kéo nó ra trong vài giờ), nhưng chỉ tìm thấy mật khẩu yếu.
  • Để đăng nhập với tư cách người dùng, kẻ tấn công không cần tìm ra mật khẩu chính xác; Nó là đủ để tìm một chuỗi kết quả trong cùng một hàm băm. Đây được gọi là một cuộc tấn công tiền giả đầu tiên. Theo như tôi có thể tìm thấy, không có cuộc tấn công tiền thân nào chống lại SHA-1. (Một cuộc tấn công bruteforce sẽ mất 2 160 hoạt động, có nghĩa là kẻ tấn công lý thuyết của chúng ta sẽ cần 10 30 năm để kéo nó đi. Giới hạn của khả năng lý thuyết là khoảng 2 60 hoạt động, mà tại đó các cuộc tấn công sẽ mất vài năm.) Có các cuộc tấn công preimage chống lại các phiên bản giảm của SHA-1 với hiệu quả không đáng kể (đối với SHA-1 giảm sử dụng 44 bước thay vì 80, thời gian tấn công giảm từ 2 160 hoạt động xuống còn 2 157). Có các cuộc tấn công va chạm chống lại SHA-1 nằm trong khả năng lý thuyết ( điều tốt nhất tôi tìm thấy làm giảm thời gian từ 2 80 xuống 2 52 ), nhưng chúng vô dụng đối với việc băm mật khẩu, thậm chí không cần muối.

Nói tóm lại, lưu trữ mật khẩu với SHA-1 có vẻ hoàn toàn an toàn. Tôi đã bỏ lỡ một cái gì đó?

Cập nhật: Marcelo đã chỉ ra một bài viết trong đó đề cập đến một cuộc tấn công tiền giả thứ hai trong 2 106 hoạt động . ( Chỉnh sửa: Như Thomas giải thích , cuộc tấn công này là một cấu trúc giả định không áp dụng cho các tình huống thực tế.) Tôi vẫn không thấy điều này gây nguy hiểm cho việc sử dụng SHA-1 như một chức năng phái sinh chính. Có những lý do chính đáng để nghĩ rằng một cuộc tấn công va chạm hoặc một cuộc tấn công tiền giả thứ hai cuối cùng có thể được biến thành một cuộc tấn công tiền giả đầu tiên?


Điều này bây giờ đã 7 tuổi và rất nhiều đã xảy ra kể từ khi nó được chỉnh sửa lần cuối. SHA-1 không còn được coi là đủ an toàn cho việc băm mật khẩu
GordonM

@GordonM chuyện gì đã xảy ra? Với sự phát triển của sức mạnh tính toán, các cuộc tấn công va chạm SHA-1 ngày càng trở nên thiết thực hơn nhưng chúng không thực sự phù hợp ở đây. SHA-1 không bao giờ thực sự an toàn cho việc băm mật khẩu (nói chung là băm nhanh), nhưng trong phạm vi của nó, nó vẫn là AFAIK.
Tgr

SHA-1 không bao giờ an toàn cho việc băm mật khẩu vì nó không bao giờ có ý định bảo mật mật khẩu ngay từ đầu ...
Azxdreuwa

Câu trả lời:


209

Câu trả lời ngắn cho câu hỏi của bạn là: SHA-1 an toàn nhất có thể. MD5 cũng sẽ ổn, thậm chí MD4; nhưng nó có thể khiến một số nhà đầu tư lo lắng. Đối với quan hệ công chúng , tốt nhất là sử dụng hàm băm "tốt hơn", ví dụ SHA-256, ngay cả khi bạn cắt đầu ra của nó thành 160 hoặc 128 bit (để tiết kiệm chi phí lưu trữ). Một số ứng cử viên vòng 2 của SHA-3 dường như nhanh hơn SHA-1 trong khi được cho là "an toàn hơn"; tuy nhiên chúng vẫn còn một chút mới, vì vậy việc gắn bó với SHA-256 hoặc SHA-512 sẽ là con đường an toàn hơn ngay bây giờ. Nó sẽ làm cho bạn trông chuyên nghiệp và thận trọng, đó là tốt.

Lưu ý rằng "an toàn như bạn có thể nhận được" không giống như "hoàn toàn an toàn". Xem dưới đây để giải thích khá dài.

Về các cuộc tấn công đã biết:

Các cuộc tấn công đã biết vào MD4, MD5 và SHA-1 là về các vụ va chạm, không ảnh hưởng đến sức đề kháng của tiền giả. Nó đã được chứng minh rằng MD4 có một vài điểm yếu có thể (chỉ trên lý thuyết) được khai thác khi cố gắng phá vỡ HMAC / MD4, nhưng điều này không áp dụng cho vấn đề của bạn. Cuộc tấn công tiền giả 2 106 giây trong bài báo của Kesley và Schneier là một sự đánh đổi chung chỉ áp dụng cho các đầu vào rất dài (2 60 byte; đó là một triệu terabyte - chú ý cách 106 + 60 vượt quá 160; sự đánh đổi không có gì kỳ diệu trong đó).

Phần còn lại của thông báo này giả định rằng hàm băm bạn sử dụng (ví dụ SHA-1) là một "hộp đen" không có thuộc tính đặc biệt nào mà kẻ tấn công có thể sử dụng. Đó là những gì bạn có ngay bây giờ ngay cả với các hàm băm "bị hỏng" MD5 và SHA-1.

Về bảng cầu vồng:

"Cuộc tấn công cầu vồng" thực sự là chia sẻ chi phí của một cuộc tấn công từ điển hoặc vũ phu. Nó là một dẫn xuất từ ​​sự đánh đổi bộ nhớ thời gian được Hellman mô tả lần đầu tiên vào năm 1980. Giả sử rằng bạn có N mật khẩu có thể (đó là kích thước của từ điển của bạn, hoặc 2 n nếu bạn xem xét việc bẻ khóa một hàm băm có đầu ra là n bit), có một cuộc tấn công thời gian chia sẻ mà bạn precompute các N băm mật khẩu và lưu trữ chúng trong một bảng lớn. Nếu bạn sắp xếp các đầu ra băm, bạn có thể lấy mật khẩu của mình trong một lần tra cứu. Một chiếc bàn cầu vồng là một cách thông minh để lưu trữ chiếc bàn đó với không gian giảm đi nhiều. Bạn chỉ lưu trữ mật khẩu băm N / t và bạn bẻ khóa mật khẩu bằng O (t 2 ) tra cứu. Bảng cầu vồng cho phép bạn hầu như xử lý các bảng được tính toán trước lớn hơn nhiều so với những gì bạn có thể lưu trữ thực tế.

Tuy nhiên, cầu vồng hay không, kẻ tấn công vẫn phải chạy toàn bộ cuộc tấn công ít nhất một lần. Điều này có thể được xem như một số lớp tối ưu hóa liên tiếp:

  1. Cuộc tấn công brute-force / dictionary có chi phí N cho việc bẻ khóa từng mật khẩu.
  2. Với một bảng được tính toán trước, kẻ tấn công trả chi phí N một lần và sau đó có thể tấn công nhiều mật khẩu với chi phí rất nhỏ cho mỗi mật khẩu.
  3. Nếu bảng tính toán trước là bảng cầu vồng, thì N có thể lớn hơn một chút, vì chi phí lưu trữ giảm. Nút thắt trên N trở thành sức mạnh CPU mà kẻ tấn công có thể tập hợp được, chứ không phải kích thước của ổ cứng của anh ta.

Nếu N đủ lớn để chi phí CPU băm mật khẩu N là lố bịch, thì một cuộc tấn công như vậy là không khả thi, bất kể có sử dụng bảng cầu vồng hay không. Điều này có nghĩa là hàm băm (kháng preimage) có đầu ra từ 80 bit trở lên là đủ để khiến cho cuộc tấn công vũ phu không thể thực hiện được.

Về muối:

Muối là một cách để đánh bại tiền tính toán. Trong phần mô tả ở trên, muối đưa kẻ tấn công trở lại bước 1: việc muối ngăn chặn kẻ tấn công chia sẻ chi phí O ( N ) giữa một số mật khẩu bị tấn công. Các bảng được tính toán trước, một bảng cầu vồng fortiori , không còn khả thi.

Bạn muốn muối vì khi dữ liệu băm bao gồm mật khẩu , tức là thứ gì đó nằm trong não của một người ngẫu nhiên, thì N có thể khá thấp: con người rất tệ trong việc chọn và nhớ mật khẩu. Đây là những gì "tấn công từ điển" nói về: đó là sử dụng một không gian mật khẩu tiềm năng giảm ("từ điển") với giả định rằng nhiều mật khẩu người dùng sẽ ở trong không gian được chọn đặc biệt đó.

Do đó, việc muối hóa ít nhất sẽ ngăn kẻ tấn công sử dụng các bảng được tính toán trước, đặc biệt là các bảng cầu vồng được tính toán trước. Điều này giả định rằng kẻ tấn công sẽ có thể phá vỡ một hoặc hai mật khẩu; chúng tôi không muốn anh ta phá vỡ 1000 mật khẩu khác với ít chi phí.

Ngoài ra, muối là tốt cho quan hệ công chúng.

Về chi phí SHA-1:

Chi phí cơ bản của SHA-1 là về việc băm một khối 64 byte. Đó là cách SHA-1 hoạt động: dữ liệu được đệm, sau đó chia thành các khối 64 byte. Chi phí xử lý một khối duy nhất là khoảng 500 chu kỳ xung nhịp trên hệ thống Intel Core2 và đó là cho một lõi đơn. MD5 và MD4 nhanh hơn, lần lượt đếm khoảng 400 và 250 chu kỳ. Đừng quên rằng hầu hết các CPU hiện đại đều có một số lõi, do đó nhân lên tương ứng.

Một số chương trình muối quy định muối lớn; ví dụ, những gì đi vào hàm băm thực sự là 40000 bản sao liên tiếp của một muối 128 bit, tiếp theo là mật khẩu. Điều này làm cho việc băm mật khẩu trở nên đắt hơn (theo hệ số 10000 với ví dụ của tôi), cho cả người dùng hợp pháp và cho kẻ tấn công. Cho dù đây là một ý tưởng tốt phụ thuộc vào thiết lập. Để đăng nhập trên hệ thống máy tính để bàn, điều này rất tốt: người dùng thậm chí sẽ không nhận thấy rằng phải mất 10ms để băm mật khẩu của mình, thay vì 1 Lời nói; nhưng chi phí cho kẻ tấn công đã tăng lên bởi một yếu tố rất đáng chú ý 10000. Trên các máy chủ được chia sẻ với hàng ngàn khách hàng mỗi giây, chi phí tổng hợp có thể trở nên nghiêm trọng. Về mặt khái niệm, nâng thanh bằng cùng một yếu tố cho người dùng hợp pháp và kẻ tấn công cuối cùng không phải là bảo mật tốt; nhưng nó có thể là một ý tưởng đáng giá trong một số tình huống cụ thể.

Về các cuộc tấn công trực tuyến:

Tất cả những điều trên là về việc đánh bại các cuộc tấn công ngoại tuyến . Tấn công ngoại tuyến là một cuộc tấn công trong đó kẻ tấn công có tất cả dữ liệu anh ta cần để "kiểm tra" mật khẩu; ví dụ, kẻ tấn công có thể lấy một bản sao của cơ sở dữ liệu chứa mật khẩu băm. Trong một cuộc tấn công ngoại tuyến, kẻ tấn công chỉ bị giới hạn bởi tài nguyên tính toán của mình. Ngược lại, một cuộc tấn công trực tuyến là một cuộc tấn công trong đó mỗi lần đoán của kẻ tấn công phải thông qua một trình xác minh trung thực (ví dụ: kẻ tấn công chỉ đơn giản là cố gắng đăng nhập vào hệ thống bị tấn công). Các cuộc tấn công trực tuyến được ngăn chặn bằng cách thực thi các giới hạn về số lượng mật khẩu có thể được thử mỗi giây. Ví dụ cực đoan là thẻ thông minh tắt sau ba mã PIN sai.

Thông thường, để bảo mật mật khẩu, nó sẽ trả nhiều tiền hơn để sắp xếp hệ thống vì không để kẻ tấn công xây dựng một cuộc tấn công ngoại tuyến. Đó là những gì hệ thống Unix làm: mật khẩu băm, trước đây là /etc/passwordtệp có thể đọc được trên thế giới , giờ đây nằm trong /etc/shadowtệp được bảo vệ chống truy cập đọc, ngoại trừ một vài ứng dụng đặc quyền. Giả định ở đây là nếu kẻ tấn công có thể đọc /etc/shadow, thì có lẽ anh ta có đủ quyền kiểm soát hệ thống mà anh ta không thực sự cần mật khẩu nữa ...


5
Câu trả lời tuyệt vời. Điều duy nhất tôi không đồng ý là "Về mặt khái niệm, việc nâng thanh ngang bằng cùng một yếu tố cho người dùng hợp pháp và kẻ tấn công cuối cùng không phải là bảo mật tốt" - kẻ tấn công phải thực hiện nhiều thao tác mà người dùng phải thực hiện. Thêm một chu kỳ đồng hồ cho đăng nhập người dùng sẽ thêm hàng triệu cho kẻ tấn công.
Nick Johnson

1
@Thomas Điều này vẫn chính xác và có thể sẽ vẫn chính xác cho tương lai không xác định trước. Tin tặc có thể đoán mật khẩu thực tế thông qua bất kỳ loại băm nào do chất lượng kém của các mật khẩu phổ biến. Đoán "123456" và bạn sẽ luôn nhận được một vài lần truy cập. Điều này sẽ vẫn đúng cho dù bạn sử dụng lưu trữ mật khẩu nào.
tylerl

1
Theo quan điểm của tôi, nhưng tại sao bạn lại gắn bó với SHA1, khi mã hóa mật khẩu mạnh hơn đã có sẵn rộng rãi? Một năm trước, MD5 được coi là "an toàn", và bây giờ thì không - điều tương tự có thể xảy ra với SHA1 bất cứ ngày nào bây giờ, đối với tất cả những gì chúng ta biết. Cá nhân, tôi sẽ đặt cược vào Blowfish từ thời điểm này trở đi - nó dường như có một đại diện tốt hơn và ít chuyên gia quan tâm hơn trong cộng đồng tiền điện tử, nó có sẵn ở hầu hết mọi nơi, vì vậy không có lý do gì để đánh bạc với SHA1.
mindplay.dk

1
Tôi bị sốc với cốt lõi của mình khi đi lạc qua câu trả lời từ @Thomasuckingin nói rằng MD5 an toàn cho việc lưu trữ mật khẩu. Nếu MD5 vẫn ổn, tại sao MỌI THỨ nói không sử dụng nó, hãy sử dụng bcrypt ?? Có phải họ đang quá cảnh giác? Tôi đã đọc và hiểu tất cả mọi thứ và theo ấn tượng MD5 là rất tệ bởi vì rất dễ bị vũ phu. Nhận xét gần đây như một năm trước không mâu thuẫn với câu trả lời ...
tạm

1
@Aerovistae: bạn có thể muốn xem câu trả lời đó trên trang web security.SE; nó chứa nhiều phân tích và chi tiết gần đây về băm mật khẩu.
Thomas Pornin

30

Các câu trả lời trước không đề cập đến bất kỳ GPU nào, có thể tương đương với băm SHA-1 đến mức toàn bộ cơ sở dữ liệu giờ đây có thể bị ép buộc trong vài phút hoặc vài giờ thay vì vài ngày hoặc vài tuần, ngay cả khi mật khẩu đã được xử lý.

Các thuật toán băm mật khẩu hiện đại như bcrypt hoặc scrypt được thiết kế đặc biệt khó chạy trên GPU do thực tế chúng là các thuật toán mã hóa có yêu cầu bộ nhớ cao hơn nhiều (và truy cập bộ nhớ trong GPU không thể tương đương với cùng mức độ). Họ cũng có một "chức năng làm việc" cho phép họ được thực hiện chậm hơn khi công nghệ được cải thiện.

Tóm lại, bạn chỉ nên sử dụng các công cụ tốt nhất cho công việc. Và SHA-1 rơi rất xa so với tình trạng của nghệ thuật.

Để đọc thêm:


2
"Các thuật toán băm mật khẩu hiện đại như bcrypt hoặc PBKDF2 được thiết kế đặc biệt khó chạy trên GPU" - ý bạn là "bcrypt hay scrypt"? PBKDF2 chỉ là băm lặp, không có gì có thể gây rắc rối cho GPU.
Tgr

4
Xin vui lòng cho tôi biết bạn sử dụng GPU nào, tôi sẽ mua cùng một GPU. Nếu bạn có thể thực hiện 2 ^ 160 tính toán SHA-1 trong "phút" (tức là ít hơn "giờ", thì nhiều nhất là 59 phút), bạn cần có thể thực hiện hơn 10 ^ 44 mỗi giây. Vì PCIe chuyển giới hạn ở mức khoảng 128GT / giây, GPU của bạn cũng phải có bộ nhớ trên bo mạch tuyệt vời. Tôi muốn nó.
Damon

3
@Damon: Dường như bạn đang giả sử rằng người dùng có mật khẩu "tầm thường" (<8 bit entropy) hoặc mật khẩu "không thể phá vỡ" (> 60 bit entropy). Bạn hoàn toàn phớt lờ mọi người ở giữa có entropy mật khẩu nằm trong phạm vi 10-60 bit. Đó là những người dùng có bcrypt, bảng cầu vồng và GPU và họ chiếm khoảng 80% cơ sở người dùng thông thường.
jammycakes

1
(ôi ... tôi nên nói, "Đó là những người dùng nơi bcrypt, bảng cầu vồng và GPU tạo ra sự khác biệt lớn nhất")
jammycakes

3
Để biết một số thống kê và phân tích, hãy xem troyhunt.com/2011/06/brief-sony-password-analysis.html - trong khi 36% người dùng chọn mật khẩu xuất hiện trong từ điển mật khẩu, chỉ 2-3% chọn mật khẩu phổ biến nhất.
jammycakes

7

Mô tả của bạn nghe có vẻ chính xác cho tình trạng hiện tại của nghệ thuật.

Mặc dù vậy, bạn không nên sử dụng một lần lặp duy nhất của bất kỳ hàm băm nào: Ít nhất, bạn nên lặp lại nhiều lần (1000 lần lặp của hàm băm làm tăng công việc của kẻ tấn công 1000 lần. Nó làm tăng công việc của bạn lên cùng một lượng, nhưng bạn đang thực hiện băm mật khẩu ít hơn nhiều so với thực tế).

Tuy nhiên, lý tưởng nhất là bạn nên sử dụng một bộ lưu trữ mật khẩu hiện có, chẳng hạn như được mô tả ở đây .


Lặp lại hàng ngàn lần không phải là một ý tưởng tốt như bạn nghĩ. Nó làm tăng nguy cơ va chạm băm. yorickpeterse.com/articles/use-bcrypt-fool
jammycakes

1
Bài viết đó có vẻ hoàn toàn bối rối. Hàm băm an toàn không bị mất entropy đáng kể thông qua băm lặp và băm lặp là thành phần cốt lõi của các sơ đồ kéo dài khóa như PBKDF2 và mã hóa. Ngay cả bcrypt, mà tác giả khuyến nghị, sử dụng một cấu trúc tương tự. 'Tấn công' của anh ta dựa vào việc tìm ra tiền đề của hàm băm - trong trường hợp đó, hầu hết các công trình sử dụng hàm băm đó đều bị phá vỡ hoàn toàn. Cuối cùng, tôi không khuyên mọi người sử dụng băm lặp trực tiếp - như tôi nói trong câu hỏi của mình, bạn nên sử dụng một nguyên thủy được thiết kế cho mục đích này.
Nick Johnson

7

SHA1 là một thông báo tiêu hóa , nó không bao giờ có nghĩa là chức năng băm mật khẩu (hoặc dẫn xuất khóa). (Mặc dù nó có thể được sử dụng một khối xây dựng cho một KDF, chẳng hạn như trong PBKDF2 với HMAC-SHA1.)

Hàm băm mật khẩu sẽ bảo vệ chống lại các cuộc tấn công từ điển và bảng cầu vồng. Một số thuật toán đã được thiết kế để đạt được mục tiêu này.

Hiện tại, sự lựa chọn tốt nhất có lẽ là Argon2 . Nhóm chức năng băm mật khẩu này đã giành chiến thắng trong Cuộc thi băm mật khẩu năm 2015.

Nếu Argon2 không có sẵn, chỉ có chức năng băm mật khẩu hoặc khóa dẫn xuất được tiêu chuẩn hóa khác là PBKDF2 , đây là một tiêu chuẩn NIST cũ. Các lựa chọn khác, nếu sử dụng một tiêu chuẩn là không bắt buộc, bao gồm bcrypt và tiền điện tử .

Wikipedia có các trang cho các chức năng này:


4

Các lỗ hổng nghiêm trọng đã được phát hiện trong SHA-1 khiến cho việc tìm kiếm nhanh hơn nhiều so với lực lượng vũ phu. Nó vẫn chủ yếu là khó hiểu, nhưng điều đó không được dự kiến ​​là trường hợp quá lâu; Các lập trình viên hoang tưởng ủng hộ một cái gì đó từ gia đình SHA-2.

Từ bài viết này liên quan đến kết quả ban đầu năm 2005:

"Đã đến lúc đi bộ, nhưng không chạy, đến lối thoát lửa. Bạn không thấy khói, nhưng chuông báo cháy đã tắt."

Không phải là việc phân tích tiền điện tử hiện tại làm cho SHA-1 không an toàn, mà là cộng đồng tiền điện tử lo lắng rằng những tin tức tồi tệ hơn có thể ở ngay gần đó. Nỗi sợ hãi này cũng áp dụng cho SHA-2, thể hiện những sai sót tương tự như SHA-1, mặc dù không gian tìm kiếm lớn hơn nhiều, do đó, nhiệm vụ liên tục cho SHA-3 .

Nói tóm lại, SHA-1 hiện đang an toàn và có lẽ sẽ đến một lúc nào đó, nhưng cộng đồng tiền điện tử không thoải mái với tiên lượng.


bạn có thể cung cấp một liên kết? Như tôi đã nói, cuộc tấn công tiền giả tốt nhất mà tôi có thể tìm thấy khiến cho việc tìm kiếm nhanh hơn gấp 8 lần và thậm chí để hoạt động đó bạn cần bỏ qua một nửa các bước của SHA-1. (Ngoài ra, tôi nghĩ rằng đó là một cuộc tấn công tiền giả thứ hai, vô dụng đối với việc băm mật khẩu.)
Tgr

Tôi cũng hoài nghi về một cái gì đó đến từ NSA, trước những tin tức gần đây :)
Alex W

4

Kể từ tháng 2 năm 2017, SHA-1 không còn được coi là an toàn. Google đã báo cáo thành công với các cuộc tấn công va chạm chống lại SHA-1 đầy đủ, không giảm ( liên kết đến báo cáo ). Để biết thông báo của Google, bấm vào đây .

Chỉnh sửa: Như được chỉ ra bởi những người khác, mật khẩu không dễ bị tấn công băm. Tuy nhiên, như một hướng dẫn chung, tôi sẽ không chọn SHA-1 cho các ứng dụng liên quan đến bảo mật. Có những lựa chọn thay thế tốt hơn ngoài kia.


OK, việc tìm kiếm một vụ va chạm SHA-1 mất khoảng 6.500 năm CPU và 100 năm GPU , đó không phải là một cuộc tấn công sản xuất. Bẻ khóa mật khẩu không phải là một lực lượng mạnh mẽ chống lại tất cả các đầu vào có thể mà chống lại danh sách 10.000.000 mật khẩu thường xuyên. Đây là tờ giấy .
zaph

1
Lỗ hổng chỉ sử dụng bất kỳ hàm băm nào để bảo vệ mật khẩu. Chỉ sử dụng hàm băm là không đủ và chỉ cần thêm một chút muối để cải thiện bảo mật, băm mật mã rất nhanh. Thay vào đó lặp đi lặp lại trên một HMAC với một muối ngẫu nhiên trong khoảng thời gian 100ms và lưu muối với hàm băm. Sử dụng các chức năng như PBKDF2(aka Rfc2898DeriveBytes), password_hash/ password_verify, Bcryptvà chức năng tương tự. Vấn đề là làm cho kẻ tấn công dành nhiều thời gian để tìm mật khẩu bằng vũ lực. Bảo vệ người dùng của bạn rất quan trọng, vui lòng sử dụng các phương thức mật khẩu an toàn.
zaph

Va chạm không phải là tiền đề và mật khẩu không phải là chữ ký. Các cuộc tấn công va chạm không hoạt động chống lại mật khẩu vì chúng đòi hỏi kiến ​​thức về bản rõ gốc.
Tgr

Tgr: đồng ý, cảm ơn bạn. Zaph: Vâng, muối mặt để bảo vệ chống lại các cuộc tấn công cầu vồng và sử dụng băm mật mã chậm là một trong những thực tiễn được đề xuất mà tôi không đề cập cụ thể trong câu trả lời này.
Aaron

3

Nếu bạn lưu trữ mật khẩu muối, SHA-1 vẫn ổn cho các mục đích thực tế. SHA-2 được coi là an toàn hơn, nhưng SHA-1 không phải là vấn đề trừ khi bạn có lý do để thực sự hoang tưởng.

Đây là những gì NIST nói :

Các kết quả được trình bày cho đến nay trên SHA-1 không đặt vấn đề bảo mật của nó. Tuy nhiên, do những tiến bộ trong công nghệ, NIST có kế hoạch loại bỏ SHA-1 để ủng hộ các hàm băm lớn hơn và mạnh hơn (SHA-224, SHA-256, SHA-384 và SHA-512) vào năm 2010.


Đó là nhận xét của NIST từ năm 2004. Đề xuất dự thảo năm 2010 của họ cho biết SHA-1 được chấp thuận cho tất cả các ứng dụng tạo chữ ký phi kỹ thuật số sau năm 2010
Tgr
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.