Score:0

SSLv3 ServerKeyExchange โครงสร้าง SIgnature ไม่ตรงกัน

ธง pl

ฉันเล่นกับการใช้ SSLv3 ใน Go ตาม rfc6101.

ฉันสามารถ deserialize ServerKeyExchange ได้จนถึง ServerKeyExchange.signed_params

ชุดรหัสคือ TLS_RSA_EXPORT_WITH_RC4_40_MD5 (0x0003).

ลายเซ็นใบรับรองยัง: 1.2.840.113549.1.1.5 (sha1WithRSAEencryption).

ตาม RFC โครงสร้างควรมีลักษณะดังนี้:

        โครงสร้าง {
            เลือก (อัลกอริทึมการแลกเปลี่ยนคีย์) {
                กรณี diffie_hellman:
                    ServerDHParams พารามิเตอร์;
                    ลายเซ็น sign_params;
                กรณี rsa:
                    ServerRSAParams พารามิเตอร์;
                    ลายเซ็น sign_params;
                กรณี fortezza_kea:
                    ServerFortezzaParams พารามิเตอร์;
            };
        } ServerKeyExchange;
        โครงสร้างลายเซ็นดิจิทัล {
            เลือก (อัลกอริทึมลายเซ็น) {
                กรณีไม่ระบุชื่อ: struct { };
                กรณี rsa:
                    ทึบแสง md5_hash[16];
                    sha_hash ทึบ [20];
                กรณี dsa:
                    sha_hash ทึบ [20];
            };
        } ลายเซ็น;

แต่ฉันได้รับการตอบกลับที่แตกต่างจากเซิร์ฟเวอร์:

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่ฉันหายไป?

ขอบคุณ!

dave_thompson_085 avatar
cn flag
**ไม่เห็นด้วยกับ VtC ว่าเป็น 'การเขียนโปรแกรม'**; แม้ว่า OP กำลังเขียนโค้ด แต่ Q ไม่ได้เกี่ยวกับโค้ด แต่เกี่ยวกับโปรโตคอลที่เป็นอิสระจากการใช้งานใดๆ และไม่ได้อยู่ใน SO มัน _is_ 'ใช้' ของ crypto ซึ่งตรงข้ามกับ crypto เองและอาจดีกว่าในเรื่องความปลอดภัย SX แต่ฉันเรียกมันว่าเส้นเขตแดน
Score:0
ธง cn

เหนือส่วนที่คุณยกมาประมาณ 10 บรรทัดก็มีครับ

        โครงสร้าง {
            ทึบแสง rsa_modulus<1..2^16-1>;
            ทึบแสง rsa_exponent<1..2^16-1>;
        } เซิร์ฟเวอร์RSAParams;

ดังนั้นกรณี =อาร์เอส (ซึ่งจริง ๆ แล้วสำหรับ rsa_export เท่านั้น) ของ การแลกเปลี่ยนคีย์เซิร์ฟเวอร์ คือ:

        เซิร์ฟเวอร์RSAParams:
            rsa_modulus -- ทึบแสง (จำนวนเต็มที่ไม่มีเครื่องหมาย bigendian จริงๆ)
            rsa_exponent -- เหมือนกัน
        ลายเซ็น - เหมือนกัน 

แต่โครงสร้างนี้ไม่มีผลกับการเข้ารหัส ซึ่งมีเพียงค่า 'leaf' สามค่าเท่านั้น และการถอดรหัสอะไรก็ตามที่คุณกำลังดูอยู่ (Wireshark?) ก็ไม่จำเป็นต้องแยกแยะทั้งสองระดับที่นี่

บันทึก โครงสร้างที่เซ็นชื่อแบบดิจิทัล ... ลายเซ็น ไม่ได้หมายความว่ามีแฮชสองตัว (md5 และ sha1) อยู่ในข้อความ แต่เป็นการป้อนเข้าสู่อัลกอริทึมการสร้างลายเซ็นที่เกี่ยวข้อง ในกรณีนี้ RSA 'block type 1' ที่กำหนดไว้ใน PKCS1v1 (ตอนนี้เปลี่ยนชื่อเป็น RSASSA-PKCS1-v1_5 ใน PKCS1v2) และ เอาต์พุต ของอัลกอริทึมลายเซ็น สำหรับ RSA จำนวนเต็มเดียวที่เข้ารหัสเป็นความยาวคงที่ที่ไม่ได้ลงนาม bigendian (ดู 'I2OSP' ใน PKCS1 เวอร์ชันใดก็ได้) คือสิ่งที่ใส่ไว้ในข้อความ โดยมีคำนำหน้าความยาว 2 ไบต์ ราวกับว่ามีการประกาศ ทึบ<?..2^16-1> แม้ว่าฉันจะไม่เห็นสิ่งนี้ระบุไว้ใน RFC6101; TLS1.0 RFC2246 และ succ ระบุใน 4.7

(คุณอาจต้องการดูเพิ่มเติม/ทั้งหมดของ RFC2246 ยกเว้น PRF และการสร้างคีย์ โค้ดแจ้งเตือนและชุดการเข้ารหัสบางส่วน การเพิ่มส่วนขยาย (ซึ่ง RFC5746 Secure Renegotiation กลายเป็นสิ่งที่บังคับค่อนข้างมาก) และหมายเลขเวอร์ชัน สิ่งที่ดีที่สุดในความทรงจำของฉัน TLS1.0 ในทางเทคนิคแล้วเหมือนกับ SSL3 แต่เอกสารมีความละเอียดมากกว่า อาจเนื่องมาจากผ่านขั้นตอน IETF gauntlet^W)

โพสต์คำตอบ

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