Muối không ngẫu nhiên cho băm mật khẩu


89

CẬP NHẬT: Gần đây tôi đã học được từ câu hỏi này rằng trong toàn bộ cuộc thảo luận bên dưới, tôi (và tôi chắc chắn những người khác cũng vậy) hơi khó hiểu: Cái mà tôi vẫn gọi là bảng cầu vồng, trên thực tế được gọi là bảng băm. Bàn cầu vồng là những sinh vật phức tạp hơn và thực sự là một biến thể của Hellman Hash Chains. Mặc dù tôi tin rằng câu trả lời vẫn giống nhau (vì nó không liên quan đến phân tích mật mã), một số cuộc thảo luận có thể hơi sai lệch.
Câu hỏi: " Bảng cầu vồng là gì và chúng được sử dụng như thế nào? "


Thông thường, tôi luôn khuyên bạn nên sử dụng giá trị ngẫu nhiên mạnh về mặt mật mã dưới dạng muối, được sử dụng với các hàm băm (ví dụ: đối với mật khẩu), chẳng hạn như để bảo vệ khỏi các cuộc tấn công Rainbow Table.

Nhưng liệu nó có thực sự cần thiết về mặt mật mã để muối là ngẫu nhiên? Bất kỳ giá trị duy nhất nào (duy nhất cho mỗi người dùng, ví dụ: userId) có đủ về vấn đề này không? Trên thực tế, nó sẽ ngăn việc sử dụng một Bảng cầu vồng duy nhất để bẻ khóa tất cả (hoặc hầu hết) mật khẩu trong hệ thống ...
Nhưng liệu thiếu entropy có thực sự làm suy yếu sức mạnh mật mã của các hàm băm không?


Lưu ý, tôi không hỏi về lý do tại sao sử dụng muối, cách bảo vệ nó (không cần phải như vậy), sử dụng một hằng số băm (không) hoặc loại hàm băm nào để sử dụng.
Chỉ là muối có cần entropy hay không.


Cảm ơn tất cả các câu trả lời cho đến nay, nhưng tôi muốn tập trung vào các lĩnh vực tôi (một chút) ít quen thuộc hơn. Chủ yếu là ý nghĩa đối với phân tích mật mã - Tôi đánh giá cao nhất nếu bất kỳ ai có một số đầu vào từ PoV toán học tiền điện tử.
Ngoài ra, nếu có các vectơ bổ sung chưa được xem xét, thì đó cũng là đầu vào tuyệt vời (xem điểm @Dave Sherohman trên nhiều hệ thống).
Ngoài ra, nếu bạn có bất kỳ lý thuyết, ý tưởng hoặc phương pháp hay nhất nào - vui lòng sao lưu điều này bằng bằng chứng, kịch bản tấn công hoặc bằng chứng thực nghiệm. Hoặc thậm chí là những cân nhắc hợp lệ đối với những đánh đổi có thể chấp nhận được ... Tôi đã quen thuộc với Phương pháp hay nhất (viết hoa B vốn P) về chủ đề này, tôi muốn chứng minh điều này thực sự mang lại giá trị gì.


CHỈNH SỬA: Một số câu trả lời thực sự tốt ở đây, nhưng tôi nghĩ như @Dave nói, nó đi xuống Bảng Cầu vồng cho các tên người dùng phổ biến ... và các tên có thể ít phổ biến hơn. Tuy nhiên, điều gì sẽ xảy ra nếu tên người dùng của tôi là duy nhất trên toàn cầu? Không nhất thiết là duy nhất cho hệ thống của tôi, nhưng cho mỗi người dùng - ví dụ: địa chỉ email.
Sẽ không có động cơ để xây dựng RT cho một người dùng (như @Dave đã nhấn mạnh, muối không được giữ bí mật) và điều này sẽ vẫn ngăn chặn việc phân cụm. Chỉ có một vấn đề là tôi có thể có cùng một email và mật khẩu trên một trang web khác - nhưng dù sao thì Salt cũng không ngăn được điều đó.
Vì vậy, nó quay trở lại với phân tích mật mã - entropy có cần thiết hay không? (Suy nghĩ hiện tại của tôi là nó không cần thiết từ quan điểm phân tích mật mã, nhưng nó là từ những lý do thực tế khác.)


