Out of a combination of curiosity and frustration, I'm trying to figure out why Quorum requires a node's public key when using "privateFor". Wouldn't it be easier to use addresses? I am wondering if there is any advantage in using the public key.
2 Answers
privateFor
is used for sending Quorum's private transactions.
As described in Quorum docs, a private transaction is encrypted using the EC public key of the recipient. That way only the recipient can decrypt it using their private key. Generally, the public key is needed to encrypt data "for someone".
As to why someone's address isn't sufficient - an address is (a fragment of) a hash of someone's public key, so it is impossible to get a public key solely from someone's address.
There is a possibility to recover a public key from a signed transaction from someone, but first you'd need to find such a transaction, and it could also happen that that someone never signed any transaction, in which case there would be no way.
You can easily implement it yourself, e.g. require every user to sign some transaction to some well-known contract once, and based on this later "resolve" addresses to public keys. As far as I know, Quorum has no such functionality.
Caution here: nodes are one thing and Ethereum accounts are something completely different. A node is merely a channel for Ethereum accounts to send transactions to the network.
Nodes may have a private and public key because they're so configured, but they're no Ethereum accounts. Their use of public-key cryptography is independent from Ethereum's, they're just receiving encrypted content like anybody else has since the '70s, they just happen to use ECC because it's efficient.