I wonder how multi-signature wallets communicate with each other?
My favorite wallet is copay. How do they communicate with each other before payment is done? How is privacy handled between each multi-sig device?
Copay Dev Here.
Copay uses Bitcore-Wallet-Service (https://github.com/bitpay/bitcore-wallet-service) to communicate transactions proposals between copayers. When we stated Copay (prior version 0.5 I think) we used to use webRTC to directly communicate (using P2P networking) proposals between copayers but it was:
so we decide to create a wallet-service, that help crafting the transaction, recollect the signatures and interfase with the blockchain (using bitcore https://bitcore.io/ ). Proposals are signed by the copayers (to prevent the server for creating or tampering the proposals) and the sensitive parts are encrypted.
The final transaction that gets broadcast to the network, just like every other Bitcoin transaction, is public. This is safe because signatures do not reveal any secret information. In the case of multisig wallets, when one wallet adds its signature and then sends it to another wallet, it doesn't matter if anyone is eavesdropping. It would be perfectly safe to send the partially-signed transaction in the clear. After all, when subsequent signatures are added, it will all be made public anyways.
That said, there can be privacy implications about whether you wish to let the world know who you are doing multisig with. In that case, establishing secure channels for communication becomes important, as well as making sure the addresses/public keys used are not somehow associated with your identities.