Muối mật khẩu trong php là gì?

Trong mật mã, muối là dữ liệu ngẫu nhiên được sử dụng làm đầu vào bổ sung cho hàm một chiều băm dữ liệu, mật khẩu hoặc cụm mật khẩu. [1] Muối được sử dụng để bảo vệ mật khẩu trong kho lưu trữ. Trước đây, chỉ đầu ra từ một lệnh gọi hàm băm mật mã trên mật khẩu được lưu trữ trên hệ thống, nhưng theo thời gian, các biện pháp bảo vệ bổ sung đã được phát triển để bảo vệ chống lại các mật khẩu trùng lặp hoặc phổ biến có thể nhận dạng được (vì hàm băm của chúng giống hệt nhau). [2] Muối là một trong những biện pháp bảo vệ như vậy

Một loại muối mới được tạo ngẫu nhiên cho mỗi mật khẩu. Thông thường, muối và mật khẩu (hoặc phiên bản của nó sau khi kéo dài khóa) được nối và đưa vào hàm băm mật mã và giá trị băm đầu ra (chứ không phải mật khẩu gốc) được lưu trữ cùng với muối trong cơ sở dữ liệu. Băm cho phép xác thực sau này mà không cần giữ lại và do đó có nguy cơ bị lộ mật khẩu văn bản gốc nếu kho lưu trữ dữ liệu xác thực bị xâm phạm. Các muối không cần phải được mã hóa hoặc lưu trữ riêng biệt với mật khẩu được băm, bởi vì ngay cả khi kẻ tấn công có quyền truy cập vào cơ sở dữ liệu với các giá trị băm và muối, thì việc sử dụng đúng các muối nói trên sẽ cản trở các cuộc tấn công thông thường. [3]

Muối bảo vệ chống lại các cuộc tấn công sử dụng các bảng được tính toán trước (e. g. bảng cầu vồng),[4] vì chúng có thể làm cho kích thước của bảng cần thiết cho một cuộc tấn công thành công cực kỳ lớn mà không gây gánh nặng cho người dùng. [5] Vì các loại muối khác nhau nên chúng cũng bảo vệ yếu (e. g. mật khẩu thường được sử dụng, được sử dụng lại), vì các hàm băm muối khác nhau được tạo cho các phiên bản khác nhau của cùng một mật khẩu. [3]

Muối mật mã được sử dụng rộng rãi trong nhiều hệ thống máy tính hiện đại, từ thông tin đăng nhập hệ thống Unix đến bảo mật Internet

Các muối có liên quan chặt chẽ với khái niệm nonce mật mã

Ví dụ sử dụng[sửa]

Đây là một ví dụ không đầy đủ về giá trị muối để lưu trữ mật khẩu. Bảng đầu tiên này có hai kết hợp tên người dùng và mật khẩu. Mật khẩu không được lưu trữ

Tên người dùngMật khẩuuser1password123user2password123

Giá trị muối được tạo ngẫu nhiên và có thể có độ dài bất kỳ; . Giá trị muối được thêm vào mật khẩu văn bản gốc và sau đó kết quả được băm, được gọi là giá trị băm. Cả giá trị muối và giá trị băm đều được lưu trữ

Tên người dùng Giá trị muốiChuỗi được băm Giá trị băm = SHA256 (Mật khẩu + Giá trị muối)user1D;%yL9TS:5PalS/dpassword123D;%yL9TS:5PalS/d9C9B913EB1B6254F4737CE947EFD16F16E916F9D6EE5C1102A2002E48D4C88BDuser2)<,-*password1230password1231

Như bảng trên minh họa, các giá trị muối khác nhau sẽ tạo ra các giá trị băm hoàn toàn khác nhau, ngay cả khi mật khẩu văn bản gốc hoàn toàn giống nhau. Ngoài ra, các cuộc tấn công từ điển được giảm thiểu ở một mức độ nào đó vì kẻ tấn công thực tế không thể tính toán trước các giá trị băm. Tuy nhiên, một loại muối không thể bảo vệ các mật khẩu phổ biến hoặc dễ đoán

Nếu không có muối, giá trị băm sẽ giống nhau đối với tất cả người dùng có mật khẩu nhất định, giúp tin tặc dễ dàng đoán mật khẩu từ giá trị băm hơn

UsernameString được băm Giá trị băm = SHA256____0password1233password1234user2password1233password1234

Những lỗi thường gặp[sửa]

Tái sử dụng muối[sửa]

Sử dụng cùng một loại muối cho tất cả các mật khẩu là nguy hiểm vì một bảng được tính toán trước chỉ tính toán muối sẽ khiến muối trở nên vô dụng

