Các phương thức mã hóa trong PHP

Sự khác nhau giữa chức năng unlink và unset - Unlink dùng để xóa file sử dụng trong ngữ cảnh

Giải thích cách chèn javascript vào mã php - JavaScript có thể được chèn bằng cách chỉ định ngôn ngữ là

Cập nhật hệ thống quản lý người dùng của tôi đã nằm trong danh sách việc cần làm của tôi từ lâu. Một trong những lý do chính là hệ thống mã hóa. Tôi đã tạo phiên bản hiện tại nhiều năm trước với PHP 5. 5. Vào thời điểm đó, sử dụng mcrypt đã được khuyến nghị trên internet. Tuy nhiên, kể từ đó mcrypt không còn được dùng nữa và đã bị xóa trong PHP 7. 2. Vì mã hóa là cần thiết đối với hệ thống và rất khó thay đổi sau thực tế, tôi đã dành vài giờ để đọc các phương pháp hay nhất hiện tại về mã hóa đối xứng trong PHP và kết thúc với AES 256 GCM

Ảnh của Markus Winkler trên Bapt

AES

Trong phiên bản dựa trên mcrypt cũ, tôi đã sử dụng Rijndael 128 CBC. AES là một tập hợp con của Rijndael và đôi khi tên được sử dụng thay thế cho nhau. AES luôn có kích thước khối là 128 và chỉ hỗ trợ các khóa 128, 192 và 256 bit, trong khi Rijndael được xác định cho tất cả các kích thước khối và khóa từ 128 đến 256 với gia số 32 bit. Đúng như tên gọi Tiêu chuẩn mã hóa nâng cao gợi ý, AES là phương pháp mã hóa tiêu chuẩn cho nhiều tổ chức và công ty. AES 192 và 256 cũng được sử dụng cho các tài liệu có mức độ bảo mật cao nhất ở Hoa Kỳ. Có một vài cuộc tấn công lý thuyết vào AES, nhưng không có cuộc tấn công nào là thực tế với phần cứng hiện tại. Do tính bảo mật cao và hỗ trợ rộng rãi, AES là lựa chọn hợp lý cho thuật toán mã hóa

GCM so với CBC

Thay đổi lớn nhất trong phương thức mã hóa mới là chuyển từ CBC sang GCM. CBC và GCM là các chế độ khác nhau trong thuật toán AES. CBC đã được phát minh vào những năm 70 và kể từ đó, một vài cuộc tấn công lý thuyết vào nó đã được phát hiện. Tùy thuộc vào tình huống, nó vẫn đủ an toàn trong hầu hết các trường hợp, nhưng ngày nay GCM được khuyến nghị. GCM được xuất bản năm 2004 và được coi là an toàn hơn rất nhiều. Nó cũng có kiểm tra xác thực tích hợp, có nghĩa là tính toàn vẹn của tin nhắn có thể được xác nhận

Một ưu điểm khác là trong GCM, quá trình mã hóa và giải mã có thể được song song hóa, trong khi chỉ có quá trình giải mã là có thể thực hiện song song trong CBC. Điều này có nghĩa là việc mã hóa các tệp lớn có thể nhanh hơn rất nhiều trên các CPU đa lõi, mặc dù tôi nghi ngờ việc triển khai PHP OpenSSL sử dụng nó, tôi cũng không cần nó cho các kích thước thư nhỏ mà tôi có

Sự khác biệt lớn nhất giữa hai loại này là các yêu cầu đối với vectơ khởi tạo [IV]. CBC yêu cầu IV ngẫu nhiên mạnh và yếu hơn nếu sử dụng thuật toán ngẫu nhiên phụ. GCM không cần ngẫu nhiên hóa IV nhưng có vấn đề bảo mật lớn nếu cùng một IV được sử dụng hai lần với cùng một khóa. Trên thực tế, có thể sử dụng bộ đếm gia tăng cho IV nếu bạn muốn. Vì tôi dự định sử dụng hệ thống mã hóa cho các trang web và ứng dụng khác nhau nên việc theo dõi bộ đếm kết hợp cho tất cả chúng rất khó. Tuy nhiên, vẫn có thể sử dụng IV ngẫu nhiên cho GCM miễn là cùng một khóa không được sử dụng quá nhiều lần. Độ dài IV cho AES 256 GCM là 96 bit, hơi ngắn nhưng vẫn có 2⁹⁶ khả năng. Để đảm bảo an toàn, chỉ nên sử dụng khóa khoảng một tỷ lần trước khi chuyển đổi. Tôi thậm chí sẽ không đến gần với điều đó bất cứ lúc nào sớm, vì vậy nó hoàn toàn ổn. Tất nhiên, có một khả năng rất nhỏ là cùng một IV ngẫu nhiên được chọn trước đó, nhưng tại thời điểm đó, bạn không cần sử dụng mã hóa, bởi vì khả năng tin tặc đoán đúng khóa cũng rất thấp.

