Skip to content

Conversation

@IntegratedQuantum
Copy link
Member

@IntegratedQuantum IntegratedQuantum commented Jan 23, 2026

This will be a big and long PR, but it really is time to start working on it. So far I haven't done much.

Remaining work:

  • Validate and generate the seed phrases based on BIP39. (This makes it easy for a user to find errors when entering the seed string) Forward compatibility is ensured by allowing the user to bypass the checks by clicking the button a second time.
  • Decide on a public/private key algorithms
  • Create account page
  • How to seed the CSPRNG → using the one from the standard library which is seeded from the OS
  • Generate public/private key pair from seed phrase
  • Add option to store it on file and encrypt it (can we interact with outside solutions, e.g. the Linux keyring?)
  • Add TLS to handle all the encryption logic
  • Do the authentication network logic by signing the TLS initialization data on the client
  • Implement migration path for old usernames (from before this)
  • Implement migration path for compromised signature algorithms: The server asks for all signatures that were used in the past and then looks for the player based on their public keys in the various old algorithms
  • Use std.crypto.secureZero(comptime T: type, s: []T) instead of @memset

fixes #1737

@IntegratedQuantum
Copy link
Member Author

IntegratedQuantum commented Jan 24, 2026

I think I'll use the BIP39 (bitcoin) word list of 2048 words for the seed phrase. It has some useful properties, and has been carefully curated to avoid mistakes from similar sounding words and such.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Authentication without a central authentication server

1 participant