오늘은 지난 시간에 살펴봤던 해시가 블록체인 속에서 어떻게 사용되는지 살펴보겠습니다.
블록체인에서 N번째 블록은 거래내역, 타임스탬프, Nonce, 이전 블록의 해시값 등을 가지고 있습니다. 이 중에서 주목할 건 블록 N에 바로 앞 블록(N-1)의 SHA-256 해시값(HashN-1, N-1번째 블록들로 만든 해시값)이 포함되어 있다는 건데요. 이게 바로 블록들을 체인처럼 묶는 연결고리입니다.
그리고 블록 N에 담긴 모든 데이터를 조합하여 SHA-256 해시값(HashN)을 새로 만듭니다. 그리고 이건 또 N+1번째 블록과의 연결고리가 되죠.
이러한 체인이 바로 현재까지 비트코인 네트워크가 해킹(위변조)되지 않은 원리인데요.(거래소나 개인 지갑 해킹은 있었음)
공격자가 과거의 어느 블록(N-1번째 블록)의 거래 내역을 위조하려 한다고 가정해 보겠습니다.
이 때, N-1번째 블록의 값이 살짝이라도 바뀌면, 어제 설명한 '눈사태 효과'에 따라 N-1번째의 해시값이 완전히 새로운 값으로 바뀝니다.
N-1번째 블록의 해시값이 바뀌었지만, N번째 블록이 가지고 있는 이전 블록 해시값은 아직 변조되지 않았는데요. 이 불일치를 해결하려면 공격자는 N번째 블록의 해시값을 다시 계산해야 하고, 그 다음 블록도 쭉쭉 다시 계산해야 합니다.
즉, 위조한 블록 이후의 모든 블록을 전부 재계산해야 합니다. 비트코인 네트워크는 평균 10분에 한 번씩 새로운 블록이 정직한 채굴자에 의해 생성되도록 난이도를 조절되고 있는데, 10분 동안 이러한 위변조는 현실적으로 일어날 수 없습니다.
앞서 블록이 체인처럼 연결되는 원리를 설명했습니다. 하지만 블록체인의 진정한 힘은 이 연결을 만들고 유지하는 과정이 얼마나 어려운가에 있는데요. 이 난이도를 강제하는 것이 바로 해시의 단방향성을 이용한 작업 증명(Proof-of-Work, PoW, 작업 : SHA-256 해시 계산, 증명 : 난이도 만족)입니다.
비트코인 네트워크는 블록의 생성 속도를 평균 10분으로 유지하도록 알고리즘의 난이도를 설정해둡니다. 이 난이도는 "새로 생성할 블록의 최종 해시값이 특정 개수 이상의 0으로 시작해야 한다"의 형태로 구현되는데요.
해시값은 결정성을 가지지만, 입력값이 조금만 바뀌어도 출력값이 완전히 달라지는 눈사태 효과 때문에, 어떤 입력이 조건을 만족할지 미리 예측하는 것은 불가능합니다.
그래서 채굴자들은 이 난이도 조건을 만족하는 해시를 얻기 위해 블록 데이터 내의 논스(Nonce)라는 임의의 숫자를 계속 바꿔가며 SHA-256 계산을 반복합니다.
여기서 SHA-256 해시 함수가 단방향이므로, 채굴자들은 목표 해시값을 보고 그에 맞는 논스 값을 역으로 추론할 수 없습니다.
이 과정이 바로 막대한 컴퓨팅 파워와 시간, 전기를 소모하는 작업이고, 가장 먼저 정답 논스를 찾는 채굴자가 블록을 생성하고 보상을 받습니다.
이처럼 계산적 어려움을 강제하는 것이 블록체인의 최종 방어선이 되는데요. 이 원리는 위변조를 실질적으로 불가능하게 만듭니다.
공격자가 과거 블록의 거래 내역을 위조하여 해시 불일치를 일으켰다면, 그 이후에 생성된 모든 블록을 작업 증명 난이도를 충족시키면서 재계산해야 합니다. 블록 하나를 만드는데 10분이 걸리는 이 노동을, 수십만 개의 블록에 대해 수행해야 합니다.
공격자가 이 경쟁에서 이기려면, 정직한 다수 채굴자들이 블록을 만드는 속도보다 더 빠르게 위조된 체인을 만들어내야 하는데, 이게 가능하려면 비트코인 네트워크 전체 연산 능력의 50%를 초과해야합니다.
비트코인처럼 규모가 거대한 네트워크에서 51% 이상의 연산력을 확보하는 것은 천문학적인 하드웨어 구축 및 에너지 비용을 요구하기 때문에, 비트코인 네트워크의 위변조가 현실적으로 불가능한 것이죠.
오늘은 암호화의 큰 맥 중 하나인 단방향 암호화(해시)가 블록체인에 어떻게 쓰이는지에 대해 알아봤는데요.
다음 시간에는 양방향 암호화와 대칭키에 대해 알아보겠습니다!
읽어주셔서 감사합니다.