Risposta breve: perché RFC 3280 , il suo predecessore, lo dice.
Risposta più lunga: perché storicamente i codificatori / decodificatori ASN.1 hanno avuto problemi con la codifica e la decodifica corretta degli interi.
X.509 utilizza codificato ASN.1 , che, tra le altre cose, significa che i dati deve essere codificato nella sua forma minima (più corta). Poiché gli interi sono memorizzati in una forma a due complementi di lunghezza variabile, per codificare correttamente un numero intero non negativo che ha il suo bit di riferimento (MSB) impostato, deve essere riempito con uno zero iniziale, che in altre circostanze non è consentito. .
La dicitura di X.690 ( link )
è tale che i 9 bit iniziali di un intero devono essere controllati per verificare la forma minima, consentendo così a tali numeri interi positivi di avere 0 byte iniziali.
Per quote Peter Gutmann
There's a second but: Historically many encoders have gotten the signedness of
integers wrong, which means that (a) if you get a negative number (at least in
the area of crypto, which I'm most familiar with) it's always an encoding
error and never a deliberate use of a negative value, and (b) because of the
widespread use of incorrect encoders, many decoders treat all integer values
as unsigned. So while you can use negative values in theory, it's not a good
idea in practice.
La corretta determinazione dei numeri di serie è critica quando si tratta di controlli di revoca. L'ambiguità è un nemico.
Mi sembra che questo sia esattamente il problema che sta avendo il codificatore ...