비트코인의 기술 겉핥기

비트코인의 기술 겉핥기

프로젝트를 진행함에 있어서 필요한 얕지만, 꼭 알아야 할 내용들만 정리한다.

해시함수

비트코인은 곳곳에 해시함수를 발라놨기 때문에 해시함수에 대한 얕은 이해가 필요하다. 해시함수는 임의의 길이를 가진 데이터를 일정한 길이의 데이터로 바꿔주는 함수를 총칭한다. 중요한건 아주아주 사소한 변화로도 엄청난 다른 값이 나오기 때문에 데이터 변조의 유무를 검증하기에 유용한 함수다.

암호화와 해시함수의 차이

일전에 AES 128 혹은 SEED 128을 사용하여 암호화, 복호화하는 포스팅을 올린적이 있다. 결론을 말하자면 암호화는 복호화를 전제로한 양방향 통신을 위한 것이며, 해시는 단방향이기 때문에 복호화가 불가능하다. 그래서 후에 설명할 비트코인이 왜 안전한지에 대한 내용이 이 해시함수와 이어지게 된다.

블럭체인

거래내역, 데이터 등이 담긴 공간을 블록이라 한다. 이런 블록들이 체인처럼 서로 연결되어 블럭체인이 완성된다.

지갑

지갑은 실생활의 지갑처럼 비트코인을 저장하고 사용하는 용도로 사용된다.

개인키

지갑에는 개인키(private key)가 존재하는데 이 개인키는 지갑의 권한을 얻을 수 있는 유일한 열쇠이기 때문에 절대 타인에게 노출되어서는 안된다. 이 개인키를 종이에 적어 물리적으로 보관할 수 도 있고(이 경우 종이를 잃어버리면 영원히 찾을 수 없다.), 서버에 저장해 복구가 가능하도록 하는 등 다양한 저장 방법이 있다. 서버에 저장해두거나 혹은 모바일 디바이스에 개인키가 저장되는 경우 개인키를 복구할 수 있도록 Seed라고 불리는 단어 조각들이 존재하고, 이를 난수화 하거나 여러 알고리즘을 통해 개인키를 새로 만들거나 복구할 수 있다.

공개키

공개키는 개인키로부터 파생되며, 비트코인 거래시 쓰이는 전자서명이 바로 이 공개키로 이루어진다.

주소

주소는 공개키로부터 파생되며 일종의 계좌번호로 비트코인을 받을 수 있는 주소로 사용된다.

한눈에 보기

이처럼 해시함수로 인해 주소로부터 공개키를, 공개키로부터 개인키를 얻어내는 것이 불가능하다. 타원곡선 암호의 경우 이론적으로 유한한 시간내에 계산이 가능하긴 하나, 그 시간이 너무너무 오래 걸린다. (적어도 내 수명보다 훨씬 긴 시간…) 그러므로 안심(?)하고 주소를 공개해도 된다.