Loại thuật toán băm nào đã được sử dụng để bảo vệ mật khẩu?

Bạn có hứng thú với mật mã không? . rất nhiều kỹ sư đang. Đôi khi, một số người trong số họ quyết định viết các hàm băm mật mã tùy chỉnh của riêng họ và sử dụng chúng trong các ứng dụng trong thế giới thực. Mặc dù hấp dẫn một cách dễ hiểu, nhưng làm như vậy đã vi phạm quy tắc số 1 của cộng đồng bảo mật. không viết tiền điện tử của riêng bạn.  

Thuật toán băm hoạt động như thế nào và thuật toán băm mật khẩu có gì đặc biệt? .  

Tính năng băm mật khẩu hoạt động như thế nào? 

Trước khi lưu trữ mật khẩu của người dùng trong cơ sở dữ liệu của ứng dụng, bạn phải áp dụng hàm băm mật mã cho mật khẩu đó. [Bạn không lưu trữ mật khẩu ở dạng văn bản thuần túy, phải không? Tốt. chỉ cần hỏi. ] 

Mọi hàm băm mật mã đều chuyển đổi đầu vào có độ dài tùy ý [a. k. a. "tin nhắn"] thành đầu ra có độ dài cố định [a. k. a. "băm", "thông báo tóm tắt"]. Mộthàm băm mật mã an toànphải là.  

  • Quyết định. băm cùng một đầu vào sẽ luôn hiển thị cùng một đầu ra.  
  • Một chiều. tạo một thông báo đầu vào dựa trên một đầu ra nhất định sẽ không khả thi.  
  • Chống va chạm. việc tìm hai thông báo đầu vào băm thành cùng một đầu ra cũng không khả thi.  
  • Ngẫu nhiên cao. một thay đổi nhỏ trong đầu vào sẽ dẫn đến một thay đổi đáng kể và không tương quan trong đầu ra [a. k. a. "hiệu ứng tuyết lở"]. Nếu không có thuộc tính này, việc áp dụng các phương pháp phân tích mật mã sẽ cho phép đưa ra dự đoán về đầu vào dựa trên đầu ra.  

Bây giờ, có hàm băm mật mã nói chung và sau đó là hàm băm mật khẩu hơi đặc biệt.  

Các hàm băm mật mã tiêu chuẩn được thiết kế để hoạt động nhanh và khi bạn băm mật khẩu, nó sẽ trở thành một vấn đề. Băm mật khẩu phải chậm. Bạn muốn làm cho kẻ tấn công khó có thể áp dụng các cuộc tấn công vũ phu vào mật khẩu trong cơ sở dữ liệu của bạn nếu nó bị rò rỉ. Đây là lý do tại sao bạn muốn làm cho việc băm mật khẩu trở nên tốn kém về mặt tính toán. Làm thế nào đắt tiền? .  

Để làm cho quá trình băm trở nên tốn kém về mặt tính toán, một loại hàm đặc biệt thường được sử dụng. hàm dẫn xuất khóa[KDF]. Về cơ bản, các KDF gọi các hàm băm, nhưng chúng thêm một loại muối ngẫu nhiên trước khi băm, sau đó áp dụng nhiều lần [thường là hàng nghìn hoặc hàng chục nghìn] lần lặp lại của quá trình băm. Lý tưởng nhất là chúng thực hiện các cuộc tấn công vũ phu vừa tốn CPU vừa tốn bộ nhớ.  

Hàm dẫn xuất khóa tạo khóa dẫn xuất từ ​​khóa cơ sở và các tham số khác. Trong hàm dẫn xuất khóa dựa trên mật khẩu, khóa cơ sở là mật khẩu và các tham số khác là giá trị muối và số lần lặp [RFC 2898: Password-Based Cryptography Specification Version 2.0].

Trong các cuộc thảo luận về băm mật khẩu, thuật ngữ "hàm băm" [chẳng hạn như MD5 hoặc SHA-1] và "hàm dẫn xuất khóa" [chẳng hạn như PBKDF2 hoặc Argon2] thường được sử dụng thay thế cho nhau mặc dù về mặt kỹ thuật chúng không giống nhau.  

Tại sao bạn không nên viết thuật toán băm mật khẩu của riêng mình? 

Cả việc viết thuật toán băm tùy chỉnh và tạo triển khai thuật toán nổi tiếng của riêng bạn đều là những ý tưởng tồi. Tại sao? 

