[EXTERNAL] Re: rfc5280 serialNumber question.

Robert Moskowitz rgm at htt-consult.com
Sun Jul 23 19:52:07 UTC 2023


While on my flight to IETF, I made 2 certs identical in content other 
than the serial numbers.  You can clearly see the 0x00 prepended:


     0:d=0  hl=4 l= 331 cons: SEQUENCE
     4:d=1  hl=3 l= 254 cons:  SEQUENCE
     7:d=2  hl=2 l=   3 cons:   cont [ 0 ]
     9:d=3  hl=2 l=   1 prim:    INTEGER           :02
    12:d=2  hl=2 l=   9 prim:   INTEGER           :9F07C87244927FBE
    23:d=2  hl=2 l=   5 cons:   SEQUENCE

     0:d=0  hl=4 l= 330 cons: SEQUENCE
     4:d=1  hl=3 l= 253 cons:  SEQUENCE
     7:d=2  hl=2 l=   3 cons:   cont [ 0 ]
     9:d=3  hl=2 l=   1 prim:    INTEGER           :02
    12:d=2  hl=2 l=   8 prim:   INTEGER           :1BB3EC3B4F2E645C
    22:d=2  hl=2 l=   5 cons:   SEQUENCE


And after spending lots of times reading the appropriate sections of 
5280, I realized I was making this harder in my mind than needed. So the 
encoding puts 0x00 in front of a type Integer.  The decoder just rips it 
off and makes sure the resultant value is positive.

But it does increase the DER by a byte.  Interestingly in this specific 
case the PEM was the same size for both.


On 7/21/23 14:20, Erwann Abalea wrote:
> On 8 bits, if the highest bit is set to 1, then the value is between 
> 0x80 and 0xFF.
> In your examples, the highest octet of the integer has its highest bit 
> set (0xFE in the first example, 0xAE in the second), and therefore the 
> DR encoding added a heading 00, making the real length 9 octets (l=9 
> on third column).
>
>
>
> On Fri, Jul 21, 2023 at 8:00 PM Robert Moskowitz <rgm at htt-consult.com> 
> wrote:
>
>     I looked at a couple of certs.  I might think that if the first
>     hex is
>     "F" then the 1st bit is 1, but:
>
>
>
>          8:d=2  hl=2 l=   3 cons:   cont [ 0 ]
>         10:d=3  hl=2 l=   1 prim:    INTEGER           :02
>         13:d=2  hl=2 l=   9 prim:   INTEGER :FE0E6F3753087370
>
>          8:d=2  hl=2 l=   3 cons:   cont [ 0 ]
>         10:d=3  hl=2 l=   1 prim:    INTEGER           :02
>         13:d=2  hl=2 l=   9 prim:   INTEGER :AEB77AEE2A3CBCD3
>
>
>     I am not seeing a difference in the serialNumber field length.
>
>     On 7/21/23 08:58, Robert Moskowitz wrote:
>     > Per sec 4.1.2.2
>     >
>     >    Given the uniqueness requirements above, serial numbers can be
>     >    expected to contain long integers.  Certificate users MUST be
>     able to
>     >    handle serialNumber values up to 20 octets. Conforming CAs
>     MUST NOT
>     >    use serialNumber values longer than 20 octets.
>     >
>     >
>     > At some point some years ago it was pointed out here that
>     serialNumber
>     > OID encoding preappends 0x00 if the first bit is a 1.
>     >
>     > Does this actually make the serialNumber a byte longer? Or is this
>     > only encoding?  Thus IF that first bit is a 1, obviously the OID
>     value
>     > is a byte longer.  But when the serialNumber OID is decoded is this
>     > longer value returned or the original value?
>     >
>     >
>     > I am girding up to debate an implementation where the CP says
>     > serialNumber MUST be unique, and their implementation uses a
>     20-byte
>     > SN.  I don't think they take care at all about the value of the 1st
>     > byte.  I doubt in their testing to date they have generated a SN in
>     > that range.
>     >
>     > So how does the SN with the added byte get decoded?
>     >
>     > thanks
>     >
>     >
>
>
>
> -- 
> Cordialement,
> Erwann Abalea.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mta.openssl.org/pipermail/openssl-users/attachments/20230723/0cc60a2e/attachment.htm>


More information about the openssl-users mailing list