You can frame the questions in a way that discloses no information to the prover. The questions ideally would have a 50% guess rate either way and leak no info. So, a question like “is her name Alice or Eve?” is a bad one, as you have leaked that her name is one or the other. But, questions like “is her birthday in the first half of the year or second” or “is her birthday on an even day or odd” (modulo there being 31 days in some months) leak no information if you don’t tell them if their answer was right or wrong. You come up with 20 such questions and then give them a pass/fail. No information is leaked, but the prover has a very low chance of guessing 20 50% chance questions correctly in a row.
I think your premise is incorrect. It's not that the verifier doesn't want to leak information (leaking the name alice or eve), it's that the prover doesn't want to leak the substance of the information.
I'm not well-versed on the subject, but I don't think your example is a valid zero-knowledge proof, since the prover is leaking a knowledge to the verifier (the parity of her birthday, the semester of her birthday, etc).
Zk proofs shouldn't leak knowledge to cheating provers or verifiers. Sometimes the verifier has access to a secret, and just needs to confirm the prover does as well.
We're stretching what was supposed to be a useful analogy pretty far here. The idea was that the knowledge of details about your mother can act as a proxy for the secret, experiential knowledge of having met her, which is not current shareable between humans. If the verifier picked good questions, asks enough of them, and never reuses them, this is a decent approximation of the functionality of a zk proof.
Anyway, we're off the rails, but one thing I know is that I'm proud no one on HN has made a "your mom" joke yet. Kudos all around.
"Zk proofs shouldn't leak knowledge to cheating provers or verifiers."
It is trivial to show that ZK proofs leak nothing to the prover: the verifier has no secret input to leak. This is somewhat technical but it comes down to the actual definition of ZK, which is that for any verifier V, there exists an algorithm S that has the same output distribution as V but which never interacts with the prover (at least in the case where the proof is valid). The existence of that algorithm implies that the verifier "learns nothing" -- because whatever it can compute after the interaction is something it could have computed a priori.
As a result, whatever inputs the verifier has cannot actually impact the proof itself -- otherwise it would be impossible to satisfy such a requirement. Using your example, suppose the prover can only succeed if its secret input is equal to the verifier's secret input. No algorithm that does not interact with the prover could have the same output distribution as the real verifier, because that distribution will depend on the prover's input (i.e. whether or not the input is equal to the verifier's). So you cannot actually accomplish that task with a zero knowledge proof; or taking the contrapositive, the verifier has no secret inputs in a ZK proof.
(If you are wondering what the verifier would "learn" in such a situation, one answer would be a transcript of the interaction itself.)
So, if we were to try to apply the ZK definition to the prover, we would have something trivial: take the prover P and run an "internal" copy of P in some bigger algorithm that does not interact with the verifier. Since there is no secret verifier inputs, that bigger algorithm can just follow the protocol and output whatever P outputs. Since the protocol is just being followed exactly, P has no way to distinguish the simulation from the real interaction, so the output distribution is unchanged. In other words, the prover necessarily learns nothing from the protocol.