From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Mon, 14 Jul 2025 12:06:15 -0700 Received: from mail-yw1-f187.google.com ([209.85.128.187]) by mail.fairlystable.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1ubOVC-0000LQ-Qx for bitcoindev@gnusha.org; Mon, 14 Jul 2025 12:06:15 -0700 Received: by mail-yw1-f187.google.com with SMTP id 00721157ae682-711a46ce053sf68163547b3.0 for ; Mon, 14 Jul 2025 12:06:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20230601; t=1752519969; x=1753124769; darn=gnusha.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-sender:mime-version :subject:message-id:to:from:date:sender:from:to:cc:subject:date :message-id:reply-to; bh=bjLEk2BMt+dW1lVWCR46TLx3r5XQ80N50fWSDIXGdDE=; b=Dt06hGFJxQGk2VKBfFTqhDv1qVA0GXoPx1exNXQnuHUSx8SkHl9sE5DokZB2/DHwVN KAbmKp6lE8pGSSbfmKp6i/jXKTzSgMPpal1DavoF3Pg7PNUVqRaCzvKks4F615t48RVU 6hrZIGHTjv96L7GoD5TO9bdbsGpIXP2tI85/0WaVRXI1IRHin5aMOMQ+XKhH6iNdqBJ/ sa0UGdCfJ8vx8WxKpPLBlh6tOdaJ9RzJsQ50TSqHJ0P1EKIDxef+/SKlPNwrlcl7PeRv TvEMyjs4RtTg+F/8YF2z9kW/P2rWTRJtu9PnB+yca24ayBjc4Rjr95vS+PNWmWsFUkXu AtyQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1752519969; x=1753124769; darn=gnusha.org; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-sender:mime-version :subject:message-id:to:from:date:from:to:cc:subject:date:message-id :reply-to; bh=bjLEk2BMt+dW1lVWCR46TLx3r5XQ80N50fWSDIXGdDE=; b=hJC36MbD7ia9Isr7nJy8DgR1w7nVRWEZZX5sZUgqDHs33hLQ+PFxyiTyokUphWYy0o hzqeSuEJBpuqUTTFaztxtQWNkPtDdlgKOvHe0XkuezQYDva2oZ0sM2pTumDVd3cNRRUU 7RmuH1HicbE7hNbYwbGsF9gZNrc6WA4je5qrTXLWXpZfvmQYbsyZzx+u6ZPfvnj9IwEq 5rUxBy5pWeZdfq64XHs3brAPIPZW/B9nxsWL1LXMvtswh/37euL4WmDjYzyOMOOr4REA 8Vy82kqQr6+gzntlFAmm3tEKYaGcywJZHaS04qUSrIBbb56U61Y2eToGFE2wQivf9bUe YvmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752519969; x=1753124769; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:x-original-sender:mime-version :subject:message-id:to:from:date:x-beenthere:x-gm-message-state :sender:from:to:cc:subject:date:message-id:reply-to; bh=bjLEk2BMt+dW1lVWCR46TLx3r5XQ80N50fWSDIXGdDE=; b=sU6L+UnMruvUXSzBRDU73iIJCXUEo4NrcLM2hnc/PdtzDYRkANrkioOTUJg7pvZ6Ns KTVLOCMsI3Fx8rymdkZ25je4JTkIPRl0evLS6JJ5FMPs8Rm7TejUQ6FuNvjbg+87EWPi cUojhXH2wqAYI10w24NVEvywjcEaeCxj8bDJIcck+DWGEWsdiPp1sPSw0XDNu0EX2r/Z IZ/YG6gPa39X6EtjSW1voBiN2Nsk/qIzxzqtfz7oKTNhiBEhwV9yLkt0pyEzmtr9yekw k2T95wOvKxp6c1aqg2DlQckJe+telfIPeGAKc09we4dfWqhctF1XiRivdBgHUg1yIaDO fYrg== Sender: bitcoindev@googlegroups.com X-Forwarded-Encrypted: i=1; AJvYcCVW09l5qCLc11PLQuBQdndWpYCNEhUi8DwGLul8MlJb4p2KH9NQkIior9NiZjhdFRvCv7yvoDcAlvE+@gnusha.org X-Gm-Message-State: AOJu0Yx4xCHTKZeqp0M75vJTUXVaXPDmLUAYqDHFGWPP0eDDaJlXDccS etELOroKRv0f0tNGefLjVP8EBEtftXBCL9APpxJFDmbeC/ESwWut3Hju X-Google-Smtp-Source: AGHT+IGk0ZQ5TISwGQh8/DWzR3RbvQqh/zS+rMvJOD44KkarbMia7nfzRMOIIM45KakbeGgxQbfTbQ== X-Received: by 2002:a05:690c:9:b0:718:2387:4544 with SMTP id 00721157ae682-71823874737mr8103427b3.12.1752519968473; Mon, 14 Jul 2025 12:06:08 -0700 (PDT) X-BeenThere: bitcoindev@googlegroups.com; h=AZMbMZdBZL2DOhwh05ohRcR3+etnDkvD1V8+uNOMK7Wdk0slHw== Received: by 2002:a25:c1c5:0:b0:e82:307f:5561 with SMTP id 3f1490d57ef6-e8b7795f27bls4809644276.2.-pod-prod-06-us; Mon, 14 Jul 2025 12:06:04 -0700 (PDT) X-Received: by 2002:a05:690c:45c7:b0:716:4ae0:7bf3 with SMTP id 00721157ae682-717d5b7c823mr194067237b3.5.1752519964447; Mon, 14 Jul 2025 12:06:04 -0700 (PDT) Received: by 2002:a81:c805:0:b0:710:fccf:6901 with SMTP id 00721157ae682-71801526bd3ms7b3; Mon, 14 Jul 2025 09:12:15 -0700 (PDT) X-Received: by 2002:a05:690c:4a0a:b0:70e:2cba:868c with SMTP id 00721157ae682-717d5bc3e39mr223815277b3.11.1752509534528; Mon, 14 Jul 2025 09:12:14 -0700 (PDT) Date: Mon, 14 Jul 2025 09:12:14 -0700 (PDT) From: Zach To: Bitcoin Development Mailing List Message-Id: <1da0467a-9cc6-4448-85b9-a9b01ef1aca7n@googlegroups.com> Subject: [bitcoindev] [BIP Proposal] Compressed Base58 Encoding for BIP-39 Mnemonics with Multisig Extensions MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_589718_827532640.1752509534180" X-Original-Sender: corneliusamadeusacts10@gmail.com Precedence: list Mailing-list: list bitcoindev@googlegroups.com; contact bitcoindev+owners@googlegroups.com List-ID: X-Google-Group-Id: 786775582512 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , X-Spam-Score: -0.4 (/) ------=_Part_589718_827532640.1752509534180 Content-Type: multipart/alternative; boundary="----=_Part_589719_516876564.1752509534180" ------=_Part_589719_516876564.1752509534180 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Dear Bitcoin-Dev Community, My name is Zach and I'm a Bitcoin enthusiast interested in improving wallet= =20 usability and security. I'm writing to propose a new Bitcoin Improvement=20 Proposal (BIP) and seek initial feedback before submitting a formal draft= =20 via GitHub pull request. The proposal builds on BIP-39 by introducing a compressed representation of= =20 mnemonic phrases using Base58 encoding, reducing a 12-word mnemonic to 24= =20 characters. It also includes an optional extension for multisig setups=20 (e.g., 2-of-3), where each participant's storage combines their compressed= =20 mnemonic with foreign xpubs and a checksum into a ~252-character Base58=20 string. This aims to facilitate secure, distributed storage in=20 space-constrained scenarios like physical backups or QR codes. Below is a draft of the BIP in plain text format for review. I've followed= =20 the structure from BIP-2 but haven't assigned a number yet. If the=20 community finds this idea promising, I'll convert it to MediaWiki and=20 submit it to the bitcoin/bips repo. ------------------------------ *Bitcoin Improvement Proposal: BIP-XXXX (Compressed Base58 Mnemonic=20 Encoding with Multisig Extensions)*=20 *Preamble * =20 - BIP#: XXXX (to be assigned)=20 - Title: Compressed Base58 Encoding for BIP-39 Mnemonics with Multisig= =20 Storage Format=20 - Author: Zach corneliusamadeusacts10@gmail.com=20 - Status: Draft - Type: Standards Track - Created: 2025-07-14 - License: BSD-2-Clause *Abstract* This BIP proposes a method to compress BIP-39 mnemonic phrases by mapping= =20 each word in the standard 2048-word English wordlist to a unique=20 two-character string using Base58 encoding. This reduces a typical 12-word= =20 mnemonic (approximately 59 characters including spaces) to a compact=20 24-character string without spaces. The encoding is deterministic,=20 reversible, and leverages the existing BIP-39 word indices, ensuring=20 compatibility with current seed generation practices. Additionally, this BIP introduces an optional extension for multi-signature= =20 (multisig) setups, particularly m-of-n schemes like 2-of-3. In such=20 scenarios, each participant's location stores their local compressed=20 mnemonic alongside the extended public keys (xpubs) from the other=20 participants. These components are concatenated into a single Base58 string= =20 with a checksum for integrity, resulting in a ~252-character string per=20 location. This facilitates secure, distributed storage while enabling=20 independent address derivation at each site. This can aid in easier storage, transmission, and input of mnemonics and=20 multisig data in space-constrained environments, such as physical etchings= =20 or QR codes, while maintaining security. *Motivation*=20 BIP-39 mnemonics are human-readable but verbose. Compressing them to 24=20 characters for 12 words reduces overhead significantly. In multisig=20 contexts, such as a 2-of-3 scheme with geographically distributed=20 participants, each location must store foreign xpubs to derive shared=20 addresses, but private mnemonics remain isolated. Concatenating the=20 compressed mnemonic with xpubs and a checksum creates a compact, verifiable= =20 dataset (~252 characters), and supports error detection during=20 transcription or recovery. This does not replace BIP-39 or existing multisig standards (e.g., BIP-45= =20 for derivation paths) but provides an optional compressed representation=20 and storage format. *Specification* Base58 Alphabet 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz Word Index Mapping and Encoding/Decoding=20 The BIP-39 English wordlist is sorted alphabetically, assigning indices=20 from 0 ("abandon") to 2047 ("zoo"). The full wordlist is defined in BIP-39= =20 and remains unchanged. For a word with index i (0 =E2=89=A4 i =E2=89=A4 2047): 1. Compute high =3D i // 58 (integer division, range 0-35 for i =E2=89= =A4 2047)=20 2. Compute low =3D i % 58 (range 0-57)=20 3. The two-character code is alphabet[high] + alphabet[low] (big-endian= =20 order, higher digit first)=20 Examples: - i=3D0 ("abandon"): "11"=20 - i=3D2047 ("zoo"): "PJ"=20 Compressing a mnemonic: Look up indices, encode each to 2 chars,=20 concatenate (24 chars for 12 words). Decompressing: Split into 2-char chunks, decode indices, look up words,=20 verify checksum. Multisig Storage Format (Extension)=20 Assumes 12-word mnemonics, 111-char xpubs. Structure: Compressed mnemonic (24 chars) + Sorted foreign xpub1 (111) +=20 xpub2 (111) + Checksum (6 chars) =3D 252 chars. Checksum: Double-SHA256 of decoded data bytes, first 4 bytes encoded to=20 Base58, padded to 6 chars with '1's. Verification: Extract parts, recompute checksum, validate. Usage in 2-of-3: Each location stores local compressed + 2 foreign xpubs += =20 checksum. *Rationale*=20 - 58^2 =3D 3364 > 2048 for unique codes.=20 - Concatenation leverages Base58 for compactness.=20 - Fixed lengths for easy parsing. *Backwards Compatibility*=20 Fully compatible; optional extension. *Reference Implementation * Full Python reference implementation available upon request or in the=20 formal submission. *Test Vectors * - Compressed mnemonic: "1112131415161718191A1B1C" (first 6 words, extend= =20 to 24 chars for full).=20 - xpub1:=20 "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoC= u1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8"=20 (111 chars).=20 - xpub2:=20 "xpub68Gmy5EdvgibQVbouHdFqKg4ZP5oVjJeJUP7yKS4xEM2it2c8EL3MEN8WC4PTEiGK8o= FUaKUV4ndBKSp53Q6fFi8DwhsBS1Lxf4H9fwnK2"=20 (111 chars).=20 - Sorted: xpub1, xpub2 (assuming lex order).=20 - Data str: "1112131415161718191A1B1C" + xpub1 + xpub2 (246 chars, but= =20 use full 24-char compressed in practice).=20 - Checksum: Compute as per code (will be 6 chars, e.g., "2AbCdE").=20 - Full storage: Data str + checksum (252 chars). *Acknowledgements*=20 - BIP-39 authors for the foundational wordlist.=20 - Bitcoin community for Base58 standards. - Multisig distribution insights. ------------------------------ I'd appreciate any feedback on this draft: Is the concept sound? Are there= =20 similar existing proposals I'm unaware of? Suggestions for improvements,=20 such as in the checksum method or generalization to other word counts/m-n= =20 schemes? If there's interest, I'll proceed with the GitHub submission after=20 incorporating comments. Thank you very much for your attention to this matter and any insights! Best regards, Zach corneliusamadeusacts10@gmail.com --=20 You received this message because you are subscribed to the Google Groups "= Bitcoin Development Mailing List" group. To unsubscribe from this group and stop receiving emails from it, send an e= mail to bitcoindev+unsubscribe@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/= 1da0467a-9cc6-4448-85b9-a9b01ef1aca7n%40googlegroups.com. ------=_Part_589719_516876564.1752509534180 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Dear Bitcoin-Dev = Community,

