# SSH 키 생성 (ssh-keygen)

#### SSH 키란?

SSH 키는 안전한 인증을 위해 사용되는 암호화된 키 쌍으로, 공개키(공용키)와 비밀키(개인키)로 구성된다. 공개키는 서버에 배포되고 비밀키는 사용자의 로컬 시스템에 안전하게 저장된다. 이 키 쌍을 이용하여 비밀번호 없이 서버에 접속하거나 인증 과정을 간소화할 수 있다.

#### ssh-keygen 개요

`ssh-keygen`은 OpenSSH에서 제공하는 SSH 키 생성 도구이다. 사용자는 이 명령어를 통해 RSA, DSA, ECDSA, Ed25519 등 다양한 유형의 암호화 키를 생성할 수 있다. 기본적으로 SSH 프로토콜에서 가장 많이 사용되는 키는 RSA이며, 현재 Ed25519도 널리 사용된다.

#### ssh-keygen 명령어의 기본 사용법

다음은 가장 기본적인 SSH 키 쌍을 생성하는 명령어 예시이다.

```bash
ssh-keygen -t rsa -b 4096
```

이 명령어는 4096비트의 RSA 키 쌍을 생성한다. 기본적으로 생성된 비밀키는 `~/.ssh/id_rsa` 파일에 저장되며, 공개키는 `~/.ssh/id_rsa.pub` 파일에 저장된다.

#### 키 생성 옵션

`ssh-keygen` 명령어에는 다양한 옵션이 존재하며, 그 중 몇 가지 주요 옵션은 다음과 같다:

* `-t`: 생성할 키 유형을 지정한다. (예: `rsa`, `ecdsa`, `ed25519`)
* `-b`: 키 길이를 지정한다. RSA의 경우 일반적으로 2048 또는 4096비트가 권장된다.
* `-f`: 키 파일의 저장 위치를 지정한다.
* `-C`: 키에 주석(comment)을 추가한다.

```bash
ssh-keygen -t ed25519 -C "example@domain.com"
```

이 명령어는 Ed25519 키 쌍을 생성하며, 키에 "<example@domain.com>"이라는 주석이 추가된다.

#### RSA 키 생성 원리

RSA 키 쌍은 크게 세 가지 수학적 단계로 생성된다.

**1. 두 소수 $p$와 $q$ 선택**

RSA 알고리즘의 첫 번째 단계는 두 개의 큰 소수 $p$와 $q$를 무작위로 선택하는 것이다. 이러한 소수들은 매우 크며, RSA 키의 보안 강도는 이 소수들의 크기에 크게 의존한다.

**2. $n$ 계산**

두 소수 $p$와 $q$를 선택한 후, $n$을 다음과 같이 계산한다:

$$
n = p \times q
$$

이 $n$ 값은 공개키와 비밀키 모두에서 사용되며, RSA 암호화와 복호화 과정에서 중요한 역할을 한다.

**3. 오일러 토션 함수 $\phi(n)$ 계산**

오일러의 토션 함수 $\phi(n)$는 다음과 같이 정의된다:

$$
\phi(n) = (p - 1) \times (q - 1)
$$

이 함수는 공개키와 비밀키를 생성하는 과정에서 사용된다.

#### 4. 공개 지수 $e$ 선택

다음으로, $e$라고 하는 공개 지수를 선택한다. 이 값은 $1 < e < \phi(n)$을 만족해야 하며, 보통 $e = 65537$와 같이 소수로 선택한다. $e$는 다음 조건을 만족해야 한다:

$$
\gcd(e, \phi(n)) = 1
$$

이 조건은 $e$와 $\phi(n)$이 서로소임을 의미한다.

#### 5. 비밀 지수 $d$ 계산

비밀 지수 $d$는 모듈로 $\phi(n)$에 대한 $e$의 역수로 계산된다. 이는 다음 식을 만족하는 $d$를 구하는 것이다:

$$
d \times e \equiv 1 \ (\text{mod} \ \phi(n))
$$

즉, $d$는 다음과 같은 식으로 계산할 수 있다:

$$
d = e^{-1} \ (\text{mod} \ \phi(n))
$$

이때 $d$는 비밀키의 일부로 사용되며, 공개되지 않는다.

#### 6. 공개키와 비밀키 구성

이제 공개키와 비밀키는 다음과 같이 구성된다:

* 공개키: $(n, e)$
* 비밀키: $(n, d)$

공개키 $(n, e)$는 누구나 알 수 있지만, 비밀키 $(n, d)$는 소유자만이 알고 있어야 한다.

#### Ed25519 키 생성

최근 들어 많이 사용되는 Ed25519 키는 타원 곡선 암호화(ECC)를 기반으로 하며, RSA보다 더 짧은 키 길이로도 높은 보안성을 제공한다. Ed25519 키는 RSA와 달리 고정된 크기의 키를 생성하며, 매우 빠른 속도로 동작하는 것이 특징이다.

Ed25519 키 쌍을 생성하려면 다음과 같은 명령어를 사용할 수 있다:

```bash
ssh-keygen -t ed25519
```

이 명령어로 생성된 공개키는 `~/.ssh/id_ed25519.pub` 파일에 저장되고, 비밀키는 `~/.ssh/id_ed25519` 파일에 저장된다.