Phải nói rằng tôi đang bối rối trước nhiều câu trả lời dưới đây. Điểm chính của việc sử dụng muối chỉ đơn giản là để ngăn chặn sự tấn công của bảng cầu vồng, vì vậy bất kỳ thứ gì độc đáo đối với người dùng đều nên làm vì nó buộc kẻ tấn công tạo lại bảng cầu vồng cho mỗi muối. 2c của tôi.
Goran

Nếu muối là cần thiết cho ví dụ. trang web, bạn thường có id trong url. Nếu kẻ tấn công biết (và chúng tôi cho rằng anh ta biết) rằng mật khẩu muối là userid + tên người dùng, thì khá dễ dàng để sửa đổi cuộc tấn công để tránh giá trị muối.
dmajkic 11/02/09

@dmajkic, Salt nhằm ngăn chặn các cuộc tấn công RT và phân biệt các mật khẩu giống nhau cho những người dùng khác nhau. Đây là một, ngay cả với tên người dùng.
AviD 11/02/09

@AviD: Đúng là như vậy. Nhưng nếu tôi biết hàm băm của mình cho thẻ của tôi và tôi biết rằng muối là tên người dùng của tôi thì tôi có thể dễ dàng tạo giá trị mã băm cho bất kỳ từ nào trong từ điển và so sánh nó với người khác chuyển mã băm. Đó là lý do tại sao thời gian tốt hơn tên người dùng.
dmajkic

1
Vừa tìm thấy một bài báo trên trang web PHP Security Consortium trong ví dụ của nó sử dụng băm md5 số ngẫu nhiên được làm muối phpsec.org/articles/2005/password-hashing.html
helloworlder

Câu trả lời:


156

Salt theo truyền thống được lưu trữ dưới dạng tiền tố cho mật khẩu được băm. Điều này đã khiến bất kỳ kẻ tấn công nào có quyền truy cập vào băm mật khẩu đều biết. Sử dụng tên người dùng như muối hay không không ảnh hưởng đến kiến ​​thức đó và do đó, nó sẽ không ảnh hưởng đến bảo mật hệ thống đơn.

Tuy nhiên, việc sử dụng tên người dùng hoặc bất kỳ giá trị nào khác do người dùng kiểm soát dưới dạng muối sẽ làm giảm tính bảo mật trên toàn hệ thống, vì người dùng có cùng tên người dùng và mật khẩu trên nhiều hệ thống sử dụng cùng một thuật toán băm mật khẩu sẽ kết thúc với cùng một hàm băm mật khẩu. mỗi hệ thống đó. Tôi không coi đây là một trách nhiệm pháp lý đáng kể vì tôi, với tư cách là một kẻ tấn công, sẽ thử mật khẩu mà một tài khoản mục tiêu được biết là đã sử dụng trên các hệ thống khác trước khi thử bất kỳ phương thức nào khác để xâm phạm tài khoản. Các hàm băm giống hệt nhau sẽ chỉ cho tôi biết trước rằng mật khẩu đã biết sẽ hoạt động, chúng sẽ không làm cho cuộc tấn công thực sự dễ dàng hơn. (Tuy nhiên, lưu ý rằng so sánh nhanh các cơ sở dữ liệu tài khoản sẽ cung cấp danh sách các mục tiêu có mức độ ưu tiên cao hơn, vì nó sẽ cho tôi biết ai là ai và ai không sử dụng lại mật khẩu.)