My name is Zach a= nd I'm a Bitcoin enthusiast interested in improving wallet usability and se= curity. I'm writing to propose a new Bitcoin Improvement Proposal (BIP) and= seek initial feedback before submitting a formal draft via GitHub pull req= uest.

The proposal buil= ds on BIP-39 by introducing a compressed representation of mnemonic phrases= using Base58 encoding, reducing a 12-word mnemonic to 24 characters. It al= so includes an optional extension for multisig setups (e.g., 2-of-3), where= each participant's storage combines their compressed mnemonic with foreign= xpubs and a checksum into a ~252-character Base58 string. This aims to fac= ilitate secure, distributed storage in space-constrained scenarios like phy= sical backups or QR codes.

Below is a draft = of the BIP in plain text format for review. I've followed the structure fro= m BIP-2 but haven't assigned a number yet. If the community finds this idea= promising, I'll convert it to MediaWiki and submit it to the bitcoin/bips = repo.


Bitcoin Improvement Proposal: BIP-XXXX (Compressed Ba= se58 Mnemonic Encoding with Multisig Extensions)=C2=A0

Preamble
  • BIP#: XXXX (to be assigned)
  • Title: Compressed Base58 Encoding for BIP-39 Mnemonics with Multisig St= orage Format
  • Author: Zach corneliusamadeusacts10@gmail.com
  • Status: Draft
  • Type: Standards Track
  • Created: 2025-07-14=
  • License: BSD-2-Clause
