Điểm:1

Bảo mật của đệm PKCS7

lá cờ us

Tôi vừa thiết kế chức năng đệm của riêng mình và phát hiện ra một vấn đề tiềm ẩn có thể gây hại cho tính bảo mật của mã hóa. Sau khi khắc phục lỗ hổng đó, tôi phát hiện ra rằng phần đệm tiêu chuẩn PKCS7 cũng dễ bị tấn công bằng văn bản gốc đã biết. Xin vui lòng sửa cho tôi nếu tôi sai tại bất kỳ điểm nào.

PKCS7 đang lấp đầy từng byte được đệm bằng tổng số byte được đệm. Mỗi lần, ít nhất một byte đệm được thêm vào, trong trường hợp xấu nhất là toàn bộ khối. Khi tôi đang vận hành một mật mã ở chế độ sổ mã điện tử, khối cuối cùng có thể dễ dàng đoán được đối với một cuộc tấn công bằng văn bản rõ đã biết. (Trong 1 trên 16 trường hợp [kích thước khối], ngay lập tức) Ví dụ đệm được hiển thị bên dưới.

53 65 63 72 65 74 20 74 65 78 74 2e --> 53 65 63 72 65 74 20 74 65 78 74 2e 04 04 04 04

Tôi cho rằng việc lấp đầy tất cả các byte được đệm bằng vô nghĩa ngẫu nhiên và byte cuối cùng với số lượng byte được đệm sẽ an toàn hơn nhiều. Tại sao đó không phải là trường hợp trong một tiêu chuẩn đệm được phân phối rộng rãi như vậy? Chẳng phải ví dụ dưới đây an toàn hơn sao?

53 65 63 72 65 74 20 74 65 78 74 2e --> 53 65 63 72 65 74 20 74 65 78 74 2e 5a 2c 12 04

Cảm ơn trước.

kelalaka avatar
lá cờ in
Giả mạo phần đệm, hãy sử dụng các chế độ dựa trên PRF như CTR và đừng bao giờ quên rằng CBC bảo mật IND-CPA giống như chế độ CTR. Vì vậy, không có cuộc tấn công nào là khả thi. `CPA = Tấn công bản rõ được chọn`
Luqus avatar
lá cờ us
Cảm ơn bạn đã trả lời, nhưng nếu tôi đặc biệt sử dụng ECB thì có rủi ro bảo mật hay không? Ví dụ: trong triển khai tiêu chuẩn trong Java cho ECB với AES, bạn có thể **chỉ** chọn PKCS5 làm thuật toán đệm có cùng điểm yếu. Tôi tự hỏi tại sao điều này được thực hiện theo mặc định, mặc dù nó gây ra rủi ro bảo mật (không phụ thuộc vào chính ECB).
Paul Uszak avatar
lá cờ cn
Bạn đã cân nhắc thêm một số dạng MAC/HMAC chưa? Điều đó giúp với bảo mật đệm.
kelalaka avatar
lá cờ in
Nếu bạn đang sử dụng ECB, bạn đã đi sai hướng. ECB tồn tại để tương thích ngược và cho những người biết họ đang làm gì. BẠN có thể sử dụng `ECB/nopadding` và áp dụng phần đệm của mình. Phần đệm của bạn chỉ giúp bạn nếu bạn chỉ có một khối có thể loại bỏ sự bình đẳng, nếu bạn có nhiều hơn 1 khối, điều đó không giúp được gì cả.
Luqus avatar
lá cờ us
Tôi rõ ràng về nhiều nhược điểm của ECB, đừng lo lắng. Nhưng hãy tưởng tượng một tình huống mà bạn buộc phải sử dụng ECB vì bất kỳ lý do gì. Ngoài ra, tôi biết về `NoPadding` trong Java, nhưng bạn không phải tự triển khai Padding khi sử dụng phần đệm được triển khai **chỉ** `PKCS5`. Tại sao không có triển khai _tiêu chuẩn_ khác?
kelalaka avatar
lá cờ in
Bởi vì không ai sử dụng nó. hơn nhiều năm trước, tôi đã sử dụng phần đệm như vậy cho dự án của mình. đệm là bạn của bạn để thực hiện đệm như vậy
Điểm:2
lá cờ in

Tôi cho rằng việc lấp đầy tất cả các byte được đệm bằng vô nghĩa ngẫu nhiên và byte cuối cùng với số lượng byte được đệm sẽ an toàn hơn nhiều. Tại sao đó không phải là trường hợp trong một tiêu chuẩn đệm được phân phối rộng rãi như vậy? Chẳng phải ví dụ dưới đây an toàn hơn sao?

53 65 63 72 65 74 20 74 65 78 74 2e --> 53 65 63 72 65 74 20 74 65 78 74 2e 5a 2c 12 04

Điều này về cơ bản được gọi là phần đệm ISO 10126, tương thích với phần đệm ANSI X9.23.

Trước hết, cần lưu ý rằng các cuộc tấn công tiên tri đệm chỉ là một phần của tập hợp rộng hơn các cuộc tấn công tiên tri văn bản rõ.Vì vậy, nếu bản rõ được giải mã có thể tạo ra bất kỳ lỗi nào, thì các vấn đề tương tự có thể xuất hiện khi hệ thống đang cố gắng áp dụng bản rõ. Ví dụ, thật dễ dàng để tạo một tấn công oracle văn bản gốc sử dụng lỗi của bộ giải mã XML. Thậm chí dễ dàng hơn: nếu các khối văn bản gốc bao gồm phần đệm từ phía bên tay trái, thì rõ ràng nó cũng sẽ thất bại trước một cuộc tấn công tiên tri phần đệm.

Thứ hai, một bản mã bây giờ sẽ được chấp nhận (tức là không tạo ra lỗi đệm) 1 lần trong số 256/8 = 32 lần (byte cuối cùng có giá trị 01 đến 08) thay vì khoảng một lần trong 256 lần (byte cuối cùng có giá trị 01 hoặc các byte cuối cùng có giá trị 02 02 vân vân.). Điều này ngăn cản việc sử dụng phần đệm cho tính toàn vẹn/tính xác thực của thông báo.

Thứ ba, bạn đã giảm thiểu cuộc tấn công tiên tri đệm, nhưng bạn chưa loại bỏ hoàn toàn nó. Rốt cuộc, byte cuối cùng vẫn cần được đánh giá. Chúng tôi xem xét một mật mã bị phá vỡ nếu bất cứ điều gì có thể được học từ văn bản gốc.

Cuối cùng, bạn vẫn chưa loại bỏ chi phí đệm.


Nếu bạn vẫn giả sử chi phí hoạt động thì bạn cũng có thể thêm thẻ xác thực, được tạo bằng cách sử dụng MAC hoặc mật mã được xác thực. Đây là lý do tại sao chúng ta không quan tâm lắm đến thuộc tính đệm. Chúng tôi có thể sử dụng chế độ không yêu cầu đệm, thêm thẻ xác thực và có chế độ mật mã với các thuộc tính bảo mật tốt hơn, đồng thời hạn chế mở rộng thông báo.

Maarten Bodewes avatar
lá cờ in
Một sự thật thú vị là tôi đã tìm thấy bài báo đó trong khi tôi đang trình bày rằng việc mã hóa XML mà không tạo chữ ký XML là **không** một ý kiến ​​hay. Và ngay cả khi bạn sử dụng sig XML, bạn phải hết sức chú ý.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.