"I suggest that Bitcoin Core should generate a public/private key pair and share the public one with peers."
I've not read the p2p protocol of Bitcoin core, but I suppose the initial handshake between 2 peers would be the ideal place to exchange a public keys.
would it make sense to generate a new random pair of keys per each peer you connect to?
then each subsequent message to every peer gets encrypted differently, keeping each conversation isolated from each other encryption-speaking.
These keys would have nothing to do with your wallet, they're just to encrypt any further communication between peers post-handshake. Would that be of any use to "This could provide privacy and integrity but not autentication."?