One-time signature (private key is used only once) is very secure and can be implemented at any blockchain protocol.
One-time multi-sig protocol steps
- offline: next=gen_SK/A() // generate new secret key(SK) and address (A)
- online: CA=deploy(next.A) // deploy smart contract, address (CA)
- offline: sign(hash,prev.SK) // sign (CA,next.A,to,val,nonce,chainid)
- online: transfer(to,val,next.A,sig) // check sig, to.transfer(val)
Constructor args: next (addresses), th (threshold), ln (length).
Function _updateNext: check and store addresses in mapping _used.
Function _validateAccounts: check that sig is produced by stored addresses: _used[a]==_nonce
Function transfer: check signatures, update next addresses and transfer eth.
Simple one-time multi-signatures protocol (offline/online) to protect private keys (offline).