Tại sao Laravel không sử dụng bcrypt để băm mã thông báo?

Trong các bài đăng trước về Câu chuyện xác thực này, chúng tôi đã biết rằng việc lưu trữ mật khẩu trong văn bản gốc không bao giờ được là một tùy chọn. Thay vào đó, chúng tôi muốn cung cấp con đường một chiều để bảo mật bằng cách băm mật khẩu. Tuy nhiên, chúng tôi cũng khám phá ra rằng chỉ băm thôi là không đủ để giảm thiểu các cuộc tấn công có liên quan hơn, chẳng hạn như bảng cầu vồng. Một cách tốt hơn để lưu trữ mật khẩu là thêm muối vào quá trình băm. thêm dữ liệu ngẫu nhiên bổ sung vào đầu vào của hàm băm làm cho mỗi hàm băm mật khẩu trở nên độc nhất. Nền tảng xác thực lý tưởng sẽ tích hợp hai quy trình này, băm và tạo muối, một cách liền mạch

Show

Có rất nhiều hàm mật mã để lựa chọn, chẳng hạn như họ

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
3 và họ
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
4. Tuy nhiên, một vấn đề thiết kế với các họ
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
5 là chúng được thiết kế để có tốc độ tính toán nhanh. Tốc độ một hàm mật mã có thể tính toán hàm băm có ảnh hưởng tức thì và đáng kể đến mức độ an toàn của mật khẩu

Tính toán nhanh hơn có nghĩa là các cuộc tấn công vũ phu nhanh hơn, chẳng hạn. Phần cứng hiện đại ở dạng CPU và GPU có thể tính toán hàng triệu, thậm chí hàng tỷ mã băm SHA-256 mỗi giây đối với cơ sở dữ liệu bị đánh cắp. Thay vì một chức năng nhanh, chúng tôi cần một chức năng băm mật khẩu chậm để khiến những kẻ tấn công gần như dừng lại. Chúng tôi cũng muốn chức năng này có khả năng thích ứng để chúng tôi có thể bù đắp cho phần cứng nhanh hơn trong tương lai bằng cách có thể làm cho chức năng này ngày càng chạy chậm hơn theo thời gian

Tại Auth0, tính toàn vẹn và bảo mật của dữ liệu là một trong những ưu tiên cao nhất của chúng tôi. Chúng tôi sử dụng thuật toán

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 cấp ngành và đã được thử nghiệm trong trận chiến để băm và muối mật khẩu một cách an toàn.
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 cho phép xây dựng một nền tảng bảo mật mật khẩu có thể phát triển cùng với công nghệ phần cứng để bảo vệ chống lại các mối đe dọa mà tương lai có thể mang lại, chẳng hạn như những kẻ tấn công có khả năng tính toán để bẻ khóa mật khẩu nhanh gấp đôi. Hãy cùng tìm hiểu về thiết kế và thông số kỹ thuật khiến
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 trở thành tiêu chuẩn bảo mật mật mã

Động lực Đằng sau bcrypt | cost: 10, time to hash: 65.683ms bcrypt | cost: 11, time to hash: 129.227ms bcrypt | cost: 12, time to hash: 254.624ms bcrypt | cost: 13, time to hash: 511.969ms bcrypt | cost: 14, time to hash: 1015.073ms bcrypt | cost: 15, time to hash: 2043.034ms bcrypt | cost: 16, time to hash: 4088.721ms bcrypt | cost: 17, time to hash: 8162.788ms bcrypt | cost: 18, time to hash: 16315.459ms bcrypt | cost: 19, time to hash: 32682.622ms bcrypt | cost: 20, time to hash: 66779.182ms6

Công nghệ thay đổi nhanh chóng. Việc tăng tốc độ và sức mạnh của máy tính có thể mang lại lợi ích cho cả các kỹ sư đang cố gắng xây dựng hệ thống phần mềm và những kẻ tấn công đang cố gắng khai thác chúng. Một số phần mềm mật mã không được thiết kế để mở rộng quy mô với sức mạnh tính toán. Như đã giải thích trước đó, độ an toàn của mật khẩu phụ thuộc vào tốc độ mà hàm băm mật mã đã chọn có thể tính toán hàm băm mật khẩu. Một chức năng nhanh sẽ thực thi nhanh hơn khi chạy trong phần cứng mạnh hơn nhiều

