Bcrypt là gì

Sau khi phát âm nội dung bài viết băm mật khẩu đúng cách dán của anh thaidn, mình ghi nhớ lại thời điểm mình mới ra ngôi trường, cũng đã có lần nghĩ về vụ việc này (dịp kia mình hơi say đắm môn Bảo Mật Thông Tin vào trường) tuy thế không khi nào gọi kĩ càng. Chỉ biết là không nên:

Lưu password sinh sống dạng plain-text.Hash với 1 thuật tân oán hash khỏe khoắn, tránh việc xài MD5, SHA-1 ...Hash cùng với salternative text.

Bạn đang xem: Bcrypt là gì

Chỉ hiểu rằng đề xuất đề xuất làm cho gắng, nhưng thiếu hiểu biết vì sao lại điều đó cùng một số thắc mắc không giống cũng chưa vấn đáp được như:

Password user gửi lên, buộc phải hash ở client hay sinh hoạt hệ thống.Salt bắt buộc lưu lại ở chỗ nào.Salternative text có đề xuất duy trì kín tuyệt không?Salt thông thường đến toàn bộ, xuất xắc salt riêng cho từng user?

Hôm ni, mình quyết định đi kiếm câu vấn đáp đến đa số vấn đề bản thân vướng mắc, thế vày mang định nó đúng.

1. Tại sao tránh việc giữ plain-text, encrypt hoặc cần sử dụng MD5, SHA-1

Nếu lưu plain-text, database bị haông xã, SQL-injection, password user chìa ra theo một biện pháp quan yếu dễ dãi rộng để ăn cắp.

Nếu mã hóa 2 chiều, đã luôn luôn tất cả một phương pháp để lời giải bởi một chìa-khóa làm sao đó, vẫn đề xuất tìm phương pháp lưu lại chìa-khóa một cách an toàn.

MD5 và SHA-1 được minh chứng gồm va độ, nghĩa là 2 password khác biệt, Lúc hash bởi MD5 hoặc SHA-1 hoàn toàn có thể ra cùng một chuỗi.

2. Tại sao phải salt

Ta vẫn biết, hash algorithm là one-way-function, tức là cần thiết suy ngược trực tiếp ra password trường hợp bao gồm hash_value (khác với mã hóa, có thể giải thuật trải qua chìa-khóa).

Tuy nhiên vẫn đang còn cách để trường đoản cú hash_value hoàn toàn có thể suy loại gián tiếp ra được password ví dụ brute-force attach, dictionary attach -> điểm chung là ta bắt buộc thử cùng đoán password nhiều lần cho tới lúc đúng chiếc buộc phải tìm kiếm.

Một biện pháp không giống đó là ta rất có thể tính tân oán trước cực hiếm hash của toàn bộ những trường vừa lòng với của toàn bộ các thuật toán -> phương pháp này cực nhọc, tốn thời hạn, nhưng mà hiện giờ với tốc độ tính tân oán của dòng sản phẩm tính, ta vẫn rất có thể làm được. Bảng lưu trữ password + hash_value của password điện thoại tư vấn là Rainbow Table, rất có thể từ bỏ chế tạo hoặc sở hữu một số trong những bạn dạng miễn giá tiền hoặc trả tiền để sở hữ. Từ bây giờ nếu ta tất cả hash_value ta có thể mapping nhằm suy ra được password.

Tuy nhiên nếu như ta chỉ hash từng password, ta chạm mặt vấn đề đó là:

