If an address was used more than once to spend, as was the case in the September claim, are addresses that were weakened for violating the Winternitz, One Time Signiture architecture of the tangle, still vulnerable to cracking after the snapshot. Does this mean the seed must be emptied and never used again? Additional, because addresses are reused after each snapshot, due to the deterministic order of their generation, is every address used before the last snapshot theoretical vulnerable to cracking?
2 Answers
You should never send iota to an address that was already spent. This will make it possible for an attacker to steal your iotas. This rule is uninfluenced by any snapshot.
The problem after a snapshot is, that every node deletes the transaction history, only the balances are saved. Usually your wallet doesn't show any spent addresses anymore (thus preventing you from double spending), in this case, however, your wallet can no longer verify that you haven't used this particular address.
Let's make an example:
Generally, the seed provides your wallet with an endless list of addresses. So when one is used, it will keep taking the next one until an unused one is found.
Let's assume you have 2 addresses. All your IOTA is at the second one, your first address is already spent.
Normally, the wallet would now show you the 3rd address to receive, because the first one is spent and the second one has balance. Because of the snapshot, however, the wallet will show you the first, as history is gone and the wallet can't see that this address was already spent and will show your first address instead. Additionally, the wallet won't even take a look at the second address, and your balance won't show up.
To fix this, you have to attach every address in the tangle, until you reach an address that you have never used in the past. In this case, simply attaching the first address will fix it. If you had more addresses, you will have to repeat the process a few time.
Your seed is still save, you just have to watch out that you don't accidentally use an address that you have already used before the snapshot
The seed itself is still safe to use, the one time signature weakening occurs only for that specific address (you leak part of the private key "paired" with the address itself, not part of your seed).
After a snapshot, you keep reattaching addresses (from index 0 upwards) until you arrive to an address that contains some iotas. If you always follow the rule of never reusing the same address, and only ever use 1 address from the same seed at a time, you now know that the first address you obtain that contains iotas is the address that contains ALL your iotas and has NO spends.
It gets trickier if you do use multiple addresses from the same seed (but still following the one time send rule). In that scenario, you have to keep reattaching until you obtain ALL the addresses that have iotas, and you have to know for yourself how many addresses/iotas that is.
In order for you to be able to forget how many addresses you've used/how many iotas combined your addresses have, and NOT end up reusing an address/"lose" your iotas, you would need to either:
- keep a local copy (so for example your wallet would keep a history of every used address),
- obtain the history from a permanent node that keeps the transactions after snapshots (you have to trust that the node does not "lie" to you, not sure if/how you'd verify the permanent node does not give you bogus info)