2012-06-19 35 views
5

đưa ra:bcrypt có được cải thiện bằng cụm mật khẩu hmac'd không?

$ muối - một chuỗi tạo giả ngẫu nhiên đủ chiều dài

$ ớt - một khóa bí mật đủ mạnh, chỉ được biết đến với các quản trị viên của db nơi passphrase được lưu trữ

bạn sẽ thấy

$ hash = bcrypt (HMAC ($ userpassphrase, $ hạt tiêu), $ muối)

là có ý nghĩa vượt trội so với

$ hash = bcrypt ($ userpassphrase, $ salt)

cho thêm gánh nặng quản lý/lưu trữ $ hạt tiêu cũng như $ muối?

giả định của tôi là hmac không tăng cường đáng kể kết quả băm $, và gánh nặng lưu trữ $ tiêu lớn hơn bất kỳ lợi ích được cho là ... nhưng tôi rất thích nghe ý kiến ​​được thông báo.

+0

Ý bạn là gì bởi "mật khẩu riêng"? Ai có quyền truy cập vào nó? Làm thế nào/ở đâu bạn nhận được nó? – Kaito

+0

xin lỗi nếu điều đó không rõ ràng - khóa riêng cho hmac. tôi sẽ chỉnh sửa ở trên để làm rõ, cảm ơn! –

Trả lời

3

băm có khóa hoặc HMAC, có nghĩa là để xác minh nguồn dữ liệu và không có nghĩa là để bảo vệ bằng mật khẩu. Ví dụ, nếu bạn và tôi đã có một khóa chia sẻ, tôi có thể gửi một số dữ liệu cho bạn cùng với hmac đã tính toán và bạn có thể sử dụng cùng một khóa đó để kiểm tra xem hmac hashes match, và nếu có, bạn biết dữ liệu đến từ tôi, và không bị thay đổi.

Không có cách nào để bạn có thể ẩn giấu cụm mật khẩu bí mật trên máy mà kẻ tấn công không thể truy cập, tất cả những gì bạn muốn làm là thêm một lớp tối tăm. Sử dụng HMAC, không có khóa bí mật chung, về cơ bản giống như làm SHA ($ userpassphrase, $ salt), rất dễ tính toán, và do đó sẽ không thêm bất kỳ bảo mật có ý nghĩa nào vào lược đồ băm mật khẩu của bạn khi "bí mật" "cụm từ mật khẩu được biết.

Toàn bộ điểm bcrypt chỉ là làm chậm quá trình băm, vì vậy sẽ mất một thời gian dài để tạo ra một bảng cầu vồng cho muối của bạn. Nếu bạn muốn làm cho lược đồ băm mật khẩu của bạn an toàn hơn, chỉ cần tăng chi phí của hàm băm ban đầu. Trong bcrypt, bạn có thể chỉ định số lượng "logRounds" (tôi nghĩ đó là những gì họ gọi nó) là số lần băm được thực hiện. Nếu bạn chỉ định một logRound là 15 (10 là mặc định), thì băm sẽ được thực hiện 2^15 = 32768 lần, điều này làm chậm đáng kể. Thời gian càng lâu để thực hiện băm, thời gian càng lâu để kẻ tấn công phá vỡ nó.

1

Tôi không chắc chắn cách bạn muốn sử dụng. Giả sử bạn lưu trữ $ hash để thực hiện xác thực phản hồi thách thức sau đó bạn sẽ cần phải nhận được $ pepper cho khách hàng và nó sẽ chỉ là một muối khác. Đơn giản chỉ cần thêm một HMAC sẽ không được sử dụng nhiều.

0

Không có điểm nào để băm băm thêm vào chức năng kéo dài mật khẩu như bcrypt; nó sẽ dễ dàng hơn và tốt hơn để lặp lại nó một vài lần.

'Hạt tiêu' là thực tiễn thường được sử dụng nhưng có vấn đề; cá nhân tôi là ý kiến ​​cho rằng các mô hình tấn công theo đó kẻ tấn công lấy được cơ sở dữ liệu của bạn nhưng không truy cập vào khóa bí mật của bạn đủ đầy đủ để bảo vệ chúng không phải là giá trị phức tạp thực hiện mà kết quả.

Các vấn đề liên quan