Alice picks a list of uniformly random private keys $\{a_i\}$. She calculates a list of corresponding public keys $\{A_i\}$ as $\{a_iG\}$. She then declares a list of corresponding public key hashes $\{P_i\}$ calculated as $\{hash(A_i)\}$.
$G$ is a well-known base point on the curve, and $hash()$ is a cryptographically secure hash function.
Bob does the same, so that Bob has private keys $\{b_i\}$, has public keys $\{B_i\}$, and declares public key hashes $\{Q_i\}$.
At this stage, Alice and Bob could decide to collaborate to determine the Diffie-Hellman shared secret list $\{S_i\}$ as $\{a_iB_i\}$ or $\{b_iA_i\}$. However, they do not do this.
Without loss of generality, if Alice wants to learn the shared secret at index $j$ without Bob discovering $j$ or the shared secret:
Alice picks a uniformly random blinding factor $r$, and sends $X=rA_j+jH$ to Bob. $H$ is a second well-known base point on the curve, where $h$ is not known such that $hG==H$.
Bob sends back to Alice the list $\{Z_i\}$ = $\{b_i(X-iH)\}$.
Alice can now only unblind and learn the shared secret $S_j$ by calculating $r^{-1}Z_j$. She is unable to learn anything about any other shared secret, because the $H$ component of Bob's list of responses will only cancel out at one particular index.
Since this Diffie-Hellman secret $S_j$ will be equal to $a_jB_j$, Alice can then verify that Bob's hash $Q_j$ matches by checking $Q_j\overset{?}{=}hash(a_j^{-1}S_j)$.