I have a server that will accept payments from different users and I want to know which method is the best in terms of security. Please consider that the server could be easily stolen/accessed by anyone. Here are two examples for the 7th item the 456th user wants to buy with bitcoin:
Considering BIP44 standard, I would need to use hardened children (
"m/44'/0'/456'/0/7"), I need to provide (store in the server) only the master private extended key.
Considering BIP44 with no hardened children at all (
"m/0/456/0/7"), I need to provide (store in the server) only the master public key and the master chain code.
Because I want to be sure that the HD wallet is safe, even when someone would use a backdoor to access the server or physically gain access to the storage of the server, I would go for the 2nd option.
Is it right that with the master public key and the master chain code, one can only see the children chain codes and public keys, and with them the sub-addresses?
One could, of course, find the private key of one of the children and get full access to the wallet; but because no private key is stored on this server it would require a brute-force attack.
Is it safer to use hardened children and instead protect physically my server to store the master private extended key?
Does anyone have any other idea on how I could protect the wallet money, not necessarily the incoming transactions?
I based my idea on:
Should Account-level in BIP32/BIP44 be Hardened?