From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 9EB75C6E for ; Fri, 8 Nov 2019 05:12:03 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.6 Received: from mail-40133.protonmail.ch (mail-40133.protonmail.ch [185.70.40.133]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id E4E5067F for ; Fri, 8 Nov 2019 05:12:02 +0000 (UTC) Date: Fri, 08 Nov 2019 05:11:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=default; t=1573189920; bh=YJcMT+vmeq9yFxX1/JiyJuuDTRis6aSsnbxfFpflLcY=; h=Date:To:From:Reply-To:Subject:In-Reply-To:References:Feedback-ID: From; b=cZLyHth5LRt/Km0ZFt+0Wp9lqulkQ+cuCbPvuFNSskze0fGEi8ekeyskS6cz/lAS+ 09995GTAldYz5VbeqxHvLccc5gBdJU4Bgt6cy/QzjHosHB8vd2R8sOyPFBzD5Mv86C CSKAZHaTimExr/bUnjnGbc5K0HcHLv3RW4+d3dVk= To: Pieter Wuille , Bitcoin Protocol Discussion From: ZmnSCPxj Reply-To: ZmnSCPxj Message-ID: In-Reply-To: References: Feedback-ID: el4j0RWPRERue64lIQeq9Y2FP-mdB86tFqjmrJyEPR9VAtMovPEo9tvgA0CrTsSHJeeyPXqnoAu6DN-R04uJUg==:Ext:ProtonMail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-0.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DOS_RCVD_IP_TWICE_B, FREEMAIL_FROM, FROM_LOCAL_NOVOWEL, RCVD_IN_DNSWL_LOW autolearn=no version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: Re: [bitcoin-dev] Bech32 weakness and impact on bip-taproot addresses X-BeenThere: bitcoin-dev@lists.linuxfoundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Bitcoin Protocol Discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 08 Nov 2019 05:12:03 -0000 Good morning Pieter, and all, Can we modify Bech32 SegWit address format for version 1 and above as below= ? * The data-part values: ** 1 byte: the witness version + ** If the witness version is non-zero, 1 byte: the length of the witn= ess program. ** A conversion of the 2-to-40-byte witness program (as defined by [h= ttps://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki BIP141]) to b= ase32: *** Start with the bits of the witness program, most significant bit = per byte first. *** Re-arrange those bits into groups of 5, and pad with zeroes at th= e end if needed. *** Translate those bits to characters using the table above. This retains the ability of a bech32 address to specify any valid witness l= ength and allows future version 1 addresses with lengths other than 32, whi= le closing this malleation. Older software being given the modified v1 address format would mis-send it= to the wrong witness program, however. Alternately we could just keep using version 0 in the address format foreve= r. The requirement would be to ensure that SegWit vN (N >=3D 1) output witness= programs would have a data-part value encoded as below: * The data-part values: ** 1 byte: legacy witness version, which must always be 0. ** 1 byte: actual witness version, which must be non-zero. ** 1 byte: padding length: 0 or 1. ** If padding length is 1, 1 byte: padding, which must be 0. ** 1 byte: witness program length. ** variable: witness program. A writer for a v1 or later address would initially set an empty padding, th= en compute: 1 // actual witness version + 1 // padding length + 1 // witness length + witness_length If the above sum is 20 or 32, then the writer selects a non-zero padding an= d inserts the padding byte so that the above sum is now 21 or 33. To a reader that understands only bech32 v0, such an encoding would look li= ke a SegWit v0 invalid-program-length, and be rejected. A reader which understands the above protocol would, instead of rejecting a= SegWit v0 invalid-program-length, instead attempt to parse it as above fir= st, and consider it as SegWit v1 or higher if it was parsed correctly as ab= ove. The above proposal is of course ridiculous and I am now currently running d= iagnostics on my processing units to see if further glitches occur in test = reasoning skills. Regards, ZmnSCPxj