Context of this question here.

I want to create a wallet (by which I mean a tz1 address) using my Ledger Nano S. All I find online is how to create a wallet using software (e.g. Galleon Wallet) or web application (e.g. Tezbox). However, as I understand it, the whole point of a hardware-based wallet is that the keys are created and stay in the hardware. A key created via software can be intercepted or (more sinister) stored by the software or even sent to a third party.

Now, when I initialised my Ledger, I did create the key (setting a PIN and then the 24-words security). So, in principle, the key is in the hardware. However, nothing assures me the key is not being seen by the software by which the wallet is created and linked to the Ledger.

So, how can I create a wallet securely using the Ledger hardware? Perhaps using the CLI tezos-client? (but the latter means I need to run a node?).


As said above, I set up my ledger a few weeks ago, with the 24 recovery words and pin and all that. I had the impression I needed to create a tz1 address, which the answer by Blindripper suggested required running a node. I did not do that, and did not do anything else. Yet, a few days ago, I just connected my ledger to Galleon Wallet (with the option included in that software), and a tz1 address (public key) appeared in the ledger and the software. Was perhaps such address created when configuring the ledger? My ledger is legit. Bought it from the manufacturer. So it's unlikely it already came with an address.

  • There is no way for apps to extract and misuse your key that is stored within the hardware wallet device unless you expose your seed words. – Stephen Andrews Mar 19 at 17:06
  • @StephenAndrews Thanks. How exactly do you know this is the case? For instance, what if Ledger Live has sudo access? – luchonacho Mar 19 at 18:21
  • 1
    It uses a Hardware Security Module - this is a separate chip that does not allow to extraction of your private key. HSM are well known and used around the world for many secure applications. – Stephen Andrews Mar 19 at 20:15
  • @StephenAndrews I see. That sound more like an answer than a comment. Ca you add it please? It also seems to go against the other answer. – luchonacho Mar 20 at 9:20
  • It's not clear what you're asking. What exactly do you mean by "create a wallet"? You certainly must connect some software to the Ledger, because it does not come preinstalled with an app which will generate keys at the Tezos derivation path. – Tom Apr 8 at 14:43

There are multiple steps to this process, all of which I think you have already done, but I'll walk through them just to highlight how some of it works.

Ledger Setup

In order to use the Ledger you have to initialise it with either an old seed phrase from before or it generates a new one for you. You should always ensure that you bought a genuine ledger directly from the Ledger website.

When you initialise your Ledger it uses the randomness from your seed and generates different private keys for all the cryptographic keys that it supports. It stores those private keys inside of the secure element of the Ledger. It is virtually impossible to extract the private keys from the secure element, even if you have physical or digital access to it. The only way to get the same private keys is to use the same seed phrase.

Tezos Wallet Ledger Application

The Ledger itself doesn't know anything about what TZ1, ETH or BTC addresses are. In order to obtain your TZ1 address you need to install the "Tezos Wallet" application from Ledger Live. The application has the ability to ask the Ledger firmware for the public key of the private key for the ed25519 curve. This is one of the private keys that was deterministically generated from your seed phrase. The Tezos Wallet application can also display the derived TZ1 address on the Ledger screen.

TezBox or other clients

In order to interact with the Tezos Wallet application you need a software client, such as TezBox. TezBox never has access to the private key on the Ledger. It knows how to ask the Tezos Wallet application on the Ledger for the public key that corresponds to some private key as described above. TezBox then takes that public key and outputs the corresponding TZ1 address. You should confirm that TezBox and the Ledger screen show you the same TZ1 address in order to ensure that no one is intercepting your connection.

When you send a transaction using TezBox and the Ledger, TezBox prepares the transaction, then sends it to the Tezos Wallet application, which decodes the transaction and displays all the details on the screen. You should always verify those before you sign it. Once you click sign, the Tezos Wallet application asks the Ledger firmware to sign the transaction using one of the private key that is stored in the secure element. The private key never leaves the secure element and the signing happens on that chip. It then returns the signature to the Tezos Wallet application which in turn returns it to TezBox which then submits it to a fullnode.

I hope that clarifies a little bit how the Ledger works :-) I'd be happy to answer more questions around this. Awa wrote a really good guide on how to use the Ledger in combination with TezBox.

  • Superb! Thanks! Can't upvote yet because used my daily limit :/ but will do so tomorrow. Some follow-up questions. 1) when exactly is the tz1 address created then? Is it when installing the Tezos Wallet through Ledger Live? 2) Since the ledger has only one set of private keys, does it mean it is the same for any other address/wallet I create, e.g. ETH or BTC? 3) At some point I have to tell the blockchain there is a new tz1 account. Is this what is mentioned as "reveal" the address? 4) How does the hardware (and any software-creation wallet) ensures not two identical tz1 are created? – luchonacho Apr 10 at 10:45
  • 1
    1. The TZ1 address is created when you install the Tezos Wallet application. It takes the private key that is stored on the secure element and its public key and displays the TZ1 address derived from the public key. 2. The ledger uses hierarchical deterministic key derivation, which allows you to derive many different public keys from the same private key. Due to that you only have to store a single private key for an unlimited amount of public keys. – adrian Apr 10 at 12:38
  • 1
    3. Yes that is largely correct. Before you can send the first transaction from your new TZ1 account you have to reveal its public key. However you can always send XTZ to your TZ1 even before you reveal it. 4. This comes down to using HD path and that the entropy behind a seed phrase is unique (ie it's more likely that the universe implodes before two people use the same seed phrase). – adrian Apr 10 at 12:39
  • Suggest deleting the Ledger details which are not about Tezos. If not, should correct them... The apps are running inside the secure element and are able to get their hands on private keys. – Tom Apr 11 at 15:30

First: Yes you need to run a node to do this.

Here is a Tutorial, how to do it with CLI.

It looks more than it takes, if you use LedgerLive ( to install the Tezos Wallet (and Baking) App.

  • So, using a third-party software to create a wallet for Ledger is not secure then? – luchonacho Mar 18 at 18:17
  • Seems to be a super strong conclusion. Basically, only creating a wallet via the node is 100% secure. This is definitely not the impression people get. – luchonacho Mar 18 at 20:23
  • 1
    What is 100% secure? :-) – Blindripper Mar 19 at 6:08
  • In this case, that the keys are shielded from external parties before and after creating a wallet. And who knows. Since the firmware of Ledger is not open source, they themselves might be, either directly (malintention) or indirectly (bugs) be a source of risk. – luchonacho Mar 19 at 11:01
  • The private keys are also protected "during" wallet creation, as they never leave the device, under no circumstances whatsoever. What is the leaving the device are only the public keys. – Marc.b Mar 20 at 8:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.