Le chiavi rsa codificate PEM hanno dimensioni diverse

0

Ho salvato una chiave privata rsa in un file binario (in formato PEM), tra gli altri dati. Conoscevo il suo offset, ma non le sue dimensioni. Quando ho dovuto caricare, ho generato una chiave temporanea e ho usato le sue dimensioni per caricare quella salvata (non voglio elaborare il testo per estrarre la chiave).

Ero un po 'sorpreso, perché per un modulo di 2048 avevo due dimensioni di chiavi codificate: 1679 e 1675:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAvsAqMhhCurk2ROslaeNDf5K4oedJiyqxAeIWhgWfYeLqxDQ7
U7A+r/HEoUjUQMia6dBLXVI+FyF0PhNJwIBAtlGu/ojSEppSA4los9u5Q4SNrpwZ
dSgIPIRWa1HSBoL464K9hIY5iXxku3jGeWgIHlKtaVeoSxhYv4lwAYL0QAKs24Bc
VC1JaLDVMldwf3CBqKiyoXhLIPGpW5PMPLKR0Tj44+4gm7vgQ/wOaavYp6DW2kaH
EZyu7T4viqpAdUk5dHi6HHTOzarhDP+1B8aL7scqZzTtzjbidyXVbm5vBjTSQqO5
865k9+p9znhVA5tS7Ha+zAKiGhRjXtRkRLxKdwIDAQABAoIBAA9h5cU2aaMvLm4u
XE0Gs7nE9jiwMyES50VUmyZhq7G0H+SEpcgg7V047PdorR0wUDXMw1caO8GXxA0B
dzAb55wMSEVkeTRg135LhXMDpBQKy3YqRm9JNCjVLzbmWT6HL1WmrGvUey1YJ7Nq
kO7XcdgoKK3XEM5Ff1qq1ap5igLjUGn3Ibna4faaVFvbw00/WYHqPUejmEn+xYV8
I8KrplZ2+0iE7nxrRQwdZWtyRgmjF81rJJPKw0BDiESXADkjdil9FPwMgCqJ8shZ
JhlslsYkD6JC/fS0u5w2h72dZY1chPqLex4CSUr3X3jGvUNkQt+l8jPs9p1zT7hP
jwPA6JECgYEA+s5Iz+rs5Y136VofAPSiGwrBuM1tvjpkV+tbUhlxJxem6JXypEYx
YFZ2fqwn9Timxfgsihjun1R1yn5wFjsylAB5lWgyNgt2uvTJrwsC3KpdEESGWlE/
c2yS7UJwWiZ3YcRP8tEwZre9VREdo7pObb+h3ZytoHMUNau18dJ5FBkCgYEAwrN7
R/euWvfutvCtHhE9xiAqu4qph9WYbx541zK8c5Vra+1JqnrBBPiXv6dxHnwlWV8g
CxH/PhjRSB+vyKn/bfHH5mfAYeAVwxIo04jdcc+vPETySITs9KN9KPnmYwSM1rJU
Fbo7X/0B+pHxVfj2kGlKyY2Jro84gToOckkwpQ8CgYEAqN/9ZwJoQKjg9N8ZwSr3
e/3iMu0f19a5efmfo8g9yHTEjhdpKfOZi6SsZN7GiPd8VBCm7NWc1uun5JD+J/n0
NHOdalyecoWFjJ0GsDZZ1vtfbnS1glryvmV9CQSTYiBEgjANJRJ15LQTaBP+QSBR
btR5yR6WSlMyaHEWMZ3mqQECgYEAk9kDFqVIKx/2j8i3TQu+owKuMHedQN67wDWd
gZyvaf3e8rffpqtMg1/aq9iUl5eiLPmFNaLW9eqWkXQuYexlYLGnIJlMh4ZIQDc7
9VYLAm+5G8UnTlZSMXssgb8yaaJ86FPGcjFXAQ75P7MvVh+V7BdoiSEHmhx7xfW2
HqbhX5UCgYA7UmzmedDd74yfzTbKv7xiTiTL5uQcra51iVFUNU+7Xv2ou11674ak
ymSyEfbLyNq0fZZSj538OVYLK7WG6YEED3nQ5bGvh8MfDHUcI2WgMzZloKUY7UWF
G0/AjGI55sEu+/nu9yPvhNEbq7nfa6LhBkLpB+RAgMhZ6dskdP4Eng==
-----END RSA PRIVATE KEY-----

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEApBxAjMLR4FOHPvgL2JiFoefQiArset5UTUV1VH+bes1saO4C
O0WZVXr8Ksj+Cnw4Secd8evy2frhEI3DCWizLn8/SVySmIX442H6nbgo0PokCEYo
a4ghI5dbc0QLXuyLL7VMRjwOVhpsd51Tx1pAJx0aHlQvmr2a3xaICI8F4hhTtI0r
IEoiaqWocJs9BjZd9gNqDK47UD9svjzLKc0jJ/yRCDsUGIvhYcYIzir6+NQTCU8Z
kvlmgO3WT8U3OdbnhhtuomjSjc/1TBOqbtRXLpQ+yLOJm6Op7XZb2h2iCuH9Hp9/
oy3DmpdXOYqtLYFUVyE26PwEPG5alw4QQbahJQIDAQABAoIBAQCA5JOqOqV+a/xQ
b59WOczTMe/tua6sfgx2ODSD7kmedNNNwonMJcjdg1+k9wHYGGJZYQV66ddubwXv
63eg3zPENDrvkp6s3qRxapXc5DRileRQ/1Fly6BDhPBVor7PijdzfBBxJWAZLl28
wLt5WqACWHAYHATbo0mNJ/QlzLdRMIoWFaJK71pn1pka1DZxzfk//uV+L6NCMAbP
e+PAArY/8bTQYOnlKHoPrjpmyDYtliOYDCr3OgZqS7dS69cz5jHNihHLJiKfOTNr
zyXFBAfPwWUqBsUagj5GCb3yeyalfY2y/9DBPvfY75+e6KtZcMtDXRzqV/hWswk5
ApWfqfqtAoGBANHdn4/AKTH4AIP+nNx2HTFsin7KnwjNbMFWbxrC/JjQqX90ugie
y1LzWiWgCXMo0tOuKsd6AWQEQQBAbxhCAjRZ6XfLVllmMXYVZQ2wwxNYwB49Vi9p
ZNsvGBKpcUbgzFkm2pRc8GkvjDz1iJxnKnVY0ATpjuK6CMhsDYkeyhXjAoGBAMgv
tMh1EFYJA2ewieCD+xlcAk8YZVc8b9JV2cdHtpAHCvMMbPm4S/ygwvZ1FadvVrX8
z6CRMVsRbmp4a5dDUkRQqAm5LUqZ59e2MHoYq5ueR145MXDZXhT5BoTZ1LC+r6nN
0Low1xP78sjTxSOb2aUvlSWG54y7+lVJkKf9cNtXAoGAPE4C27vMGp+5BjTTvkXy
fZFC+swehtkAt02u/3GoRAExs35HNtLqehuTe9xQ2taQPmN9x3Q3khXm17usMLxH
BeQQQmwbk/TZoaTkNNrmM1j9W7MkYNtYL+OId1RZSJSwI64WgStzqcYP9jRX3RmI
CdBLdh3nAR+UBoOGIDDIwSECgYAaBlmyVcWx6aoPqNvD3GSgf12terZyCOFgrtiJ
F8GcJ848mrjwHg2C4kN2VvJhug/DyQIVFcsc079PCCi0mYPwbavq17ATqr6BRKY4
uUxWBtWwYi8TRK7+ewFl9Au6jo+3u5IPIppTdsWxZhaS8ofw+aaiIk+n9CgvPkkY
DdLGMQKBgCQyM7Mg8xCgVQaQWAFJ8jHSrZfsk2+Xrj7oDW0JGa3Es3kXrWH/h/9/
VIP8/H1kzyuqDwuPN/1BzKfpIxzz2TGrK+KUAJsIN4j+Kh0yQDV/Pxw9sGx71Aid
m3AQwxAk8a10B1jbj/qPvxZjZZxqoILC4xIkWYrabFku2zot5yUx
-----END RSA PRIVATE KEY-----

