Hi Peter, > COLDCARD makes signatures exacly like that, when told to sign with a segwit > address: > > % ckcc msg -s Hello > Hello > bc1qzeacswvlulg0jngad9gmtkvdp9lwum42wwzdu5 > HxuuWQwjw0417fLV9L0kWbt7w9XOIWKhHMhjXhyXTczcSozGTXM4knqdISiYbbmqSRXqI5mNTWH9qkDoqZTpnPc= > > Unfortunately, I do not know of any "verifiers" that will accept the above > signature, but there is no alternative since the various BIP-322 proposals > never gained wide acceptance.
This is largely why I avoided basing my idea off of BIP-322. Not only does a BIP has a higher chance of acceptance the less aspects it modifies, but I feel that although its not urgent (such as, for example, the segwit deployment BIP), this BIP should be made as soon as possible. It's also why I avoided specifying anything about testnet or regtest address singing - thankfully, I have yet to see ayone sign messages from these networks. > Bitcoin Core does not support verifying that message, even though the UX > makes it look possible. In effect segwit features never got implemented to > that depth in Core. It's sad because the community is not maintaining core > (Core?) features to the same depth as Satoshi did when he was active in the > project. Yes, if it looks possible from the UX, chances are that its very straightforward to implement in code. That's why I'm not expecting any problems when I finally draft the BIP. In my original plans, I said the verifier was going to try Legacy, Nested Segwit, and Native Segwit encodings in sequence, but now, I think this step-by-step procedure is unnecessary. The correct encoding can be guessed by looking at the address prefix: - If it starts with a "1", attempt the Legacy encoding. (Fail verification if it does not yield the correct address). - If it starts with a "3", attempt the Nested Segwit encoding. (Fail verification if it does not yield the correct address). - If it starts with a "bc1", fetch the version number from the immediately following character, and attempt the Native Segwit encoding with that version number. (Fail verification if it does not yield the correct address). - If it starts with any other prefix, fail verification. In my opinion, the signing and verification processes have to be precisely defined in the BIP - to be exactly the same as it presently is, and then these additions - to ensure that the BIP clearly deescribes how signing and verification should be implemented today - in addition to "tomorrow" when the BIP is widely accepted. > So in summary... yes a "defacto" BIP is needed and useful to do, in my > opinion. Then Core should be updated to support it as well. Since I already plan on adding a Python example for the signing and verification process, it will be a straightforward process to translate it to C++ without even minor interface/implementation difficulties. Since I can't think of any more ways to streamline the BIP, I'm going to start a draft along these principles shortly. - Ali On Wednesday, July 20th, 2022 at 1:31 PM, Peter (Coinkite Inc) <pe...@coinkite.com> wrote: > Hi Ali. > > > This BIP does not replace, supersede, or obsolete BIPs 173 or 322. My > > proposal is simply going to standardize the practice of placing the segwit > > address into the address field, and does not require alterations to the > > message signing format like those BIPs. > > > COLDCARD makes signatures exacly like that, when told to sign with a segwit > address: > > % ckcc msg -s Hello > Hello > bc1qzeacswvlulg0jngad9gmtkvdp9lwum42wwzdu5 > HxuuWQwjw0417fLV9L0kWbt7w9XOIWKhHMhjXhyXTczcSozGTXM4knqdISiYbbmqSRXqI5mNTWH9qkDoqZTpnPc= > > Unfortunately, I do not know of any "verifiers" that will accept the above > signature, but there is no alternative since the various BIP-322 proposals > never gained wide acceptance. > > Bitcoin Core does not support verifying that message, even though the UX > makes it look possible. In effect segwit features never got implemented to > that depth in Core. It's sad because the community is not maintaining core > (Core?) features to the same depth as Satoshi did when he was active in the > project. > > > PS. I am pretty sure that there is a BIP for the original signing method - > > what is its number? > > > My understanding that the original approach was directly from Satoshi himself > when the original client was written. It has never been codified in a BIP as > far as I know. > > A related issue the the "ascii armor" that is sometimes used. It's a little > like RFC2440 https://www.ietf.org/rfc/rfc2440.txt but newline-treatment isn't > defined well enough for good interoperability, in my personal experience. > > > So in summary... yes a "defacto" BIP is needed and useful to do, in my > opinion. Then Core should be updated to support it as well. > > --- > @DocHEX || Coinkite || PGP: A3A31BAD 5A2A5B10 > > > On Wed, Jul 20, 2022 at 04:10:09AM +0000, Ali Sherief wrote: > > > [my third attempt at getting this message through. Surprisingly, I managed > > to send this at the second try with the correct SMTP, From, To and all, but > > maybe it was caught in GreyListing (protonmail).] > > > > I was thinking about creating a BIP to address the lack of standardization > > for Segwit message signatures, but I want some advice before proceeding. > > > > The current state of affairs is that the wallets that do support signing > > and verifying a bitcoin message can only sign legacy addresses. It is > > technically possible to sign and verify segwit addresses, since ECDSA only > > depends on the public key (hence why you need a private key to sign > > messages). > > > > However, because there is no generally-accepted standard for signing segwit > > messages, the wallets that do support this feature simply insert the segwit > > address into the address field. Verification also only works using the > > procedure on that specific wallet software, if only because the > > conventional tools for verifying messages attempt to reconstruct a legacy > > address only. > > > > This BIP is not going to enforce anything, it's just going to set > > guidelines for writing a message signing and verification procedure. > > > > This BIP does not replace, supersede, or obsolete BIPs 173 or 322. My > > proposal is simply going to standardize the practice of placing the segwit > > address into the address field, and does not require alterations to the > > message signing format like those BIPs. > > > > In summary, in the verification part, the following address hashing > > algorithms will be tried in sequence in an attempt to reconstruct the > > address in the signed message: > > - P2PKH (legacy address) > > - P2WPKH-P2SH (nested segwit) > > - P2WPKH with version from 0 to MAX_WITNESS_VERSION (covers native segwit > > with version 0 as well as future native segwit address types such as > > Taproot) - where MAX_WITNESS_VERSION is the maximum supported witness > > version by the bech32 encoding. > > > > The verification procedure stops if any of these hashes yield the correct > > address, and fails if all of the above methods fail to reproduce the > > address in the signed message. > > > > In the signing procedure, the only modification is the insertion of the > > segwit address in place of the legacy address in the signed message. > > > > If this BIP is approved, it does not require any changes to existing signed > > messages, and the original sign/verify algorithms will continue to > > interoperate with this improved sign/verify algorithm, without any action > > necessary from the developers. > > > > So as you can see, this is the entire framework of the BIP I plan to draft. > > There is no need for any auxilliary feature additions into this BIP. I just > > want to hear the mailing list's advice about how I should draft such a BIP. > > > > - Ali > > > > PS. I am pretty sure that there is a BIP for the original signing method - > > what is its number? Owner and administrator of https://notatether.com - Run Tools & Apps Online or Buy an API Key ------- Original Message ------- On Wednesday, July 20th, 2022 at 1:31 PM, Peter (Coinkite Inc) <pe...@coinkite.com> wrote: > Hi Ali. > > > This BIP does not replace, supersede, or obsolete BIPs 173 or 322. My > > proposal is simply going to standardize the practice of placing the segwit > > address into the address field, and does not require alterations to the > > message signing format like those BIPs. > > > COLDCARD makes signatures exacly like that, when told to sign with a segwit > address: > > % ckcc msg -s Hello > Hello > bc1qzeacswvlulg0jngad9gmtkvdp9lwum42wwzdu5 > HxuuWQwjw0417fLV9L0kWbt7w9XOIWKhHMhjXhyXTczcSozGTXM4knqdISiYbbmqSRXqI5mNTWH9qkDoqZTpnPc= > > Unfortunately, I do not know of any "verifiers" that will accept the above > signature, but there is no alternative since the various BIP-322 proposals > never gained wide acceptance. > > Bitcoin Core does not support verifying that message, even though the UX > makes it look possible. In effect segwit features never got implemented to > that depth in Core. It's sad because the community is not maintaining core > (Core?) features to the same depth as Satoshi did when he was active in the > project. > > > PS. I am pretty sure that there is a BIP for the original signing method - > > what is its number? > > > My understanding that the original approach was directly from Satoshi himself > when the original client was written. It has never been codified in a BIP as > far as I know. > > A related issue the the "ascii armor" that is sometimes used. It's a little > like RFC2440 https://www.ietf.org/rfc/rfc2440.txt but newline-treatment isn't > defined well enough for good interoperability, in my personal experience. > > > So in summary... yes a "defacto" BIP is needed and useful to do, in my > opinion. Then Core should be updated to support it as well. > > --- > @DocHEX || Coinkite || PGP: A3A31BAD 5A2A5B10 > > > On Wed, Jul 20, 2022 at 04:10:09AM +0000, Ali Sherief wrote: > > > [my third attempt at getting this message through. Surprisingly, I managed > > to send this at the second try with the correct SMTP, From, To and all, but > > maybe it was caught in GreyListing (protonmail).] > > > > I was thinking about creating a BIP to address the lack of standardization > > for Segwit message signatures, but I want some advice before proceeding. > > > > The current state of affairs is that the wallets that do support signing > > and verifying a bitcoin message can only sign legacy addresses. It is > > technically possible to sign and verify segwit addresses, since ECDSA only > > depends on the public key (hence why you need a private key to sign > > messages). > > > > However, because there is no generally-accepted standard for signing segwit > > messages, the wallets that do support this feature simply insert the segwit > > address into the address field. Verification also only works using the > > procedure on that specific wallet software, if only because the > > conventional tools for verifying messages attempt to reconstruct a legacy > > address only. > > > > This BIP is not going to enforce anything, it's just going to set > > guidelines for writing a message signing and verification procedure. > > > > This BIP does not replace, supersede, or obsolete BIPs 173 or 322. My > > proposal is simply going to standardize the practice of placing the segwit > > address into the address field, and does not require alterations to the > > message signing format like those BIPs. > > > > In summary, in the verification part, the following address hashing > > algorithms will be tried in sequence in an attempt to reconstruct the > > address in the signed message: > > - P2PKH (legacy address) > > - P2WPKH-P2SH (nested segwit) > > - P2WPKH with version from 0 to MAX_WITNESS_VERSION (covers native segwit > > with version 0 as well as future native segwit address types such as > > Taproot) - where MAX_WITNESS_VERSION is the maximum supported witness > > version by the bech32 encoding. > > > > The verification procedure stops if any of these hashes yield the correct > > address, and fails if all of the above methods fail to reproduce the > > address in the signed message. > > > > In the signing procedure, the only modification is the insertion of the > > segwit address in place of the legacy address in the signed message. > > > > If this BIP is approved, it does not require any changes to existing signed > > messages, and the original sign/verify algorithms will continue to > > interoperate with this improved sign/verify algorithm, without any action > > necessary from the developers. > > > > So as you can see, this is the entire framework of the BIP I plan to draft. > > There is no need for any auxilliary feature additions into this BIP. I just > > want to hear the mailing list's advice about how I should draft such a BIP. > > > > - Ali > > > > PS. I am pretty sure that there is a BIP for the original signing method - > > what is its number? _______________________________________________ bitcoin-dev mailing list bitcoin-dev@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev