[SCITT] Re: Signed Statement identity when the ECDSA signature is not byte-unique
Joel Hillier <jhillier@certisyn.com> Thu, 20 August 2026 21:06 UTC
Return-Path: <jhillier@certisyn.com>
X-Original-To: scitt@mail2.ietf.org
Delivered-To: scitt@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id C2A0812D0EA9A for <scitt@mail2.ietf.org>; Thu, 20 Aug 2026 14:06:25 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1787259985; bh=G7QBJDuu2msqNo8TPhz/YD9CvmhmTVYx4SPnToYcHG8=; h=From:To:CC:Subject:Date:References:In-Reply-To; b=KOYFObZ5NYkuFwrOxz7QWhMZZa1k2CkQjbV0V+mTs6zGcC4ibO6OoABDTqxyWl3w/ c+FszkEXLhrMQUJREWnha3XbBFVatC57uHbfolEB+xYFSETGCCT3gcyjfPvT+z3YS6 ZZQVynj8O4ckffIAvHjUVO5AEaO2SkfZtDeIpM3Q=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -1.897
X-Spam-Level:
X-Spam-Status: No, score=-1.897 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BlDg9P3OqN4A for <scitt@mail2.ietf.org>; Thu, 20 Aug 2026 14:06:24 -0700 (PDT)
Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11021116.outbound.protection.outlook.com [52.101.52.116]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id C347D12D0EA93 for <scitt@ietf.org>; Thu, 20 Aug 2026 14:06:24 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LYp54uVbmzeSaDhqz39iDdZyPZrfDyPiB3TsF1BkJfG07zlNW1ibFGRYvU2MTo445SPVHL7gMrOQSn1lYdaRvYywxkhOtLcPDG5w36qJ9Ja19GVVWIgTm7Wv2jBVsqPf9523Z4KrEMTHGJOvxeeZ6nqqEpCk5fhQC9KxrvJ1puLeqbWK6VIBHR5f1+rPn05nAo6+KFVfxkiCFvwuLrRPLkjMgyiPtBM3Jc9h/sDY1lZ1+pQW/v1NQOxGBA1IShqrdmtflW5vWwP3+7QEqv/V2/LfwyG382Jk/s5U2fD24ptyw9OT+b9APHWxDIoLn3DA/kuqDsV/EW6+a5J6JU2lRw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=G7QBJDuu2msqNo8TPhz/YD9CvmhmTVYx4SPnToYcHG8=; b=mWoTOmsQ6p/iTiH60mTwo+hCrslzGpBbDbNoahdE9TTV7RibLhNs5hmcAre25o+sQ82GgUo1kffG/aYfCF9Le2sHUeosi+VNAW4Lf9HIlmYWXK5ZoXqeGBKgw27SuOVfk3MQaLdDHm+3aSWb/y+/xtzGE2qdQFNMkl0ISiupVHUZTdY07Dy1JD+MyYzTZCbjFNaI9lzsFY3lY+/uHWin2fIT9auH5ke8fQAshzl5G66gPQc1rLq20lrwucX9NQ1BIszzCN7oz+U9qezmhppzWhMil7ORLGzXzyNS6Rss2jS+BqWvd+b162ywjfJ5JcDOncJ/3xBSzZN8lwSamo56Ug==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=certisyn.com; dmarc=pass action=none header.from=certisyn.com; dkim=pass header.d=certisyn.com; arc=none
Received: from BYAPR19MB2806.namprd19.prod.outlook.com (2603:10b6:a03:fa::15) by DM3PR19MB8475.namprd19.prod.outlook.com (2603:10b6:0:40::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.339.8; Thu, 20 Aug 2026 21:06:14 +0000
Received: from BYAPR19MB2806.namprd19.prod.outlook.com ([fe80::6c0f:94c8:c4c8:3fbb]) by BYAPR19MB2806.namprd19.prod.outlook.com ([fe80::6c0f:94c8:c4c8:3fbb%6]) with mapi id 15.21.0339.007; Thu, 20 Aug 2026 21:06:14 +0000
From: Joel Hillier <jhillier@certisyn.com>
To: "scitt@ietf.org" <scitt@ietf.org>
Thread-Topic: [SCITT] Re: Signed Statement identity when the ECDSA signature is not byte-unique
Thread-Index: AQHdMGhR+NHSRDq2vUOBvW1f/HYvY7am/2TG
Date: Thu, 20 Aug 2026 21:06:14 +0000
Message-ID: <BYAPR19MB280617ED814037356517C204ADA42@BYAPR19MB2806.namprd19.prod.outlook.com>
References: <CAMkGB8MLjYS8vohFpzcuA=hDiQKz3MMnndaq-H46jLM7aVbGvQ@mail.gmail.com> <BYAPR19MB2806870CAB4F65EA5BCDF3DFADA52@BYAPR19MB2806.namprd19.prod.outlook.com> <mEo2fD30wxCFTsWzSO-0JGalbUi1yRMxkVcRnhwOlhlgZoQ_EfIQx84PyyufVwGDZDCnDmY2-OOREsjEOj7-Tdp-vqINESe6UzjmpXu1vlM=@vaara.io>
In-Reply-To: <mEo2fD30wxCFTsWzSO-0JGalbUi1yRMxkVcRnhwOlhlgZoQ_EfIQx84PyyufVwGDZDCnDmY2-OOREsjEOj7-Tdp-vqINESe6UzjmpXu1vlM=@vaara.io>
Accept-Language: en-US
Content-Language: en-US
X-MS-Has-Attach:
X-MS-TNEF-Correlator:
msip_labels:
x-ai-generated: mcp-office365
authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=certisyn.com;
x-ms-publictraffictype: Email
x-ms-traffictypediagnostic: BYAPR19MB2806:EE_|DM3PR19MB8475:EE_
x-ms-office365-filtering-correlation-id: 768f55f8-9b4b-4091-fa81-08defefedeec
x-ms-exchange-senderadcheck: 1
x-ms-exchange-antispam-relay: 0
x-microsoft-antispam: BCL:0;ARA:13230040|1800799024|366016|23010399003|376014|56012099006|7055299009|10067099003|3023799007|6133799003|18002099003|22082099003|8096899003|5023799004|4143699003|38070700021;
x-microsoft-antispam-message-info: ZynmaG16irPxTOcWjd4o7+BH5j+Lgsl8omiDNpc7Z5YvLHWZ161gLLQwKNJ46dmDfkQ79z39Xs3rqitTnBlW3hNN8jmGcUzrn92/lKZ6jM8DIVMucmY2tXfyBHZqI5WFbJRMiLnkR4+NFdf/Tb2wQ/PcnPxibwexKew54YhU/nm2lYmeweWn6n2g1H1CMFui3Kw5dYGtpC/tqB/lAoVMn1L2p7rpampFHDw2zYV1UydStLjrMczcB0soJyS0WizNK+VRmNBq5cjnUEzPrnNsIY73E896T3hOUCNJVSoyy0Z/mI387WW6Ri6Ql8xyYAiSNo1ovBe9uALeDKmBkr0hvOhWqHa5C9Pzy+LAzXI1n16/Xqycc0UNG98ykLTqIiFgrJ03vpCutegiSpU4W8zZS0n+vfv5HxKT4g6OOkqbSlDxob0l4aIW19rsyejafp0Pv9jmJo5vtqPyisHy+kTn6dJD7L59qkSLoc+N4lcUzoDn8ifut5/TbJbBXPhLiXZKBC2s5dKJBR1MDv5FiUmO4fd3XtEftgTrgWLKALYfZZR5Y1K1n98zzYENM88dB7RTedHC1x+TOHyOMuHjryF/pzb0JmmUbnMS1H/jbqHhjRTiSzTS6w5ua/VAYJbN/wlmxjjuRrHPBAoToWndGxmAkhNxPPERlx1RW6vZmi1be/oMHwitJYZIrfeaoi9UsyjU0loGhWuG0Xsis0JWZTGdzmgI0UcY1C5vPqpqK/Hr3XTNnF1WMQlVj649y3xQ6VPm
x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR19MB2806.namprd19.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(23010399003)(376014)(56012099006)(7055299009)(10067099003)(3023799007)(6133799003)(18002099003)(22082099003)(8096899003)(5023799004)(4143699003)(38070700021);DIR:OUT;SFP:1102;
x-ms-exchange-antispam-messagedata-chunkcount: 1
x-ms-exchange-antispam-messagedata-0: fDeDKtP7Exu9oP/dbRkcA5HRh+j7ZJDpP3W9uPkIPsIo3ngTD58NyBq4VEKZHxDrqhLlbGvmGvQvFGLKMxeaAPmgeho0M/X3+BnFCuAhcs417ITK5OrZA9dUr8gnAa2hS6duaU13Nr6WpP7jI048o/uo2FxRKxES7eJiv5aw7eS7yEAEsnatEPZaoWORVl8PlJwrbIwqRXakivCx8L9pEjPq83MhSm5ZtXk9cJ0KVp8FgEuJvSmhpKHRhiXjsxxorlRTBWomgXQyXWdMw+Xa6XS5sCvH0Hr3Wm8UtgiI+HzE4LxQS5nUAL6qqjUAwHnPo8b9lf41hJdWhUfGadjg5oz1lwJ3W729AEsH9XQ/rg/j281LfiQbdgQZXfz1ZLNN4kXEfs600DBg/o5lQQYEUuvR8djPWytGggffYPDB1JGOhr6GHJaAYZUTRZ15rvLdpYjGvxOCDc6hcRcy5I4t7cCda0KRQ3U2a72AfEwEp1WjPjd5jw8YfT4aKNaJqQ8wqF46IaSaeqDZuWTcWIOD1/eNB/Zw1emMmP5g9ae9mAvyYRwutofLyR4mnt1W174qaS+0hTTJXa9pXXEoKY2X7oFyn6o+NVBm4T3XgKFsXIIuDUPXBXcG6radfXIqFN6kZeqEQ+JiLlZA6kbsRie0/DxF+y3KFJu37jAgIpzkmqJ1+Hjy7//nAxwODg9XrDXo3BFKVI9Hy1XkQGj8MOIEP3qLw7fn3yOwqYoYq3ygcm94saihFYvXIj7t04uN1/tKUWB7W9I0qrnnwVYwhgvT4ehaFE41+szamSQkNieGe0rGBsrJnm232HyVvTR+Q0TLYYfT/m+5npFw9OEjew0qkRs+nncdyKJROw5KDo4bFZJtRAUJWsQiBeu/JTLVVO3fFpvvL8vq2m7+PEijO4scuJpduyv7JVb3hv72Ub9st0uARd3avuTtCasI3z7ddd8MeM+i7Ul3gVnIEkjYqeER8kRj2CAeyEoUtBgRJ21mGfbbwNGF6czEk68l7DpQqXggskaG4XALrPoYe5l9vAu0rGEWNF0if1cPIIcoWEfC6FxlThll+56FcQ8uVo/d/fueaE2XMxNJDo1m7XhgA60w6DPPcP3grHyq3kz642qiJSR5sN2IbnfgS60zBMxfLuAB2j7VyLmRdpO5BS3BimaYHiGrYBgxi+Cd/MEAlyfcOlpuCVsod5ADxtOr2YSzZWKw/NLFs558oRTNqS0Mu+96drFRUqvs5/ngsVDfRR1ONvYCVPFVNQZ+Wioa4nDRwyEPHNYLHx4BRBBYfGfDAYMA6ePALA2lUqQATtsjNc9Y/H6zE+DC2h+99JN8HB2e1DWx8U/DYJLaqth04B1adPsSPGxm1k5xNuMX7kueEpB/leppbGqfBFU8pnrbik4jGS9+Ov/hlOtuOhv4wcv7eBhEXfvmbSj6Prl53eYa+MdiuxfiJ71jyIJwnWyTCezcKlRB/l9FY5cJI3NAcPuGqqeYQXPNC66LxuECHq1lpKoAS9SyY0/NiSisgVw3kIStePQ90MDtL01US4/H/8/malrwXhRAM4HaiCP0QVvSxeYB8pTgvRl6KqzVfQnKkaar2TWUgP8fb/dcGGlOYXEbxfrL0r0RQd47d14ccOMdLXiaFV0UWwppWmQIHD6+0dr+SjtpidMDY2OvsTgKQTMVRhsiGAzs0jpIaUnCcYQ8BbHqTahZpYO/BHUQl+hsfPpX/t/U
Content-Type: multipart/alternative; boundary="_000_BYAPR19MB280617ED814037356517C204ADA42BYAPR19MB2806namp_"
MIME-Version: 1.0
X-OriginatorOrg: certisyn.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-AuthSource: BYAPR19MB2806.namprd19.prod.outlook.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 768f55f8-9b4b-4091-fa81-08defefedeec
X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Aug 2026 21:06:14.8349 (UTC)
X-MS-Exchange-CrossTenant-fromentityheader: Hosted
X-MS-Exchange-CrossTenant-id: 539494d9-b23d-4e5a-bc74-62613e2403f0
X-MS-Exchange-CrossTenant-mailboxtype: HOSTED
X-MS-Exchange-CrossTenant-userprincipalname: ohVD1kBjbTze54FcPFAh4tbi+pSaMGm5U16/uCnWbWYKG8QesG67mxzCVWt79dOq1DiVNtxr2aioQmrC3ZfEuQ==
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PR19MB8475
Message-ID-Hash: XQ3L5NGQPCD7GOOSZBOUNVBCAQ5QY6JH
X-Message-ID-Hash: XQ3L5NGQPCD7GOOSZBOUNVBCAQ5QY6JH
X-MailFrom: jhillier@certisyn.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: Henri Sirkkavaara <hello@vaara.io>, "anton.sokolov@tyche.institute" <anton.sokolov@tyche.institute>
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [SCITT] Re: Signed Statement identity when the ECDSA signature is not byte-unique
List-Id: "Supply Chain Integrity, Transparency, and Trust" <scitt.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/scitt/RrpRgSGuLaUO021oKIcXpApmuPU>
List-Archive: <https://mailarchive.ietf.org/arch/browse/scitt>
List-Help: <mailto:scitt-request@ietf.org?subject=help>
List-Owner: <mailto:scitt-owner@ietf.org>
List-Post: <mailto:scitt@ietf.org>
List-Subscribe: <mailto:scitt-join@ietf.org>
List-Unsubscribe: <mailto:scitt-leave@ietf.org>
Hi Anton, Henri,
The files are run. Result first, then a correction to something I told this list on Wednesday.
Both digests match what you published before I opened them. Both 395 bytes, protected header and unprotected header and payload byte-identical, only the 64-octet signature differing. r equal, s2 exactly n - s1, both verifying against the attestation-certificate key. One Sig_structure, so one Signing Input Digest, e104e763c87f8bda.... Your protected header decodes to {1: -7, 4: "piv-9c/37587575"}, and slot 9c is the digital-signature slot, which matches your account of the device.
Against ARP's ledger constructions: -03 Prior-Entry Hash differs, -04 is the same. Merkle leaf over the served envelope gives two leaves for one act, over the Sig_structure gives one. So the repair does what it was written to do, on bytes a secure element produced rather than ones I generated to prove a point.
There's one thing in your files you didn't mention, and I think it makes the case worse rather than better. Your original is high-S and the twin is low-S. The twin isn't an exotic artefact. It's the canonical low-S normalisation of the original, which is exactly what an implementation following the usual hardening advice produces on receipt.
So the second identifier doesn't need an attacker at all. A well-behaved middlebox that normalises s on ingest manufactures it, out of the honest signer's own bytes, while believing it's improving matters. "Mandate low-S" doesn't merely fail to close this. Applied to an artefact already in flight, it's one of the ways the gap gets opened. Worth a line in the payload-binding draft, because low-S is the first thing everyone reaches for and it's being reached for in the wrong place.
Now the correction. I said five constructions. It's six.
I ran a fresh adversarial pass over the whole document yesterday, on Henri's depth rule rather than on the thing I was looking at, and it found a sixth carrier that both of my earlier sweeps walked past.
ARP has an Override Record: where an adversarial pre-transmission test fails and a human operator authorises the reconciliation anyway, the Output carries a record of that, and the last element of the record is a COSE_Sign1 by the authorising operator. Deliberately by the operator and not by the server, because a record the server signs attests only that the server says someone authorised it. That signature is a field of the Reconciliation Output. The Reconciliation Hash preimage names two carriers to be replaced by Signing Input Digests, the register signature in each Query Binding Record and the register signature in each Non-Answer Statement, and the Override Record is neither.
So a third party holding an override signature substitutes (r, n-s), and the Reconciliation Hash moves. It's the ledger index, so the entry is indexed under a value the requester can't reproduce. It's a field of every ledger entry, so the Self-Entry Hash moves, so the Entry Signature payload moves, so the next entry's Prior-Entry Hash doesn't match. A reader concludes the chain is broken when the operator equivocated about nothing, which is the sentence I wrote in the security section for a case one level shallower than this one.
How it was missed is the part worth having. The first sweep looked for digests taken over signed artefacts, found the Reconciliation Hash embedded a register signature, and repaired that. The Override Record is a signature by a party who is neither the server nor a register, travelling to the server over a channel the server doesn't control, sitting in a field the preimage already carried. It failed no test that was applied to it. No test was applied to it.
Henri, this is your breadth rule with the last step taken. One file being right is no evidence about the next one, and an enumeration of carriers is right until someone adds a field. So the repair isn't a sixth item on the list. The document now states the rule over the class: in any preimage this document defines, every signature made by a party other than the party computing the digest is replaced by its Signing Input Digest. The enumeration stays as a reader's aid, with a note saying that is all it is. Correctness that expires on the next revision isn't the property the section exists to establish.
I'd suggest the payload-binding draft state it that way too, for the same reason. "Key the identifier on the signed payload" is right and is about one artefact. "No preimage carries a signature made by a party other than the one computing the digest" is the rule that survives someone adding a field to that artefact.
The wrong answer, since I said I'd report those too.
Take a holder of the original who's shown an inclusion proof issued over the twin. Under -03, ARP's leaf-binding rule requires the verifier to recompute the leaf from the object and refuse the proof when it doesn't match. It refuses. That's correct, and it's the right outcome.
What the document didn't give it was any way to say why. The section said MUST refuse and stopped. ARP had reason codes for a stale attestation, an unverifiable attestation, an unresponsive register, an exhausted budget and an incomplete notarisation, and nothing at all for "the object I hold and the object this proof commits to are the same signing act under two encodings."
Henri, that's your false split arriving in the vocabulary rather than in the digests. The digest is stable now and the report was still wrong, because a deployment reporting this as detected tampering reports something that didn't happen, and it'll be believed, since the check that produced it worked exactly as specified. Fixing the construction and leaving the error taxonomy alone gets you a correct refusal with a false explanation attached.
There's now a verification-outcome vocabulary with four values, and one rule that matters: where the artefact a verifier holds and the artefact the proof commits to have equal Signing Input Digests and unequal enveloped bytes, it MUST report that and MUST NOT report a leaf mismatch or a root mismatch. Same-act-two-encodings is evidence of a re-encoding and of nothing else, and it has to be tested for before either of the outcomes that accuse somebody.
The same pass found one reason code carrying five distinct causes, because four other sections pointed at it for conditions its own definition never named: a failed signature, an echo mismatch, a query-binding mismatch, a fabricated source-data identifier, and a register attesting something the registry says it can't. A register operator reading its own entry was told something was wrong with its attestation and not whether the fault was its own. Now five values.
And a residual that isn't in ARP's digests any more.
Evaluation Sweep Statements chain by carrying the transparency-service identifier and EntryID of the previous Statement's notarisation. If a Transparency Service keys EntryID on the enveloped bytes, one Statement has two EntryIDs available to it, and a party walking the chain backwards from a pointer to one of them holds a pointer the other copy's chain doesn't reach. SCRAPI retrieves by EntryID and offers no query surface, so that party can't search for the other one.
That series is ARP's evidence that a sweep it was obliged to perform was performed. A chain a third party holding no key can make look broken, using bytes the honest signer produced, is a weaker instrument than my own section claims. It isn't ARP's defect and ARP can't repair it alone, but ARP can state what it assumes about EntryID stability, and now does. That's a concrete consequence for the SCRAPI point rather than a hypothetical one.
The rest, briefly.
Henri, your restatement of the rule is the right one and it isn't what I said. "A digest can carry a signature it never names, through an object someone else signed" is the finding. Your Tuesday sentence was breadth. The Reconciliation Hash was depth: a construction that names an exclusion, honours it exactly, and is still over signature-bearing bytes because the preimage embeds an artefact a third party signed. The Override Record is both at once, which is presumably why it survived two sweeps.
On your third finding, the direction distinction is the part I'd carry. Tuesday's two let two byte-different artefacts claim one signing act. grant_fingerprint lets one act produce two identities. A false merge collapses a distinction that's real and an event gets under-counted. A false split manufactures one that isn't, and a verifier recomputing from the grant it holds fails to match a receipt for an authorization that did govern. A false merge loses information. A false split manufactures an accusation.
A sweep written for one direction won't find the other, which is why you hadn't looked. One asks whether two artefacts can reach one identifier that should have been two; the other asks whether one act can reach two identifiers that should have been one. Different queries over the same tree, and the first returns nothing at a site that only fails the second way.
And the test you applied to your own repair is the one I'd name explicitly. You checked that the intent survives: over the signed payload and the signing key, a re-mint under a different key or a changed scope still moves the value, and a malleated twin doesn't. A repair has to preserve every discrimination the construction was written to make, and drop only the ones that were never real. Mine failed that in one place and only stating the failure made it visible: the rule that an entry is signed exactly once had a verifier-side test before the change and doesn't have one after. Checking the discriminations you keep is half the test. The other half is writing down the one you lost.
Anton, on the credit: yes, happy to be named, and I'd rather the draft carry the rule than the names. "A checker that rebuilds the preimage it was meant to perturb reports exactly the property it was written to demonstrate, and it passes." That's yours as a sentence, it's sharper than mine, and it generalises past signatures to any harness that derives its expected value from the subject under test.
And your correction lands on the same form mine did, independently. The supportable claim is that RFC 9053 2.1 constrains neither r nor s, and that SEC1 4.1.4 and FIPS 186-5 6.4.2 range-check only. Two people retracting the same locator in the same week is a fair argument that 4.1.3 is a citation the whole area has been passing along without opening.
Transcript and the script are in the repo under _audit/anton/, no arguments, standard library plus cryptography.
Joel
- [SCITT] Signed Statement identity when the ECDSA … Anton Sokolov
- [SCITT] Re: Signed Statement identity when the EC… Henri Sirkkavaara
- [SCITT] Re: Signed Statement identity when the EC… Joel Hillier
- [SCITT] Re: Signed Statement identity when the EC… Henri Sirkkavaara
- [SCITT] Re: Signed Statement identity when the EC… Henri Sirkkavaara
- [SCITT] Re: Signed Statement identity when the EC… Joel Hillier
- [SCITT] Re: Signed Statement identity when the EC… e.dogru
- [SCITT] Re: Signed Statement identity when the EC… Anton Sokolov