Posso salvare una chiave rsa in un formato, che ha sempre la stessa dimensione se il modulo è fisso?

La chiave pubblica sembra avere sempre una dimensione di 451 . Posso supporre che questo è costante?

    
posta robert 28.02.2017 - 14:38
fonte

1 risposta

1

Se guardi le chiavi in uno strumento online come: link , troverai la chiave privata RSA composta da 9 diversi campi, alcuni dei quali hanno dimensioni variabili.

In particolare, se si guarda il formato del file chiave qui: link (PKCS # 1) vedrai le definizioni per i 9 campi.

La prima chiave è:

SEQUENCE (9 elem)
INTEGER 0                     -- version
INTEGER (2048 bit) 24080037…  -- modulus
INTEGER 65537                 -- e
INTEGER (2044 bit) 19418496…  -- d
INTEGER (1024 bit) 17612182…  -- p
INTEGER (1024 bit) 13672376…  -- q
INTEGER (1024 bit) 11858803…  -- d mod (p-1)
INTEGER (1024 bit) 10382218…  -- d mod (q-1)
INTEGER (1022 bit) 41657306…  -- (inverse of q) mod p

E la seconda chiave è:

SEQUENCE (9 elem)
INTEGER 0                     -- version
INTEGER (2048 bit) 20717013…  -- modulus
INTEGER 65537                 -- e
INTEGER (2048 bit) 16271218…  -- d
INTEGER (1024 bit) 14737271…  -- p
INTEGER (1024 bit) 14057563…  -- q
INTEGER (1022 bit) 42347422…  -- d mod (p-1)
INTEGER (1021 bit) 18275240…  -- d mod (q-1)
INTEGER (1022 bit) 25417766…  -- (inverse of q) mod p

Quindi, come puoi vedere, alcuni componenti della chiave hanno dimensioni diverse (fino a 4 bit sul campo d) e quelli saranno codificati in modo leggermente diverso nel formato ASN1 e base64.

Per quanto riguarda le tue domande:

Non conosco un modo per generare componenti chiave RSA di dimensioni esatte; se è possibile, vorrei solo prefissare la lunghezza della stringa nel formato del file. In alternativa, cerca il file per il bit '----'. Potresti essere in grado di generare il file ASN con ulteriori 0 iniziali sui campi per ottenere tutto a una lunghezza fissa. Oppure puoi generare chiavi RSA fino a ottenere la dimensione desiderata. / s

Chiave pubblica, a condizione che tu stia utilizzando l'e = 65537 predefinito (predefinito ovunque, per tutti), è probabilmente sicuro dire dimensione == 451. Anche se avrei ancora il prefisso di lunghezza qualsiasi testo normale in un file binario.

    
risposta data 04.12.2017 - 18:36
fonte

Leggi altre domande sui tag