Mối nguy lớn hơn từ ý tưởng này là tên người dùng thường được sử dụng lại - chẳng hạn như bất kỳ trang web nào bạn muốn truy cập sẽ có tài khoản người dùng tên là "Dave", và "quản trị viên" hoặc "người chủ" thậm chí còn phổ biến hơn - điều này sẽ khiến xây dựng bảng cầu vồng nhắm mục tiêu người dùng với những tên thông thường đó dễ dàng và hiệu quả hơn nhiều.

Cả hai lỗi này đều có thể được giải quyết hiệu quả bằng cách thêm giá trị muối thứ hai (cố định và ẩn hoặc lộ ra như muối tiêu chuẩn) vào mật khẩu trước khi băm nó, nhưng tại thời điểm đó, bạn cũng có thể chỉ sử dụng muối entropic tiêu chuẩn để thay thế làm việc tên người dùng vào nó.

Đã chỉnh sửa để Thêm: Rất nhiều người đang nói về entropy và liệu entropy trong muối có quan trọng không. Đó là, nhưng không phải vì lý do mà hầu hết các bình luận về nó dường như nghĩ.

Suy nghĩ chung dường như cho rằng entropy là quan trọng nên muối sẽ khó đoán đối với kẻ tấn công. Điều này không chính xác và trên thực tế, hoàn toàn không liên quan. Như đã được chỉ ra một vài lần bởi nhiều người, các cuộc tấn công sẽ bị ảnh hưởng bởi muối chỉ có thể được thực hiện bởi ai đó có cơ sở dữ liệu mật khẩu và người có cơ sở dữ liệu mật khẩu chỉ có thể xem xét muối của từng tài khoản. Nó có thể đoán được hay không không quan trọng khi bạn có thể tra cứu nó một cách tinh tế.

Lý do mà entropy là quan trọng là để tránh tập hợp các giá trị muối. Nếu muối dựa trên tên người dùng và bạn biết rằng hầu hết các hệ thống sẽ có tài khoản có tên "root" hoặc "admin", thì bạn có thể tạo một bảng cầu vồng cho hai muối đó và nó sẽ bẻ khóa hầu hết các hệ thống. Mặt khác, nếu sử dụng một muối 16-bit ngẫu nhiên và các giá trị ngẫu nhiên có phân phối gần như đồng đều, thì bạn cần một bảng cầu vồng cho tất cả 2 ^ 16 muối có thể có.

Nó không phải là ngăn chặn kẻ tấn công biết muối của tài khoản cá nhân là gì, mà là không cho chúng mục tiêu lớn, béo của một loại muối duy nhất sẽ được sử dụng trên một tỷ lệ đáng kể các mục tiêu tiềm năng.


Đã đồng ý. Tôi sẽ nhấn mạnh nhiều hơn vào việc sử dụng lại tên người dùng, vì tôi nghĩ đó là cuộc tấn công có nhiều khả năng thành công nhất đối với các hệ thống giả định sử dụng tên người dùng như một muối, sẽ thất bại trước một hệ thống sử dụng muối ngẫu nhiên.
Steve Jessop

Tôi đánh giá cao quan điểm của bạn về bảo mật xuyên hệ thống. Ngoài ra, tôi đoán rằng trong tương lai sẽ không có khả năng nhìn thấy các bảng cầu vồng dành riêng cho người dùng ...
AviD 11/02/09

@AviD: Bạn nghĩ vậy? Đó là một vector tấn công khá cụ thể.
David Grant

2
Không phải để tạo ra muối, không. Các cuộc tấn công duy nhất bị ảnh hưởng bởi muối là những cuộc tấn công được thực hiện trực tiếp chống lại các mật khẩu được băm. Một cuộc tấn công không thể thực hiện loại tấn công này trừ khi chúng có một bản sao cơ sở dữ liệu mật khẩu của bạn, cơ sở dữ liệu này cũng sẽ chứa các muối. Vì kẻ tấn công đã có sẵn các muối của mình, chúng chỉ yêu cầu đủ entropy để tránh có nhiều mật khẩu được băm với cùng một muối, mà bất kỳ RNG cơ bản (P) nào sẽ cung cấp.
Dave Sherohman

