Phần đệm PKCS#7 được định nghĩa trong rfc5652#phần-6.3
Một số thuật toán mã hóa nội dung giả sử độ dài đầu vào là một
bội số của k octet, trong đó k lớn hơn một. Đối với như vậy
các thuật toán, đầu vào sẽ được đệm ở cuối dấu với
k-(lth mod k) tất cả các octet có giá trị k-(lth mod k), trong đó lth là
chiều dài của đầu vào. Nói cách khác, đầu vào được đệm tại
kết thúc bằng một trong các chuỗi sau:
01 -- nếu lth mod k = k-1
02 02 -- nếu lth mod k = k-2
.
.
.
k k ... k k -- nếu lth mod k = 0
Như chúng ta có thể thấy, các byte đệm có thể chứa một loạt01,02,...,
hoặc,16
cho mật mã khối có kích thước 16 byte. Trong khi đang đọc
Tôi đã thấy rằng họ đã đưa ra một ví dụ như;
Khối thứ hai chứa 9 byte HMAC còn lại và 7
byte đệm 0x06
, xem Hình 1. Lưu ý rằng bộ mã hóa cũng có thể chọn phần đệm dài hơn và nối thêm 23, 39, ...hoặc 247 byte đệm (đồng thời thiết lập giá trị của các byte đệm tương ứng).
Đây không phải là phần đệm PKCS#7. Vì vậy, tôi đã xem TLS 1.2's RFC 5246 và xem gần như cùng một mô hình;
Nếu chiều dài đệm là tối thiểu cần thiết, 6, thì đệm sẽ là 6
byte, mỗi byte chứa giá trị 6. Do đó, 8 octet cuối cùng của
GenericBlockCipher trước mã hóa khối sẽ là xx 06 06 06 06 06
06 06, trong đó xx là octet cuối cùng của MAC.
Để tương thích với phần đệm PKCS#7, phần trên phải là ( could not see an lỗi lầm)
Nếu chiều dài đệm là tối thiểu cần thiết, 7, thì đệm sẽ là 7
byte, mỗi byte chứa giá trị 7. Như vậy, 8 octet cuối cùng của
GenericBlockCipher trước mã hóa khối sẽ là xx 07 07 07 07 07
07 07, trong đó xx là octet cuối cùng của MAC.
và bài báo cũng có lỗi ở đó.
Theo như tôi biết, hai tài nguyên này là không chính xác. Có điều gì mà tôi đã bỏ lỡ về các thiết kế/cách sử dụng khác nhau của quy tắc đệm PKCS#7 không?