Perché sono presenti 0x00 byte nel campo subjectPublicKey di un certificato DER X.509?

4

Per un semplice esempio, sto usando un certificato RSA a 512 bit per illustrare la mia domanda. Il certificato può essere trovato sia in forma DER che in forma PEM qui . Vado attraverso il certificato di utilizzare questo Decodificatore ASN.1 (il collegamento fornito al decoder ha già caricato il certificato in questione).

Per comodità, ho riprodotto i byte esadecimali seguenti:

 1  00000000: 3082 0212 3082 017b 0202 0dfa 300d 0609  0...0..{....0...
 2  00000010: 2a86 4886 f70d 0101 0505 0030 819b 310b  *.H........0..1.
 3  00000020: 3009 0603 5504 0613 024a 5031 0e30 0c06  0...U....JP1.0..
 4  00000030: 0355 0408 1305 546f 6b79 6f31 1030 0e06  .U....Tokyo1.0..
 5  00000040: 0355 0407 1307 4368 756f 2d6b 7531 1130  .U....Chuo-ku1.0
 6  00000050: 0f06 0355 040a 1308 4672 616e 6b34 4444  ...U....Frank4DD
 7  00000060: 3118 3016 0603 5504 0b13 0f57 6562 4365  1.0...U....WebCe
 8  00000070: 7274 2053 7570 706f 7274 3118 3016 0603  rt Support1.0...
 9  00000080: 5504 0313 0f46 7261 6e6b 3444 4420 5765  U....Frank4DD We
10  00000090: 6220 4341 3123 3021 0609 2a86 4886 f70d  b CA1#0!..*.H...
11  000000a0: 0109 0116 1473 7570 706f 7274 4066 7261  .....support@fra
12  000000b0: 6e6b 3464 642e 636f 6d30 1e17 0d31 3230  nk4dd.com0...120
13  000000c0: 3832 3230 3532 3635 345a 170d 3137 3038  822052654Z..1708
14  000000d0: 3231 3035 3236 3534 5a30 4a31 0b30 0906  21052654Z0J1.0..
15  000000e0: 0355 0406 1302 4a50 310e 300c 0603 5504  .U....JP1.0...U.
16  000000f0: 080c 0554 6f6b 796f 3111 300f 0603 5504  ...Tokyo1.0...U.
17  00000100: 0a0c 0846 7261 6e6b 3444 4431 1830 1606  ...Frank4DD1.0..
18  00000110: 0355 0403 0c0f 7777 772e 6578 616d 706c  .U....www.exampl
19  00000120: 652e 636f 6d30 5c30 0d06 092a 8648 86f7  e.com0
 1  00000000: 3082 0212 3082 017b 0202 0dfa 300d 0609  0...0..{....0...
 2  00000010: 2a86 4886 f70d 0101 0505 0030 819b 310b  *.H........0..1.
 3  00000020: 3009 0603 5504 0613 024a 5031 0e30 0c06  0...U....JP1.0..
 4  00000030: 0355 0408 1305 546f 6b79 6f31 1030 0e06  .U....Tokyo1.0..
 5  00000040: 0355 0407 1307 4368 756f 2d6b 7531 1130  .U....Chuo-ku1.0
 6  00000050: 0f06 0355 040a 1308 4672 616e 6b34 4444  ...U....Frank4DD
 7  00000060: 3118 3016 0603 5504 0b13 0f57 6562 4365  1.0...U....WebCe
 8  00000070: 7274 2053 7570 706f 7274 3118 3016 0603  rt Support1.0...
 9  00000080: 5504 0313 0f46 7261 6e6b 3444 4420 5765  U....Frank4DD We
10  00000090: 6220 4341 3123 3021 0609 2a86 4886 f70d  b CA1#0!..*.H...
11  000000a0: 0109 0116 1473 7570 706f 7274 4066 7261  .....support@fra
12  000000b0: 6e6b 3464 642e 636f 6d30 1e17 0d31 3230  nk4dd.com0...120
13  000000c0: 3832 3230 3532 3635 345a 170d 3137 3038  822052654Z..1708
14  000000d0: 3231 3035 3236 3534 5a30 4a31 0b30 0906  21052654Z0J1.0..
15  000000e0: 0355 0406 1302 4a50 310e 300c 0603 5504  .U....JP1.0...U.
16  000000f0: 080c 0554 6f6b 796f 3111 300f 0603 5504  ...Tokyo1.0...U.
17  00000100: 0a0c 0846 7261 6e6b 3444 4431 1830 1606  ...Frank4DD1.0..
18  00000110: 0355 0403 0c0f 7777 772e 6578 616d 706c  .U....www.exampl
19  00000120: 652e 636f 6d30 5c30 0d06 092a 8648 86f7  e.com0%pre%...*.H..

20  00000130: 0d01 0101 0500 034b 0030 4802 4100 9bfc  .......K.0H.A...

21  00000140: 6690 7984 42bb ab13 fd2b 7bf8 de15 12e5  f.y.B....+{.....
22  00000150: f193 e306 8a7b b8b1 e19e 26bb 9501 bfe7  .....{....&.....
23  00000160: 30ed 6485 02dd 1569 a834 b006 ec3f 353c  0.d....i.4...?5<
24  00000170: 1e1b 2b8f fa8f 001b df07 c6ac 5307 0203  ..+.........S...
25  00000180: 0100 0130 0d06 092a 8648 86f7 0d01 0105  ...0...*.H......
26  00000190: 0500 0381 8100 14b6 4cbb 8179 33e6 71a4  ........L..y3.q.
27  000001a0: da51 6fcb 081d 8d60 ecbc 18c7 7347 59b1  .Qo....'....sGY.
28  000001b0: f220 48bb 61fa fc4d ad89 8dd1 21eb d5d8  . H.a..M....!...
29  000001c0: e5ba d6a6 36fd 7450 83b6 0fc7 1ddf 7de5  ....6.tP......}.
30  000001d0: 2e81 7f45 e09f e23e 79ee d730 31c7 2072  ...E...>y..01. r
31  000001e0: d958 2e2a fe12 5a34 45a1 1908 7c89 475f  .X.*..Z4E...|.G_
32  000001f0: 4a95 be23 214a 5372 da2a 052f 2ec9 70f6  J..#!JSr.*./..p.
33  00000200: 5bfa fddf b431 b2c1 4a9c 0625 43a1 e6b4  [....1..J..%C...
34  00000210: 1e7f 869b 1640                           .....@
...*.H.. 20 00000130: 0d01 0101 0500 034b 0030 4802 4100 9bfc .......K.0H.A... 21 00000140: 6690 7984 42bb ab13 fd2b 7bf8 de15 12e5 f.y.B....+{..... 22 00000150: f193 e306 8a7b b8b1 e19e 26bb 9501 bfe7 .....{....&..... 23 00000160: 30ed 6485 02dd 1569 a834 b006 ec3f 353c 0.d....i.4...?5< 24 00000170: 1e1b 2b8f fa8f 001b df07 c6ac 5307 0203 ..+.........S... 25 00000180: 0100 0130 0d06 092a 8648 86f7 0d01 0105 ...0...*.H...... 26 00000190: 0500 0381 8100 14b6 4cbb 8179 33e6 71a4 ........L..y3.q. 27 000001a0: da51 6fcb 081d 8d60 ecbc 18c7 7347 59b1 .Qo....'....sGY. 28 000001b0: f220 48bb 61fa fc4d ad89 8dd1 21eb d5d8 . H.a..M....!... 29 000001c0: e5ba d6a6 36fd 7450 83b6 0fc7 1ddf 7de5 ....6.tP......}. 30 000001d0: 2e81 7f45 e09f e23e 79ee d730 31c7 2072 ...E...>y..01. r 31 000001e0: d958 2e2a fe12 5a34 45a1 1908 7c89 475f .X.*..Z4E...|.G_ 32 000001f0: 4a95 be23 214a 5372 da2a 052f 2ec9 70f6 J..#!JSr.*./..p. 33 00000200: 5bfa fddf b431 b2c1 4a9c 0625 43a1 e6b4 [....1..J..%C... 34 00000210: 1e7f 869b 1640 .....@

Si noti che nella riga 20, abbiamo, a partire dal settimo byte, la sequenza 03 4B 00 30 48 02 41 00... che indica

Se ignoriamo questo primo byte e guardiamo il resto di questa bit-string, possiamo analizzare i byte secondo le regole di codifica DER come una sequenza di 72 ( 0x48 ) byte, che codificano il modulo e l'esponente di RSA chiave pubblica come numeri interi.

Notiamo che il modulo stesso inizia con 02 41 00 ... , che indica

  • un intero ( 0x02 )
  • di 65 ( 0x41 ) byte
  • e anche a partire dal byte 00 .

La mia domanda è: perché questi byte sono qui? Per il modulo, che è interpretato come un numero intero, questo byte null non dovrebbe essere un problema. Tuttavia, all'inizio di una sequenza, sembra indicare un tag EOC, che non ha senso, poiché il cert è codificato con DER.

Grazie in anticipo per il tuo aiuto.

    
posta Stipe Matic 07.07.2016 - 20:26
fonte

1 risposta

5

ASN.1 BIT STRING può essere di qualsiasi lunghezza, quindi la codifica DER / BER arrotonda fino a un multiplo di 8 (un numero intero di ottetti) e prefigura un ottetto contenente il conteggio del riempimento aggiunto bit. Poiché questo valore BIT STRING è esso stesso una codifica DER e quindi già un multiplo di 8 bit, il numero di padding è 00.

ASN.1 INTEGER è firmato e la codifica DER / BER è il complemento big-endian di due. Il valore N 9BFC ... 5307 ha una grandezza che è un multiplo esatto di 8 bit; questo è comune poiché la maggior parte dei moduli RSA viene deliberatamente scelta per rendere le loro dimensioni in bit una potenza di 2 superiore a 2 3 , o un piccolo multiplo di essa, nel tuo caso 512. Perché questo sia rappresentato come il numero firmato a 0-bit deve essere prefissato, e poiché la codifica deve essere un ottetto integrale, in effetti prefiggiamo un 00 ottetto completo.

Negli anni '90, quando RSADSI stabilì una serie di Public Cryptographic Standards (PKCS) utilizzando una buona parte di ASN.1, Burt Kaliski scrisse una "Layman's Guide" che copriva rapidamente molti dettagli utili su ASN.1; vedi in particolare 5.4 e 5.7 in questo riferimento apparentemente definitivo o questo più comodo ma incerto permanente .

    
risposta data 08.07.2016 - 08:12
fonte

Leggi altre domande sui tag