3
@ acidzombie24: Sử dụng một muối cố định duy nhất (theo kinh nghiệm của tôi thường được gọi là "nonce") cho tất cả các mật khẩu kém an toàn hơn so với việc sử dụng một muối ngẫu nhiên duy nhất cho mỗi mật khẩu, vì nó vẫn cho phép kẻ tấn công xác định một cách tinh vi xem hai hay nhiều tài khoản chia sẻ cùng một mật khẩu. Mặt khác, nonce có thể sẽ được lưu trữ trong mã của bạn hơn là trong cơ sở dữ liệu, vì vậy kẻ tấn công chỉ có cơ sở dữ liệu của bạn sẽ không có quyền truy cập vào nó; do đó, tùy chọn an toàn nhất là sử dụng cả nonce toàn hệ thống (được lưu trữ trong mã) và muối cho mỗi mật khẩu (được lưu trữ trong cơ sở dữ liệu).
Dave Sherohman

29

Việc sử dụng muối entropy cao là hoàn toàn cần thiết để lưu trữ mật khẩu một cách an toàn.

Lấy tên người dùng 'gs' của tôi và thêm nó vào mật khẩu của tôi 'MyPassword' cung cấp cho gsMyPassword. Điều này dễ dàng bị phá vỡ bằng cách sử dụng bảng cầu vồng vì nếu tên người dùng không có đủ entropy thì có thể giá trị này đã được lưu trữ trong bảng cầu vồng, đặc biệt nếu tên người dùng ngắn.

Một vấn đề khác là các cuộc tấn công mà bạn biết rằng một người dùng tham gia vào hai hoặc nhiều dịch vụ. Có rất nhiều tên người dùng phổ biến, có lẽ những tên quan trọng nhất là admin và root. Nếu ai đó tạo một bảng cầu vồng có muối với những tên người dùng phổ biến nhất, anh ta có thể sử dụng chúng để xâm phạm tài khoản.

Họ từng có muối 12-bit . 12 bit là 4096 kết hợp khác nhau. Điều đó không đủ an toàn vì ngày nay có thể dễ dàng lưu trữ nhiều thông tin . Điều tương tự cũng áp dụng cho 4096 tên người dùng được sử dụng nhiều nhất. Có khả năng một số người dùng của bạn sẽ chọn tên người dùng thuộc về những tên người dùng phổ biến nhất.

Tôi đã tìm thấy công cụ kiểm tra mật khẩu này, công cụ này sẽ tìm ra entropy của mật khẩu của bạn. Việc có entropy nhỏ hơn trong mật khẩu (như bằng cách sử dụng tên người dùng) giúp bảng cầu vồng dễ dàng hơn nhiều vì chúng cố gắng che ít nhất tất cả các mật khẩu có entropy thấp, vì chúng có nhiều khả năng xảy ra hơn.


+1 cho một điểm tốt, tuy nhiên, bạn đang nói về một bảng cầu vồng khổng lồ tiềm năng . Để loại bỏ tất cả các giá trị của độ dài gsMyPassword (giả sử là chữ và số hỗn hợp) cần có 36 ^ 12 hàng trong bảng!
David Grant,

Tiếp theo: dự án bảng cầu vồng phân tán có 63,970 hàm băm bị nứt, nhưng 36 ^ 12 là 4,738,381,338,321,616,896!
David Grant,

Cảm ơn, và điều này có ý nghĩa - nhưng như Mr.PotatoHead đã chỉ ra, bạn vẫn đang mở rộng không gian của mình ngoài khả năng bẻ khóa hợp lý với RT. Ngoài ra, giả sử tên người dùng của tôi có ít nhất 6-8 ký tự - entropy cung cấp giá trị cần thiết bổ sung nào?
AviD 11/02/09

