Basically, the authenticator is a timed token generator.
You've a token sequence X1, X2, ..., Xi where Xi=f(Xi-1).
The authenticator is nothing but a simple microcontroller with a timer set to 30 seconds, an interrupt on the button and a screen.
On each timer interrupt, it updates its internal value. When you push the button, it power up the display and keeps active for some time. The rest of the time, it's in "sleep" mode which allows to lower it's power consuption.
Blizzard-side, when you've an authenticator, the server saves the time stamp and the Xi for that time stamp. when you log in, it computes f(f(f(...f(X)))), saves it with the new time stamp and check the value you've entered. Well, it keeps Xi-1 and also compute Xi+1 and test for the three values.
Without knowing the actual function, it'd be impossible to implement the official authenticator. But the authenticator mecanism can be implemented with a custom made authenticator...
We could have our own algorithm and mangos-authenticator programs for Windows, Linux, MacOS/X, Android and iPhone/... We may even design a small authenticator system with a cheap PIC or AVR microcontroller, a quartz (for precise timing), 2 capacitors, a transistor (to control the power of the LCD display) and an LCD display. Add a press button, a battery and you're done.
mangos-authenticator would also require a web-side administration which should allow to add an authenticator, remove it and emergency-remove (battery down for example, with a confirmation by E-Mail).