The simplest heuristic approximation method is the one proposed by Tiller and Hanson. They just offset the legs of the control polygon in perpendicular directions:
The blue curve is the original one, and the three blue lines are the legs of its control polygon. We offset these three lines, and intersect/trim them to get the points A and B. The red curve is the offset. It's only an approximation of the true offset, of course, but it's often adequate.
If the approximation is not good enough for your purposes, you split the curve into two, and approximate the two halves individually. Keep splitting until you're happy. You will certainly have to split the original curves at inflexion points, if any, for example.
Here is an example where the approximation is not very good, and splitting would probably be needed:
There is a long discussion of the Tiller-Hanson algorithm plus possible improvements on this web page.
The Tiller-Hanson approach is compared with several others (most of which are more complex) in this paper.
Another good reference, with more up-to-date materials, is this section from the Patrikalakis-Maekawa-Cho book.
For even more references, you can search for "offset" in this bibliography.
The simplest approach is to use $N+1$ points to construct a curve of degree $N$. You have to assign a parameter ($t$) value to each point. So, to construct a cubic curve through four given points $\mathbf{P}_0$, $\mathbf{P}_1$, $\mathbf{P}_2$, $\mathbf{P}_3$, you need four parameter values, $t_0, t_1, t_2, t_3$. Then, as @fang said in his answer, you can construct a set of four linear equations and solve for the four control points of the curve. Two of the equations are trivial, so actually you only have to solve two equations.
The simplest approach is to just set
$$t_0 = 0 \quad , \quad
t_1 = \tfrac13 \quad , \quad
t_2 = \tfrac23 \quad , \quad
t_3 = 1$$
Then the matrix in the system of linear equations is fixed, and you can just invert it once, symbolically. You can get explicit formulae for the control points, as given in this question. But this only works if the given points $\mathbf{P}_0$, $\mathbf{P}_1$, $\mathbf{P}_2$, $\mathbf{P}_3$ are spaced fairly evenly.
To deal with points whose spacing is highly uneven, the usual approach is to use chord-lengths to calculate parameter values. So, you set
$$c_0 = d(\mathbf{P}_0, \mathbf{P}_1) \quad ; \quad
c_1 = d(\mathbf{P}_1, \mathbf{P}_2) \quad ; \quad
c_2 = d(\mathbf{P}_2, \mathbf{P}_3)$$
Then put $c = c_0+c_1+c_2$, and
$$t_0 = 0 \quad , \quad
t_1 = \frac{c_0}{c} \quad , \quad
t_2 = \frac{c_0+c_1}{c} \quad , \quad
t_3 = 1$$
Then, again, provided $t_0 < t_1 < t_2 < t_3$, you can set up a system of linear equations, and solve.
If you're willing to do quite a bit more work, you can actually construct a cubic curve passing through 6 points. Though, in this case, you can't specify the parameter values, of course. For details, see my answer to this question.
Best Answer
If the curve lies in some plane, and you want a normal vector that also lies in this same plane, just rotate the tangent vector by 90 degrees clockwise or counter-clockwise. So, if the tangent vector is $(u,v,0)$, the normal vector will be either $(v,-u,0)$ or $(-v,u,0)$. If you use a unit-length tangent vector, this will give a unit-length normal vector, too.
If the curve is not planar, there are an infinite number of normal vectors at each point, and you have to decide which one you want. If $\mathbf{t}$ is the tangent vector, and $\mathbf{v}$ is any other vector not parallel to $\mathbf{t}$, then the vector cross product $\mathbf{t} \times \mathbf{v}$ will be normal to the curve. This cross product will not necessarily have unit length, though, so you may want to unitize it before using it in further calculations.
The calculation in the first paragraph is a special case of the one in the second paragraph. We just used $\mathbf{v} = (0,0,\pm 1)$.
Finding normal vectors for Bezier curves is no different from finding normal vectors on any curve. You can read about this in any book on calculus or differential geometry.