@Potato: bạn giả sử một bảng cầu vồng chứa tất cả các kết hợp có thể có của các ký tự chữ và số. Điều này không cần phải xảy ra, một bảng cầu vồng hiệu quả sẽ chứa các hàm băm cho các mật khẩu / mã băm thông thường. Salt ở đó để bảo vệ chống lại các cuộc tấn công từ điển hoặc cầu vồng / từ điển kết hợp.
Guillaume

3
Sử dụng tên người dùng làm muối cũng là một ý tưởng tồi đối với các hệ thống có tài khoản đặc quyền cao được đặt tên có thể đoán trước được: "Administrator" trên Windows, "root" trên * nix, "sa" trong MSSQL, v.v.
không ai

8

Đúng là chỉ riêng tên người dùng có thể có vấn đề vì mọi người có thể chia sẻ tên người dùng giữa các trang web khác nhau. Nhưng sẽ không có vấn đề gì nếu người dùng có một tên khác nhau trên mỗi trang web. Vì vậy, tại sao không chỉ làm cho nó duy nhất trên mỗi trang web. Băm mật khẩu giống như thế này

hàm băm ("www.yourpage.com /" + tên người dùng + "/" + mật khẩu)

Điều này sẽ giải quyết vấn đề. Tôi không phải là bậc thầy về phân tích mật mã, nhưng tôi chắc chắn nghi ngờ rằng việc chúng ta không sử dụng entropy cao sẽ khiến hàm băm yếu hơn.


Tôi tin rằng bạn đúng rằng điều này là đủ. Tuy nhiên, do hàm băm là một trường toán học phức tạp và rất có thể muối entropy thấp làm cho hàm băm dễ đoán hơn trong tương lai, (đặc biệt là khi hàm băm bị hỏng), tôi sẽ không đặt cược vào tính bảo mật, khi điều đã được chứng minh giải pháp an toàn hơn không đắt hơn nhiều.
Georg Schölly

7

Tôi thích sử dụng cả hai: một muối ngẫu nhiên có entropy cao cho mỗi bản ghi, cộng với ID duy nhất của chính bản ghi.

Mặc dù điều này không bổ sung nhiều vào bảo mật chống lại các cuộc tấn công từ điển, v.v., nhưng nó sẽ loại bỏ trường hợp rìa khi ai đó sao chép muối và băm của họ sang một bản ghi khác với ý định thay thế mật khẩu bằng mật khẩu của chính họ.

(Phải thừa nhận rằng thật khó để nghĩ ra một trường hợp áp dụng điều này, nhưng tôi có thể thấy rằng đai và niềng răng không có hại gì khi nói đến vấn đề an ninh.)


Tôi thích ý tưởng ràng buộc mật khẩu với người dùng. Nhưng nếu kẻ tấn công có thể thay đổi mật khẩu thì chắc chắn hắn cũng có thể thay đổi id.
Georg Schölly

Phụ thuộc vào ID là gì: Tôi sử dụng khóa chính của bảng mà bạn thực sự không thể thay đổi theo ý muốn. TBH, nếu tin tặc ghi vào cơ sở dữ liệu của bạn, bạn đang gặp rắc rối khá lớn rồi ...
teedyay 11/02/09

3
Không, tôi thích nó. Kẻ tấn công thường là “người trong cuộc”. Tôi có thể nghĩ ra các tình huống mà những gì anh ta theo đuổi không có trong cơ sở dữ liệu, nhưng nếu anh ta có thể ghi đè thông tin đăng nhập trong cơ sở dữ liệu, anh ta có thể xác thực bản thân để làm những gì anh ta muốn.
erickson

1
Điểm tốt. Chúng tôi nhận thấy việc thêm người dùng đầu tiên vào cơ sở dữ liệu mới ngày càng khó khăn hơn: chúng tôi đã làm cho các ứng dụng của mình an toàn đến mức chúng tôi khó có thể tự hack chúng. [Ngoài ra, hãy sử dụng muối dành riêng cho ứng dụng để bạn không thể sao chép thông tin đăng nhập từ cơ sở dữ liệu này sang cơ sở dữ liệu khác.]
teedyay

