문자를 컴퓨터가 이해할 수 있는 숫자(바이트) 로 바꾸는 규칙.
사람이 말하는 언어(문자)를 컴퓨터 언어(숫자)로 번역하는 사전 역할을 한다.
숫자를 표현하는 방법.
진법이 커질수록 같은 값을 더 짧게 표현할 수 있다.
| 진법 | 사용 기호 | 예시 |
|---|---|---|
| 2진수 | 0, 1 | 1010 |
| 10진수 | 0–9 | 10 |
| 16진수 | 0–9, A–F | A (=10진수 10) |
숫자(바이트)를 사람이 읽기 쉽게 0~9, A~F 로 표현하는 방법.
예시
255 → 16진수 FF "A" → UTF-8 바이트 41 (16진수 표현)데이터를 다른 표현 방식으로 변환하는 것.
예시
"A" → [0x41] (UTF-8 인코딩)
[0x41] → "41" (HEX 인코딩)
인코딩된 데이터를 원래 형태로 복원하는 것.
예시
"41" (HEX 문자열) → [0x41] (바이트 배열)
임의의 데이터를 ‘고정된 길이의 숫자(바이트)’로 요약하는 함수.
블록체인에서 자주 사용하는 형태
32바이트 = 256비트 = 64자리 16진수
예: 0x4717...cb01fad
이더리움에서 개인키는 32바이트(256비트) 크기의 무작위 정수 하나이다.
블록체인에서 "계정의 소유권"을 증명하는 근본적인 값이다.
1 ≤ d < n0x5e9f1a1b3c2d4e5f67890abcdeffedcba9876543210fedcba09876543210abcd개인키와 공개키는 타원곡선(secp256k1) 위에서 수학적으로 연결되어 있다.
1️⃣ 타원곡선 위에는 무수히 많은 점들이 존재한다.
2️⃣ 그중 기준점 G (Generator Point) 를 하나 고정한다.
3️⃣ 내가 무작위 정수 d (개인키) 를 선택한다.
4️⃣ 수학적으로 G를 자기 자신과 d번 더한다 → P = d × G.
5️⃣ 이렇게 계산된 P는 곡선 위의 하나의 점이 되며,
이 점 P가 바로 공개키(Public Key) 이다.
개인키로부터 타원곡선의 기준점 G를 스칼라 곱 연산하여 얻은 곡선 위의 점 (x, y).
PublicKey = PrivateKey × G
×는 일반 곱셈이 아니라, 점 덧셈(point addition) 을 반복하는 스칼라 곱(scalar multiplication).G는 secp256k1 표준에서 고정된 Generator Point.| 구분 | 내용 | 크기 | 설명 |
|---|---|---|---|
| x좌표 | 32바이트 | 곡선 위 점의 x값 | |
| y좌표 | 32바이트 | 곡선 위 점의 y값 | |
| 전체 | 64바이트 (x + y) | 이더리움은 0x04 접두사(비압축 표시)를 제외하고 사용 |
0x04 + x(32B) + y(32B) → 총 65바이트 0x04를 제외한 64바이트(128자리 hex) 사용.공개키에서 파생된 식별자(20바이트) 로,
이더리움 계정의 실제 식별자로 사용된다.
결과적으로 20바이트(40자리 hex)의 주소가 생성된다.
무작위 정수(32B)
↓ (Private Key)
P = d × G
↓ (Public Key)
Keccak256(P)
↓
마지막 20바이트
↓ (Address)
0x + 40 hex chars
- 개인키는 32바이트짜리 무작위 정수이다.
- 공개키는 개인키로부터 곡선 연산(
P = d×G)으로 얻은 점(x, y) 이다.- 주소는 공개키의 Keccak256 해시 결과 중 마지막 20바이트를 16진수로 표현한 값이다.
- 모든 값은 사람이 보기 쉽게 16진수(hex) 로 표현하며, 0x 접두사를 붙인다.
트랜잭션은 이더리움 네트워크의 상태를 변경하는 명령서이다.
예를 들어 “이 주소에서 저 주소로 1 ETH를 보낸다” 또는 “컨트랙트를 실행한다” 같은 요청을 의미한다.
트랜잭션은 다음 필드들로 구성된다(타입에 따라 일부 상이).
| 필드 | 설명 |
|---|---|
| nonce | 송신자 계정의 트랜잭션 순번(0부터 시작, 1씩 증가). 재생 공격/중복 방지. |
| to | 수신자 주소. 비어 있으면 컨트랙트 생성. |
| value | 전송 금액(wei). |
| gasLimit | 이 트랜잭션이 사용 가능한 가스 상한. |
| gasPrice / maxPriorityFeePerGas / maxFeePerGas | 수수료 관련 필드. Legacy는 gasPrice, EIP-1559는 두 필드 사용. |
| data | 컨트랙트 호출 데이터(ABI 인코딩) 또는 배포 코드(bytecode). |
| chainId | 체인 구분(리플레이 공격 방지). |
| v, r, s | 개인키로 생성한 ECDSA 서명 값. 검증·발신자 복구에 사용. |
| accessList | (EIP-2930/1559) 미리 접근할 주소/스토리지 키 목록. 없으면 빈 리스트. |
트랜잭션은 다음 단계로 생성된다.
트랜잭션 데이터 구성
nonce: 1
to: 0xABC...
value: 1 ETH
gasLimit: 21000
gasPrice: 30 gwei
data: 0x직렬화 (RLP 인코딩)
[nonce, gasPrice, gasLimit, to, value, data, chainId, 0, 0]
→ RLP 인코딩 → 0xf86c01850...해시화 (Hashing)
messageHash = keccak256(serializedPayload)서명 (Signing)
messageHash를 개인키(private key) 로 연산한다. 서명 값 추가
r, s, v를 원래 트랜잭션 데이터에 추가한다. (v, r, s)를 붙인다. [nonce, gasPrice, gasLimit, to, value, data, v, r, s]최종 직렬화 및 전송
(v, r, s)가 포함된 완성된 트랜잭션을 다시 RLP 인코딩한다. rawTransaction)을 Keccak-256으로 해시하면eth_sendRawTransaction RPC를 통해 네트워크로 전송한다.| 해시 종류 | 시점 | 입력 데이터 | 설명 |
|---|---|---|---|
| messageHash | 서명 전 | RLP 인코딩된 트랜잭션 페이로드 | 개인키로 서명할 대상 |
| txHash | 서명 후 | v, r, s가 포함된 최종 트랜잭션 | 블록체인에서 식별에 사용 |
트랜잭션은 RLP로 직렬화된 바이트 데이터를
해시화 → 개인키로 서명 → (v, r, s) 추가 → 전송 하는 과정을 통해 완성된다.
니모닉은 무작위로 생성된 엔트로피(entropy) 를
사람이 외우기 쉬운 단어 조합(12~24개) 으로 인코딩한 것이다.
지갑 복구용 단어 목록이며, 직접적으로는 개인키가 아니라
시드(seed) 를 생성하기 위한 입력값이다.
| 엔트로피(bit) | 체크섬(bit) | 전체(bit) | 단어 개수 |
|---|---|---|---|
| 128 | 4 | 132 | 12 |
| 160 | 5 | 165 | 15 |
| 192 | 6 | 198 | 18 |
| 224 | 7 | 231 | 21 |
| 256 | 8 | 264 | 24 |
무작위 숫자 뽑음 (128~256비트 엔트로피, 16진수로 표현)
→ SHA-256으로 해시화함 (256비트 출력)
→ 해시의 앞 n/32비트(예: 128비트면 4비트) 떼어옴 (체크섬)
→ 떼어온 비트를 2진수로 바꿔 엔트로피 뒤에 붙임
→ 전체 비트를 11비트씩 나눔
→ 각 11비트를 10진수로 바꿔 단어사전(2048개) 인덱스에 매핑
→ 12~24개의 단어(니모닉) 완성
→ (옵션) 패스프레이즈 추가 (“mnemonic” + passphrase)
→ PBKDF2-HMAC-SHA512를 2048회 반복
→ 64바이트 시드(seed) 생성
→ HMAC-SHA512(key="Bitcoin seed", data=seed)
→ 왼쪽 32바이트 = 마스터 개인키 (m)
→ 오른쪽 32바이트 = 체인코드 (c)
→ (m, c)를 이용해 HMAC-SHA512 반복 (BIP-32 파생)
→ 자식 개인키 = (I_L + parent_priv) mod n
→ 자식 체인코드 = I_R
→ 개인키 × 타원곡선 기준점(G) → 공개키
→ 공개키 해시(keccak256 등) → 주소
| 개념 | 설명 |
|---|---|
| 엔트로피 (Entropy) | 무작위 바이트 배열. 니모닉의 근원 데이터. |
| 체크섬 (Checksum) | 엔트로피의 SHA-256 해시 앞부분을 붙여 오류 검출 기능 제공. |
| 니모닉 (Mnemonic) | 엔트로피+체크섬을 11비트 단어 인덱스로 표현한 단어 목록. |
| 패스프레이즈 (Passphrase) | 추가적인 2차 비밀번호. 동일 니모닉이라도 패스프레이즈가 다르면 완전히 다른 지갑 생성. |
| 시드 (Seed) | 니모닉 + 패스프레이즈를 PBKDF2-HMAC-SHA512로 2048회 반복해 얻은 64바이트 값. |
| 마스터 개인키 (Master Private Key) | 시드에서 파생된 첫 번째 비밀키. |
| 체인코드 (Chain Code) | 자식 키 파생 시 사용되는 비밀 소금(salt). 키 간 관계를 안전하게 이어줌. |
| 자식 개인키 (Child Private Key) | 마스터 키로부터 HMAC-SHA512를 통해 결정론적으로 생성된 개별 개인키. |
니모닉은 “무작위 엔트로피를 단어로 인코딩한 복구 코드”이며,
PBKDF2-HMAC-SHA512(2048회)를 통해 시드(64B) 를 만들고,
HMAC-SHA512로 마스터 개인키(32B) 와 체인코드(32B) 를 생성한 뒤,
이를 반복 파생하여 무한한 개인키·공개키·주소를 만들어낸다.