🔑 블록체인 정의
P2P(Peer to Peer) 네트워크를 통해 관리되는 분산 데이터베이스의 한 형태로, 블록체인 노드(네트워크에 연결된 여러 컴퓨터)에 디지털 서명된 거래 정보를 보관하는 분산 원장 기술(Distributed Ledger Technology)
🔑 동작 원리
- 누군가 트랜잭션(transaction)을 만들어 요청한다.
- 트랜잭션을 요청받은 노드는 트랜잭션의 유효성을 검증(validation)한다.
- 유효한 트랜잭션이 블록체인의 P2P 네트워크에 전파된다.(boardcast)
- 블록 생성자는 블록 생성 규칙을 준수하며, 검증된 트랜잭션(1의 트랜잭션)을 포함하는 새 블록(block)을 생성한다.
- 생성된 새로운 블록이 P2P 네트워크에 전파된다.
- 기존 블록에 새로운 블록이 연결되며 트랜잭션이 처리된다.
🔑 블록체인의 암호학
📝 공개키 암호화 (PKC, Public Key Cryptography)
공개키 암호화 == 비대칭 암호화
- 비대칭 암호화: 공개키와 개인키의 쌍
- 개인키(k): 공개해서는 안 되는 나만의 키
- 공개키(K): 외부로 공개되어도 상관없는 키
- 계산하기는 쉽지만 그 역(inverse)을 계산하기 어려운 특수한 함수를 바탕으로 생성된 고유키를 사용하여 정보를 보호하는 방법
- 비트코인 및 이더리움에서는 이산 로그 문제(Discrete Logarithm Problem)를 이용하는 타원곡선 암호화(Elliptic Curve Cryptography)를 활용
🌙 이산 로그 문제 (Discrete Logarithm Problem)
개인키로 공개키를 만들 수 있지만, 공개키로는 개인키를 절대 알 수 없음
- 개인키로 암호화하면 공개키로 풀어볼 수 있다.
- 공개키로 암호화하면 개인키로 풀어볼 수 있다.
📝 개인키(k)
1 ~ 2^256 사이의 무작위로 선택한 숫자
- 개인키 생성 프로세스는 온라인 프로세스
- 대부분의 프로그래밍 언어에 있는 rand 함수 같은 암호학적으로 안전하지 않은 난수 생성기 사용 금지
- 암호학적으로 안전한 이유?
- 너무나도 큰 숫자이다. 아무리 랜덤하게 뽑아도 동일한 숫자를 뽑을 확률이 굉장히 낮다.
📝공개키(K)
타원 곡선에 있는 점 (타워 곡선 방정식을 만족하는 x와 y 좌표의 집합)
- 이더리움은 secp256k1을 사용한다.
- 그래프 상의 한 점을 여러 차례 연산(개인키만큼 반복)해서 도착하는 점이 공개키가 된다.
- 공개키를 가지고는 몇 번의 연산을 통해 도착했는지 알 수 없어 안전하다.
- 이더리움에서 16진수 문자 130개로 직렬화(serialization)된 공개키를 확인할 수 있다.
- 이더리움은 타원 곡선 공개키 접두어 04(압축되지 않은 지점)를 사용한다.
📝 해시 함수 (Hash Function) - 주소 생성
공개키를 주소로 변환하기 위해 해시 함수 사용
이더리움 지갑을 만들었을 때 생기는 이더리움 주소는..? → 해시함수
📍 해시 함수
- 임의 크기의 데이터를 고정된 크기 데이터로 매핑하는 함수
- 해시 함수의 입력을 메시지 또는 입력 데이터, 결과를 해시(hash)라고 한다.
- 결괏값을 알고 있을 때 입력 데이터를 다시 작성하는 것이 불가능한 단방향(one-way) 함수이다.
이더리움에서는 SHA3 계열의 keccak-256 함수를 사용한다.
- 주의: 일반적으로 쓰이는 keccak과 이더리움에서 쓰이는 keccak은 조금 다르다. (변형됨)
- keccak 함수 안에 빈 값을 넣었을 때 c5d24로 시작되는 결괏값을 얻는다면 이더리움 keccak이 맞다.
- Keccak256(””) = c5d24…
공개키를 가지고 어떻게 이더리움 주소를 만들까?
- 공개키 입력의 keccak-256의 해시
- 마지막 20바이트만 유지하여 주소로 사용한다.
- 16진수를 나타내는 0x 접두어가 함께 나타나기도 한다.
- 16진수의 대소문자를 수정하여 이더리움의 이전 버전과 호환되는 체크섬 주소를 사용한다.
📝정리
- 개인키(k): 암호학적으로 무작위한 1 ~ 2^256 사이의 난수
- Secp256k1을 통해 타원 곡선에서 하나의 점(공개키)을 찍어낸다.
- 공개키(K): 타원 곡선 위의 점을 직렬화한 값
- 해시 함수(keccak-256)를 써서 주소를 만든다.
- 주소
- 해시의 마지막 20바이트
- 외부 소유 주소 (EOA, Externally Owned Address)
🌙 타원 곡선 함수나 해시 함수는 정방향 연산은 가능하지만 역방향 연산은 불가능하다.
- 개인키를 통해 공개키를 만들 수 있다.
- 공개키를 통해 개인키를 만들 수 없다.
- 공개키를 통해 주소를 만들 수 있다.
- 주소를 통해 공개키를 만들 수 없다.
반응형
'CS > Blockchain' 카테고리의 다른 글
[블록체인] Smart Contract, DApp (1) | 2024.11.10 |
---|---|
[블록체인] 합의(자격 증명, 지분 증명) (0) | 2024.11.09 |
[블록체인] 트랜잭션(Transaction) (0) | 2024.11.08 |