They would both need to try and scam you for it to work...instead of one person. One would not know the others keys or password
People will need to trust this blackbox, this process and its robustness against possible hacks.
Dont think its impossible...I believe Ballet does it with their cards.
And I am sure there are good programmers that can make this happen.
Encrypting a private key with EC multiplication offers the ability for someone to generate encrypted keys knowing only an EC point derived from the original passphrase and some salt generated by the passphrase's owner, and without knowing the passphrase itself. Only the person who knows the original passphrase can decrypt the private key. A code known as an intermediate code conveys the information needed to generate such a key without knowledge of the passphrase.
[...]
The person who knows the passphrase and who is the intended beneficiary of the private keys is called the owner. He will generate one or more "intermediate codes", which are the first factor of a two-factor redemption system, and will give them to someone else we'll call printer, who generates a key pair with an intermediate code can know the address and encrypted private key, but cannot decrypt the private key without the original passphrase.
But has we can read below from BIP38 specifications, the printer needs to generate a 24 random bytes(ie 192bits) seed by himself.
Thanks to that the purchaser can't guess which private key has been generated from his intermediate code, if the private key is sealed by the printer.
But CMIIW Ballet doesn't offer a way to check if the printer is really generating random seeds by himself or if he is using a given seed instead (given by Ballet).
Set flagbyte.
[...]
Generate 24 random bytes, call this seedb. Take SHA256(SHA256(seedb)) to yield 32 bytes, call this factorb.
ECMultiply passpoint by factorb. Use the resulting EC point as a public key and hash it into a Bitcoin address using either compressed or uncompressed public key methodology (specify which methodology is used inside flagbyte). This is the generated Bitcoin address, call it generatedaddress.
Libbitcoin-explorer (fully open source) for example, allows to use this feature from BIP38 thanks to the bx ek-new command
$ bx ek-new --help
Usage: bx ek-new [-hu] [--config VALUE] [--version VALUE] TOKEN [SEED]
Info: Create an encrypted private key from an intermediate passphrase
token (BIP38).
Options (named):
[...]
Arguments (positional):
TOKEN The intermediate passphrase token.
SEED The Base16 entropy for the new encrypted private
key. Must be at least 192 bits in length (only the
first 192 bits are used). If not specified the seed
is read from STDIN.