[proofplan]
The proof is a direct unpacking of the definition of the Killing form. First we verify that the assignment $X\mapsto \operatorname{ad}_X$ is linear, using bilinearity of the Lie bracket. Then linearity of composition in each factor and linearity of trace give bilinearity of $B$. Finally, symmetry follows from the cyclic trace identity $\operatorname{tr}(S\circ T)=\operatorname{tr}(T\circ S)$ for endomorphisms of a finite-dimensional [vector space](/page/Vector%20Space).
[/proofplan]
[step:Show that the adjoint map is linear in the Lie algebra element]
Let
\begin{align*}
\operatorname{ad}:\mathfrak g\to \operatorname{End}_k(\mathfrak g)
\end{align*}
denote the map $X\mapsto \operatorname{ad}_X$. For $X_1,X_2,Y\in\mathfrak g$ and $a,b\in k$, bilinearity of the Lie bracket gives
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}(Y)=[aX_1+bX_2,Y].
\end{align*}
Hence
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}(Y)=a[X_1,Y]+b[X_2,Y].
\end{align*}
By the definition of $\operatorname{ad}_{X_1}$ and $\operatorname{ad}_{X_2}$, this is
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}(Y)=a\operatorname{ad}_{X_1}(Y)+b\operatorname{ad}_{X_2}(Y).
\end{align*}
Since this holds for every $Y\in\mathfrak g$, we have
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}=a\operatorname{ad}_{X_1}+b\operatorname{ad}_{X_2}
\end{align*}
as elements of $\operatorname{End}_k(\mathfrak g)$.
[guided]
We first isolate the only Lie-algebraic input: the bracket is bilinear. Define
\begin{align*}
\operatorname{ad}:\mathfrak g\to \operatorname{End}_k(\mathfrak g)
\end{align*}
by sending $X\in\mathfrak g$ to the endomorphism
\begin{align*}
\operatorname{ad}_X:\mathfrak g\to\mathfrak g,
\end{align*}
where $\operatorname{ad}_X(Y)=[X,Y]$ for $Y\in\mathfrak g$.
To prove that $\operatorname{ad}$ is linear, fix $X_1,X_2\in\mathfrak g$ and scalars $a,b\in k$. Two endomorphisms of $\mathfrak g$ are equal exactly when they have the same value on every vector $Y\in\mathfrak g$, so let $Y\in\mathfrak g$ be arbitrary. By bilinearity of the bracket in its first variable,
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}(Y)=[aX_1+bX_2,Y].
\end{align*}
Therefore
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}(Y)=a[X_1,Y]+b[X_2,Y].
\end{align*}
Using the definition of the adjoint endomorphisms again, this becomes
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}(Y)=a\operatorname{ad}_{X_1}(Y)+b\operatorname{ad}_{X_2}(Y).
\end{align*}
Because $Y$ was arbitrary, the endomorphisms themselves are equal:
\begin{align*}
\operatorname{ad}_{aX_1+bX_2}=a\operatorname{ad}_{X_1}+b\operatorname{ad}_{X_2}.
\end{align*}
This proves that $X\mapsto\operatorname{ad}_X$ is a $k$-[linear map](/page/Linear%20Map) from $\mathfrak g$ to $\operatorname{End}_k(\mathfrak g)$.
[/guided]
[/step]
[step:Use linearity of trace to prove bilinearity of the Killing form]
Fix $X_1,X_2,Y\in\mathfrak g$ and $a,b\in k$. Using the previous step, linearity of composition in the left factor, and linearity of trace on $\operatorname{End}_k(\mathfrak g)$, we obtain
\begin{align*}
B(aX_1+bX_2,Y)=\operatorname{tr}((a\operatorname{ad}_{X_1}+b\operatorname{ad}_{X_2})\circ\operatorname{ad}_Y).
\end{align*}
Thus
\begin{align*}
B(aX_1+bX_2,Y)=a\operatorname{tr}(\operatorname{ad}_{X_1}\circ\operatorname{ad}_Y)+b\operatorname{tr}(\operatorname{ad}_{X_2}\circ\operatorname{ad}_Y).
\end{align*}
By the definition of $B$,
\begin{align*}
B(aX_1+bX_2,Y)=aB(X_1,Y)+bB(X_2,Y).
\end{align*}
Similarly, for $X,Y_1,Y_2\in\mathfrak g$ and $a,b\in k$, linearity of $Y\mapsto\operatorname{ad}_Y$, linearity of composition in the right factor, and linearity of trace give
\begin{align*}
B(X,aY_1+bY_2)=\operatorname{tr}(\operatorname{ad}_X\circ(a\operatorname{ad}_{Y_1}+b\operatorname{ad}_{Y_2})).
\end{align*}
Therefore
\begin{align*}
B(X,aY_1+bY_2)=aB(X,Y_1)+bB(X,Y_2).
\end{align*}
So $B$ is bilinear.
[/step]
[step:Apply cyclicity of trace to prove symmetry]
Let $X,Y\in\mathfrak g$. Since $\mathfrak g$ is finite-dimensional over $k$, the endomorphisms $\operatorname{ad}_X$ and $\operatorname{ad}_Y$ have well-defined traces, and the cyclic trace identity applies to the pair
\begin{align*}
\operatorname{ad}_X,\operatorname{ad}_Y\in\operatorname{End}_k(\mathfrak g).
\end{align*}
Thus
\begin{align*}
B(X,Y)=\operatorname{tr}(\operatorname{ad}_X\circ\operatorname{ad}_Y).
\end{align*}
By cyclicity of trace,
\begin{align*}
\operatorname{tr}(\operatorname{ad}_X\circ\operatorname{ad}_Y)=\operatorname{tr}(\operatorname{ad}_Y\circ\operatorname{ad}_X).
\end{align*}
Using the definition of $B$ again,
\begin{align*}
B(X,Y)=B(Y,X).
\end{align*}
Since $X$ and $Y$ were arbitrary, $B$ is symmetric. Together with bilinearity, this proves the theorem.
[/step]