Để giảm thiểu vectơ tấn công này, chúng tôi có thể tạo một hàm băm mật mã có thể được điều chỉnh để chạy chậm hơn trong phần cứng mới có sẵn; . Điều này đặc biệt quan trọng vì thông qua vectơ tấn công này, mọi người có xu hướng giữ độ dài của mật khẩu không đổi. Do đó, khi thiết kế một giải pháp mật mã cho vấn đề này, chúng ta phải tính đến phần cứng phát triển nhanh chóng và độ dài mật khẩu không đổi

Vectơ tấn công này đã được các nhà mật mã học hiểu rõ vào những năm 90 và một thuật toán có tên

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 đáp ứng các thông số kỹ thuật thiết kế này đã được trình bày vào năm 1999 tại USENIX. Hãy tìm hiểu cách
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 cho phép chúng tôi tạo hệ thống lưu trữ mật khẩu mạnh

bcrypt | cost: 10, time to hash: 65.683ms bcrypt | cost: 11, time to hash: 129.227ms bcrypt | cost: 12, time to hash: 254.624ms bcrypt | cost: 13, time to hash: 511.969ms bcrypt | cost: 14, time to hash: 1015.073ms bcrypt | cost: 15, time to hash: 2043.034ms bcrypt | cost: 16, time to hash: 4088.721ms bcrypt | cost: 17, time to hash: 8162.788ms bcrypt | cost: 18, time to hash: 16315.459ms bcrypt | cost: 19, time to hash: 32682.622ms bcrypt | cost: 20, time to hash: 66779.182ms6 là gì?

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 được thiết kế bởi Niels Provos và David Mazières dựa trên mật mã Blowfish>).
28.3722 e^(0.705681x)
4 cho Blowfish và
28.3722 e^(0.705681x)
5 cho tên của hàm băm được sử dụng bởi hệ thống mật khẩu UNIX

28.3722 e^(0.705681x)
5 là một ví dụ tuyệt vời về việc không thích ứng với những thay đổi của công nghệ. Theo USENIX, vào năm 1976,
28.3722 e^(0.705681x)
5 có thể băm ít hơn 4 mật khẩu mỗi giây. Vì những kẻ tấn công cần tìm hình ảnh trước của hàm băm để đảo ngược nó, điều này khiến Nhóm UNIX cảm thấy rất thoải mái về sức mạnh của
28.3722 e^(0.705681x)
5. Tuy nhiên, 20 năm sau, một máy tính nhanh với phần mềm và phần cứng được tối ưu hóa có khả năng băm 200.000 mật khẩu mỗi giây bằng chức năng đó

Về bản chất, kẻ tấn công sau đó có thể thực hiện một cuộc tấn công từ điển hoàn chỉnh với hiệu quả cực cao. Do đó, cần phải có mật mã khó phá vỡ hơn theo cấp số nhân khi phần cứng trở nên nhanh hơn để cản trở lợi ích tốc độ mà kẻ tấn công có thể nhận được từ phần cứng.

Mật mã Blowfish là mật mã khối nhanh trừ khi thay đổi khóa>), các tham số thiết lập đầu ra chức năng của thuật toán mã hóa. mỗi khóa mới yêu cầu tiền xử lý tương đương với việc mã hóa khoảng 4 kilobyte văn bản>), được coi là rất chậm so với các mật mã khối khác. Việc thay đổi khóa chậm này có lợi cho các phương pháp băm mật khẩu, chẳng hạn như

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 vì nhu cầu tính toán bổ sung giúp bảo vệ chống lại các cuộc tấn công từ điển và vũ phu bằng cách làm chậm cuộc tấn công

Như được hiển thị trong "Blowfish trong thực tế">),

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 có thể giảm thiểu các loại tấn công đó bằng cách kết hợp giai đoạn thiết lập khóa đắt tiền của Blowfish với một số lần lặp khác nhau để tăng khối lượng công việc và thời gian tính toán hàm băm. Lợi ích lớn nhất của
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 là, theo thời gian, số lần lặp lại có thể tăng lên để làm cho nó chậm hơn, cho phép
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 mở rộng quy mô với sức mạnh tính toán. Chúng tôi có thể làm giảm bất kỳ lợi ích nào mà kẻ tấn công có thể nhận được từ phần cứng nhanh hơn bằng cách tăng số lần lặp lại để làm cho
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 chậm hơn

