ฉันพบคำอธิบายเกี่ยวกับรูปแบบของรหัสสาธารณะ ที่นี่ โพสต์โดย Victor จาก Blagoevgrad ที่ GSMHosting.com ดังที่กล่าวไว้ในความคิดเห็น ขนาดลายเซ็นทั้งสองมีขนาด 2048 บิตด้วย ดังนั้นจึงสรุปได้ค่อนข้างดี
นี่คือเนื้อหาของโพสต์ข้อมูลในลิงค์:
#define RSANUMBYTES 256 /* ความยาวคีย์ 2048 บิต */
#กำหนด RSANUMWORDS (RSANUMBYTES / sizeof(uint32_t))
typedef โครงสร้าง RSAPublicKey {
เลนส์ int; /* ความยาวของ n[] ในจำนวน uint32_t */
uint32_t n0inv; /* -1 / n[0] ม็อด 2^32 */
uint32_t n[RSANUMWORDS]; /* โมดูลัสเป็นอาร์เรย์ endian น้อย */
uint32_t rr[RSANUMWORDS]; /* R^2 เป็นอาร์เรย์ endian น้อย */
เลขชี้กำลัง int; /*3 หรือ 65537 */
} RSAPublicKey;
ฉันพบว่ามี modexp3
ในส่วนที่เหลือของซอร์สโค้ดซึ่ง มีประสิทธิภาพมากขึ้น ใช้ n0inv
และ ร
ค่า ดังนั้นเลขชี้กำลังสาธารณะมีค่าเป็น 3 (ดูเหมือนไม่มีอยู่ในโครงสร้าง ดังนั้นฉันเดาว่าส่วนนั้นเลิกใช้แล้ว)
ความสับสนอาจมาจาก 40 00 00 00
ค่าเลขฐานสิบหกที่ด้านหน้า สิ่งนี้เข้ารหัส 64 เมื่อเห็นว่าเป็นค่า endian เล็กน้อย อย่างไรก็ตาม ไม่ได้หมายถึง 64 ไบต์: 64 * 8 = 512 แต่หมายถึง 64 คำ โดยที่แต่ละคำคือ 32 บิต นั่นคือ 4 เท่าของจำนวน 2048 บิต
ซึ่งหมายความว่าโมดูลัสมีค่าดังต่อไปนี้ - ใน big endian:
93f0d9ad49d1dc8fb2445709b6210ba5a377c52f710e1e61458e84b2c53d69a4cb2aa2c914a7669230a6a81b69fbd558f11855a7adb29753a34a95e29b37a16d
509cab68883e54c88f50583d52a9bf4522d19344af4fe67d7a6163a4e7fc9b680602a691c487c55bc0c66125eb829125a78b47111da1f4a459a5d95bf1d879af
da4e28c584b16e78ea0eb584452703b6eb8e1a4a92dcfb1cf4ad50c84a7a16ca22ccf19b0bd2ec40b7af73c8e90b5ae8d057105ce744ba0cf257203e7d4b3675
da7e3decb6a89207229cbd2839c5ccd0e26c6eb76598504de4478d883f1d68852275e2ee0296ed6f2eb6ff590005c5bcaa9f48b18437950a11d69e4373fc3f53
ถ้าฉันใช้คีย์ (แค่ใช้โมดูลัสและเลขยกกำลังสาธารณะ 3) ฉันพบว่า ImeiSign
ลายเซ็นเป็นลายเซ็น PKCS#1 v1.5 โดยใช้ SHA-1 เป็นแฮช โชคดีสำหรับ Samsung ที่ IMEI เองอาจจะไม่ไวต่อจุดอ่อน SHA-1 ด้วย ความต้านทานการชน
ดูเหมือนว่าฉันไม่สามารถยืนยัน IMEI ได้ด้วย อาจเป็นเพราะการเข้ารหัสหมายเลข IMEI ที่แปลก (เหมือน BCD) อย่างไรก็ตาม แฮช SHA-1 ภายในลายเซ็นคือ 824ae6730ee34d365375e791aa2331d5e57c320d
ในกรณีที่คุณต้องการลองบางสิ่ง