Respuesta corta: porque RFC 3280 , su predecesor, lo dice.
Respuesta más larga: porque históricamente los codificadores / decodificadores ASN.1 han tenido problemas con la codificación y decodificación de los enteros correctamente.
X.509 utiliza DER ASN.1 codificado , que entre otras cosas significa que los datos debe estar codificado en su forma mínima (la más corta). Como los enteros se almacenan en una forma de dos complementos de longitud variable, para codificar correctamente un entero no negativo que tiene su bit de inicio (MSB) establecido, se debe rellenar con un cero inicial, que en otras circunstancias no está permitido .
La redacción de X.690 ( enlace )
es tal que los 9 bits iniciales de un entero deben inspeccionarse para verificar la forma mínima, permitiendo así que los enteros positivos tengan 0 bytes iniciales.
A cita a Peter Gutmann
Hay un segundo pero: Históricamente, muchos codificadores han obtenido la firma de
enteros incorrectos, lo que significa que (a) si obtienes un número negativo (al menos en
el área de criptografía, con la que estoy más familiarizado) siempre es una codificación
error y nunca un uso deliberado de un valor negativo, y (b) debido a la
el uso generalizado de codificadores incorrectos, muchos decodificadores tratan todos los valores enteros
como sin firmar Entonces, si bien puedes usar valores negativos en teoría, no es una buena idea.
Idea en la práctica.
La determinación correcta de los números de serie es crítica cuando se trata de verificaciones de revocación. La ambigüedad es un enemigo.
Me parece que esto es exactamente el problema que tiene su codificador ...