However, by layering them, and allowing any single one of them to be used, complete coverage of any conceivable key generation method can be achieved for hashed address types.
Coverage of non-hashed address types is fundamentally impossible, because the requirement to allow use of commit-reveal migration would inherently leave such address types still exposed to a quantum attacker.
P with output key P' = P + H(P) * G, and give P' to the CRQC. Though they can factor P', they cannot guess P other than by brute-force (or Grover's search).--
You received this message because you are subscribed to the Google Groups "Bitcoin Development Mailing List" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bitcoindev+...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/bitcoindev/sdGGYMMWowlFff6Yh8usMel61HVYmV8KPMqT9np2kK7GxPbVaogJ2aJSFe4v16VNLef4eDwNgfReiK-7j-sYn1jlXHPoAPWAwNBbSJxEz3M%3D%40protonmail.com.
P with output key P' = P + H(P) * G, and give P' to the CRQC. Though they can factor P', they cannot guess P other than by brute-force (or Grover's search).I don't see what the point of your response is here, given I specifically and explicitly state in the original post that address types revealing public keys on-chain are out of scope here, uncoverable in this way due to the proposal involving commit-reveal as an allowed mechanism.
Again, I don't see the point of the reply here, as this would be a completely separate recovery mechanism than the combination of these two/three specific things. These specific mechanisms layered together, and applied as an additional encumbrance only on hashed address types, ignoring P2TR and P2PK, would achieve complete coverage of any feasible key generation scheme.
Whether it was generated with BIP 32 or not is irrelevant if the address is reused, obviously in a quantum threat scenario address reuse is a fatal mistake.
The same thing is true of revealing your xpubs, which is just as widespread (if not moreso) of a practice. That completely undermines the KA that HD recovery proofs depend on.
m/44'/0'/0') xpub does not give a quantum adversary any information about the extended key at the coin-level (i.e. m/44'/0'). Wallets typically never share these keys, even in complex multisig setups. The hardened derivation of the account-level xpriv key (at m/44'/0'/0') is exactly the quantum hard relation that the BIP32 KA relies upon, and knowing the account-level xpriv doesn't give you any help in deriving it from the coin-level parent key. I'd encourage you to revisit Laolu's thread on the ML and you'll see this is exactly what his best ZKP benchmark does.I don't see how this is a useful response or criticism, unless you also want to apply the same degree of criticism to HD recovery proofs in general as well.
This is just a rewrite of the original message to address some of conduition’s remarks in his reply, and more concisely state the implicit assumptions of the overall idea. I just belted out the original post in a few minutes while I was buried under work, so hopefully this gets across the scope and assumptions more clearly.
There are a number of proposed mechanisms for facilitating the recovery of coins by their legitimate owner by applying new additive encumbrances specifying a new proof of secret knowledge in addition to a signature by a private key, as well as commit-reveal schemes to allow for committing to a transaction spending vulnerable coins and requiring such a commitment to attain a certain number of blocks built upon it before the committed transaction is consensus valid.
None of these schemes is capable of providing complete recovery coverage for all coins whose owners still possess a private key if applied blanketly to a given address type. I believe that by layering multiple recovery schemes together additively, and allowing any single one of them to meet the threshold required for spending, 100% coverage can be achieved by taking on only one new security assumption: the requirement to keep your public key/internal script paths secret.
It should also be possible to account for the fact that most users not running their own full node are leaking master public keys to a third party backend server for balance querying.
To deal with the xpub problem, a new set of derivation paths can be defined for each address type which is specced to only use the Electrum protocol for balancing fetching. By only using individual address queries, you avoid the disclosure of the xpub for these sets of addresses and create a path where for end users a transition can happen potentially even without their awareness. New wallet updates can simply start generating addresses using the new derivation paths and new protocol for balance fetching.
The only complications I can see with this is out-of-box middle-ware that is being used to connect wallets to users’ nodes are built around the assumption of xpubs and using Core’s internal wallet. This is almost certain to be a non-issue in the vast majority of cases as it will be a user connecting to their own node, but even in the small number of cases where a user is connecting to a third party node with such software, it can be adapted to use something like Electrum protocol. I don’t see this being a major show stopper.
The xpub issue mitigated, now the interaction of the of different recovery mechanisms.
This will cover any BIP 32 based wallet, regardless of what derivation path (?) is used. So this recovery path should encompass both any address generated using legacy derivation paths with exposed public keys, as well as newer derivation paths securing them through the use of the Electrum protocol.
For any hashed-address type (P2PKH, P2SH, P2WPKH, P2WSH) the derivation proof alone is sufficient, and as conduition pointed out in response to my initial post the internal key can additively be used to make this workable for P2TR addresses that do not use the NUMS point.
This specifically ensures that any user with coins using these address types can produce a recovery proof without having to take any kind of proactive action before the activation of a fork implementing additive encumbrances on address types. (It’s worth noting however these proofs will be pretty big, which is relevant for stateful proofs).
This has been pitched multiple times before I can recall but never really described in detail. Simply the basic components of a signature from the existing encumbrance condition over a new authentication mechanism (a public key for a quantum safe scheme), and a timestamp to prove that this attestation was produced before some pre-defined deadline chosen to expire before a viable quantum computer exists.
This could be pretty simply boiled down to the 1) the signature over the new public key/authentication commitment, 2) the timestamp. Given the potential size of ZKPs, and the fact that hash-based signatures can be optimized to ~580 bytes, I think these are still worth considering looking at how much smaller and more efficient with blockspace stateful proofs can be compared to ZKPs.
They do require proactive action, but in the event of failing to do so or losing the proofs after the deadline, the possibility of HD recovery and commit-reveal migration would cover users in that case.
For any hashed address type, the old commit-reveal migration scheme requiring an encrypted commitment to a transaction be confirmed in the blockchain for a pre-defined number of blocks before the plain-text transaction can be considered consensus valid. The secrecy of public keys can be maintained using the new derivation specification, but this will still be consensus valid for coins in legacy derived addresses.
Again, as conduition pointed out in his reply to my original post, the internal key forms the basis for a secret inaccessible to an attacker, and can be applied as a requirement for P2TR keyspends as an additional validity requirement while using commit-reveal migration. Any tapscript spends using commit-reveal should work as long as those tapscript paths have never been reused with the same internal variables like public keys.
So I think I’ve covered all my bases in terms of implicit assumptions and responding to conduitions comments.
Unless I am fundamentally missing something, or have overlooked important implementation details like those conduition corrected in his replies from my initial post, I believe this combination of these recovery mechanisms can achieve 100% recovery coverage for every address type live on the network except P2PK outputs and custom bare scripts with the singular new security assumption of maintaining the secrecy of public keys (which as noted above can be accomplished with a rather painless migration behind the scenes for users and without the need to go through the process of generating a new master key and migrating funds across seeds).
So I guess, yeah…what am I overlooking here?