SSH에서 사용하는 Ed25519 키 생성부터 공개키 등록, Challenge-Response 인증 과정, 비밀번호 없이 로그인되는 이유까지 실무 관점에서 자세히 설명합니다. RSA와의 차이와 Ed25519의 의미도 함께 알아봅니다.

SSH Ed25519란? 공개키 인증과 비밀번호 없는 로그인 원리 완벽 이해
SSH를 처음 사용할 때 가장 많이 접하는 명령어 중 하나가 바로 다음과 같습니다.
ssh-keygen -t ed25519
키를 생성한 후 서버에 공개키를 등록하면 이후부터는 비밀번호 없이 로그인할 수 있습니다.
하지만 많은 사람들이 단순히 "공개키를 등록하면 자동 로그인된다." 정도로만 이해하는 경우가 많습니다.
실제로는 매번 전자서명(Signature) 기반 인증을 수행하며, 비밀번호 입력만 생략될 뿐 인증 자체는 계속 이루어집니다.
이번 글에서는 SSH 공개키 인증 원리와 Ed25519의 의미를 차근차근 알아보겠습니다.
SSH 키 생성하기
리눅스에서 다음 명령을 실행하면 Ed25519 방식의 키를 생성할 수 있습니다.
ssh-keygen -t ed25519
기본적으로 다음 두 개의 파일이 생성됩니다.
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
| id_ed25519 | 개인키(Private Key) |
| id_ed25519.pub | 공개키(Public Key) |
개인키는 절대로 외부에 공개하면 안 되며, 공개키만 서버에 등록합니다.
공개키를 서버에 등록하는 이유
예를 들어 내 PC에서 B 서버로 SSH 접속한다고 가정해보겠습니다.
내 PC
──────────────────────
Private Key
Public Key
│
└──────────────►
B 서버
──────────────────────
~/.ssh/authorized_keys
Public Key 저장
서버는 authorized_keys 파일 안에 저장된 공개키를 이용하여 사용자의 신원을 확인합니다.
즉,
- 개인키는 내 PC에만 존재
- 공개키는 로그인 대상 서버에 저장
이라는 구조입니다.
SSH 로그인 과정
SSH는 비밀번호 대신 Challenge-Response 인증 방식을 사용합니다.
로그인 과정은 다음과 같습니다.
Client
│
SSH 접속 요청
│
Server
1. 서버가 랜덤한 Challenge 생성
Challenge(Random)
매번 새로운 난수(Random)를 생성하여 클라이언트에게 전달합니다.
2. 클라이언트가 개인키로 전자서명
클라이언트는 개인키를 이용하여 Challenge를 서명합니다.
sign(
privateKey,
challenge
)
생성된 Signature를 서버에 전달합니다.
3. 서버가 공개키로 검증
서버는 authorized_keys에 저장된 공개키를 이용하여 검증합니다.
verify(
publicKey,
challenge,
signature
)
검증이 성공하면 로그인됩니다.
왜 비밀번호 없이 로그인될까?
많은 사람들이
공개키를 등록하면 자동 로그인된다.
라고 생각하지만 실제로는 그렇지 않습니다.
매번 다음 과정을 수행합니다.
SSH Server
│
Challenge 생성
│
▼
SSH Client
│
Private Key로 서명
│
▼
SSH Server
│
Public Key로 검증
│
▼
로그인 성공
즉,
비밀번호 입력만 생략될 뿐
매 접속마다 전자서명 검증이 수행됩니다.
전자서명 시스템과 비교
SSH 인증 방식은 전자서명 인증 시스템과 매우 유사합니다.
| Private Key | id_ed25519 |
| Public Key | id_ed25519.pub |
| Token ID | 사용자 계정 또는 Key Fingerprint |
| 인증 서버 DB | authorized_keys |
| Challenge(Random) | SSH Challenge |
| 전자서명(Signature) | SSH Signature |
둘 다
- 공개키 암호(Public Key Cryptography)
- Challenge-Response 인증
- 전자서명(Signature)
이라는 동일한 원리를 사용합니다.
SSH와 전자서명 시스템의 차이
가장 큰 차이는 개인키를 어디에 저장하는가입니다.
SSH
~/.ssh/id_ed25519
- 일반 파일 형태
- Passphrase로 암호화 가능
- SSH Agent를 사용하면 한 번 인증 후 자동 사용 가능
전자서명 SDK
개인키는
- HSM
- Secure Storage
- 스마트카드
- 보안 토큰
등의 안전한 저장소에 보관됩니다.
또한 대부분
- PIN 입력
- 생체 인증
등을 거쳐야 개인키를 사용할 수 있습니다.
즉,
개인키를 직접 읽을 수 없도록 설계되어 있습니다.
Ed25519에서 25519는 무엇을 의미할까?
많은 사람들이
25519비트 키인가?
라고 오해하지만 그렇지 않습니다.
25519는 타원곡선(Elliptic Curve)의 이름입니다.
Ed25519는
Ed
+
25519
두 단어가 합쳐진 이름입니다.
| Ed | Edwards Curve |
| 25519 | Curve25519 |
즉,
Edwards Digital Signature Algorithm + Curve25519
라는 의미입니다.
25519 숫자의 의미
Curve25519는 다음과 같은 소수를 사용합니다.
2²⁵⁵ - 19
즉,
- 255비트 크기의 소수 필드
- 19를 뺀 값
에서 이름이 유래했습니다.
따라서
25519는
- 키 길이도 아니고
- 25,519비트도 아닙니다.
단순히 타원곡선의 이름입니다.
Ed25519 키 크기
Ed25519에서 사용하는 크기는 다음과 같습니다.
| Private Key | 32 Bytes (256비트) |
| Public Key | 32 Bytes (256비트) |
| Signature | 64 Bytes (512비트) |
RSA와 비교
RSA는 숫자가 실제 키 길이를 의미합니다.
예를 들어
ssh-keygen -t rsa -b 4096
여기서
4096은
실제 키 길이(4096비트)입니다.
반면
ssh-keygen -t ed25519
에서
25519는 알고리즘 이름입니다.
| RSA 2048 | 2048비트 키 |
| RSA 4096 | 4096비트 키 |
| Ed25519 | Curve25519 기반 알고리즘 이름 |
왜 Ed25519를 많이 사용할까?
현재 대부분의 리눅스 배포판과 Git 서비스에서는 Ed25519를 권장합니다.
주요 이유는 다음과 같습니다.
- 키 크기가 작다.
- 서명 및 검증 속도가 빠르다.
- RSA보다 효율적이다.
- 동일한 보안 수준에서 더 작은 키를 사용한다.
- 구현 실수와 사이드 채널 공격에 강하도록 설계되었다.
대략적인 보안 수준은 다음과 같습니다.
| RSA 2048 | 약 112비트 |
| RSA 3072 | 약 128비트 |
| Ed25519 | 약 128비트 |
즉, Ed25519는 RSA 3072와 비슷한 보안성을 제공하면서도 더 작은 키와 더 빠른 연산 속도를 제공합니다.
id_ed25519는 파일 이름일까?
많은 사람들이
ed25519가 파일 이름인가요?
라고 질문합니다.
정확히 말하면
id_ed25519는 기본(Default) 파일명입니다.
키 생성 시 다음과 같이 표시됩니다.
Enter file in which to save the key
(/home/user/.ssh/id_ed25519):
그냥 Enter를 누르면
~/.ssh/id_ed25519
~/.ssh/id_ed25519.pub
가 생성됩니다.
파일명은 변경할 수 있다
예를 들어
ssh-keygen -t ed25519 -f ~/.ssh/github_key
를 실행하면
github_key
github_key.pub
가 생성됩니다.
또는
ssh-keygen -t ed25519 -f ~/.ssh/prod-server
라면
prod-server
prod-server.pub
처럼 원하는 이름을 사용할 수도 있습니다.
기본 파일명이 아니면 어떻게 사용할까?
직접 지정하면 됩니다.
ssh -i ~/.ssh/github_key user@server
또는 SSH 설정 파일에 등록할 수 있습니다.
Host github
HostName github.com
User git
IdentityFile ~/.ssh/github_key
이후에는
ssh github
만 입력해도 자동으로 해당 키를 사용합니다.
정리
SSH의 공개키 인증은 단순히 공개키를 서버에 등록해 자동 로그인하는 방식이 아닙니다.
매 접속마다 서버는 새로운 Challenge를 생성하고, 클라이언트는 개인키로 전자서명을 수행하며, 서버는 공개키로 이를 검증합니다. 즉, 비밀번호 입력만 생략될 뿐 내부적으로는 매번 안전한 인증 과정이 이루어집니다.
또한 Ed25519의 25519는 키 길이가 아니라 Curve25519라는 타원곡선의 이름이며, id_ed25519는 해당 알고리즘으로 생성되는 기본 SSH 키 파일명입니다. 파일명은 자유롭게 변경할 수 있으며, 기본 파일명이 아닌 경우에는 -i 옵션이나 ~/.ssh/config를 통해 사용할 키를 지정하면 됩니다.
SSH 인증 원리를 이해하면 Git, GitHub, 서버 배포 자동화, CI/CD, 그리고 다양한 공개키 기반 인증 시스템의 동작 방식도 훨씬 쉽게 이해할 수 있습니다.
'서버 & 인프라' 카테고리의 다른 글
| 전자서명 로그인 원리 완벽 정리: tokenId는 어디에 저장되고 공개키는 어떻게 사용될까? (0) | 2026.07.02 |
|---|---|
| 간편인증 로그인 원리 완벽 이해하기 - PIN, 공개키, 개인키, 전자서명까지 한 번에 정리 (0) | 2026.07.02 |
| Nexus3를 활용한 VSCode 플러그인(VSIX) 자동 수집 및 중앙 저장소 구축 방법 (0) | 2026.06.16 |
| Nexus3 Raw Repository로 VSCode 설치파일 및 VSIX 플러그인 사내 자료실 구축하기 (0) | 2026.06.15 |
| Apache에서 HTTP Method 차단 테스트 시 반드시 확인해야 할 사항 (0) | 2026.06.05 |