"`bcrypt` được thiết kế để băm mật khẩu do đó nó là một thuật toán chậm. Điều này tốt cho việc băm mật khẩu vì nó làm giảm số lượng mật khẩu theo giây mà kẻ tấn công có thể băm khi thực hiện một cuộc tấn công từ điển. "

Tweet cái này đi

Một lợi ích khác của

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 là nó yêu cầu một loại muối theo mặc định. Chúng ta hãy xem xét sâu hơn về cách thức hoạt động của hàm băm này

"`bcrypt` buộc bạn phải tuân theo các biện pháp bảo mật tốt nhất vì nó yêu cầu một loại muối như một phần của quy trình băm. Băm kết hợp với muối bảo vệ bạn khỏi các cuộc tấn công bảng cầu vồng. Mật khẩu có phải là một phần trong chiến lược bảo mật của bạn không?"

Tweet cái này đi

Làm thế nào để bcrypt | cost: 10, time to hash: 65.683ms bcrypt | cost: 11, time to hash: 129.227ms bcrypt | cost: 12, time to hash: 254.624ms bcrypt | cost: 13, time to hash: 511.969ms bcrypt | cost: 14, time to hash: 1015.073ms bcrypt | cost: 15, time to hash: 2043.034ms bcrypt | cost: 16, time to hash: 4088.721ms bcrypt | cost: 17, time to hash: 8162.788ms bcrypt | cost: 18, time to hash: 16315.459ms bcrypt | cost: 19, time to hash: 32682.622ms bcrypt | cost: 20, time to hash: 66779.182ms6 hoạt động?

Provos và Mazières, các nhà thiết kế của

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6, đã sử dụng giai đoạn thiết lập khóa đắt tiền của mật mã Blowfish để phát triển một thuật toán thiết lập khóa mới cho Blowfish có tên là "eksblowfish", viết tắt của "lịch trình khóa đắt tiền Blowfish". "

"thiết lập phím" là gì? . "Hầu hết các mật mã bao gồm giai đoạn thiết lập khóa và giai đoạn hoạt động. Trong quá trình thiết lập khóa, trạng thái bên trong được khởi tạo. Trong quá trình hoạt động, bản mã hoặc bản rõ đầu vào được mã hóa hoặc giải mã. Chỉ cần tiến hành thiết lập khóa một lần cho mỗi khóa được sử dụng"

Giai đoạn 1

Một chức năng có tên là

28.3722 e^(0.705681(30)) = 44370461014.7
8 được thiết lập bằng cách sử dụng chi phí mong muốn, muối và mật khẩu để khởi tạo trạng thái của
28.3722 e^(0.705681(30)) = 44370461014.7
9. Sau đó,
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 dành nhiều thời gian để chạy một lịch trình khóa tốn kém, bao gồm thực hiện dẫn xuất khóa trong đó chúng tôi lấy được một tập hợp các khóa con từ khóa chính. Ở đây, mật khẩu được sử dụng làm khóa chính. Trong trường hợp người dùng chọn mật khẩu sai hoặc ngắn, chúng tôi sẽ kéo dài mật khẩu/khóa đó thành mật khẩu/khóa dài hơn. Thực hành nói trên còn được gọi là kéo dài phím

Những gì chúng tôi đang trải qua trong giai đoạn đầu tiên này là thúc đẩy tăng cường khóa để làm chậm các phép tính, từ đó cũng làm chậm những kẻ tấn công

Giai đoạn 2

Giá trị kỳ diệu là giá trị 192-bit

npm install bcrypt
1. Giá trị này được mã hóa 64 lần bằng cách sử dụng
28.3722 e^(0.705681(30)) = 44370461014.7
9 trong >) với trạng thái từ giai đoạn trước. Đầu ra của giai đoạn này là chi phí và giá trị muối 128 bit được nối với kết quả của vòng mã hóa

Băm kết quả có tiền tố là