Cuối cùng tôi tìm thấy ai đó nói điều này: thêm thứ gì đó dành riêng cho người dùng vào muối. Điều đó tránh cho kẻ xâm nhập sao chép một số thông tin đăng nhập cho người dùng khác và cũng ngăn tin tặc đoán bất kỳ mật khẩu nào nếu anh ta truy cập được vào trường băm và muối của bạn trong bảng. Một điều nữa tôi muốn làm: không sử dụng một số vòng lặp trong phép băm. Đừng mua 10k hoặc 20k, mà là một cái gì đó giống như năm 19835.
Andrew

3

Nếu muối đã biết hoặc dễ đoán, bạn đã không làm tăng độ khó của một cuộc tấn công từ điển. Thậm chí có thể tạo một bảng cầu vồng sửa đổi có tính đến muối "không đổi".

Sử dụng các loại muối độc đáo làm tăng độ khó của các cuộc tấn công từ điển BULK.

Có giá trị muối mạnh về mặt mật mã, duy nhất sẽ là lý tưởng.


2
Toàn bộ điểm của bảng cầu vồng là các giá trị được tạo trước và nếu bạn đang tạo bảng cho một giá trị (ví dụ: mật khẩu) CỘNG một hằng số nhất định, đó là một bảng hoàn toàn khác và bạn cũng có thể thử kết quả băm trực tiếp. :)
David Grant

1
Một hàm băm không đổi không có giá trị gì. Tất cả các mật khẩu có thể được bẻ khóa bằng một bảng cầu vồng duy nhất. Mục đích của muối là không thể tạo ra một chiếc bàn cầu vồng.
Georg Schölly

1
@gs - Tôi không hiểu tại sao bạn không thể xây dựng một bảng cầu vồng "bao gồm" các ảnh hưởng của một muối không đổi. Không gian tấn công (mật khẩu) sẽ không thay đổi, vì vậy bảng sẽ không cần phải phát triển, chỉ cần được tính toán lại.
HUAGHAGUAH

@Potato - phụ thuộc vào sự đánh đổi. Nếu 20k lần đăng nhập của công ty bạn đều được băm với cùng một loại muối không đổi, thì việc tính toán một bảng cầu vồng mới có thể rẻ hơn so với việc tấn công từ điển tất cả chúng riêng lẻ. Do đó tôi nhấn mạnh "BULK".
HUAGHAGUAH

3

Tôi sẽ nói rằng miễn là muối khác nhau cho mỗi mật khẩu, bạn có thể sẽ ổn. Điểm mấu chốt là bạn không thể sử dụng bảng cầu vồng tiêu chuẩn để giải mọi mật khẩu trong cơ sở dữ liệu. Vì vậy, nếu bạn áp dụng một muối khác nhau cho mọi mật khẩu (ngay cả khi nó không phải là ngẫu nhiên), về cơ bản kẻ tấn công sẽ phải tính toán một bảng cầu vồng mới cho mỗi mật khẩu, vì mỗi mật khẩu sử dụng một muối khác nhau.

Việc sử dụng một muối có nhiều entropy hơn không giúp ích được nhiều, bởi vì kẻ tấn công trong trường hợp này được cho là đã có cơ sở dữ liệu. Vì bạn cần có thể tạo lại băm, nên bạn phải biết muối là gì. Vì vậy, bạn phải lưu trữ muối hoặc các giá trị tạo nên muối trong tệp của bạn. Trong các hệ thống như Linux, phương pháp lấy muối đã được biết đến, vì vậy việc có muối bí mật sẽ không có ích gì. Bạn phải giả định rằng kẻ tấn công có giá trị băm của bạn, có thể cũng biết giá trị muối của bạn.


3
"Điểm mấu chốt là bạn không thể sử dụng bảng cầu vồng chuẩn để giải mọi mật khẩu trong cơ sở dữ liệu". Tôi không đồng ý. Vấn đề là bạn không thể sử dụng bảng cầu vồng tiêu chuẩn để giải bất kỳ mật khẩu nào . Nếu muối là tên người dùng, thì bảng cầu vồng cho "root" có thể bẻ khóa pw của root.
Steve Jessop 11/02/09

