Am găsit o descriere a formatului cheii publice Aici postat de Victor din Blagoevgrad la GSMHosting.com. După cum sa menționat în comentarii, ambele dimensiuni ale semnăturii sunt, de asemenea, de 2048 de biți, deci este destul de concludent.
Iată conținutul postării informațiilor din link:
#define RSANUMBYTES 256 /* Lungimea cheii de 2048 biți */
#define RSANUMWORDS (RSANUMBYTES / sizeof(uint32_t))
typedef struct RSAPublicKey {
int len; /* Lungimea lui n[] în număr de uint32_t */
uint32_t n0inv; /* -1 / n[0] mod 2^32 */
uint32_t n[RSANUMWORDS]; /* modulul ca un tablou endian mic */
uint32_t rr[RSANUMWORDS]; /* R^2 ca un mic tablou endian */
int exponent; /* 3 sau 65537 */
} RSAPublicKey;
Am aflat că există o modexp3
în restul codului sursă care este făcută mai eficientă folosind n0inv
și rr
valori, deci exponentul public are valoarea 3 (pare că lipsește din structură, așa că bănuiesc că acea parte a fost depreciată).
Posibil confuzia vine de la 40 00 00 00
valoare hexazecimală în față; aceasta codifică 64 când este văzută ca valoare mică endian. Cu toate acestea, nu înseamnă 64 de biți: 64 * 8 = 512, ci 64 de cuvinte, unde fiecare cuvânt este de 32 de biți, adică de 4 ori mai mult, dând 2048 de biți.
Aceasta înseamnă că modulul are următoarea valoare - în big endian:
93f0d9ad49d1dc8fb2445709b6210ba5a377c52f710e1e61458e84b2c53d69a4cb2aa2c914a7669230a6a81b69fbd5557957318169230a6a81b69fbd55579573185459371
509cab68883e54c88f50583d52a9bf4522d19344af4fe67d7a6163a4e7fc9b680602a691c487c55bc0c66125eb829125a1489af47168883a4e7fc9b680602a691c487c55bc0c66125eb829125a140602a
da4e28c584b16e78ea0eb584452703b6eb8e1a4a92dcfb1cf4ad50c84a7a16ca22ccf19b0bd2ec40b7af73c8e90b5ae8d057105ce7574305ce7574205ce75744
da7e3decb6a89207229cbd2839c5ccd0e26c6eb76598504de4478d883f1d68852275e2ee0296ed6f2eb6ff590005c5bcaa9f48b50353793934379334313790005
Dacă folosesc cheia (folosind doar modulul și exponentul public 3) constat că ImeiSign
semnătura este o semnătură PKCS#1 v1.5 folosind SHA-1 ca hash. Din fericire pentru Samsung, IMEI-ul în sine nu va fi probabil susceptibil la slăbiciunile SHA-1 w.r.t. rezistenta la coliziune.
Totuși, nu pot verifica IMEI-ul cu el, probabil din cauza unei codificări ciudate (ca BCD?) a numărului IMEI. Oricum, hash-ul SHA-1 din semnătură este 824ae6730ee34d365375e791aa2331d5e57c320d
în cazul în care vrei să încerci câteva lucruri.