npm install bcrypt
3,
npm install bcrypt
4 hoặc
npm install bcrypt
5. Các tiền tố được thêm vào để biểu thị việc sử dụng
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 và phiên bản của nó

Kết quả của

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 đạt được như định nghĩa của các nhà thiết kế của nó

  • Đó là tiền đề kháng
  • Không gian muối đủ lớn để giảm thiểu các cuộc tấn công tính toán trước, chẳng hạn như bảng cầu vồng
  • Nó có một chi phí thích ứng

Các nhà thiết kế của

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 tin rằng chức năng này sẽ giữ được sức mạnh và giá trị của nó trong nhiều năm. Thiết kế toán học của nó đảm bảo cho các nhà mật mã học về khả năng phục hồi trước các cuộc tấn công

Về chi phí thích ứng, chúng ta có thể nói rằng

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 là một hàm băm thích ứng vì chúng ta có thể tăng số lần lặp được thực hiện bởi hàm dựa trên một yếu tố chính được truyền, chi phí. Khả năng thích ứng này là thứ cho phép chúng ta bù đắp cho việc tăng sức mạnh máy tính, nhưng nó đi kèm với chi phí cơ hội. tốc độ hay bảo mật?

bcrypt | cost: 10, time to hash: 65.683ms bcrypt | cost: 11, time to hash: 129.227ms bcrypt | cost: 12, time to hash: 254.624ms bcrypt | cost: 13, time to hash: 511.969ms bcrypt | cost: 14, time to hash: 1015.073ms bcrypt | cost: 15, time to hash: 2043.034ms bcrypt | cost: 16, time to hash: 4088.721ms bcrypt | cost: 17, time to hash: 8162.788ms bcrypt | cost: 18, time to hash: 16315.459ms bcrypt | cost: 19, time to hash: 32682.622ms bcrypt | cost: 20, time to hash: 66779.182ms6 Các phương pháp hay nhất

Thách thức của các kỹ sư bảo mật là quyết định chi phí nào sẽ đặt cho chức năng. Chi phí này còn được gọi là yếu tố công việc. OWASP khuyến nghị điều chỉnh chi phí sao cho chức năng chạy chậm nhất có thể mà không ảnh hưởng đến trải nghiệm của người dùng và không làm tăng nhu cầu sử dụng phần cứng bổ sung có thể vượt quá ngân sách

Hãy xem xét kỹ hơn một ví dụ dựa trên các đề xuất của OWASP

  • Thực hiện nghiên cứu UX để tìm thời gian người dùng chờ đăng ký và xác thực có thể chấp nhận được
  • Nếu thời gian chờ được chấp nhận là 1 giây, hãy điều chỉnh chi phí
    bcrypt | cost: 10, time to hash: 65.683ms
    bcrypt | cost: 11, time to hash: 129.227ms
    bcrypt | cost: 12, time to hash: 254.624ms
    bcrypt | cost: 13, time to hash: 511.969ms
    bcrypt | cost: 14, time to hash: 1015.073ms
    bcrypt | cost: 15, time to hash: 2043.034ms
    bcrypt | cost: 16, time to hash: 4088.721ms
    bcrypt | cost: 17, time to hash: 8162.788ms
    bcrypt | cost: 18, time to hash: 16315.459ms
    bcrypt | cost: 19, time to hash: 32682.622ms
    bcrypt | cost: 20, time to hash: 66779.182ms
    6 để nó chạy trong 1 giây trên phần cứng của bạn
  • Phân tích với nhóm bảo mật của bạn nếu thời gian tính toán đủ để giảm thiểu và làm chậm các cuộc tấn công

Người dùng có thể đợi trong 1 hoặc 2 giây vì họ không phải xác thực liên tục. Quá trình vẫn có thể được coi là nhanh chóng. Trong khi đó, sự chậm trễ này sẽ cản trở nỗ lực của kẻ tấn công trong việc nhanh chóng tính toán một bảng cầu vồng.

