Score:2

วิธีค้นหารหัสสาธารณะในใบรับรองดิจิทัล

ธง cn

ฉันเห็นสิ่งที่ฉันคิดว่าควรเป็นคีย์สาธารณะในแท็บรายละเอียดสำหรับใบรับรองของ StackOverflow (ดูภาพหน้าจอด้านล่าง) อย่างไรก็ตาม มันคือ 2160 (จำนวนตัวอักษร (540) คูณด้วย 4 = 2160) บิตยาว ไม่ใช่ 2048 ตามที่ระบุ

เมื่อฉันดูรายละเอียดใบรับรองโดยใช้ opensl ใน cmd ฉันสามารถเห็นรหัสสาธารณะรุ่นที่เล็กกว่าซึ่งเป็น 514 nibbles * 4 = 2056 บิตซึ่งเท่ากับ 1 ไบต์จาก 2048

ฉันสังเกตเห็นว่าไบต์แรกคือ 00 ไบต์แรกจะถูกละเว้นเพราะเป็น 0 หรือไม่ เหตุใดจึงแสดงเป็น openssl

ถ้าไบต์แรกถูกละเว้น แสดงว่าคีย์สาธารณะจริงเริ่มต้นด้วย ข2 และสิ้นสุดใน อัฟ?

เหตุใด Windows จึงแสดงไบต์พิเศษก่อนและหลังคีย์สาธารณะในแท็บรายละเอียด

ฉันใช้ Notepad ในภาพหน้าจอเพื่อแสดงมูลค่าทั้งหมดของสิ่งที่อยู่ในแท็บรายละเอียด

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

อัปเดต:

ฉันรู้ว่าไบต์ส่วนใหญ่เป็นโมดูลัสและเลขชี้กำลัง 0x010001 อยู่ที่ส่วนท้าย:

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

แต่สิ่งที่เป็น 02 03 ระหว่างโมดูลัสกับเลขชี้กำลัง?

และคืออะไร 30 82 01 0a 02 82 01 01 00 ก่อนโมดูลัส?

fgrieu avatar
ng flag
ลองวางฐานสิบหกใน [ตัวถอดรหัส ASN.1](https://lapo.it/asn1js/)
dave_thompson_085 avatar
cn flag
คำถามของคุณไม่พบพับลิกคีย์ -- คุณพบแล้ว คำถามของคุณคือ _decoding_ มัน ดังที่ https://datatracker.ietf.org/doc/html/rfc3279#section-2.3.1 กล่าวว่าเป็นการเข้ารหัส DER ของโครงสร้าง ASN.1 RSAPublicKey จาก PKCS1 และเนื่องจาก meshcollider กล่าวว่า DER อยู่ใน X.690 แม้ว่า https://en.wikipedia.org/wiki/X.690 อ่านง่ายกว่าเอกสาร ITU-T จริง และ https://letsencrypt.org/docs/a-warm-welcome-to-asn1- อันเดอร์/ .
Score:4
ธง gb

ตาม X.690 รูปแบบเริ่มต้นด้วย 0x30 เพื่อแสดงลำดับ ถัดมาเป็นความยาวทั้งหมด ไบต์แรกของความยาวคือ 0x82. เนื่องจากมีการตั้งค่าบิตสูงสุดไว้ที่นี่ จึงหมายความว่าไบต์นี้เข้ารหัสความยาว ของความยาว. กล่าวอีกนัยหนึ่ง 2 ไบต์ถัดไปเข้ารหัสความยาวจริงไบต์เหล่านั้นคือ 0x010กหรือ 266 ไบต์

ตอนนี้เราโดนแท็กอื่น เวลานี้มันเป็น 0x02หมายถึงจำนวนเต็ม ความยาวเริ่มต้นด้วย 0x82 อีกครั้ง ดังนั้นเราจึงรู้ว่า 2 ไบต์ที่ตามมาเข้ารหัสความยาว เหล่านี้คือ 0x0101ดังนั้นความยาวทั้งหมดของจำนวนเต็มนี้คือ 257 ไบต์ 257 ไบต์เหล่านี้คือสิ่งที่คุณเน้น เหตุผลที่พิเศษ 0x00 ไบต์รวมอยู่ในการเริ่มต้นเนื่องจากจำนวนเต็ม BER ถูกเซ็นชื่อและแสดงในส่วนเสริมของ 2 - หากไม่มีไบต์ว่างนำหน้า มันจะถูกตีความว่าเป็นจำนวนลบ เนื่องจากไบต์ถัดไป 0xb2 มีชุดบิตสูงสุด

หลังจาก 257 ไบต์เหล่านั้นสำหรับโมดูลัส เรากดแท็กอื่น: 0x02 อีกครั้ง. จำนวนเต็มอื่น เวลานี้ไบต์แรก (0x03) ของความยาวไม่ได้ตั้งค่าบิตสูงสุด ดังนั้นความยาวจึงเป็นเพียง 3 ไบต์ 3 ไบต์เหล่านี้คือ 0x010001หรือ 65537 นั่นคือเลขยกกำลังสาธารณะ

และมีจำนวนทั้งหมด 266 ไบต์ตามที่คาดไว้สำหรับลำดับทั้งหมด มันก็แค่จำนวนเต็ม 2 ตัวนั้น

DannyNiu avatar
vu flag
ฉันแก้ไขคำตอบเพื่ออธิบายว่าทำไมไบต์ nul นำหน้าถึงอยู่ที่นั่น

โพสต์คำตอบ

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