I am working on a website with accounts and I want a login scheme that does not expose users' passwords or hashes in the event of a total security failure. I would greatly appreciate some feedback on this authentication scheme:
- Client retrieves auth challenge from server
- Password is hashed to 32 byte integer on client
- Integer is used to create a keypair, PK, using static keypair generator
- Temporary session key is generated, SK
- Challenge is signed with PK
- SK.public and challenge signature are encrypted with PK.private and server public key
- Cipher is sent to server with username
- Server decrypts cipher using associated public key for username, checks challenge signature and allows SK.public to be used for x time
Edit: I'm a fool, this doesn't add any level of security. If the generator is static then it literally has no advantage over a hash. This one was super obvious and I should have caught it, but it's still a good reminder not to try to make new protocols unless you really know what you're doing.