2010-09-10 140 views
18

Từ đọc sách của tôi Tôi không chắc liệu AES có phải là một thuật toán chuẩn hóa duy nhất có thể hoạt động với các khóa độ dài khác nhau hoặc một họ thuật toán tương tự không? Những gì tôi có nghĩa là nếu tôi tìm thấy bất kỳ 2 triển khai AES lấy một khóa 128-bit, tôi có nên tự tin họ sẽ làm việc giống nhau (chặn lỗi)?Mã hóa AES và C#

Cụ thể trong .Net/C#, tôi đã nhầm lẫn lý do tại sao có hai triển khai lớp cơ sở trừu tượng System.Security.Cryptography.Aes: System.Security.Cryptography.AesCryptoServiceProvider & System.Security.Cryptography.AesManaged.

Sau đó, dường như có sự khác biệt/chồng chéo giữa AES và Rijndael, NET có RijndaelRijndaelManaged lớp học, cũng như RijndaelManagedTransform

Có gì khác biệt giữa tất cả các? Tôi nhận thấy các lớp AES dường như chỉ tồn tại từ .NET 3.5 trong khi Rijndael đã tồn tại từ 1.0

Xin lỗi nếu đây là câu hỏi ngớ ngẩn, tôi mới sử dụng mật mã khác với các chức năng băm an toàn.

Trả lời

27

AES, Chuẩn mã hóa nâng cao, được định nghĩa trong FIPS PUB 197 ba mật mã khối đối xứng: AES-128, AES-192 và AES-256. Tất cả ba thuật toán được định nghĩa bởi các tham số-lựa chọn cụ thể cho thuật toán Rijndael.

Mã hóa AES-128 là một hàm (khóa, dữ liệu) -> (mã hóa). Mã hóa Rijndael là một hàm (khóa, dữ liệu, kích thước khối, khóa) -> (mã hóa).

AesCryptoServiceProvider sử dụng Windows CryptoAPI cơ bản để thực hiện mã hóa. AesManaged thực hiện mã hóa trong mã được quản lý thuần túy. RijndaelManaged hỗ trợ đầy đủ các tham số-lựa chọn (cũng trong mã được quản lý thuần túy).

Ưu điểm khi sử dụng AesCryptoServiceProvider bao gồm tiềm năng cho tốc độ cao hơn và thực tế là CryptoAPI được chứng nhận FIPS (trên các phiên bản Windows nhất định).

Ưu điểm đối với AesManaged bao gồm tính di động (AesCryptoServiceProvider không được hỗ trợ trên tất cả các phiên bản của Windows).

Lợi thế duy nhất cho RijndaelManaged là nó được hỗ trợ trong các phiên bản đầu của khung công tác .NET - Tôi chưa bao giờ thấy bất kỳ ai sử dụng tham số-lựa chọn không phải AES.

+0

Như đã đề cập ở trên về chứng nhận FIPS, AesCryptoServiceProvider sẽ làm việc trong các tình huống mà ứng dụng .NET đang chạy trên PC được cấu hình với Chính sách bảo mật cục bộ của "Sử dụng thuật toán tuân thủ FIPS". AesManaged sẽ không. Ví dụ: một ứng dụng chạy trên PC Windows 10 được cấu hình cho Chính phủ Hoa Kỳ sẽ có cài đặt này và sẽ loại trừ trường hợp không sử dụng AesManged (Thông báo Lỗi: Triển khai này không phải là một phần của thuật toán mật mã được xác thực của Windows Platform FIPS) . –

0

Xin lưu ý rằng các chức năng này không được hỗ trợ trên XP (thậm chí không XP SP3), vì vậy nếu hỗ trợ XP là điều quan trọng, bạn không nên sử dụng chúng

+0

Làm cái nào? Ngay cả 'Rijndael' trong .NET 1.0? Và tại sao họ không được hỗ trợ nếu họ ở trong khuôn khổ? –

+0

Bạn đã sai, AesCryptoServiceProvider hoạt động trên XP SP3. – wRAR

+0

Tôi biết AesCryptoServiceProvider nên hoạt động trên XP SP3, nhưng nó không kiểm tra của chúng tôi. – SamMeiers

3

Sau đây là từ trang MSDN AesCryptoServiceProvider.

Windows 7, Windows Vista SP1 hoặc mới hơn, Windows XP SP3, Windows Server 2008 (Server Core Role không được hỗ trợ), Windows Server 2008 R2 (Server Core Role không được hỗ trợ), Windows Server 2003 SP2

.NET Framework không hỗ trợ tất cả các phiên bản của mọi nền tảng. Để biết danh sách các phiên bản được hỗ trợ, xem .NET Framework System Requirements.

Vấn đề là tôi không thực sự thấy lý do tại sao nó không được hỗ trợ. .NET 3.5 thường được cài đặt trên Windows XP ngay bây giờ, nhưng có thể có điều gì đó về CLR trước XP SP3 có thể khác và ngăn điều này hoạt động đúng cách. Có thực sự không đủ thông tin trên trang MSDN để suy đoán ngay cả; Tuy nhiên.

Đối với câu hỏi của bạn, sự khác biệt (một lần nữa từ MSDN) giữa các lớp như sau:

AesManaged

Cung cấp thực hiện quản lý của thuật toán đối xứng Advanced Encryption Standard (AES) .

Thuật toán AES về bản chất là thuật toán đối xứng Rijndael với kích thước khối cố định và số lần lặp lại. Lớp này hoạt động giống như lớp RijndaelManaged nhưng giới hạn các khối thành 128 bit và không cho phép các chế độ phản hồi.

AesCryptoServiceProvider

Thực hiện mã hóa đối xứng và giải mã bằng cách sử dụng Lập trình giao diện (CAPI) thực hiện Cryptographic Ứng dụng của Advanced Encryption Standard (AES) thuật toán.

Aes

Đại diện cho lớp cơ sở trừu tượng mà từ đó mọi cài đặt của Advanced Encryption Standard (AES) phải kế thừa.

Tôi luôn bị mắc kẹt với việc triển khai CryptoServiceProvider vì họ luôn cung cấp cho tôi những gì tôi mong muốn. Điều duy nhất tôi đề nghị là nếu bạn muốn xem các lớp khác nhau có hoạt động khác nhau hay không là viết một số test và test đơn vị, và thực sự thấy nó hoạt động.

+0

Chỉ SP3 được đề cập trong "Nền tảng" chỉ vì bạn không thể cài đặt .NET 4 trên SP2. Bạn có thể chuyển sang phiên bản 3.5 của trang và đề cập đến SP2. – wRAR

Các vấn đề liên quan