BlockchainCommons / GordianSeedTool-iOS

Cryptographic Seed Manager for iOS
Other
39 stars 9 forks source link

New Q&A for Seedtool Info #75

Closed shannona closed 3 years ago

shannona commented 3 years ago

The following are new sections for the Seedtool Info Page. (Please feel free to adjust as you see fit based on technical accuracy or anything else.) They should be added to that page & also linked as "i"s from the appropriate pages where they're used

What is BIP39?

BIP39 is Bitcoin's traditional mnemonic word specification, which translates seeds into words and vice versa. It allows for the encoding of a seed in human-readable form, and has traditionally been used as a back-up mechanism, with the words often being stamped in metal for best survivability.

BIP39 mnemonic words are supported by Gordian Seed Tool primarily for interoperability, allowing you to import a seed using BIP39 words or to share a seed using those words. It allows for interaction with older wallets that do not support the Blockchain Commons specifications. For newer wallets, instead use ByteWords, which were designed to be easier to remember and harder to confuse, and which integrate with Blockchain Commons' Uniform Resources.

What is Key Derivation?

The core idea of seeds is that they can be used to create (derive) a whole hierarchy of keys based on the BIP32 specification for a Hierarchical Deterministic wallet. One seed leads to many keys (and thus many addresses).

To derive a key requires a derivation path. This describes which precise key you're talking about of the infinite keys that could be derived from a specific seed. A derivation path typically looks like this:

[604b93f2/48'/0'/0'/2']

The first number (604b93f2 in this example) is the fingerprint for the seed. The rest is the derivation path proper, which was defined by BIP44. It explains how to derive a particular key: in this case the derivation path refers to the second key of the zeroth key of the zeroth key of the forty-eighth key.

However, the derivation path is more than just a listing of how to get to a key. It also defines what the key is, per BIP44:

m / purpose' / coin_type' / account' / change / address_index

In other words, this example not only shows the precise derivation of a key, but also defines that key as follows:

Individual keys could then be created as individual indices from that derivation path, for example m/48'/0'/0'/2'/0, m/48'/0'/0'/2'/1, m/48'/0'/0'/2'/2. (The 's in a path refer to "hardening", which makes that level of keys more secure.)

Putting together a seed and a derivation path is deterministic: everyone will always derive the same public and private key from that combination, but the keys cannot be used to predict other keys, nor backtrack to the seed. Instead, they each appear to be entirely discrete, except to the seed holder.

ChristopherA commented 3 years ago

The first number (604b93f2 in this example) is the fingerprint for the seed.

Actually it is the master fingerprint of the bip32 master key (which is derived from the seed). Core doesn’t support bip39 mnemonics so it is the “root” for all keys.

wolfmcnally commented 3 years ago

These additions are present in 1.2 (27).