Khả năng điều chỉnh chi phí của

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 cho phép chúng tôi mở rộng quy mô bằng cách tối ưu hóa phần cứng. Theo định nghĩa hiện đại của Định luật Moore, số lượng bóng bán dẫn trên mỗi inch vuông trên các hệ thống tích hợp đã tăng gấp đôi sau mỗi 18 tháng. Trong 2 năm, chúng tôi có thể tăng hệ số chi phí để đáp ứng mọi thay đổi. Tuy nhiên, chúng ta cần cẩn thận với điều này. nếu chúng tôi chỉ tăng hệ số công việc của bcrypt trong mã của mình, mọi người sẽ bị khóa. Một quá trình di chuyển là cần thiết trong trường hợp này

Kiểm tra một mát từ 1971 đến 2016

"Khi sử dụng `bcrypt`, điều quan trọng là tìm sự cân bằng phù hợp giữa bảo mật và khả năng sử dụng. Tăng hệ số chi phí làm tăng thời gian tính toán. Hoạt động mật khẩu xảy ra ở đâu?

Tweet cái này đi

Để làm ví dụ về cách tăng hệ số công việc làm tăng thời gian làm việc, tôi đã tạo một Nút. js đã tính toán hàm băm của

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
3 bằng cách sử dụng chi phí từ 10 đến 20

const bcrypt = require("bcrypt");
const plainTextPassword1 = "DFGh5546*%^__90";
for (let saltRounds = 10; saltRounds < 21; saltRounds++) {
  console.time(`bcrypt | cost: ${saltRounds}, time to hash`);
  bcrypt.hashSync(plainTextPassword1, saltRounds);
  console.timeEnd(`bcrypt | cost: ${saltRounds}, time to hash`);
}

Trong phần tiếp theo, chúng ta sẽ khám phá Node. triển khai js chi tiết hơn. Tập lệnh được chạy trên MacBook Pro 2017 với các thông số kỹ thuật sau (Chúng tôi nhận được thiết bị đẹp tại Auth0. Tham gia với chúng tôi. )

  • bộ vi xử lý. 2. Intel Core i7 8 GHz
  • Ký ức. 16 GB 2133 MHz LPDDR3
  • đồ họa. Radeon Pro 555 2048 MB, Đồ họa Intel HD 630 1536 MB

Đây là những kết quả

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms

Vẽ dữ liệu này trong Wolfram Alpha để tạo biểu đồ phù hợp với bình phương nhỏ nhất, chúng tôi quan sát thấy rằng thời gian để băm mật khẩu tăng theo cấp số nhân khi chi phí tăng lên trong cấu hình phần cứng cụ thể này

Đối với tập dữ liệu này, Wolfram Alpha cung cấp cho chúng tôi phương trình phù hợp nhất với bình phương nhỏ nhất sau đây

28.3722 e^(0.705681x)

Nếu chúng tôi muốn dự đoán mất bao lâu để băm mật khẩu trong hệ thống này khi chi phí là

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
4, chúng tôi chỉ cần thay giá trị đó cho
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
5

28.3722 e^(0.705681(30)) = 44370461014.7

Hệ số chi phí của

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
4 có thể mất
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
7 mili giây để tính toán. Tức là,
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
8 phút hoặc
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
9 ngày. Một cỗ máy nhanh hơn nhiều được tối ưu hóa bằng công nghệ mới nhất và tốt nhất hiện nay có thể có thời gian tính toán nhỏ hơn. Tuy nhiên,
bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 có thể dễ dàng mở rộng quy trình băm của chúng tôi để phù hợp với phần cứng nhanh hơn, để lại cho chúng tôi rất nhiều khoảng trống để ngăn chặn những kẻ tấn công hưởng lợi từ những cải tiến công nghệ trong tương lai

Nếu một công ty từng phát hiện hoặc nghi ngờ rằng vi phạm dữ liệu đã xâm phạm mật khẩu, ngay cả ở dạng băm, thì công ty đó phải nhắc người dùng thay đổi mật khẩu của họ ngay lập tức. Trong khi băm và muối ngăn chặn một cuộc tấn công vũ phu của hàng tỷ nỗ lực để thành công, một lần bẻ khóa mật khẩu là khả thi về mặt tính toán. Kẻ tấn công có thể, với sức mạnh tính toán cực lớn hoặc hoàn toàn may mắn, bẻ khóa một mật khẩu duy nhất, nhưng ngay cả khi đó, quá trình này chắc chắn sẽ rất chậm do các đặc điểm của

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6, khiến công ty và người dùng của họ có thời gian quý báu để thay đổi mật khẩu

