Thank you Joel for making the conversation this active.
If you allow, now I will sum up all said by you here and at http://atutor.ca/view/12/5736/1.html to a list of what is to be done for introducing hashing into ATutor. I'll write this list, comment it, then present my own vision of the problems, and comment it too.
Sorry for not quoting you directly - all of this is only for clarification.
So, here's the to-do list based on your opinion.
---------------------
1. Make an installation option whether to hash passwords; if yes, the script should let an admin decide which algorithm to use.
This is a good option for an admin who knows well what enviroment his server will be running in and what's the threat level.
On the other hand, it is not obvious that every admin will be able to make an informed, argumented and experience-based decision. It may be a complete surprise for him to see a vast list of algorithms and possibly approximate estimations of their strengths. As a result, it may appear that after some time of using he would want to switch to a stronger and more secure or, contrary, a relaxed and less resource-consuming algorithm (including none).
2. Hash all the passwords using a unique key generated during the installation as a salt.
This unique key (I'll name it a master key) is to be stored very carefully. Its loss or compromising would cause a master key regeneration, system-wide password reset and re-entering password for all the users.
3. Give an admin a tool to reset all the passwords in a system at once.
A new random password is generated and an email notification is send for each user.
This means:
* inusability of a server for some time (until all the users re-register);
* users complaining about admin's incompetence;
* need for explaining the management the reasons of this redical step;
* technical support for those who forgot/misspelled/not checking their mail, regarding password invalidity.
---------------------
Now here are my alternatives. They may apply or may not: not sure all of this is required/good.
.....................
1. Always use a sufficiently secure algorithm without an option of turning it off.
This makes impossible decreasing the security and execution time. The increasing security is still possible using external techniques e.g. SSL.
2. Encrypt passwords with a symmetric algorithm using a master key generated during the installation.
This eliminates a need for resetting a database if a master key gets compromised. In that case decrypting all the keys and their re-encrypting with a new master key is trivial.
Possibly, hash all the passwords before symmetric encryption in order not to let anybody see them. Such double-encypting would, however, impact server's performance.
.....................
In both cases using a number of different algorithms will increase system requirements regarding MySQL and PHP and, possibly, hardware.
Having this said, I assume that other members of ATutor community should join the discussion, cause we are likely to drive to a dead end soon. Also hope that some fresh ideas will bear in our heads during the weekend.
Have a good rest. See you!