Có thể bạn không có kỹ năng. Hãy đối mặt với nó. mã hóa khó và làm rối tung thuật toán hoặc triển khai thì dễ dàng, ngay cả đối với các chuyên gia. Nếu bạn muốn tạo hàm băm mật khẩu của riêng mình, một số điều bạn cần quan tâm bao gồm.  

  • Đảm bảokhả năng chống ảnh trướcđể ngăn việc tính toán đầu vào dựa trên đầu ra hàm băm.  
  • Đảm bảokhả năng chống va chạm caođể ngăn việc tìm thấy hai đầu vào băm cho cùng một đầu ra.  
  • Ngẫu nhiên hóa vàhiệu ứng tuyết lởđể đảm bảo kẻ tấn công không thể dễ dàng tìm thấy các mẫu băm và mối tương quan giữa đầu vào và đầu ra.  
  • Khả năng phục hồi trước nhiều loại các cuộc tấn công kênh bên[nghĩa là các cuộc tấn công dựa trên chi tiết triển khai thuật toán và kiểm tra tác động vật lý do .  
  • Giảm thiểu mọi mức tăng hiệu quả mà kẻ tấn công có thể đạt được thông qua việc sử dụngphần cứng được tối ưu hóa cho việc bẻ khóachẳng hạn như ASIC, FPGA và GPU.  

Bạn gặp rất nhiều khó khăn - thậm chí còn hơn thế nữa vìbạn sẽ không có quyền truy cập vào những người kiểm tra đủ điều kiệntừ cộng đồng mật mã đến .  

Bạn có thể muốn phụ thuộc vào tính bảo mật và tối nghĩabằng cách giữ thuật toán của mình ở chế độ riêng tư. Làm như vậy sẽ phá vỡ học thuyết cơ bản về mật mã được gọi là nguyên tắc Kerckhoff . "hệ thống mật mã phải được bảo mật ngay cả khi mọi thứ về hệ thống, ngoại trừ khóa, là thông tin công khai. "Bảo mật bằng cách tối nghĩa có thể mang lại lợi thế ngắn hạn nhưng dựa vào nó lâu dài là một cách làm không tốt.  

  • Việc che giấu các lỗ hổng sẽ ngăn việc tiết lộ và sửa chữa chúng như một phần của cuộc thảo luận mở và tăng khả năng bị khai thác.  
  • Nếu cơ sở dữ liệu mật khẩu của bạn từng bị rò rỉ, rất có thể mã nguồn của ứng dụng của bạn cũng sẽ bị rò rỉ cùng với nó và ngay khi kẻ tấn công biết được thuật toán chưa được kiểm tra của bạn, chúng sẽ dễ dàng bẻ khóa .  

Bạn sẽ khiến dữ liệu nhạy cảm của người dùng gặp rủi ro. Rò rỉ dữ liệu nhạy cảm của người dùng là một trong những điều tồi tệ nhất có thể xảy ra với doanh nghiệp. Đây là điều ngay lập tức làm suy giảm lòng tin, khiến khách hàng quay lưng và rất tốn kém để khắc phục. Một số công ty và nhiều nhà phát triển có xu hướng ngụy biện Không được phát minh ở đây, nhưng băm mật khẩu có lẽ là điều tồi tệ nhất bạn có thể chọn để thực hiện lại.  

Quan trọng nhất,bạn sẽ không biết khi nào thuật toán của mình bị hỏng.  

Các thuật toán và triển khai đã thiết lập được hưởng lợi từnhiều năm thử nghiệm và hoàn thiệnbởi các cộng đồng lớn gồm các chuyên gia mật mã, những người giúp phát hiện và khắc phục các lỗ hổng mà không có bất kỳ mục đích xấu nào.  

Vì thuật toán và/hoặc triển khai của riêng bạn sẽ không khả dụng cho bất kỳ ai có thiện chí, nên những kẻ tấn công sẽ là nhóm người duy nhất sẵn sàng bẻ khóa nó. Một khi họ làm như vậy, họ sẽ không đánh đầu bạn-lên; you'll only know when sensitive data of your users is compromised, and your business is in serious trouble. 

Nhưng nếu bạnthực sựmuốn cải thiện mật mã của mình và học hỏi bằng cách thực hành thì sao? 

Chủ Đề