SSH Ed25519란? 공개키 인증과 비밀번호 없는 로그인 원리 완벽 이해

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 인증 방식은 전자서명 인증 시스템과 매우 유사합니다.

전자서명 SDKSSH
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를 생성하고, 클라이언트는 개인키로 전자서명을 수행하며, 서버는 공개키로 이를 검증합니다. 즉, 비밀번호 입력만 생략될 뿐 내부적으로는 매번 안전한 인증 과정이 이루어집니다.

또한 Ed2551925519는 키 길이가 아니라 Curve25519라는 타원곡선의 이름이며, id_ed25519는 해당 알고리즘으로 생성되는 기본 SSH 키 파일명입니다. 파일명은 자유롭게 변경할 수 있으며, 기본 파일명이 아닌 경우에는 -i 옵션이나 ~/.ssh/config를 통해 사용할 키를 지정하면 됩니다.

SSH 인증 원리를 이해하면 Git, GitHub, 서버 배포 자동화, CI/CD, 그리고 다양한 공개키 기반 인증 시스템의 동작 방식도 훨씬 쉽게 이해할 수 있습니다.