Miranda doesn't do passwords.
This is partially for security reasons (a system that deals in password may not be secure) but mostly because passwords are a pain.
Passwords are a pain because to do them properly, you can't store them in cleartext (an attacker who gained access to the system could get them) and, even encrypted or hashed they are still sensitive information.
Since Miranda already requires user to register a public key it uses that. When a user "logs in" they simply provide their user name. The system determines whether they already have an active session, If they do, the system returns it. If they do not have an active session the system creates one.
When the system creates a session, it uses a random, 8-byte integer to identify it, the session id. When the system hands the session id back to the user, it first encrypts the value with the user's public key. When the user gets this encrypted value, they decrypt it with their private key.
The user supplies the session id with all their requests, so the system validates their identity.
It is extremely unlikely that an attacker could guess a valid session id, and most operations could be modified to limit the number of failed attempts. The exception are new events which require the system to process them as quickly as possible.
The alternative is to detect when a large number of failed uses of session ids has occurred. Something for my todo list!