1 min read

Bech32m is a modified version of the Bech32 encoding scheme, which is used to encode SegWit addresses. Bech32m is nearly identical to Bech32: it is an encoding scheme with 32 characters; it uses only lowercase letters; and it begins with a human readable part, which is ‘bc1’ for SegWit addresses.

Bech32 has an error detection mechanism built in, which is meant to detect alterations to Bech32-encoded data. However, the original Bech32 implementation had a vulnerability in this mechanism, allowing an attacker to change an address without invalidating the checksum. When a Bech32 string ends with a “p”, adding or removing “q"s before the “p” does not invalidate it. Bech32m removes this vulnerability by changing a constant used in the encoding scheme, and is thus more secure.

As specified in BIP 350, Bech32m is proposed as the encoding scheme for SegWit version 1 (Taproot) addresses, which will be introduced by the Taproot upgrade.

Learn more about the Taproot upgrade.