For movement you just use the data that was used to draw the curve for knowing where to place the entity next.
If the data is a function, you just calculate the next step, e.g. f(cur_pos + velocity * dt), where cur_pos is the current position vector, velocity is the velocity vector and dt is the delta time, i.e. frame time (the time a single grame takes to draw).
If it's a list of points, you'll have to take the distance between each point, thrn calculate how far you get (velocity * dt) and then find out where between the points you have to place your entity.
As for the rotation towards the normal, you'll most likely want to use atan2(). Google a bit and you should find lots of answers to that question.
Edit: Just realized, while the first idea works, it won't move uniformly on the curve but instead will move uniformly parallel to the x axis. Not exactly sure from the top of my head, but I think one could counter this somehow by using the derived function.