AES là một mật mã khối và cần một phương thức hoạt động như CBC, CTR, v.v.
Mặc dù các chế độ phát trực tuyến như CFB, OFB và CTR không yêu cầu đệm, chế độ hoạt động của CBC và ECB yêu cầu đệm.
Trong chế độ CBC, phần đệm thông thường là PKCS#7 đệm lót. Đối với mã hóa CBC, thông báo được chia thành các khối 128 bit và phần đệm được áp dụng vào khối cuối cùng. Có thể có hai trường hợp;
Tin nhắn đã bỏ lỡ một số byte; trong trường hợp này, hãy để $n$ là số byte bị thiếu, sau đó là số $n$ được thêm vào $n$ lần dưới dạng byte.
[Số byte tin nhắn ][01] // 1 byte bị thiếu
[Số byte tin nhắn ][0202] // 2 byte bị thiếu
[Số byte tin nhắn] [030303] // 3 byte bị thiếu
....
[MB][0F0F0F...0F0F0F0F] // 15 byte bị thiếu
Thông báo là bội số của 16 byte, điều này có nghĩa là khối cuối cùng đã đầy. Trong trường hợp này, để phân biệt trường hợp này với trường hợp đầu tiên, chúng tôi thêm một khối mới chứa đầy 10
S. Do đó, chúng ta có thể có mặt trái của phần đệm. Người ta có thể thấy lý do là nếu khối cuối cùng có 01
như byte cuối cùng. Nó có đệm hay không? Vì vậy, thêm 01
loại bỏ sự mơ hồ này.
Phần trên có thể giải thích tại sao một tin nhắn trở thành bội số của 16 byte sau khi mã hóa CBC thích hợp.
Trong trường hợp của câu hỏi, 15 byte có thể trở thành 16 byte bằng cách thêm 01
như byte cuối cùng. Còn 16 byte còn lại thì sao?
Chế độ hoạt động của CBC cần 16 byte ngẫu nhiên và không thể đoán trước Vectơ khởi tạo (IV) để đạt được bảo mật Ind-CPA.
IV là một trong những yêu cầu để giải mã khối đầu tiên ngoài khóa ( khóa, IV và $C_0$ bắt buộc);
$$P_0 = \operatorname{AES-DEC}(key,C_0) \oplus IV$$
Do đó, IV cũng phải được thêm/chuyển. Trong thực tế thông thường, IV được thêm vào bản mã.
Nếu IV không được lưu trữ/chuyển giao thì sao? Chà, bạn sẽ chỉ mất khối đầu tiên của tin nhắn, phần còn lại có thể được giải mã đúng cách kể từ đó;
$$P_i = \operatorname{AES-DEC}(key,C_i) \oplus C_{i-1}, \quad i \geq 1$$
CMS
Các CMS yêu cầu
Trường tham số AlgorithmIdentifier PHẢI có mặt và
trường tham số PHẢI chứa AES-IV:
AES-IV ::= CHUỖI OCTET (KÍCH THƯỚC(16))
IV được lưu trữ trong Mã định danh thuật toán
lĩnh vực, không phải trong nội dung được mã hóa
Như dave đã viết nó là -nhị phân
số báo.
tùy chọn OpenSSL -k
IV và Khóa được lấy từ phương pháp dẫn xuất khóa bằng cách sử dụng mật khẩu của người dùng và muối ngẫu nhiên 8 byte. IV không được chuẩn bị trước.
Đầu tiên OpenSSL xuất ra từ kỳ diệu muối__
sau đó muối 8 byte rồi bản mã vào tệp. Bây giờ kích thước đầu ra là kích thước ma thuật của bạn + kích thước muối + kích thước bản mã