Đó có lẽ là quy tắc duy nhất thực sự quan trọng. Về cơ bản, bạn muốn mật khẩu là thứ duy nhất trên hệ thống của mình, nhưng nó không quan trọng là gì. Nó vẫn có thể là một cái gì đó đơn giản. Bạn không cần nhiều entropy.
Kibbee 11/02/09

Đây cũng là suy nghĩ của tôi - nhưng tôi bị mắc kẹt ở chỗ "có lẽ ổn". Tôi vẫn không thấy lý thuyết này được chứng minh - hoặc ít nhất đã được xác minh rằng không có ý nghĩa phân tích mật mã.
AviD 11/02/09

@onebyone: Nếu muối bao gồm tên người dùng + giá trị cục bộ không đổi (tôi thường sử dụng ':'), thì điều đó vẫn làm hỏng các RT được chuẩn hóa, trừ khi có nhiều loại bao gồm tên người dùng chung và giá trị muối tĩnh phổ biến. Tôi nghi ngờ là không phải vậy.
nsayer

Cùng với nsayer. Bạn có thể sử dụng một chuỗi hằng số trên toàn hệ thống, mà sẽ không có RT được tạo trước, như # (D83d8, cùng với tên người dùng là muối và điều đó sẽ ngăn chặn bất kỳ cuộc tấn công bảng cầu vồng nào.
Kibbee

3

Độ mạnh của một hàm băm không được xác định bởi đầu vào của nó!

Sử dụng một muối mà kẻ tấn công biết rõ ràng làm cho việc xây dựng bảng cầu vồng (đặc biệt đối với tên người dùng được mã hóa cứng như root ) hấp dẫn hơn, nhưng nó không làm suy yếu hàm băm . Sử dụng một loại muối mà kẻ tấn công không rõ sẽ làm cho hệ thống khó bị tấn công hơn.

Việc nối tên người dùng và mật khẩu vẫn có thể cung cấp một mục nhập cho một bảng cầu vồng thông minh, do đó, sử dụng muối của một chuỗi ký tự giả ngẫu nhiên, được lưu trữ bằng mật khẩu băm có lẽ là một ý tưởng tốt hơn. Như một minh họa, nếu tôi có tên người dùng "khoai tây" và mật khẩu "bia", thì đầu vào được nối cho hàm băm của bạn là "khoai tây chiên", đây là một mục nhập hợp lý cho bảng cầu vồng.

Thay đổi muối mỗi khi người dùng thay đổi mật khẩu của họ có thể giúp đánh bại các cuộc tấn công kéo dài, cũng như việc thực thi chính sách mật khẩu hợp lý, ví dụ: chữ hoa, dấu câu, độ dài tối thiểu, thay đổi sau n tuần.

Tuy nhiên, tôi muốn nói rằng lựa chọn thuật toán thông báo của bạn quan trọng hơn. Ví dụ, việc sử dụng SHA-512 sẽ gây khó khăn cho người tạo bảng cầu vồng hơn MD5.


Sức mạnh của chức năng không thay đổi, nhưng đầu ra chắc chắn thay đổi. Nếu đầu vào có thể bị ảnh hưởng hoặc được biết, thì có lẽ có thể suy ra điều gì đó về giá trị băm. Đó là rủi ro.
Martin Carpenter

@Martin: Điều duy nhất bạn có thể suy ra từ giá trị băm nếu bạn có khớp hay không! Đặt "roota" hoặc "rootb" (trong đó "a" và "b" đại diện cho mật khẩu) vào một hàm băm sẽ cung cấp cho bạn kết quả hoàn toàn khác.
David Grant

Những kẻ tấn công sử dụng bảng cầu vồng đã biết các muối.
Georg Schölly