Độ dài phím

Tôi cũng đã sử dụng độ dài khóa cao hơn là 256 bit trong mã hóa OpenSSL mới so với 128 bit trong phiên bản mcrypt. Các khóa 128 bit vẫn đủ an toàn, đặc biệt khi được sử dụng với tính năng bảo mật bổ sung của GCM. Nhiều công ty sử dụng AES 128 GCM vì tốc độ cao hơn so với AES 256 GCM. Tuy nhiên, tôi không muốn cập nhật lại hệ thống và tôi chỉ có một vài người dùng nên hiệu suất máy chủ không phải là vấn đề đáng lo ngại. Vì vậy, tôi cũng có thể sử dụng phiên bản an toàn hơn

Ngoài ra, chỉ một tập hợp con nhỏ dữ liệu của tôi được mã hóa, tôi không lưu trữ bất kỳ thông tin nhạy cảm nào và tôi không thực sự là mục tiêu của tin tặc, vì vậy việc sử dụng AES 256 GCM có thể là quá mức cần thiết, nhưng tôi cũng không thể bị tổn thương

Thực hiện

Không có gì đặc biệt về việc thực hiện. Không giống như CBC, GCM tạo thẻ ủy quyền trên mã hóa cần được cung cấp cho chức năng giải mã, nhưng giống như IV, nó không cần phải bí mật nên nó được thêm vào kết quả. Một thay đổi so với phiên bản mcrypt là việc sử dụng mã hóa base64. Tôi đã không sử dụng nó trước đây và chỉ lưu trữ dữ liệu nhị phân trong cơ sở dữ liệu, nhưng bất cứ khi nào tôi phải xem cơ sở dữ liệu thì định dạng hoàn toàn rối tung. Mặt khác, văn bản được mã hóa Base64 có thể đọc được bằng con người và làm cho cơ sở dữ liệu đẹp hơn khi nhìn vào. Nó sử dụng nhiều dung lượng lưu trữ hơn một chút, nhưng tôi không sử dụng mã hóa cho nhiều dữ liệu vào lúc này, vì vậy đây chỉ là một vấn đề nhỏ

Sau khi nghiên cứu các phương pháp mã hóa tốt nhất hiện tại trong PHP, tôi đã sử dụng AES 256 GCM. Đây là tiêu chuẩn mã hóa cao nhất và được sử dụng cho các tài liệu tuyệt mật của chính phủ. Nó gần như chắc chắn là quá mức cần thiết cho các trường hợp sử dụng của tôi, nhưng những gì đủ tốt cho CIA có thể chỉ đủ tốt để mã hóa số tiền tôi đã chi cho cửa hàng tạp hóa mỗi tuần

Kỹ thuật mã hóa trong PHP là gì?

PHP bao gồm thuật toán băm để mã hóa mật khẩu. Phần lớn nó được sử dụng trong các chức năng mã hóa mật khẩu là crypt[], password_hash[] và md5[] .

Mã hóa nào là tốt nhất cho PHP?

Mã hóa khóa bí mật [hay còn gọi là mã hóa đối xứng] sử dụng một khóa duy nhất để mã hóa và giải mã dữ liệu. Trước đây, PHP dựa vào mcrypt và openssl để mã hóa khóa bí mật. PHP7. 2 giới thiệu Natri, hiện đại hơn và được coi là an toàn hơn.

Ba 3 phương pháp mã hóa khác nhau là gì?

Ba loại mã hóa chính là DES, AES và RSA. .
AES-128 mã hóa các khối có kích thước 128 bit
AES-192 mã hóa các khối có kích thước 192 bit
AES-256 mã hóa các khối có kích thước 256 bit

Các phương pháp mã hóa khác nhau là gì?

Có hai loại mã hóa được sử dụng rộng rãi hiện nay. mã hóa đối xứng và bất đối xứng . Tên bắt nguồn từ việc có hay không cùng một khóa được sử dụng để mã hóa và giải mã.

Chủ Đề