현실에서는
" 타인의 서명을 완벽히 흉내낼 수 없다 / 도장을 잘 관리한다 "
는 전제하에 자필 서명 또는 도장을 찍는다.
하지만 모든 것을 복붙할 수 있는 인터넷에서는 어떻게 할까?
= 공개키 알고리즘
비트코인을 포함한 암호화폐들이 이 방식을 사용한다.
클라이언트에서 거래를 하면 거래내역이 생성되고,
클라이언트는 이 거래내역을 노드에 전송해 검증
을 맡긴다.
노드가 검증을 수행하기 위해서는, 그 거래내역 안에 전자서명
이 포함되어야 한다.
모든 클라이언트는 공개키
와 비공개키
가 있는데,
비공개키로 암호화한 데이터(거래내역 등)은 공개키로만 해독할 수 있다.
이미지 출처 - Mastering Bitcoin Ch04
비공개키를 타원곡선 곱셈함수로 돌리면 공개키가 나오고,
공개키를 해시함수로 돌리면 주소가 나온다.
이 그림에서 주목할 점은 일방향이라는 것이다.
비공개키로 공개키를 알 수 있지만, 공개키로 비공개키를 알 수 없다.
거래내역을 바로 비공개키로 암호화하는 것이 아니라,
비공개키를 해시함수로 돌려서 해시값을 뽑아내고
그 해시값을 비공개키로 암호화하는 것이다.
이렇게 하면, 거래내역이 줄줄줄 아무리 길어도 고정된 길이의 해시값이 나오기 때문에 송수신이 유리하다.
A와 검증 노드가 합심해서 조작하면 어떻게 될까?
A가 가짜 거래내역을 노드에게 검증신청을 하고,
이 노드가 가짜 거래내역을 검증완료 처리하면?
이를 막기 위해서 신뢰할 수 있는 노드(검증자)만 검증할 수 있또록 제한한다.
신뢰할 수 있는 노드를 가리기 위해서
검증 참여를 위해선 비용이 발생하고, 검증이 완료되면 네트워크에서 보상을 지급한다.
입장료를 받기 때문에 나쁜 의도를 가진 검증 참여자를 걸러낼 수 있고,
보상으로 암호화폐를 받기 때문에 이 화폐의 가치가 올라가기 위해서는 정직한 검증을 해야한다.