Bạn đặt một số câu hỏi tại đây, vì vậy tôi sẽ giải quyết chúng tương tự như đã nêu ở trên:
Được hỗ trợ trong mcrypt()?
Không, mcrypt không hỗ trợ mã hóa AES. Nó, tuy nhiên, hỗ trợ Rijndael (phát âm như 'mưa-búp bê'), đó là thuật toán cơ sở cho AES. AES được định nghĩa là một tập hợp các thông số cụ thể cho Rijndael, vì vậy bạn có thể sử dụng các tham số thích hợp để phù hợp với AES, nhưng chế độ GCM không có sẵn.
Dường như GCM là con đường để đảm bảo an ninh cũng như hiệu suất (tôi thấy số liệu hiệu suất rất ấn tượng). Cảm giác của tôi là , chúng tôi cần điều này nhưng tôi không thể tìm thấy bất kỳ ví dụ nào.
Thật không may, đây là cách sai để chọn lựa một mô hình hoặc triển khai bảo mật. Các thuật toán và chế độ mã hóa khác nhau có cách sử dụng khác nhau và áp dụng chế độ sai, ví dụ, có thể khiến ứng dụng của bạn dễ bị tấn công ngay cả khi bạn đang sử dụng một mật mã mạnh như AES. GCM bị tắt tiếng rất tốt vì chế độ này cung cấp mã hóa và xác thực trong một lần chụp. Không phải tất cả các ứng dụng đều cần cả hai hoặc có thể sử dụng chúng theo cách làm suy yếu sức mạnh thiết kế của chúng. Bạn sẽ cần phải làm bài tập ở nhà của bạn để đảm bảo đây là chế độ chính xác để sử dụng cho ứng dụng của bạn và các thông số tối thiểu hiện tại để sử dụng là gì.
Trừ khi bạn là một chuyên gia bảo mật, bạn tốt hơn nhiều bằng cách sử dụng một khuôn khổ đã được chứng minh. Nó không bao giờ là một ý tưởng tốt để thực hiện mã hóa của riêng bạn hoặc quản lý an ninh bởi vì nó rất dễ dàng để làm cho những sai lầm có thể để bạn mở rộng để tấn công đơn giản. Tùy chọn tốt nhất là tìm một khung công tác nguồn mở, đã được chứng minh và thử nghiệm, thực hiện những gì bạn muốn thực hiện và cấu hình cẩn thận nó cho phù hợp với nhu cầu của bạn. Sau đó, nó là chìa khóa để giữ cho khuôn khổ vá và cập nhật.
Vì bạn đề cập đến thống kê hiệu suất cho AES-GCM, có, nó hoạt động rất tốt trên các CPU hiện đại (i7 và mới hơn), có hỗ trợ phần cứng được thiết kế đặc biệt để tăng tốc các thao tác cần thiết. Nếu máy chủ hoặc khách hàng của bạn không có khả năng tăng tốc phần cứng, AES-GCM sẽ chậm hơn nhiều. Ngoài hỗ trợ phần cứng thực tế, thư viện phần mềm bạn sử dụng là chìa khóa, bởi vì nó sẽ cần phải gọi phần cứng cần thiết để tận dụng lợi thế của tốc độ tăng lên.
Tôi biết nó được OpenSSL hỗ trợ.
OpenSSL là một trong những thư viện đó mà thực hiện AES-GCM và nó tận dụng lợi thế nếu AES-NI (phần cứng công nghệ tăng tốc) khi có sẵn.
Tin xấu là các phần mở rộng PHP hiện nay (đầu tháng 2 năm 2015) không hỗ trợ thư viện cụ thể mà thực hiện AES-GCM. Sự vội vàng sử dụng GCM bắt nguồn từ các lỗ hổng gần đây được tìm thấy trong giao thức SSL, điều này cuối cùng buộc tất cả mọi người phải di chuyển sang TLS và đến chế độ mã hóa có xác thực. Mặc dù các chuyên gia bảo mật đã thúc đẩy một động thái như vậy trong nhiều năm, cả hai máy chủ và các nhà sản xuất trình duyệt đều đã kéo chân của họ chờ đợi nhau để thực hiện các bước đầu tiên hướng tới Mã hóa được xác thực. Chúng tôi cuối cùng cũng bắt đầu thấy chuyển động đúng hướng.
Tôi tin rằng vào cuối năm nay chúng tôi sẽ cuối cùng có AES-GCM trong PHP, nhưng bây giờ nó không phải là tự do sẵn có.
Một số nguồn thông tin: http://wiki.openssl.org/index.php/EVP_Authenticated_Encryption_and_Decryption Hiển thị thư viện EVP. Triển khai cấp cao AES-GCM tận dụng lợi thế của AES-NI
http://phpaes.com Triển khai AES cho PHP. Tôi không biết nếu họ đã được kiểm tra đúng cách, hoặc nếu họ sử dụng tăng tốc phần cứng. Họ không cung cấp GCM, nhưng nó có thể là một công cụ học tập tốt.
Xin lỗi, nhưng GCM không làm việc với PHP. Nếu bạn cần một chế độ AEAD, hãy xem [libsodium] (https://github.com/jedisct1/libsodium-php). –
Cảm ơn bạn. Tôi đã làm gió lên bằng cách sử dụng libsodium trong mã của tôi. Nó rất thẳng về phía trước. – xendi