Bây giờ chúng ta đã hiểu cách hoạt động của

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6, hãy khám phá cách nó có thể được triển khai trong một ứng dụng web ở cấp độ cao

Thực hiện bcrypt | cost: 10, time to hash: 65.683ms bcrypt | cost: 11, time to hash: 129.227ms bcrypt | cost: 12, time to hash: 254.624ms bcrypt | cost: 13, time to hash: 511.969ms bcrypt | cost: 14, time to hash: 1015.073ms bcrypt | cost: 15, time to hash: 2043.034ms bcrypt | cost: 16, time to hash: 4088.721ms bcrypt | cost: 17, time to hash: 8162.788ms bcrypt | cost: 18, time to hash: 16315.459ms bcrypt | cost: 19, time to hash: 32682.622ms bcrypt | cost: 20, time to hash: 66779.182ms6

Chúng ta sẽ khám phá việc triển khai nó bằng Node. js và nút phổ biến của nó. bcrypt. triển khai js. Bạn không cần phải tạo một Nút. dự án js. Mục đích của phần này là chỉ ra các bước phổ biến mà các nhà phát triển phải thực hiện khi tích hợp

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 vào phần phụ trợ của họ

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .genSalt(saltRounds)
  .then(salt => {
    console.log(`Salt: ${salt}`);
    return bcrypt.hash(plainTextPassword1, salt);
  })
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));
5 được cài đặt qua
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .genSalt(saltRounds)
  .then(salt => {
    console.log(`Salt: ${salt}`);
    return bcrypt.hash(plainTextPassword1, salt);
  })
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));
6, một Nút. js quản lý gói thông qua lệnh sau

npm install bcrypt

Sau đó, trên tệp điểm đầu vào cho máy chủ, chẳng hạn như

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .genSalt(saltRounds)
  .then(salt => {
    console.log(`Salt: ${salt}`);
    return bcrypt.hash(plainTextPassword1, salt);
  })
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));
7, chúng tôi tạo một tập hợp các biến để tham khảo trong suốt quá trình triển khai

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 cho phép chúng tôi truy cập vào một Nút. thư viện js có các phương thức tiện ích để tạo thuận lợi cho quá trình băm.
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .genSalt(saltRounds)
  .then(salt => {
    console.log(`Salt: ${salt}`);
    return bcrypt.hash(plainTextPassword1, salt);
  })
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));
9 đại diện cho chi phí hoặc yếu tố công việc. Ví dụ: chúng tôi sẽ sử dụng một mật khẩu ngẫu nhiên,
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
0

nút này. js rất thú vị vì nó cung cấp cho chúng tôi hai kỹ thuật khác nhau để băm mật khẩu. Hãy khám phá chúng

Kỹ thuật 1. Tạo muối và hàm băm trên các lệnh gọi hàm riêng biệt

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .genSalt(saltRounds)
  .then(salt => {
    console.log(`Salt: ${salt}`);
    return bcrypt.hash(plainTextPassword1, salt);
  })
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));

Sử dụng mẫu Promise để kiểm soát bản chất không đồng bộ của JavaScript, trong kỹ thuật này, trước tiên chúng tôi tạo một muối thông qua hàm

Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
1 lấy chi phí,
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .genSalt(saltRounds)
  .then(salt => {
    console.log(`Salt: ${salt}`);
    return bcrypt.hash(plainTextPassword1, salt);
  })
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));
9. Khi thành công, chúng tôi nhận được một giá trị
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
3 mà sau đó chúng tôi chuyển đến
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
4 cùng với mật khẩu,
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
0, mà chúng tôi muốn băm. Thành công của
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
4 cung cấp cho chúng tôi hàm băm mà chúng tôi cần lưu trữ trong cơ sở dữ liệu của mình. Trong quá trình triển khai đầy đủ, chúng tôi cũng muốn lưu trữ tên người dùng cùng với hàm băm trong bước cuối cùng này

Lưu ý rằng tôi đã bao gồm một số câu lệnh

Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
7 để hiển thị các giá trị của
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
3 và
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
9 khi quá trình diễn ra. Một điều thực sự hữu ích trong việc triển khai này là bạn không phải tự tạo
Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
3. Thư viện tạo muối mạnh cho bạn

