
Bitcoin 암호화
- 익명성
- 신원을 드러내지 않고(Address 이용) 거래가 가능
- 부인방지
- 본인이 보유한 개인키로 서명하기 때문에, 부인방지의 기능
- 위변조 방지
- Hash 알고리즘과 PKI를 사용하여 거래 위변조를 방지
ECDSA
- RSA와 동일한 암호화 서명 알고리즘
- 타원곡선 기반
ECC
- ECC(Elliptic Curve Cryptography)는 공개키 암호기술 구현 방식 중 하나이다.
- RSA에 비해 더 작은 데이터로 RSA와 비슷한 보안성능을 제공
- 실제 디지털 서명방식으로 구현된 알고리즘이 ECDSA
- Bitcoin에서는 secp256k1 이라는 타원곡선을 이용
- 이를 유한한 공간에서 표현하기 위해서 mod p를 통해 갈루아 필드상에서 표시
PKI

- ECC에서 곡선 위의 점 P, Q를 선택하면 우리는 이를 직선으로 연결하면 R를 찾을 수 있다.
𝑃 + Q = R
- 이 수식을 Doubling 이라고 칭한다.
- Private Key는 P보다 작은 소수(d)이다.
- PublicKey는 Q=d x G 이다.
- Q=(G+G...+G)로표현된다.
Bitcoin Private Key 생성
- 256bit 길이의 랜덤 숫자를 선택: d(private key)
Bitcoin Address 생성
- 선택된 값을 통해 ECDSA로 public key 생성
- 생성된 값을 Hash
- Base58 Encode를 통해 생성
Bitcoin 거래 서명
- 거래 발생: tx ->
- 거래 해싱: SHA256(SHA256(Tx)): msg ->
- 개인키로 서명: ECDSA(private key, msg): sign data ->
- 공개키로 복호화: ECDSA(public key, msg): msg
- 다른 거래의 해시값과 비교
서명 방식
- 개인키 d, Random 수: r, 공개키: Q(dG), 전송 거래 데이터: m
- 개인키로 서명하는 법
- 서명 검증하는 법
Hash Algorithm
- Hash Algorithm과 가장 유사한 수학적 공식은 mod 함수이다.
- 단방향 알고리즘(One-Way)
- RSA 암호화 알고리즘은 암호화 후 복호화를 통해 데이터를 확인할 수 있지만 Hash는 확인할 수 없다.
- Collision이 거의 발생하지 않는다.
Merkle Tree 위변조

- 각각의 거래를 해싱한다.
- 해싱한 값들로 짝을 지어 다시 해싱한다.
- 최상위의 해시값 하나만 저장한다.
- 만약 거래가 변조되어 해시값이 변경된다면 Merkle Root의 값이 다르기 때문에 문제가 생긴것을 알 수 있다.
참고한 자료
한 번에 끝내는 블록체인 개발 A to Z