¿Por qué hay 0x00 bytes principales en el campo subjectPublicKey de un certificado DER X.509?

4

Para un ejemplo simple, estoy usando un certificado RSA de 512 bits para ilustrar mi pregunta. El certificado se puede encontrar en el formulario DER y PEM aquí . He estado yendo a través del certificado de utilizar este Para mayor comodidad, he reproducido los bytes hexadecimales del certificado a continuación:

 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 .....@

Note que en la Línea 20, tenemos, comenzando en el séptimo byte, la secuencia 03 4B 00 30 48 02 41 00... que indica

Si ignoramos este primer byte y observamos el resto de esta cadena de bits, podemos analizar los bytes de acuerdo con las reglas de codificación de DER como una secuencia de 72 ( 0x48 ) bytes, que codifican el módulo y el exponente del RSA Clave pública como enteros.

Notamos que el módulo en sí comienza con 02 41 00 ... , indicando

  • un entero ( 0x02 )
  • de 65 ( 0x41 ) bytes
  • y también a partir del byte 00 .

Mi pregunta es, ¿por qué están estos bytes aquí? Para el módulo, que se interpreta como un entero, este byte nulo no debería ser un problema. Sin embargo, al comienzo de una secuencia, parece indicar una etiqueta EOC, lo que no tiene sentido, ya que el certificado está codificado en DER.

Gracias de antemano por tu ayuda.

    
pregunta Stipe Matic 07.07.2016 - 20:26
fuente

1 respuesta

5

ASN.1 BIT STRING puede ser de cualquier longitud, por lo que la codificación DER / BER se redondea hasta un múltiplo de 8 (un número entero de octetos) y prefija un octeto que contiene el conteo de relleno agregado pedacitos Dado que este valor de BIT STRING es en sí mismo una codificación DER y, por lo tanto, ya es un múltiplo de 8 bits, el recuento de relleno es 00.

ASN.1 INTEGER está firmado , y la codificación DER / BER es el complemento big-endian de dos. Su valor N 9BFC ... 5307 tiene una magnitud que es un múltiplo exacto de 8 bits; esto es común ya que la mayoría de los módulos RSA se eligen deliberadamente para hacer que su tamaño en bits sea una potencia de 2 mayor que 2 3 , o un pequeño múltiplo de los mismos, en su caso 512. Para que esto se represente como un el número con signo a 0 bits debe tener un prefijo, y como la codificación debe ser octetos integrales, de hecho, prefijamos un octeto completo de 00.

En la década de 1990, cuando RSADSI estableció una serie de Estándares criptográficos de clave pública (PKCS) utilizando una buena cantidad de ASN.1, Burt Kaliski escribió una "Guía de Layman" que cubría muchos detalles útiles sobre ASN.1 rápidamente; consulte especialmente 5.4 y 5.7 en esta referencia aparentemente definitiva o este es más conveniente pero sin duda permanente .

    
respondido por el dave_thompson_085 08.07.2016 - 08:12
fuente

Lea otras preguntas en las etiquetas