Việc tạo các bảng được tính toán trước cho cơ sở dữ liệu với các muối duy nhất cho mỗi mật khẩu là không khả thi do chi phí tính toán để làm như vậy. Tuy nhiên, nếu một loại muối thông thường được sử dụng cho tất cả các mục, thì việc tạo một bảng như vậy (có tính đến muối) thì sẽ trở thành một cuộc tấn công khả thi và có thể thành công. [6]

Vì việc sử dụng lại muối có thể khiến những người dùng có cùng mật khẩu có cùng một hàm băm, nên việc bẻ khóa một hàm băm có thể dẫn đến các mật khẩu khác cũng bị xâm phạm

Muối ngắn[sửa]

Nếu một loại muối quá ngắn, kẻ tấn công có thể tính toán trước một bảng gồm mọi loại muối có thể được thêm vào mọi mật khẩu có khả năng. Sử dụng một muối dài đảm bảo một cái bàn như vậy sẽ rất lớn. [7][8]

Lợi ích[sửa]

Để hiểu sự khác biệt giữa việc bẻ khóa một mật khẩu và một bộ mật khẩu, hãy xem xét một tệp có người dùng và mật khẩu được băm của họ. Nói rằng tập tin không được ướp muối. Sau đó, kẻ tấn công có thể chọn một chuỗi, gọi nó là password1238, rồi tính toán password1239. Người dùng có hàm băm được lưu trữ trong tệp là password1239 có thể có hoặc không có lần thử mật khẩu[0]. Tuy nhiên, ngay cả khi password1238 không phải là mật khẩu thực của người dùng, thì mật khẩu đó vẫn được chấp nhận vì hệ thống chỉ có thể kiểm tra mật khẩu bằng cách tính toán hàm băm của mật khẩu đã nhập và so sánh nó với hàm băm được lưu trữ trong tệp. Do đó, mỗi trận đấu bẻ khóa một mật khẩu người dùng và cơ hội trùng khớp tăng lên với số lượng mật khẩu trong tệp. Ngược lại, nếu sử dụng muối, kẻ tấn công sẽ phải tính toán user22, so sánh với mục A, sau đó là user23, so sánh với mục B, v.v. Điều này ngăn chặn bất kỳ nỗ lực bẻ khóa nhiều mật khẩu nào, với điều kiện là tránh sử dụng lại muối. [9]

Các loại muối cũng chống lại việc sử dụng các bảng được tính toán trước để bẻ khóa mật khẩu. [10] Một bảng như vậy có thể chỉ đơn giản là ánh xạ các mật khẩu phổ biến tới giá trị băm của chúng hoặc nó có thể thực hiện điều gì đó phức tạp hơn, chẳng hạn như lưu trữ điểm bắt đầu và điểm kết thúc của một tập hợp các chuỗi băm được tính toán trước. Trong cả hai trường hợp, việc tạo muối có thể chống lại việc sử dụng các bảng được tính toán trước bằng cách kéo dài các giá trị băm và để chúng được rút ra từ các bộ ký tự lớn hơn, khiến cho bảng ít có khả năng bao gồm các giá trị băm kết quả hơn. Cụ thể, một bảng được tính toán trước sẽ cần bao gồm chuỗi user24 thay vì chỉ đơn giản là user25

Hệ thống mật khẩu bóng tối hiện đại, trong đó hàm băm mật khẩu và dữ liệu bảo mật khác được lưu trữ trong một tệp không công khai, phần nào giảm thiểu những lo ngại này. Tuy nhiên, chúng vẫn có liên quan trong cài đặt nhiều máy chủ sử dụng hệ thống quản lý mật khẩu tập trung để đẩy mật khẩu hoặc hàm băm mật khẩu vào nhiều hệ thống. Trong các cài đặt như vậy, tài khoản gốc trên mỗi hệ thống riêng lẻ có thể được coi là kém tin cậy hơn so với quản trị viên của hệ thống mật khẩu tập trung, do đó, vẫn đáng để đảm bảo rằng tính bảo mật của thuật toán băm mật khẩu, bao gồm cả việc tạo các giá trị muối duy nhất, là . [cần dẫn nguồn]