Abstract


This BIP proposes a method to compress BIP= -39 mnemonic phrases by mapping each word in the standard 2048-word English= wordlist to a unique two-character string using Base58 encoding. This redu= ces a typical 12-word mnemonic (approximately 59 characters including space= s) to a compact 24-character string without spaces. The encoding is determi= nistic, reversible, and leverages the existing BIP-39 word indices, ensurin= g compatibility with current seed generation practices.

Additionally, this BIP introduces= an optional extension for multi-signature (multisig) setups, particularly = m-of-n schemes like 2-of-3. In such scenarios, each participant's location = stores their local compressed mnemonic alongside the extended public keys (= xpubs) from the other participants. These components are concatenated into = a single Base58 string with a checksum for integrity, resulting in a ~252-c= haracter string per location. This facilitates secure, distributed storage = while enabling independent address derivation at each site.

This can aid in easier storag= e, transmission, and input of mnemonics and multisig data in space-constrai= ned environments, such as physical etchings or QR codes, while maintaining = security.

Motivation

BIP-39 mnemonics = are human-readable but verbose. Compressing them to 24 characters for 12 wo= rds reduces overhead significantly. In multisig contexts, such as a 2-of-3 = scheme with geographically distributed participants, each location must sto= re foreign xpubs to derive shared addresses, but private mnemonics remain i= solated. Concatenating the compressed mnemonic with xpubs and a checksum cr= eates a compact, verifiable dataset (~252 characters), and supports error d= etection during transcription or recovery.

