If $X$ is separable, then $X^*$ contains a separating sequence $(x_n^*)$ for $X$. Suppose $X$ is a Banach space. If $X$ is separable, then there exists a sequence of functionals $(x^*_n)_{n=1}^{\infty}$ in $X^*$ such that $x_n^*(x) = 0$ for all $n \in \mathbb{N}$ implies that $x = 0.$
Proof: If $X$ is separable, let $(x_n)$ be a sequence of nonzero vectors that is dense in $X$. For each $n$, using the Hahn-Banach theorem, pick $x_n^* \in X^*$ such that $x_n^*(x_n) = \| x_n \|$ and $\| x_n^* \| = 1.$ Suppose $x_n^*(x) = 0$ for all $n$. Then if $\varepsilon>0$, there exists $m \in \mathbb{N}$ such that $\| x-x_m \| < \varepsilon.$ Thus $\| x_m \| = x_m^*(x_m) < \varepsilon,$ and so $\|  x \| < 2 \varepsilon.$ Since $\varepsilon >0$ is arbitrary, we have $x = 0.$
I can understand the whole proof, except one part: Why $\| x_m \| = x_m^*(x_m) < \varepsilon$ ? I think we might need the fact $x_n^*(x) = 0$ to conclude the inequality as I do not see it being used anywhere in the proof. 

Since $x_m^*(x)=0$, we have
$x_m^*(x_m)=x^*_m(x_m)-x_m^*(x)=x_m^*(x_m-x)\leq |x_m^*(x_m-x)|\leq$
$\leq \Vert x_m^*\Vert \Vert x_m-x  \Vert$.
Since $\Vert x^*_m\Vert=1$ and $\Vert x_m-x  \Vert<\varepsilon$, by replacing above, one obtains
$x_m^*(x_m)<\varepsilon$.
Since $\Vert x_m\Vert=x_m^*(x_m)$, we finally have
$\Vert x_m\Vert=x_m^*(x_m)<\varepsilon$.
