The commonly used Time based One Time Password (TOTP) system requires the initial sharing of a key. This presents a security risk, as acknowledged by Wikipedia referencing the RSA compromise:
An attacker with access to this shared secret could generate new, valid TOTP codes at will. This can be a particular problem if the attacker breaches a large authentication database.
Nearly three months after RSA Security was breached by hackers, the company has announced it will replace the security tokens for nearly all of its SecurID customers.
Knowing only a tiny bit about the mathematics behind these tools, there seems no obvious reason why such a one time password could not be generated with some asymmetric cryptography such that the validating party is not able to generate codes, just validate them.
Do such algorithms exist? Is they do, why are they not used? If they do not, why not?