This does not replace BIP-39 or existing multi= sig standards (e.g., BIP-45 for derivation paths) but provides an optional = compressed representation and storage format.

Spec= ification

Base58 Alphabet

123456789ABCDEFGHJKLMNPQRSTUVWXYZabcde= fghijkmnopqrstuvwxyz

Word Index Mapping and Encoding/Decoding

The BIP-39 En= glish wordlist is sorted alphabetically, assigning indices from 0 ("abandon= ") to 2047 ("zoo"). The full wordlist is defined in BIP-39 and remains unch= anged.

For a w= ord with index i (0 =E2=89=A4 i =E2=89=A4 2047):

  1. Co= mpute high =3D i // 58 (integer division, range 0-35 for i =E2=89=A4 2047)<= /li>
  2. Compute low =3D i % 58 (range 0-57)
  3. The two-character code is alphabet[high] + alphabet[low] (big-endian or= der, higher digit first)

Examples:

  • i=3D0 ("abandon"): "11"
  • i=3D2047 ("zoo"): "PJ"

Compressing = a mnemonic: Look up indices, encode each to 2 chars, concatenate (24 chars = for 12 words).

Decompressing: Split into 2-char chunks, decode indices, look up words, ve= rify checksum.

Multisig Storage Format (Extension)

Assumes 12-wo= rd mnemonics, 111-char xpubs.

