labels not working without an independent scan key
To be precise, my point was that for labels to work, there is no way for the sender to infer the spend public key from the scan public key. The suggestion from the review club was if we can somehow derive the spend private key from the scan private key, there might be a way for the sender to derive the spend public key from the scan public key, allowing us to post one public key instead of two.
Even if the spend key is derived from the scan key, labels work by adding another public key (m·G) to the spend public key, where m is unknown to the sender.
This kind of silent redundancy (pun not intended) isn’t IMO something that should be purposely built into a protocol as it breaks the separation of responsibilities.
You make a really good point. First, I agree we need to be more explicit: both the spend key and scan key are required to spend funds. The scan key is needed for finding the “shared secret” portion of the private key and the spend key is needed to ensure it is only spendable by the recipient. Given that, having independent derivation is a weak argument in that it only addresses one very narrow case: you compromise the spend key, but you don’t compromise your BIP32 master key.
Originally, we had the scan key defined as the hash of the spend key, which then allows you to derive the spend key with or without BIP32. What I’m unsure of is what’s easier/safer for hardware wallets: hashing a spend key and exporting that, or exporting a private key from a specific derivation path. Depending on the answer to that question, I may be more inclined to go back to the original: scan_key = hash(spend_key)