11

What is the difference between a private key and a seed?

When people talk about the "secret key", do they mean the "private key? Are they the same?

What are public keys? How are they related to addresses?

17

The Private/Public key pair (aka asymetric cryptography) refers to a common cryptographic mechanism. Private and public keys are bounds together and also bound to a particular well known cryptographic algorithm like 'RSA', 'SHA', ... Private and public key aren't just random string, in fact they have the following very interesting property :

If you receive a piece of data + a signature for this piece of data, then the public key allows you to check that the signature was generated with the corresponding private key and for this exact piece of data. (thanks to the well known cryptographic algorithm)

In other words the public key allows you to check that the emitter of the data is the owner of the private key, and that the data was not modified.

How is it use in IOTA ?

In IOTA (like in many other crypto-currencies), an address is a public key, you can disclose it, it is not a secret.

When you spend some IOTAs that are in a particular address, you need to demonstrate to the rest of the world that you are the owner of the address (i.e. the owner of the private key for that public key). To do that you sign the transaction with the private key associated with that address. The rest of the world know the public key (it's the address), and your signature is in the transaction. The rest of the world can easily check that you are the owner of the address and that the content of the transaction wasn't modified by some third party.

In IOTA: the private/public key pair is generated deterministically from your seed + some index (+ a security level, but it is not specially relevant here). It means that :

  • your seed and the index 14 will always generate the same private/public key pair.
  • your seed and the index 15 will always generate the same private/public key pair.
  • but private/public key for index 14 is completely different than private/public key for index 15.

So, your seed is kind of "randomness" that allows generation of an almost infinite amount of private/public key-pair.


To answer a side question: why can't we reuse the same address for multiple withdraw ?

To understand the reason we have to look deeper into the "well known cryptographic algorithm" used on the tangle. Iota use a (variation of) the Lamport algorithm.

The major advantage of this algorithm is that it is expected to be quantum resistant (while all other currently well known cryptographic algorithms will be useless when quantum computers will be a reality)

Unfortunately, this "quantum resistance" have a cost: the Lamport algorithm is forcing the disclosure of 50% of the private key in the signature. (for a deeper understanding of the algorithm itself : https://en.wikipedia.org/wiki/Lamport_signature).

So this algorithm is a "one-time-signature", because if you use it twice: you are going to reveal more than 50% of your private. An attacker having 2 or more signatures generated from the same private key will be able to generate a transaction with a a signature that could have been produced by your private key (the time to produce such a transaction depends on the disclosed the portion of the key). This is considered as a risk.

  • So why do we need new addresses with every transaction? – Brandon Dec 7 '17 at 17:19
  • In addition to this answer the visualization found at the following link may help understanding the link between a seed and the private/public key pairs generated based on this seed: How addresses are used in IOTA. – Lanu Moe Jan 5 '18 at 17:52
6

The Seed is your only local stored authentification and is never revealed in a transaction.

Private Key's are generated with your seed in combination with a key index and are needed to sign the transaction. Random 50% of the private key are leaked when signing a transaction. That's why u should never reuse an Adress. In the most cases Private key is used as a synonym to Secret key.

The Public key is a synonym for the Adress, which is generated from the Private key.

Further reading: Seeds, Private Keys and Adresses

  • How are they generated from a key index? Isn't the key index just 0,1,2,3,... – Zauz Dec 7 '17 at 9:05
  • 1
    @Zauz that's good material for a new question. The short version is, the software treats your seed like a really big number, and then it increments that number by the key index to get the starting point for generating the corresponding private key. – user5568265 Dec 11 '17 at 7:27

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.