노트

SSH 키: Ed25519와 RSA

SSH Keys: Ed25519 vs. RSA

인프라#security#linux · 연결된 개념 3개

쉽게 말하면

SSH 키는 서버 문을 여는 내 전용 열쇠이고, Ed25519는 더 작고 단단하게 새로 깎은 열쇠예요. 작아도 오래된 RSA 열쇠 못지않게 안전하고 만들고 쓰기도 빨라서 지금은 기본 권장이에요.

비유가 깨지는 곳 열쇠를 건네는 게 아니라 서명으로 '나'임을 증명하는 방식이에요. 아주 오래된 서버, RSA를 요구하는 규정, 일부 하드웨어 토큰에선 아직 RSA가 필요해요. 어느 쪽이든 개인 키는 패스프레이즈로 잠가 둬요.

SSH 키를 만들 때 고르는 서명 알고리즘이다. RSA는 큰 수의 소인수분해가 어렵다는 데 기댄 오래된 방식이고, Ed25519는 Curve25519 타원곡선을 쓰는 EdDSA(Edwards-curve Digital Signature Algorithm) 구현으로 더 짧은 키로 비슷하거나 높은 보안 수준을 낸다. 지금은 Ed25519가 기본 권장이다.

ssh-keygen -t ed25519 -C "you@example.com"
ssh-keygen -t rsa -b 4096 -C "you@example.com"   # 호환성이 필요할 때
RSAEd25519
키 길이2048~4096비트(3072 이상 권장)256비트 고정
속도서명·키 생성이 느림빠름
서명크다작고 결정적(같은 메시지 → 같은 서명)
호환성거의 모든 환경OpenSSH 6.5(2014) 이상
  • Ed25519는 구현 실수가 끼어들 여지가 적게 설계됐다. 서명에 난수가 필요 없어 난수 생성기 결함에 덜 취약하다
  • RSA를 고를 이유는 아주 오래된 서버, 규정상 RSA 요구, Ed25519를 지원하지 않는 하드웨어 토큰 정도다
  • 개인 키는 패스프레이즈로 잠그고 ssh-agent에 올려 쓴다. CI에서 쓰는 배포 키는 저장소 비밀 변수에 두고 접속 대상의 호스트 키는 known_hosts로 검증한다(GitLab CI/CD 파이프라인)

키는 "누구인지"를 증명하는 수단이라 인증의 한 형태다. 비밀번호를 저장하는 문제와는 다르다(비밀번호 저장: 인코딩·암호화·해싱).

출처: OpenSSH 6.5 릴리스 노트

연결된 개념

이 노트를 가리키는 문서

뜻이 가까운 노트

  • HTTP와 HTTPS

    HTTPS는 HTTP(Hypertext Transfer Protocol) 메시지를 TLS(Transport Layer Security)로 감싸 보내는 방식이다. HTTP 자체는 바뀌지 않고, 그 아래에 암호화 계층이 하나 끼어든다. 기본 포트는 HTTP가 80, HTTPS가 443이다.

  • AWS CLI 프로필

    AWS 프로필은 AWS CLI(Command Line Interface)·SDK(Software Development Kit)가 쓸 자격 증명(credentials)과 설정 묶음에 붙인 이름이다. 한 기기에서 여러 계정·역할을 바꿔 가며 쓸 수 있게 해 준다.

  • XSS

    XSS(Cross-Site Scripting)는 공격자가 넣은 스크립트가 내 사이트의 출처(origin) 권한으로 사용자 브라우저에서 실행되는 공격이다. 같은 출처의 코드로 돌기 때문에 same-origin-policy가 막아 주지 못한다. 그 스크립트는 페이지를 바꾸고, 로그인한 사용자 행세를 하며 요청을 보내고, JS가 읽을 수 있는 데이터(localStorage의 토큰 등)를 빼 갈 수 있다.

  • Redis (인메모리 저장소)

    Redis는 데이터를 메모리에 두는 키-값 저장소(key-value store)다. 디스크 기반 DB보다 훨씬 빠르지만, 기본적으로 휘발성에 가깝게 다루는 것이 안전하다. 문자열뿐 아니라 리스트·해시·셋·정렬된 셋 같은 자료구조를 명령 하나로 다룬다.

  • 해시 테이블

    키를 해시 함수(Hash Function)로 배열 인덱스로 바꿔 값을 저장하는 자료구조. 조회·추가·삭제가 평균 O(1)이다. JavaScript의 객체와 Map·Set, 파이썬의 dict·set(python-collections), 자바의 HashMap이 모두 해시 테이블이다.

보기 옵션