Trong lần chạy đầu tiên, tôi đã nhận được các kết quả sau trong dòng lệnh

Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy

Bạn sẽ không thể tái tạo các kết quả này một lần nữa vì muối là hoàn toàn ngẫu nhiên mỗi khi chạy

Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
1. Chạy lại, tôi nhận được đầu ra sau

Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES

Do đó, mỗi mật khẩu mà chúng tôi băm sẽ có một loại muối duy nhất và một hàm băm duy nhất. Như chúng ta đã biết trước đây, điều này giúp chúng ta giảm thiểu đáng kể các cuộc tấn công bảng cầu vồng

Kỹ thuật 2. Tự động tạo muối và hàm băm

Trong phiên bản này, chúng tôi sử dụng một chức năng duy nhất để tạo muối và băm mật khẩu

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .hash(plainTextPassword1, saltRounds)
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));

Kỹ thuật này có dấu chân nhỏ hơn và có thể dễ kiểm tra hơn. Một lần nữa, một hàm băm mới được tạo mỗi khi chức năng được chạy, bất kể mật khẩu giống nhau

Lưu ý cách trong cả hai kỹ thuật, chúng tôi đang lưu trữ hàm băm chứ không phải mật khẩu. Bản thân mật khẩu của người dùng không nên được lưu trữ ở bất kỳ đâu trong bản rõ

Khi chúng tôi có các hàm băm mật khẩu được lưu trữ trong cơ sở dữ liệu, làm cách nào để chúng tôi xác thực thông tin đăng nhập của người dùng?

Xác thực mật khẩu bằng hàm băm

Sử dụng phương pháp

Salt: $2b$10$//DXiVVE59p7G5k/4Klx/e
Hash: $2b$10$//DXiVVE59p7G5k/4Klx/ezF7BI42QZKmoOD0NDvUuqxRE5bFFBLy
4, hãy xem cách chúng ta có thể so sánh mật khẩu được cung cấp với hàm băm được lưu trữ. Vì chúng tôi không kết nối với cơ sở dữ liệu trong ví dụ này, nên chúng tôi sẽ tạo hàm băm và lưu nó ở đâu đó, chẳng hạn như trình soạn thảo văn bản. Băm tôi nhận được là

Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
3

Tiếp theo, chúng tôi sẽ kiểm tra mật khẩu và xem chúng khớp với nhau như thế nào. Đầu tiên, chúng tôi kiểm tra xem hàm băm được lưu trữ của chúng tôi có khớp với hàm băm của mật khẩu được cung cấp không

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
0

Trong trường hợp này,

Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
4 là
Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
5, cho biết rằng mật khẩu được cung cấp, khi được băm, khớp với hàm băm được lưu trữ

Ngược lại, chúng tôi mong đợi nhận được

Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
6 cho
Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
4 nếu chúng tôi kiểm tra hàm băm so với
Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
8

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
1

Và, một cách hiệu quả,

Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES
4 là sai. Tuy nhiên, chúng tôi đã không lưu trữ muối, vậy làm thế nào để
// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .hash(plainTextPassword1, saltRounds)
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));
0 biết nên sử dụng loại muối nào?

Salt: $2b$10$3euPcmQFCiblsZeEu5s7p.
Hash: $2b$10$3euPcmQFCiblsZeEu5s7p.9OVHgeHWFDk9nhMqZ0m/3pd/lhwZgES

// app.js
const bcrypt = require("bcrypt");
const saltRounds = 10;
const plainTextPassword1 = "DFGh5546*%^__90";
bcrypt
  .hash(plainTextPassword1, saltRounds)
  .then(hash => {
    console.log(`Hash: ${hash}`);
    // Store hash in your password DB.
  })
  .catch(err => console.error(err.message));
0 suy ra muối từ hàm băm và sau đó có thể băm chính xác mật khẩu được cung cấp để so sánh

Đó là quy trình sử dụng

