Tôi tìm thấy một mô tả về định dạng của khóa công khai đây được đăng bởi Victor từ Blagoevgrad tại GSMHosting.com. Như đã đề cập trong các nhận xét, cả hai kích thước chữ ký cũng là 2048 bit, vì vậy điều đó khá thuyết phục.
Dưới đây là nội dung bài đăng của thông tin trong liên kết:
#define RSANUMBYTES 256 /* Độ dài khóa 2048 bit */
#define RSANUMWORDS (RSANUMBYTES / sizeof(uint32_t))
typedef struct RSAPublicKey {
int len; /* Độ dài của n[] trong số uint32_t */
uint32_t n0inv; /* -1 / n[0] mod 2^32 */
uint32_t n[RSANUMWORDS]; /* modul dưới dạng mảng endian nhỏ */
uint32_t rr[RSANUMWORDS]; /* R^2 dưới dạng mảng endian nhỏ */
số mũ int; /* 3 hoặc 65537 */
} RSAPublicKey;
tôi phát hiện ra rằng có một modexp3
trong phần còn lại của mã nguồn mà được thực hiện hiệu quả hơn sử dụng n0inv
và rr
các giá trị, vì vậy số mũ công khai có giá trị 3 (có vẻ như nó bị thiếu trong cấu trúc, vì vậy tôi đoán rằng phần đó không được dùng nữa).
Có thể sự nhầm lẫn đến từ 40 00 00 00
giá trị thập lục phân ở phía trước; cái này mã hóa 64 khi được coi là giá trị cuối nhỏ. Tuy nhiên, nó không có nghĩa là 64 byte: 64 * 8 = 512, mà là 64 từ, trong đó mỗi từ là 32 bit, tức là gấp 4 lần cho 2048 bit.
Điều này có nghĩa là mô đun có giá trị sau - tính bằng big endian:
93f0d9ad49d1dc8fb2445709b6210ba5a377c52f710e1e61458e84b2c53d69a4cb2aa2c914a7669230a6a81b69fbd558f11855a7adb29753a34a95e29b37a16d
509cab68883e54c88f50583d52a9bf4522d19344af4fe67d7a6163a4e7fc9b680602a691c487c55bc0c66125eb829125a78b47111da1f4a459a5d95bf1d879af
da4e28c584b16e78ea0eb584452703b6eb8e1a4a92dcfb1cf4ad50c84a7a16ca22ccf19b0bd2ec40b7af73c8e90b5ae8d057105ce744ba0cf257203e7d4b3675
da7e3decb6a89207229cbd2839c5ccd0e26c6eb76598504de4478d883f1d68852275e2ee0296ed6f2eb6ff590005c5bcaa9f48b18437950a11d69e4373fc3f53
Nếu tôi sử dụng khóa (chỉ sử dụng mô đun và số mũ công khai 3), tôi thấy rằng ImeiSign
chữ ký là chữ ký PKCS#1 v1.5 sử dụng SHA-1 làm hàm băm. May mắn thay cho Samsung, bản thân IMEI có thể sẽ không dễ bị ảnh hưởng bởi các điểm yếu của SHA-1 w.r.t. khả năng chống va chạm.
Tôi dường như không thể xác minh IMEI với nó, có thể là do một số mã hóa lạ (giống như BCD?) Của số IMEI. Dù sao, hàm băm SHA-1 trong chữ ký là 824ae6730ee34d365375e791aa2331d5e57c320d
trong trường hợp bạn muốn thử một vài thứ.