2 password tương đương nhau (user vô tình trùng password) thì chuỗi hash(password) đã như là nhau.User cố ý đặt password đơn giản dễ dàng với thịnh hành (ví dụ password dễ dàng ghi nhớ đến user nhưng dễ tra ngược.

Và nếu chỉ hash password thì trường hợp mất hash_value, có thể tra vào rainbow table nhằm tìm ra được password của người tiêu dùng.

Giờ ta test núm bởi vì hash(password) ta đã hash(salt + password):

Từ md5(123456)

id | hash_md5 |---------------------------------------1 | e10adc3949ba59abbe56e057f20f883e |Thành md5(7nWZLcCK0vsPzIM + 123456)

id | hash_md5 | salt |---------------------------------------------------------1 | 0510210d4b370165658bdc0d0b005244 | 7nWZLcCK0vsPzIM |Giờ mang sử, ta mất bảng dữ liệu bao gồm hash_md5, salternative text, kẻ tấn công sẽ đề nghị tính tân oán lại rainbow table của tất cả các ngôi trường thích hợp cộng với salternative text. Nếu salternative text là random đến từng user, kẻ tiến công sẽ đề xuất tính toán tổng thể trường vừa lòng cùng với riêng biệt từng salt mang đến cục bộ user.

Chi phí mang đến 2 phép tính trên là khôn xiết phệ cùng tốn không ít thời hạn để triển khai. Vậy kết luận mục đích của salternative text với random-salt là:

Bảo vệ user kể cả khi user dùng password phổ biến và password không táo bạo bởi user quan yếu ghi nhớ được các password phức hợp nhưng mà vận tốc tính tân oán của sản phẩm tính thì ngày càng nkhô nóng.Tạo ra những ngân sách tính tân oán, kẻ tiến công thiết yếu tính tân oán trước rainbow table.

=> Ta trả lời được 3 câu hỏi:

Salt có thể lưu vào database, cùng rất hash_value.Không đề xuất kiếm tìm bí quyết giữ lại kín đáo salternative text, cơ mà cũng đừng từ ý công khai salternative text.Nhưng cần phải random salt mang lại từng user.

Xem thêm: Download Matlab 2009 Extended Edition With Crack 1, Matlab 2009A Crack

3. Hash sinh sống đâu?

Giờ giả sử hash(password) ngơi nghỉ client-side thì sự việc là gì?

Biết được thuật toán thù dùng để làm hash.Salt vẫn nên xuất hiện ở client, bởi vì ta đề nghị hash password với salternative text (hash(salt + password)), với db chỉ lưu lại hiệu quả hash, không lưu giữ salt.Nhưng nếu salt hiện ra ở client với salt random thì làm sao nhằm compare với hash_value vào database? Vì lần chứng thực tới, salternative text đang lại random và đã khác cùng với hiệu quả vào database -> salt đề xuất độc nhất vô nhị mang lại tất cả các ngôi trường đúng theo.Hoặc salternative text có thể giữ sinh sống DB, nhưng lại hệ thống đề xuất gửi salt về trước đến user trước khi tiến hành hash -> thuận tiện biết được salternative text rộng.

Nhìn sơ thì thấy Việc cần sử dụng duy nhất một salt sẽ ngăn chặn lại luận điểm sinh sống mục số 2. Vậy các bước xác thực đúng là như thế nào?

User sẽ gửi plain-text password lên VPS cùng over HTTPs.Server vẫn kiểm tra trong database lôi ra salt của user đó, cùng chuỗi ta được salternative text + password.Thực hiện hash(salternative text + password) trên server side.Compare kết quả trên cùng với hash_md5 vào database.

4. Tại sao cần sử dụng bcrypt thay đến SHA-512

Kết trái của SHA-512 tất cả độ lâu năm 128 kí từ, độ dài của key là 64 bytes. Trông có vẻ cũng khá chắc chắn là, vậy tại vì sao OWASPhường. recommend áp dụng PBKDF2, bcrypt hoặc scrypt rộng là SHA2?

SHA2 là hash algorithm (tất nhiên), nó được thiết kế với mục tiêu là tốc độ, với những CPU tiến bộ, hoàn toàn có thể generate hàng tỷ kết quả trên giây. Nếu cần sử dụng một thuật toán thù gồm tốc độ như SHA2 có nghĩa là bạn đã lấy lợi điểm tới mang đến kẻ tấn công brute-force. Thuật tân oán nkhô nóng + thông số kỹ thuật hệ thống bạo gan, việc brute-force càng trsống lên gấp rút rộng.

Trong lúc ấy, bcrypt được call là slow-hash algorithm, bcrypt() mất 100ms nhằm tính toán ra chuỗi hash, chậm rộng 10.000 lần so với sha1().

Tức là vẫn dành được mục đích hash tuy thế sút thiểu nguy hại tiến công brute-force.

Tóm lại: SHA-512 chưa hẳn là 1 trong những thuật toán yếu, nhưng mà sự việc là SHA-512 không cân xứng cho bài toán hash password. Nếu đề xuất hash password thì ta buộc phải cần sử dụng các thuật toán slow hash nlỗi PBKDF2, bcrypt với scrypt.

5. Tại sao nên Pepper?

Một thực tiễn là nếu bạn chỉ bao gồm "muối" nhưng không có "tiêu", ăn uống làm thịt con kê luộc sẽ không còn ngon :v. Giả sử, database các bạn chạy RAID-1, một ổ cứng lỗi và bắt buộc thay như là một ổ cứng mới. Nhưng nlỗi ta biết, đĩa bị hỏng là mirror của đĩa sót lại, bạn buộc phải tiêu hủy ổ cứng lỗi đó nếu như không có bất kì ai kia hoàn toàn có thể lục thùng rác rưởi với tái tạo ra lại 1 phần dữ liệu vào đĩa hư kia.

Xin để ý, bạn phải wipe trước khi vứt bỏ một ổ cứng có tài liệu cho dù cá nhân tuyệt server, mặc dù đĩa bị sốc điện, bad-sector thì wipe cũng chưa đủ an toàn, cực tốt buộc phải ngiền ra buồn bực.

Dù random-salternative text vẫn làm cho tăng chi phí tạo ra rainbow table nhưng đời phân vân đâu nhưng mà lần, kẻ tiến công luôn gồm có cồn lực ngoạn mục nhằm dành được chiếc mình muốn. Giả sử kẻ tấn công tất cả một khôn cùng rất laptop với một mirror ổ cứng hỏng lục từ bỏ một cái thùng rác rưởi nào đó. Với khôn xiết máy tính kia, ta gồm rainbow-table để tra ngược ra password yêu cầu kiếm tìm.

Vậy làm thế nào nhằm giảm thiểu nguy hại trên? Nguyên ổn tắc là ko vứt tất cả trứng vào một giỏ, chính là pepper. Pepper là 1 trong chuỗi tương tự nlỗi salt, mà lại khác biệt là ta đề xuất giữ lại kín pepper, giữ ở 1 chỗ khác ko kể database, và không đề nghị pepper-per-user, chỉ việc 1 pepper là đầy đủ.

Từ

hash(salt + password)Thành

hash(pepper + salternative text + password)Ta đề xuất lưu giữ pepper làm việc application hoặc ở 1 service không giống, nếu như database bị compromise, thì kẻ tấn công cũng không có pepper để tạo ra rainbow-table.

6. Bonus

*

Trong lúc tìm kiếm câu trả lời nhằm viết bài xích này, bản thân tìm được một bài xích blog của dropbox nói về phong thái chúng ta lưu lại password như thế nào. Thấy bao gồm 2 điểm hơi tuyệt buộc phải ao ước nói thêm.

Xem thêm: Gmail Và Email Và Gmail Khác Gì Nhau Chỗ Nào So Sánh Chi Tiết ✔️

Trước lúc hash password cùng với salt-per-user, chúng ta bao gồm SHA512(password) trước để cụ định độ dài của input-password. Theo Dropbox thì câu hỏi này xử lý 2 issues của bcryptMột số implementation của bcrypt giảm nguồn vào còn 72 bytes.Một số implementation khác của bcrypt thì không giảm nguồn vào cơ mà dẫn đến một sự việc không giống là DoS attachồng chính vì cho phép độ dài mật khẩu đăng nhập tùy ý.Dropbox cũng có global pepper cơ mà cầm cố bởi vì cần sử dụng nó nhằm hash thì họ encrypt. Tức là cầm bởi hash(pepper + salt + password) thì chúng ta AES256(salt + password) + global-pepper-key. Theo nlỗi bọn họ giải thích thì pepper là một trong lớp bảo vệ sâu hơn và tàng trữ ở một nơi đơn lẻ. Nhưng đồng nghĩa tương quan cùng với câu hỏi là địa điểm tàng trữ pepper vẫn rất có thể bị compromise, và khi bị compromise thì câu hỏi rotate key ko dễ dãi. Dùng pepper để encrypt vẫn đã có được mục đích bảo mật thông tin giống như nhưng thêm kỹ năng rotate key khi bị compromise.

7. Migrate

Sau Khi viết bài xích này, bạn

Chuyên mục: Hỏi đáp công nghệ