Một lợi ích khác (kém hơn) của muối như sau. hai người dùng có thể chọn cùng một chuỗi làm mật khẩu của họ. Nếu không có muối, mật khẩu này sẽ được lưu dưới dạng chuỗi băm giống nhau trong tệp mật khẩu. Điều này sẽ tiết lộ thực tế là hai tài khoản có cùng một mật khẩu, cho phép bất kỳ ai biết một trong các mật khẩu của tài khoản này đều có thể truy cập vào tài khoản kia. Bằng cách tạo mật khẩu bằng hai ký tự ngẫu nhiên, ngay cả khi hai tài khoản sử dụng cùng một mật khẩu, không ai có thể phát hiện ra điều này chỉ bằng cách đọc các giá trị băm. Việc tạo muối cũng khiến việc xác định xem một người có sử dụng cùng một mật khẩu cho nhiều hệ thống trở nên cực kỳ khó khăn hay không. [11]

Triển khai Unix[sửa]

Những năm 1970–1980[sửa | sửa mã nguồn]

Các phiên bản trước của Unix đã sử dụng tệp mật khẩu user26 để lưu trữ các giá trị băm của mật khẩu có muối (mật khẩu có tiền tố là muối ngẫu nhiên gồm hai ký tự). Trong các phiên bản Unix cũ hơn này, muối cũng được lưu trữ trong tệp mật khẩu (dưới dạng văn bản rõ ràng) cùng với hàm băm của mật khẩu được tạo muối. Tệp mật khẩu có thể đọc được công khai đối với tất cả người dùng của hệ thống. Điều này là cần thiết để các công cụ phần mềm đặc quyền của người dùng có thể tìm thấy tên người dùng và thông tin khác. Do đó, tính bảo mật của mật khẩu chỉ được bảo vệ bởi các chức năng một chiều (mã hóa hoặc băm) được sử dụng cho mục đích. Việc triển khai Unix ban đầu đã giới hạn mật khẩu ở tám ký tự và sử dụng muối 12 bit, cho phép 4.096 giá trị muối có thể. [12] Đây là một sự cân bằng thích hợp cho những năm 1970 chi phí tính toán và lưu trữ. [13]

Hệ thống mật khẩu bóng tối được sử dụng để hạn chế quyền truy cập vào hàm băm và muối. Muối là tám ký tự, hàm băm là 86 ký tự và độ dài mật khẩu là không giới hạn

Ứng dụng web thường lưu trữ trong cơ sở dữ liệu giá trị băm của mật khẩu người dùng. Nếu không có muối, một cuộc tấn công SQL injection thành công có thể mang lại mật khẩu dễ bẻ khóa. Vì nhiều người dùng sử dụng lại mật khẩu cho nhiều trang web nên việc sử dụng muối là một thành phần quan trọng trong bảo mật ứng dụng web tổng thể. [14] Một số tài liệu tham khảo bổ sung về việc sử dụng muối để bảo mật mật khẩu băm trong các ngôn ngữ hoặc thư viện cụ thể (PHP, the. NET, v.v. ) có thể được tìm thấy trong phần liên kết ngoài bên dưới

Muối mật khẩu có nghĩa là gì?

Tạo muối mật khẩu là một kỹ thuật để bảo vệ mật khẩu được lưu trữ trong cơ sở dữ liệu bằng cách thêm một chuỗi gồm 32 ký tự trở lên rồi băm chúng . Salting ngăn chặn tin tặc xâm phạm môi trường doanh nghiệp từ kỹ thuật đảo ngược mật khẩu và đánh cắp chúng từ cơ sở dữ liệu.

Mật khẩu muối và băm là gì?

Băm là quy trình một chiều giúp chuyển đổi mật khẩu thành bản mã bằng thuật toán băm. Không thể giải mã mật khẩu đã băm nhưng tin tặc có thể cố gắng đảo ngược mật khẩu đó. Tạo muối mật khẩu thêm các ký tự ngẫu nhiên trước hoặc sau mật khẩu trước khi băm để làm xáo trộn mật khẩu thực .

Mật khẩu muối và hạt tiêu là gì?

Hạt tiêu mật khẩu là gì? . Nó có thể được coi là muối thứ hai — một đầu vào khác để thay đổi hoàn toàn kết quả băm. Tuy nhiên, không giống như một loại muối, nó không được lưu trữ trong cơ sở dữ liệu cùng với các giá trị băm. A pepper is a secret value added to a password before hashing. It can be considered a second salt — another input to change the hash outcome completely. Yet, unlike a salt, it's not stored in the database along with the hashes.

Muối tốt cho mật khẩu là gì?

Đề xuất cổ điển về muối để băm mật khẩu là. Một giá trị ngẫu nhiên từ 128 bit trở lên ; . e. không sử dụng lại cùng một loại muối, hãy tạo một loại muối mới cho mỗi mật khẩu mới);