Máy chủ phải biết muối không được mã hóa (để kiểm tra mật khẩu so với hàm băm), do đó người ta có thể coi là kẻ tấn công có quyền truy cập vào muối hoặc có thể lấy nó rất dễ dàng.
Georg Schölly

Đúng, đúng, đó là một - cụ thể hơn, tôi muốn nói đến sức mạnh của hệ thống mật mã tổng thể (hoặc-hệ thống con, hàm băm wrt).
AviD 11/02/09

1

Salt phải có càng nhiều entropy càng tốt để đảm bảo rằng nếu một giá trị đầu vào nhất định được băm nhiều lần, giá trị băm kết quả sẽ luôn khác nhau càng gần càng tốt.

Sử dụng các giá trị muối luôn thay đổi với càng nhiều entropy trong muối càng tốt sẽ đảm bảo rằng khả năng băm (giả sử, mật khẩu + muối) sẽ tạo ra các giá trị băm hoàn toàn khác nhau.

Càng ít entropy trong muối, bạn càng có nhiều cơ hội tạo ra cùng một giá trị muối, vì vậy bạn càng có nhiều cơ hội tạo ra cùng một giá trị băm.

Bản chất của giá trị băm là "không đổi" khi đầu vào đã biết và "không đổi" cho phép các cuộc tấn công từ điển hoặc bảng cầu vồng trở nên hiệu quả như vậy. Bằng cách thay đổi giá trị băm kết quả càng nhiều càng tốt (bằng cách sử dụng giá trị muối entropy cao) đảm bảo rằng việc băm cùng một đầu vào + muối ngẫu nhiên sẽ tạo ra nhiều kết quả giá trị băm khác nhau, do đó đánh bại (hoặc ít nhất là làm giảm đáng kể hiệu quả của) bảng cầu vồng các cuộc tấn công.


Một lần nữa, tôi không đề cập đến việc sử dụng một hằng số muối - đúng hơn là một giá trị không ngẫu nhiên, nhưng do người dùng duy nhất. Ví dụ: userId.
AviD 11/02/09

Điểm mấu chốt là giá trị muối của bạn không bao giờ được cố định. Mỗi thứ bạn băm, cho dù giá trị "đầu vào" giống nhau hay không phải có một muối khác nhau. Dave Sherohman giải thích nhược điểm của việc sử dụng các giá trị thậm chí do người dùng duy nhất về cơ bản giữ nguyên với mỗi phép tính băm.
CraigTP 11/02/09

-1

Entropy là điểm của giá trị Salt.

Nếu có một số "toán học" đơn giản và có thể tái tạo đằng sau muối, thì nó giống như muối không có ở đó. Chỉ cần thêm giá trị thời gian sẽ ổn.


Tôi không hiểu nhận xét này. Bạn nói "sử dụng entropy", và sau đó: "sử dụng thời gian" ??
Martin Carpenter

nếu Tên người dùng được sử dụng cho muối, nó không đủ entropi. Nhưng nếu bạn sử dụng tên người dùng + ngày giờ hiện tại - thì đúng là như vậy, vì thật khó để đoán chính xác thời điểm tạo muối.
dmajkic 11/02/09

"đủ entropi" là chủ quan; đó là tiêu chuẩn của bạn. Căn cứ vào giá trị này về thời gian có thể không đủ.
Martin Carpenter

Không có cái gọi là "sự ngẫu nhiên đúng tuyệt đối". Chúng tôi phải nói khi nào là "đủ tốt". Nếu bạn nghĩ rằng trong trường hợp này thời gian không đủ tốt, hãy sử dụng thứ khác. stackoverflow.com/questions/84556/…
dmajkic

Trên thực tế, điểm mấu chốt là làm cho mỗi kết quả băm là duy nhất - để ngăn chặn (a) các cuộc tấn công bảng cầu vồng và (b) nhận dạng mật khẩu giống hệt nhau. Câu hỏi đặt ra là, nếu có thì entropy còn cần thiết để làm gì?
AviD 11/02/09
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.