I've been reading about the S/KEY One-Time Password system on wikipedia here and was wondering why the server only stores a single password and not the list of one-time passwords like the client does. In other words, why is the implementation not a simply a password-to-password compare but instead a cryptographic hash function is run on the password and then the result of that hash function is compared to the previous One-Time-Password the client sent to the server?
Applying the hash function assures that only the next password in sequence will be valid. There is no reason to store the previous state, or the client's original secret. Once a valid key is used, the server stores the hash of it (which is the same algorithm used to generate the list of hashes in the first place.) This puts the burden of storage on the client, meaning the server doesn't need a 1000 rows in the database for each user.
Of course, this algorithm was developed in the days before hardware boxes capable of testing 1.5 trillion hashes per second were commercially available.