Blog on Iterating

타원곡선 암호 체계

현재 이 블로그에 게시된 여러 기술들이 본인 검증과 암호화 통신을 위해 타원곡선 암호(ECC, Elliptic Curve Cryptography) 체계를 이용한다. 대표적으로 Ed25519와 X25519가 사용된다. 관련 내용을 따로 한번 정리해야겠다고 느껴 글로 작성한다.

타원곡선

Ed25519와 X25519를 이해하려면 먼저 Curve25519 타원곡선의 개념을 알고 있으면 좋다.

타원곡선 암호는 곡선 위의 점에 대해 특정 연산을 수행했을 때, 결과 역시 같은 곡선 위의 점으로 유지된다는 특징을 이용한다.

Curve25519에서는 기준점(base point)이 정해져 있으며, 기준점 G에 대해서 스칼라 k를 적용한 결과를 다음처럼 표현한다.

A = kG

Ed25519와 X25519를 사용하는 시스템은 모두 동일한 Curve25519 기준점을 사용한다.

비밀키(Seed)

비밀키는 CSPRNG로 생성된 임의의 32바이트 크기 값이며, 사용자의 Seed라고 불린다.

Ed25519 체계에서는 이 Seed를 직접 사용하는 대신, Seed로부터 파생된 비밀키 스칼라 값을 이용한다. 공개키 생성과 서명 과정 모두 스칼라가 사용된다.

비밀키 스칼라는 다음의 방법으로 생성된다.

  1. 비밀키를 SHA-512으로 해시한다.

  2. 해시된 값의 앞 256비트에 클램핑(고정된 방식)을 적용한다.

  3. 이렇게 생성된 값을 비밀키 스칼라로 사용한다.

공개키

사용자의 식별값으로 사용된다.

공개키는 Curve25519 기준점 G비밀키 스칼라 k를 적용하여 생성된다. 즉, 공개키는 타원곡선 위의 점으로 존재한다. 비밀키로부터 생성되지만 역으로 비밀키를 알 수는 없다.

  • 공개키 = kG

Ed25519

Ed25519는 Curve25519 기반 전자서명(signature) 체계이다.

메시지가 특정 비밀키 소유자에 의해 생성되었는지 검증하기 위해 사용된다.

대표적으로 다음과 같은 시스템에서 사용된다.

  • SSH 공개키 인증

  • Git commit signing

  • Solana transaction signing

  • NATS NKey

서명

전달하고자 하는 메시지에 본인이 작성했음을 인증하는 수단.

서명자는 다음 데이터를 검증자에게 전달한다.

  • 서명값 (R, S)

  • 메시지 (M)

  • 공개키 (A)

검증자는 아래 식이 성립하는지로 서명값이 유효한지 검증한다.

  • SG = R + H(R, A, M)A

여기에서 H(R, A, M)는 해시함수로 생성되는 스칼라 값이다.

식의 우변은 타원곡선 위의 점들로 구성되며, 공개키와 서명값은 모두 비밀키 기반으로 생성된다. 비밀키를 역산하는 것은 사실상 불가능하기 때문에 올바른 비밀키를 가진 사용자만 유효한 서명을 생성할 수 있다.

사용 예시

  • SSH

  • Blockchain

  • NATS NKey

X25519

X25519는 Curve25519 기반 ECDH(Elliptic Curve Diffie-Hellman) 키 교환 체계이다.

Ed25519가 사용자 인증과 메시지 서명을 위한 체계라면, X25519는 두 사용자가 동일한 공유 비밀(shared secret)을 안전하게 생성하기 위해 사용된다.

대표적으로 다음과 같은 시스템에서 사용된다.

  • WireGuard

  • TLS(HTTPS)

키 교환

X25519 역시 비밀키와 공개키 구조를 가진다.

공개키는 기준점에 비밀키 스칼라를 적용하여 생성된다.

A = aG

B = bG

여기에서:

  • a, b는 각 사용자의 비밀키 스칼라

  • A, B는 공개키

  • G는 Curve25519 기준점

이다.

두 사용자는 서로 공개키만 교환한 뒤 공유 비밀을 계산한다.

사용자 A는 자신의 비밀키 스칼라와 사용자 B의 공개키를 이용해 다음 값을 계산한다.

S = aB

사용자 B 역시 자신의 비밀키 스칼라와 사용자 A의 공개키 A를 이용해 다음 값을 계산한다.

S = bA

타원곡선의 특성상 두 결과는 동일하다.

aB = a(bG) = abG = baG = b(aG) = bA

이렇게 생성된 S 값은 네트워크로 직접 전송되지 않으며, 이후 실제 암호화 세션키(대칭키)를 생성하는 재료로 사용된다.

사용 예시

  • WireGuard(VPN)

  • TLS(HTTPS)

정리

Ed25519와 X25519는 모두 Curve25519 기반 타원곡선 암호 체계이지만 목적이 다르다.

  • Ed25519는 전자서명을 통해 사용자의 신원을 증명한다.

  • X25519는 ECDH 기반 키 교환을 통해 안전한 공유 비밀을 생성한다.