Re: Serialization#draft-ietf-httpbis-message-signatures-00

Justin Richer <> Thu, 23 July 2020 20:29 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 9C4443A0D6D for <>; Thu, 23 Jul 2020 13:29:06 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -2.919
X-Spam-Status: No, score=-2.919 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HEADER_FROM_DIFFERENT_DOMAINS=0.001, MAILING_LIST_MULTI=-1, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id Y8-nra_XeVdX for <>; Thu, 23 Jul 2020 13:29:05 -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 1A7E33A0B54 for <>; Thu, 23 Jul 2020 13:29:04 -0700 (PDT)
Received: from lists by with local (Exim 4.92) (envelope-from <>) id 1jyhmZ-0005br-4J for; Thu, 23 Jul 2020 20:25:35 +0000
Resent-Date: Thu, 23 Jul 2020 20:25:35 +0000
Resent-Message-Id: <>
Received: from ([]) by with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <>) id 1jyhmX-0005bE-LP for; Thu, 23 Jul 2020 20:25:33 +0000
Received: from ([] by with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from <>) id 1jyhmT-0000wT-PJ for; Thu, 23 Jul 2020 20:25:33 +0000
Received: from [] ( []) (authenticated bits=0) (User authenticated as jricher@ATHENA.MIT.EDU) by (8.14.7/8.12.4) with ESMTP id 06NKPHlB013000 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 23 Jul 2020 16:25:17 -0400
Content-Type: text/plain; charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 13.4 \(3608.\))
From: Justin Richer <>
In-Reply-To: <>
Date: Thu, 23 Jul 2020 16:25:17 -0400
Content-Transfer-Encoding: quoted-printable
Message-Id: <>
References: <>
To: Anders Rundgren <>
X-Mailer: Apple Mail (2.3608.
X-W3C-Hub-Spam-Status: No, score=-10.2
X-W3C-Hub-Spam-Report: BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, W3C_AA=-1, W3C_IRA=-1, W3C_IRR=-3, W3C_WL=-1
X-W3C-Scan-Sig: 1jyhmT-0000wT-PJ fd7f03511c0e7eb46919d760b07002dd
Subject: Re: Serialization#draft-ietf-httpbis-message-signatures-00
Archived-At: <>
X-Mailing-List: <> archive/latest/37910
Precedence: list
List-Id: <>
List-Help: <>
List-Post: <>
List-Unsubscribe: <>

Hi Anders,

Thanks for your feedback. 

The proposed approach in the draft is to have a signature that can be serialized into an HTTP header, defined within the specification. If another spec wants to use this normalization and signature method and package the results differently, then it’s free to do so, but I don’t think that’s going to be a concern here.

The editors are looking at different signing methods and how we can use them with this specification. There are a lot of different algorithms for signing content out there, with different keys and limitations, and we need to figure out what and how we can support different things. We’ve still got some foundational cleanup and deeper issues to get through first, but that topic will come back up in the future. The authors are very familiar with JWS and are looking ways it might fit with this work.

 — Justin

> On Jul 17, 2020, at 3:52 AM, Anders Rundgren <> wrote:
> Dear List,
> Making signed HTTP requests serializable (in a reasonable way) is as far as I can tell not a part of the current agenda.
> FWIW, here is a [very] raw proposal for how this could be accomplished:
> - Build on JWS compact mode.
> - Put a hash and attributes of the of signed HTTP header data (you're the experts on this part) in the JWS Protected Header as an extension.
> - Put the payload in the JWS Payload element using the standard base64url encoding.
>   Optionally use the JWS "typ" Protected Header element to specify MIME type of the payload
> - Use the completed JWS compact string as the sole HTTP Body element
> For JSON-formatted data there is yet another possibility: combine with "in-line/detached" JWS (
>   {
>      "anyJsonElement": "something",
>          .
>          .
>      "signature":"eyJblahblahblah..blahblahblah"
>   }
> In both cases the HTTP Body element contains the serializable signed data.  Verifying signed HTTP header data is though not possible to perform after leaving the HTTP environment.  OTOH, for systems that actually depend on serialization, using HTTP headers as data carriers doesn't appear as a recommendable approach.  In my own work which heavily builds on counter-signatures for digital contracts, URL and current time are therefore represented in the JSON payload by "requestUrl" and "timeStamp" respectively.
> Thanx,
> Anders