bcrypt | cost: 10, time to hash: 65.683ms
bcrypt | cost: 11, time to hash: 129.227ms
bcrypt | cost: 12, time to hash: 254.624ms
bcrypt | cost: 13, time to hash: 511.969ms
bcrypt | cost: 14, time to hash: 1015.073ms
bcrypt | cost: 15, time to hash: 2043.034ms
bcrypt | cost: 16, time to hash: 4088.721ms
bcrypt | cost: 17, time to hash: 8162.788ms
bcrypt | cost: 18, time to hash: 16315.459ms
bcrypt | cost: 19, time to hash: 32682.622ms
bcrypt | cost: 20, time to hash: 66779.182ms
6 trong Node. js. Ví dụ này rất nhỏ và có rất nhiều thứ khác cần quan tâm như lưu trữ tên người dùng, đảm bảo toàn bộ ứng dụng phụ trợ được an toàn, thực hiện kiểm tra bảo mật để tìm lỗ hổng. Băm mật khẩu, mặc dù cần thiết, chỉ là một phần nhỏ trong chiến lược bảo mật hợp lý

Các ngôn ngữ khác sẽ tuân theo quy trình làm việc tương tự

  • Đây là một ví dụ sử dụng Spring Security cho Java

  • Cái này cho Python

  • Cuối cùng, ví dụ này sử dụng Laravel cho PHP

Đơn giản hóa việc quản lý mật khẩu với Auth0

Ý tưởng chính của xác minh mật khẩu là so sánh hai giá trị băm và xác định xem chúng có khớp với nhau không. Quá trình này rất phức tạp. Một chiến lược nhận dạng vững chắc yêu cầu một tổ chức phải cập nhật những tiến bộ về mật mã, thiết kế một quy trình để loại bỏ dần các thuật toán không dùng nữa hoặc dễ bị tổn thương, cung cấp thử nghiệm bút, đầu tư vào bảo mật vật lý và mạng cùng nhiều thứ khác. Với tất cả các yếu tố được xem xét, nó không phải là dễ dàng hoặc không tốn kém

Bạn có thể giảm thiểu chi phí băm, muối và quản lý mật khẩu thông qua Auth0. Chúng tôi giải quyết các trường hợp sử dụng danh tính phức tạp nhất bằng một nền tảng có thể mở rộng và dễ tích hợp, đảm bảo hàng tỷ lượt đăng nhập mỗi tháng

Auth0 giúp bạn ngăn chặn dữ liệu nhận dạng quan trọng rơi vào tay kẻ xấu. Chúng tôi không bao giờ lưu trữ mật khẩu trong văn bản rõ ràng. Mật khẩu luôn được băm và thêm muối bằng bcrypt. Chúng tôi đã tích hợp tính năng bảo mật tiên tiến nhất vào sản phẩm của mình để bảo vệ doanh nghiệp và người dùng của bạn

Laravel có sử dụng bcrypt không?

Mặt tiền Laravel Hash cung cấp khả năng băm Bcrypt an toàn để lưu trữ mật khẩu người dùng . Nếu bạn đang sử dụng bộ điều khiển AuthController đi kèm với ứng dụng Laravel của mình, bạn sẽ cần phải xác minh mật khẩu Bcrypt dựa trên phiên bản chưa được băm do người dùng cung cấp.

laravel sử dụng hàm băm nào?

Giới thiệu. Mặt tiền Laravel Hash cung cấp khả năng băm Bcrypt và Argon2 an toàn để lưu trữ mật khẩu người dùng. Nếu bạn đang sử dụng một trong các bộ khởi động ứng dụng Laravel, Bcrypt sẽ được sử dụng để đăng ký và xác thực theo mặc định.

bcrypt có tốt hơn SHA không?

Công nghệ trong quy trình và thuật toán Bcrypt hạn chế các cuộc tấn công và khiến kẻ tấn công khó xâm phạm mật khẩu hơn. Bcrypt không được thiết kế để mã hóa lượng lớn dữ liệu. Nó được triển khai tốt nhất cho mật khẩu, tuy nhiên SHA-256 tốt hơn cho lượng dữ liệu lớn vì nó ít tốn kém hơn và nhanh hơn .

Làm thế nào để mật khẩu bcrypt so với laravel?

GtG của tôi'; . $hash1 = Băm. thực hiện ('kiểm tra'); . thực hiện ('kiểm tra'); . kiểm tra('test', $hash1) && Băm. kiểm tra('test', $hash2)); html.