Data-validating protocol I have to implement protocol of secure data transfer that can be described as


Alice selects data to send from finite set $m\in M$ (e.g. $M$ could be a column of values in database table)
Alice encrypts selected data with some symmetric(!) algorithm and sends it to Bob.
Bob decrypts data and get $m$   
Bob verifies that $m\in M$. It's important to realize here that Bob have no need to authenticate Alice, he must only be sure that $m$ is belong to $M$. However, Bob have no direct access to $M$
If $m\in M$ then Bob sends $m$ via secure channel to Carol, else Bob ignore the $m$.




In other words, Bob serves as a gateway that provide secured communication and keeps Carol away from flooding of invalid messages.

Is there a protocol to achieve my goal? Please share any thoughts about it.

P.S. I don't want to use any TTP.
Carol generates a NIZK proof common reference string and a statistically binding commitment

to a formal description of $M$. $\:$ Carol sends both of those to both Alice and Bob, and additionally

sends the associated decommit string to Alice. $\;\;$ For each message $m$ in $M$, Alice calculates
the proof of $\:m\in M\:$ and encrypts it along with $m$ before sending the ciphertext to Bob. 

After decrypting, Bob can then verify that $\:m\in M\:$ by verifying the NIZK proof.