Score:1

เกี่ยวกับความถูกต้องของตัวอย่างการเติมของ RFC 5246

ธง in

การเติม PKCS#7 ถูกกำหนดไว้ใน rfc5652#section-6.3

อัลกอริธึมการเข้ารหัสเนื้อหาบางตัวถือว่าความยาวของอินพุตคือ a หลายตัวของ k octets โดยที่ k มากกว่าหนึ่ง สำหรับการดังกล่าว อัลกอริทึม อินพุตจะถูกเสริมที่ส่วนท้ายด้วย k-(lth mod k) octets ทั้งหมดที่มีค่า k-(lth mod k) โดยที่ lth คือ ความยาวของอินพุต กล่าวอีกนัยหนึ่ง อินพุตถูกเสริมที่ ต่อท้ายด้วยหนึ่งในสตริงต่อไปนี้:

               01 -- ถ้า lth mod k = k-1
            02 02 -- ถ้า lth mod k = k-2
                 .
                 .
                 .
       k k ... k k -- ถ้า lth mod k = 0

อย่างที่เราเห็น ไบต์การเติมสามารถมีชุดของ01,02,...,หรือ,16 สำหรับการเข้ารหัสบล็อกขนาด 16 ไบต์ ในขณะที่อ่าน

เคยเห็นเค้ายกตัวอย่างว่า

บล็อกที่สองประกอบด้วย HMAC 9 ไบต์ที่เหลือและ 7 ไบต์ของการเติม 0x06โปรดดูรูปที่ 1 โปรดทราบว่าตัวเข้ารหัสยังสามารถเลือกการเติมที่ยาวขึ้นและต่อท้ายด้วย 23, 39, ...หรือ 247 ไบต์การเติม (ในขณะที่ตั้งค่าของไบต์การเติมตามนั้น)

นี่ไม่ใช่การเติม PKCS#7 ดังนั้นฉันจึงดูที่ TLS 1.2 อาร์เอฟซี 5246 และเห็นเป็นรูปแบบเดียวกันเกือบทั้งหมด

หากความยาวช่องว่างภายในจำเป็นขั้นต่ำ 6 ช่องว่างภายในจะเป็น 6 ไบต์ ซึ่งแต่ละค่ามีค่า 6 ดังนั้น 8 ออกเต็ตสุดท้ายของ GenericBlockCipher ก่อนที่การเข้ารหัสบล็อกจะเป็น xx 06 06 06 06 06 06 06 โดยที่ xx คือออคเต็ตสุดท้ายของ MAC

เพื่อให้เข้ากันได้กับการเติม PKCS#7 ข้อมูลด้านบนควรเป็น ( ไม่เห็น an ผิดพลาด)

หากความยาวช่องว่างภายในจำเป็นขั้นต่ำ 7 ช่องว่างภายในจะเป็น 7 ไบต์ ซึ่งแต่ละค่ามีค่าเป็น 7 ดังนั้น 8 ออกเต็ตสุดท้ายของ GenericBlockCipher ก่อนที่การเข้ารหัสบล็อกจะเป็น xx 07 07 07 07 07 07 07 โดยที่ xx คือออคเต็ตสุดท้ายของ MAC

และบทความก็มีข้อผิดพลาดเช่นกัน

เท่าที่ฉันรู้ แหล่งข้อมูลทั้งสองนี้ไม่ถูกต้อง มีบางอย่างที่ฉันพลาดไปเกี่ยวกับการออกแบบ/การใช้งานที่แตกต่างกันของกฎการเติม PKCS#7 หรือไม่

kelalaka avatar
in flag
โปรดทราบว่าฉันไม่ได้พิจารณาการเติม SSLv3 โดยที่ไบต์สุดท้ายระบุจำนวนของการเติมไบต์และการเติมที่เหลือสามารถรับค่าใดก็ได้
dave_thompson_085 avatar
cn flag
Crossdupe https://security.stackexchange.com/questions/161153/rfc-5246-tls-1-2-padding-example-mistake และ https://security.stackexchange.com/questions/88839/pkcs7-vs-tls -1-2-ช่องว่างภายใน
Score:3

การเติมที่ใช้สำหรับชุดการเข้ารหัส CBC ใน SSLv3 ถึง TLS 1.2 ไม่ใช่การเติม PKCS#5/PKCS#7 เป็นช่องว่างภายในที่ใช้ใน SSL/TLS ซึ่งฉันไม่เคยเห็นที่อื่นมาก่อน

ช่องว่างภายใน ทล.1.0, ทล.1.1 และ ทล.1.2 สามารถมีขนาดตั้งแต่ 1 ถึง 256 ไบต์ ดังนั้นจึงสามารถเติมได้หลายบล็อก ในโปรโตคอลก่อนหน้า เอสเอสแอล 3.0จะต้องทำให้เสร็จหนึ่งช่วงตึกในทุกเวอร์ชัน ไบต์สุดท้ายจะต้องเท่ากับความยาวของช่องว่างภายใน โดยไม่รวมไบต์สุดท้ายนั้น ไบต์ก่อนหน้าสามารถใช้ค่าใดก็ได้ใน SSL 3.0 และต้องเป็นความยาวการเติมใน TLS 1.0 ถึง 1.2 สำหรับบล็อกรหัสด้วย $B$- บล็อกไบต์:

ข้อมูลจำเพาะ ความยาวรวม บล็อก เนื้อหา
พีเคซีเอส#7 $n \ใน [1, B]$ ไบต์ $1$ $(n, \ldots, n)$
เอสเอสแอล 3.0 $n \ใน [1, B]$ ไบต์ $1$ $(?, \ldots, ?, (n-1))$
TLS 1.0â1.2 $n \ใน [1, 256]$ ไบต์ $1$ ถึง $\lceil 256/B \rceil$ $((n-1), \ldots, (n-1))$

อย่างที่คุณเห็น PKCS#7 เติมช่องว่างภายในด้วยความยาวช่องว่างทั้งหมด ในขณะที่ TLS 1.0â1.2 เติมช่องว่างภายในด้วยความยาวช่องว่างทั้งหมดลบหนึ่ง เหตุผลสำหรับตัวเลือกที่ดูแปลกนี้คือการปรับช่องว่างภายใน SSL 3.0 ซึ่งไบต์สุดท้ายคือไบต์ความยาวซึ่งไม่รวมอยู่ในข้อกำหนด SSL ที่เรียกว่า âpaddingâ และ â paddingâ ที่เหมาะสมสามารถมีเนื้อหาโดยพลการ

ตัวอย่างที่คุณอ้างอิงจาก RFC 5246 และจาก Merget และคณะ ถูกต้อง หากเพิ่ม 7 ไบต์จะทำให้ข้อความธรรมดามีหลายขนาดบล็อก 06 06 06 06 06 06 06 เป็นการเติม TLS ที่เป็นไปได้ (ตามที่เป็นอยู่ 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16ฯลฯ).

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา