/id32

Human-readable identifier in base-32

Primary LanguageCBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

ID32 provides a human-readable representation of a hash value. It is suitable as an identifier for self-generated cryptographic keys, such as:

  • server SSH keys
  • personal public keys
  • self-signed certificates

Here are some examples of ID32 values:

xrpz9-zf7c8-xjfsr-ygdj4-duxei
obi3a-sdhti-hk3db-fg5od-abmmi
ji94w-upgod-ne1f7-157n9-rm3p6
885m3-xdhuj-3r6mx-t74io-ow5pa
iefux-k1rnn-mbmt7-kzn3d-rpdct
nfp4w-dcxg3-o6dk6-magjc-mqtth
4jop4-7mwji-udswz-3dsuf-cdz58
kq71i-z71w6-ckx39-dbdxu-1bskw
yw13x-u41x9-f5hk7-o5hqb-re9rh
e67es-xwddw-zskpg-mnwdd-pywj9

Character set

ID32 uses the z-base-32 character set.

Security

ID32 provides 120 bits of preimage resistance. It should not be used when collision resistance is required. However, for self-generated cryptographic keys, users typically have nothing to gain from generating two keys that result in the same identifier.

Checksum

ID32 contains a checksum character which can detect:

  • all single substitution errors (e.g. as)
  • all single transposition errors (e.g. weew, including jump transpositions like rewwer)
  • all twin errors (e.g. ddff, including jump twin errors like dfdgfg)
  • 97% of other errors

Build

git clone https://github.com/tevador/id32.git
cd id32
mkdir build
cd build
cmake ..
make

Refer to the id32.h header file for API documentation. ID32 must be used with a hash function that can output at least 128 bits. Hash functions from the SHA2, SHA3 or Blake2 families are recommended.