If you want to make sure that the private key-holder cannot encrypt something such that the result is indistinguishable from a message sent by the public key-holder, then you could simply double-wrap your data.
Simply have two key-pairs.
Side A gets the private key of key-pair 1, and the public key of key-pair 2.
Side B gets the public key of key-pair 1, and the private key of key-pair 2.
Side B sends his/her/its message by first encrypting it with the public key of key-pair 1, and then the private key of key-pair 2.
Side A decrypts the result using the public key of key-pair 2, and the private key of key-pair 1 (in that order).
Side A can generate the public key of key-pair 1, but cannot generate the private key of key-pair 2, so side A cannot generate a valid message.
The inverse works in the other direction.
Down-side: If you have a central person (or server) that every other person (or computer) is communicating with, each party needs their own private key, and they need to share the corresponding public key with the central person (or server) they are communicating with.