public-key-cryptography

Public Key Cryptography

비대칭 암호화

이더리움은 비대칭 암호화 사용해서 트랜잭션을 검증한다. (JWT와 비슷한 방식을 사용) 그 중 타원 곡선 암호화의 표준인 secp256k1을 사용한다.

아래와 같은 과정을 통해서 개인키를 네트워크로 보낼 필요 없이 트랜잭션을 검증할 수 있다.

  • 트랜잭션 생성 (local에서 이뤄짐)
    • 개인키 + message => 디지털 서명(개인키를 알아야 만들 수 있음)
  • 검증 (network에서 이뤄짐)
    • message + 디지털 서명 + 이더리움 주소 => 트랜잭션이 유효한이 확인

secp256k1

타원 곡선 수학을 사용한 비대칭 암호화

개인키

  • 무작위로 뽑은 숫자
  • ETH를 소비하는데 필요한 서명을 만들 수 있음
  • 256비트의 랜덤 숫자 (오프라인에서 생성)

공개키

$K = k * G$

  • $K$: 공개키
  • $k$: 개인키
  • $G$: generator point (secp256k1 표준에 정해져있음)

타원 곡선 암호

군 (타원 곡선 위의 점, +)를 다루는 이산 대수

  • 타원 생성 곡선

    • $y^2 \mod p = (x^3+7) \mod p$
    • $p = 2^256 - 2^32 - 2^9 - 2^8 - 2^7 - 2^6 - 2^4 - 1$ (매우 큰 소수)
    • 2차원 평면에 흩어진 점으로 표현된다.
  • 덧셈

    • $p_1, p_2$를 선으로 이었을 때 그 선은 $p_3'$를 지난다.
    • $p_3' = (x, y) \rightarrow p_3 = (x, -y)$
    • 만연 $p_1, p_2$가 같은 점일 때는 곡선의 접선을 기준으로 한다.
  • 곱셈

    • 덧셈을 반복한다.
  • 공개키 생성

    • $K = k * G = (x, y)$
    • 0x04{x}{y}
      • 접두사 0x04를 붙여서 생성