[태그:] cryptography
[Ethereum] 키와 주소
타원 곡선 함수, Elliptic curve cryptography 에서 다음 p를 사용
p = 2**256 - 2**32 - 2**9 - 2**8 - 2**7 - 2**6 - 2**4 - 1
y ** 2 mod p = (x ** 3 + 7) mod p
Private key -> Public key -> Address 로 얻는다.
개인키 (Private key)
k가 private key.
k = rand() % (2 ** 256), 따라서 256 bits, 64 bytes.
공개키 (Public key)
K가 public key로 (x, y) 좌표. G는 미리 정의된 값.
K = k * G = (x, y)
Public key, K를 표현할 때는 Standards for Efficient Cryptography (SEC1) 의 Serialized EC public key prefixes 의 prefix를 사용해서 나타낸다. 이더리움은 uncompressed point만을 지원하므로 0x04 prefix로 사용한다. 따라서 0x04 뒤에 x와 y를 concatenate한다.
0x04 | x | y
주소 (Address)
keccak-256 Hash function을 사용. Public key (x, y)를 concatenate한 값(0x04가 붙지 않았다!)을 keccak-256 로 hash 값을 얻은 후 마지막 20 바이트 값을 사용한다.
(keccak-256(x | y))[-20:]