summaryrefslogtreecommitdiff
path: root/src/content/blogs/blog-0.md
blob: 228ff636c678920be41580d43e098b3d3cdcd48b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
---
title: The search for the perfect ed25519 key pair
date: 2024-12-11
---

# The search for the perfect ed25519 key pair

Todo write intro to catch attention

### Why care about ed25519 key pairs?

Ed25519 is a cryptographic algorithm for generating
a pair of keys, a public one that can be shared with anyone
and a private one that is kept as a secret.

### The ssh public key format

If you have ever accessed a remote server it was most likely by
ssh-ing into it.  
You have also most likely had to copy paste something similar to this:

```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBSSj+yfJLWEb+Df4r4603TOFAUBREYS43qQB+c9i9UW
```

Let's break it down

- The first part `ssh-ed25519` is the algorithm type, other common algorithms are `ssh-rsa` and `ssh-ecdsa`
- The second part is a base64-encoded binary format consiting of
  - the length of the algorithm string, for ed25519 it's always 11 (4 bytes long)
  - the algorithm type, for ed25519 it's always `ssh-ed25519` in binary (11 bytes long)
  - the length of the key, 32 bytes for ed25519 (4 bytes long)
  - the actual ed25519 key (32 bytes long)

### Embedding a word in base64

Base64 is a widely used format for writing binary in a compact and human readable way,
it uses A-Z, a-z, 0-9, '/' and '+' adding up to 64 unique characters.

It's possible to choose specific bytes in a way that when encoding it with base64
it will form a word.

For example, to encode "Kyren" in base64, we can use the following bytes  
`00101011 00101010 01001110` or in hex `2b 2a de`