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를 붙여서 생성
- 접두사