Re: [pkix] Why is the crlNumber an OCTET STRING?

Peter Gutmann <> Wed, 21 April 2021 15:21 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id C89E13A2BF3 for <>; Wed, 21 Apr 2021 08:21:15 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.597
X-Spam-Status: No, score=-2.597 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_NONE=0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id lh0mLGv67IjO for <>; Wed, 21 Apr 2021 08:21:11 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by (Postfix) with ESMTPS id C0FDB3A2BEE for <>; Wed, 21 Apr 2021 08:21:10 -0700 (PDT)
Received: from ( []) (Using TLS) by with ESMTP id au-mta-104-u5qmfwJwPa-Lx0NZDsJnGQ-1; Thu, 22 Apr 2021 01:21:03 +1000
X-MC-Unique: u5qmfwJwPa-Lx0NZDsJnGQ-1
Received: from HK2P15301CA0003.APCP153.PROD.OUTLOOK.COM (2603:1096:202:1::13) by (2603:10c6:201:26::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.21; Wed, 21 Apr 2021 15:21:01 +0000
Received: from (2603:1096:202:1:cafe::28) by (2603:1096:202:1::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4087.10 via Frontend Transport; Wed, 21 Apr 2021 15:20:59 +0000
X-MS-Exchange-Authentication-Results: spf=none (sender IP is;; dkim=none (message not signed) header.d=none;; dmarc=none action=none
Received: from ( by ( with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.4065.21 via Frontend Transport; Wed, 21 Apr 2021 15:20:58 +0000
Received: from ( by ( with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 22 Apr 2021 03:20:57 +1200
Received: from ([fe80::e4e7:eb90:ab28:1bf5]) by ([fe80::e4e7:eb90:ab28:1bf5%14]) with mapi id 15.00.1497.015; Thu, 22 Apr 2021 03:20:57 +1200
From: Peter Gutmann <>
To: "Manger, James" <>, Russ Housley <>
Thread-Topic: [pkix] Why is the crlNumber an OCTET STRING?
Thread-Index: AQHXNisBKMOxCIvjxkGR+Ro1p9pc2aq9JmQAgADNMVL//zkzAIAAzrgj//9+3gCAAZbUkA==
Date: Wed, 21 Apr 2021 15:20:56 +0000
Message-ID: <>
References: <> <> <>, <>, <>, <>
In-Reply-To: <>
Accept-Language: en-NZ, en-GB, en-US
x-ms-exchange-transport-fromentityheader: Hosted
x-originating-ip: []
MIME-Version: 1.0
X-EOPAttributedMessage: 0
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: d58ab557-1fb1-4333-6cfb-08d904d910f4
X-MS-TrafficTypeDiagnostic: ME2PR01MB2225:
X-Microsoft-Antispam-PRVS: <>
X-MS-Oob-TLC-OOBClassifiers: OLM:8273
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0
X-Microsoft-Antispam-Message-Info: M0ke3Nsw0Pu2WQ2q377mINIqm9pVL/7XOW7r6qbRWYcp4QtVeiWermb/cMuUrsTE8lSjtpZASFi7Xs0pil9Qvv25xbTr+L8yu3CsEj+C5Ep43GicPgUi10bcM8hpQAGc5JjeI4vTFAdL8+ujtsWtwJYIVWJQ2aORm/s92DjCULr0Hr9wQnxzTL1yxWsY+6lwWhf7qaXNH3nB4VN81YM7ZANSWzRjbrvH9nKbH+EgpNCfWQxqB9tNKLir1ND84dZEqNRZwTZ9gQIXZFI5UhqBRvHpXKu4IJ/2q/WbxUDfVziS4ipYtiZCa4WJeWsKMsLQDS5PSOSU+XUid/1/YR3+/SXPY4WLOt6xYFxS4cNKE/4CSkLfYFVdxfTO70axwCTQVjVIvs30tIy0YPfA3cXY1/Sw7w/G5k4mtKY8flbyib927FwYPtrA66qa2igwxvevXwNG2kQ+oVtz+mWHvDQt5DMyGbrR2R+QD+oGb4nBVWXUUCdlJdVbXz9jCiypjGChoANAstK32PWPKGEry+od6T92SqLzR/Icq/F9MF58J0BX2+HEp146SEKv7iJOuxbZmjen/3Ewuwr2hEmUi9Qb9p5rDD8zMDJeR6puxQpzY5pOhm9DFFrewe5wjJUPsB7ud2Tcq6G8YLvY6AguXWCgqQ==
X-Forefront-Antispam-Report: CIP:; CTRY:NZ; LANG:en; SCL:1; SRV:; IPV:CAL; SFV:NSPM;;; CAT:NONE; SFS:(4636009)(346002)(39850400004)(376002)(396003)(136003)(36840700001)(46966006)(36906005)(2906002)(7636003)(186003)(2616005)(82310400003)(83380400001)(786003)(478600001)(316002)(70206006)(110136005)(82740400003)(5660300002)(86362001)(336012)(26005)(356005)(8936002)(70586007)(8676002)(4326008)(47076005)(36860700001); DIR:OUT; SFP:1101
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Apr 2021 15:20:58.5055 (UTC)
X-MS-Exchange-CrossTenant-Network-Message-Id: d58ab557-1fb1-4333-6cfb-08d904d910f4
X-MS-Exchange-CrossTenant-Id: d1b36e95-0d50-42e9-958f-b63fa906beaa
X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=d1b36e95-0d50-42e9-958f-b63fa906beaa; Ip=[]; Helo=[]
X-MS-Exchange-CrossTenant-AuthAs: Anonymous
X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem
X-MS-Exchange-Transport-CrossTenantHeadersStamped: ME2PR01MB2225
X-Mimecast-Spam-Score: 0
Content-Language: en-NZ
Content-Type: text/plain; charset=WINDOWS-1252
Content-Transfer-Encoding: quoted-printable
Archived-At: <>
Subject: Re: [pkix] Why is the crlNumber an OCTET STRING?
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: PKIX Working Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Wed, 21 Apr 2021 15:21:16 -0000

Manger, James <> writes:

>Presumably CRLNumber has the “20 octet” language merely for consistency with
>CertificateSerialNumber. They sound so similar: numbering CRLs vs numbering

Just noticed that the RFC text kinda confirms this:

   As noted in Section, serial numbers can be expected to
   contain long integers.  Certificate users MUST be able to handle
   serialNumber values up to 20 octets in length.  Conforming CAs MUST
   NOT use serialNumber values longer than 20 octets.

   As noted in Section 5.2.3, CRL numbers can be expected to contain
   long integers.  CRL validators MUST be able to handle cRLNumber
   values up to 20 octets in length.  Conforming CRL issuers MUST NOT
   use cRLNumber values longer than 20 octets.

So it's a cut&paste of the text for certificate serial numbers, for which
there's a legitimate reason, the German tank problem, to not use actual serial

>It is almost conceivable that a CA could hash the details of a CRL’s scope,
>then replace the least-significant, say, 64 bits with nano-seconds-since-1970

Or ISO 8601 dates stuffed into the "serial number" for the CRL.

That does actually point out another issue though:

   The CRL number is a non-critical CRL extension that conveys a
   monotonically increasing sequence number for a given CRL scope and
   CRL issuer.  This extension allows users to easily determine when a
   particular CRL supersedes another CRL.

Isn't that what the dates in the CRL are for?  The only argument I can see for
using crlNumber is if you're brave enough to risk using delta CRLs.