Structure: Compressed mnemonic (24 chars) + Sorted foreign = xpub1 (111) + xpub2 (111) + Checksum (6 chars) =3D 252 chars.

Checksum: Double-SHA256 of = decoded data bytes, first 4 bytes encoded to Base58, padded to 6 chars with= '1's.

Verific= ation: Extract parts, recompute checksum, validate.

Usage in 2-of-3: Each location stores= local compressed + 2 foreign xpubs + checksum.

Rationale

  • 58^2 =3D 3364 > 2048 for unique codes.
  • Concatenation leverages Base58 for compactness.
  • Fixed lengths for easy parsing.

Backwards Compatibility

Fully compati= ble; optional extension.

Reference Implementation

Full Pyth= on reference implementation available upon request or in the formal submiss= ion.

Test Vectors

  • Compressed mnemonic: "1112131415161718191A1B1C" (first 6 words, extend = to 24 chars for full).
  • xpub1: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29= ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8" (111 chars).
  • xpub2: "xpub68Gmy5EdvgibQVbouHdFqKg4ZP5oVjJeJUP7yKS4xEM2it2c8EL3MEN8WC4= PTEiGK8oFUaKUV4ndBKSp53Q6fFi8DwhsBS1Lxf4H9fwnK2" (111 chars).
  • Sorted: xpub1, xpub2 (assuming lex order).
  • Data str: "1112131415161718191A1B1C" + xpub1 + xpub2 (246 chars, but us= e full 24-char compressed in practice).
  • Checksum: Compute as per code (will be 6 chars, e.g., "2AbCdE").
  • Full storage: Data str + checksum (252 chars).

Acknowledg= ements

  • BIP-39 authors for the foundational wordlist.
  • Bitcoin community for Base58 standards.
  • Multisig distribution i= nsights.

I'd appreciate any feedback on this draft: Is the concept sound? Are= there similar existing proposals I'm unaware of? Suggestions for improveme= nts, such as in the checksum method or generalization to other word counts/= m-n schemes?

I= f there's interest, I'll proceed with the GitHub submission after incorpora= ting comments.

Thank you very much for your attention to this matter and any insights!

Best regards, Zach corneliusamadeusacts10@gmail.com

--
You received this message because you are subscribed to the Google Groups &= quot;Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an e= mail to bitcoind= ev+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/bitcoind= ev/1da0467a-9cc6-4448-85b9-a9b01ef1aca7n%40googlegroups.com.
------=_Part_589719_516876564.1752509534180-- ------=_Part_589718_827532640.1752509534180--