It is possible to sign a transaction by doing:
from eth_account import Account
import web3 as Web3
web3 = Web3()
my_private_key = Account.from_key('0x...')
signed = web3.eth.account.sign_transaction(some_transaction, my_private_key.privateKey)
where the entire private key is required to be loaded into a variable.
But is it possible to sign a transaction in n
steps where the private key is divided into n
shares? i.e. where the full key is never loaded into memory? For example, let's say a private key is split between Person A and Person B
Person A uses their half of the private key to partially sign the transaction, producing
output_A
Person B takes
output_A
and their half of the private key to produce the final signed transaction
Is this how an MPC wallet works? If so, how does it work under the hood?
With Shamir Secret Sharing, a private key could be split into shares to be reconstituted later, but it wouldn't get around the problem of ultimately having to load the full private key to sign a transaction.
Forgive me if this is a naive question; I don't have a background in cryptography. Just wondering if something like this is possible