DEV Community

Cover image for SSH Keys in 2024: Why Ed25519 Replaced RSA as the Default
Israel Olaleye
Israel Olaleye

Posted on

SSH Keys in 2024: Why Ed25519 Replaced RSA as the Default

If you've ever set up GitHub, configured a server, or worked with remote machines, you've encountered SSH keys. Take a look in your ~/.ssh/ directory and you'll likely find files named id_rsa or id_ed25519. These represent two generations of cryptography—and understanding the difference matters for both security and performance.

What These Files Actually Are

SSH keys come in pairs: a private key (kept secret on your machine) and a public key (shared with servers). The names id_rsa and id_ed25519 refer to the cryptographic algorithms used to generate them:

id_rsa id_ed25519
Algorithm RSA (1977) Ed25519 (2011)
Mathematical foundation Integer factorization Elliptic curve cryptography
Key size 2048–4096+ bits Fixed 256 bits
Standard since Early SSH days OpenSSH 6.5+ (2014)

The Technical Shift

RSA relies on the difficulty of factoring large prime numbers which is a problem that has served cryptography for decades but requires increasingly large keys to maintain security. Modern 2048-bit RSA keys offer roughly 112 bits of security.

Ed25519 uses elliptic curve cryptography (specifically Curve25519 designed by Daniel Bernstein). Despite its compact 256-bit size, it provides approximately 128 bits of security with significantly better performance characteristics.

Real-World Performance Differences

The contrast becomes noticeable in practice:
Key generation: Ed25519 is nearly instantaneous; RSA with 4096 bits takes perceptibly longer.

Authentication speed: Ed25519 signatures are smaller (64 bytes vs 256 bytes for RSA 2048) and faster to verify—relevant when connecting to busy servers or working from low-power devices.

Storage efficiency: Public keys shrink from ~500 bytes to 32 bytes. On systems managing thousands of keys, this adds up.

When to Use Which

Choose Ed25519 for:

  • New projects and fresh setups
  • Modern servers running OpenSSH 6.5 or later
  • Resource-constrained environments (embedded systems, mobile devices)
  • Any situation where you control both endpoints

Keep RSA for:

  • Legacy infrastructure (old network equipment, aging enterprise systems)
  • Environments with strict compliance requirements mandating specific algorithms
  • Interfacing with systems that haven't updated their SSH implementations since ~2014

Most major platforms—GitHub, GitLab, AWS, Azure—have supported Ed25519 for years. The remaining compatibility concerns typically involve specialized hardware: load balancers, industrial controllers, or vintage corporate infrastructure.

Practical Migration
Generating a modern key takes one command:

ssh-keygen -t ed25519 -C "your_email@example.com"

Enter fullscreen mode Exit fullscreen mode

This creates ~/.ssh/id_ed25519 and ~/.ssh/id_ed25519.pub. Add the public key to your services, update your SSH config if needed, and gradually retire RSA dependencies.

If you maintain both, SSH will try keys in order—Ed25519 typically first—falling back to RSA only when necessary.

Looking Forward
Cryptography evolves. Ed25519 represents a deliberate design: rigidity (no variable parameters to misconfigure), speed, and resistance to side-channel attacks. It won't resist quantum computing—no mainstream public-key algorithm does yet—but it represents current best practice.

RSA isn't broken. 4096-bit keys remain secure for now. But Ed25519 achieves equivalent or better security with elegance and efficiency. For new work in 2024, it's the clear default.

Check your current keys with ls -la ~/.ssh/ and consider whether your setup reflects modern standards or inherited legacy.

Top comments (0)