KEEP!T 블록체인 상식사전
안녕하세요! KEEP!T입니다. 오늘은 안내드린 대로 [KEEP!T 블록체인 상식사전]이 연재됩니다. 오늘의 테마는 네트워크 어택, 보안 프로토콜입니다.
1. 네트워크 어택- 블록체인 레벨의 공격
51% 어택 (51% Attack): 가장 널리 알려진 공격이면서 가장 강력한 방식이다. 해커가 합의 의결권의 51% 이상을 점유할 경우 크게 3가지의 공격이 가능해진다. 첫째, 51% 점유기간동안 일어난 해커 본인의 전송 내역을 뒤집어 이중 지불을 할 수 있다. 둘째, 특정/모든 전송이 승인 받지 못하게 할 수 있다. 셋째, 특정/모든 채굴자가 확정 블록을 채굴하지 못하게 할 수 있다.
51% 이상의 의결권을 점유한다고 하더라도 할 수 없는 일들이 있다. 첫째, 타인의 전송 내역을 그들의 협조 없이 뒤집을 수는 없다. 둘째, 블록당 생성되는 보상 코인의 수를 바꿀 수는 없다. 셋째, 세상에 없던 코인을 새로 발행하거나 타인의 코인을 임의로 자신에게 송금할 수는 없다. 위와 같은 공격을 방어하기 위해서는 구성원이 풀노드를 구성해야 한다. 풀노드가 아닌 라이트노드의 경우 위와 같은 공격에도 피해를 입을 수 있는데, 이는 라이트노드가 특정 채굴자나 풀노드를 신뢰해야하기 때문이다.
- 전송 내역을 뒤집다: 전송 내역을 무효화 시키는 것을 말한다. 해당 전송 내역이 없는 새로운 체인을 만들어 채굴을 지속해 가장 긴 메인 체인으로 만든다.
- 노드: 블록체인 네트워크 참여 구성원을 말한다.
- 풀노드: 블록체인의 모든 정보(헤더, 전송 내역, 프로토콜 등)를 저장한 구성원을 말한다.
- 라이트노드: 블록체인의 헤더만 저장한 구성원을 말한다. 헤더만 저장하더라도 전송 내역의 조작과 같은 단순한 공격은 방어할 수 있다. 그러나 세부 내역(예: 보상 크기)을 조작한 악의적 체인의 결함을 발견하기 위해서는 신뢰하는 풀노드의 도움을 얻어야한다.
잃을게 없는 문제 (Nothing at Stake Attack): 지분 증명(Proof OF Stake, POS) 방식의 코인에 대해 감행할 수 있는 공격 방식이다. 블록체인 포크(fork)가 발생했을 때, 지분 증명 코인 채굴자의 우월전략은 모든 체인을 동시에 채굴하는 것이다. 대부분의 채굴자가 모든 체인을 동시에 채굴할 경우 지분 증명 코인은 이중 지불 공격에 취약해진다.
예를 들어 공격자는 본인의 코인을 타겟에 지불 한 뒤, 해당 지불 내역이 없는 새로운 체인을 임의로 포크해 만들어나갈 수 있다. 81% 이상의 지분이 메인체인과 공격자가 포크한 체인을 동시에 채굴하는 데 쓰일 경우, 공격자는 10%의 지분만 가지고도 포크한 체인을 메인체인으로 만들 수 있다. 공격자(10%)와 이중 채굴자(81%)의 합이 91%, 공격자를 제외한 채굴자의 합이 90%이므로, 이는 51% 어택에 준하는 위협이 된다.
롱레인지 어택(Long-Range Attack): 먼 옛날의 블록부터, 최대로는 제네시스 블록(블록체인 최초 블록)부터 시작하는 새로운 체인을 메인체인으로 만들어 이중 지불을 하고자하는 공격이다. 이와 같은 공격은 지분 증명 방식일 경우 적용이 가능하다. 지분 증명의 특성상 새롭게 블록을 계산해 이어 붙이는 것은 어려운 일이 아니므로, 소규모의 지분만 가지고도 평균 블록 생성 속도보다 빠르게 이어 붙일 수 있다. 포크한 체인이 메인체인보다 길어져 메인체인으로 인정되면, 롱레인지 어택은 성공한다.
그라인딩 어택(Grinding Attack): 랜덤 변수를 생성해 슬롯 리더(slot leader)를 선출하는 지분 증명 코인들에 대한 공격방식이며, Stake Grinding Attack이라고도 불린다. 슬롯 리더를 선출하기 위한 랜덤 변수를 생성하기 위해 블록체인의 헤더와 전송 내역을 이용하기도 하는데, 이 경우 마지막 블록 생성자가 미리 랜덤 변수를 계산해볼 수 있게 된다. 간단하게는 본인에게 유리한 랜덤 변수를 얻을 때까지 전송 내역을 임의로 누락시키거나 포함시키는 것과, 미리 계산한 랜덤 변수로 예측한 스테이킹 코인을 사전 구매하는 등의 공격을 생각할 수 있다.
이클립스 어택(Eclipse attacks): 하나의 노드를 대상으로 행하는 네트워크 공격이다. 블록체인 네트워크에서 노드들은 서로 다른 노드들과 통신을 하며 각자의 장부 내역을 확인 받는다. 만일 특정 노드가 통신하는 다수의 노드가 공격자의 관리 하에 있으면, 해당 노드에 대한 이클립스 어택이 가능하다. 공격자가 허위전송내역을 담은 블록을 마치 다수에게 확인 받은 것 처럼 타겟 노드에 전파시켜, 이중 지불 공격을 할 수 있다.
뇌물 수수 어택(Bribery Attack): 공격자와 채굴자가 뇌물과 같은 모종의 이해관계로 연합하여 행하는 네트워크 공격이다. 공격자의 목표는 채굴자를 이해관계로 묶어 51% 어택을 가능하게 하는 것에 있다. 작업 증명 코인의 경우 채굴자가 일정 이상의 지분을 가지고 있어야할 의무는 없기 때문에, 채굴자는 51% 어택으로 인한 가격 하락 리스크에서 자유롭다. 따라서 뇌물이 채굴자의 이해관계를 만족시켜줄만큼의 규모를 가진다면, 이 공격 방식은 의미를 가진다.
이기적 채굴(Selfish-mining): 이기적 채굴자가 채굴한 블록을 전파시키지 않고 있다가, 최대한 늦게 내보내는 채굴 전략을 뜻한다. 전파시키지 않는 동안 다음 블록 해시 문제를 미리 풀어봄으로서 채굴 확률을 높일 수 있다. 이러한 채굴 전략은 작업 증명 코인에서 두드러지며, 다른 정직한 채굴자에 비해 높은 수익을 낼 수 있다. 이는 전체적인 블록체인의 성장을 더디게 만들기 때문에 네트워크 어택의 범주에 속한다.
2. 네트워크 어택: 사용자 레벨의 공격
레이스 어택(Race Attack): 가장 흔히 알려져 있는 사용자 레벨의 공격 유형이다. 공격자는 서비스를 제공받기 위해 지불한 코인을 다시 한번 본인의 지갑으로 전송한다. 이 경우 서로 다른 전송 내역 중 하나만 승인되어 블록에 기록되는데, 만일 본인 지갑으로 전송되는 것이 승인될 경우 공격이 성공한다. 이 공격이 성공하기 위해서는 타겟(서비스 제공자)이 공격자의 0승인(confirmation)상태를 믿어야 한다.
핀니 어택(Finney Attack): 레이스 어택을 조금 더 발전시킨 공격 유형이다. 이 공격을 위해서는 공격자가 직접 채굴을 해야 한다. 공격자는 채굴에 성공했을 경우, 생성할 블록에 본인 코인을 본인의 지갑으로 보내는 전송 내역을 포함시킨다. 공격자는 이 블록을 네트워크에 전파시키지 않고 기다린다. 그동안 공격자는 본인 지갑으로 보내는 코인을 이용해 타겟과 서비스 거래를 시도한다. 이 때 타겟이 해당 코인의 또 다른 0컨펌 내역이 있는지 확인(레이스 어택 방어)하더라도 공격자의 의도를 파악하기 어렵다. 타겟이 0컨펌 내역을 믿고 서비스 거래를 완료하면, 공격자는 본인의 블록을 네트워크에 전파시킨다. 공격자 본인의 지갑으로 보내는 내역은 1컨펌이 되고, 타겟과 거래한 내역은 여전히 0컨펌이므로 이후 타겟과의 거래내역은 취소 된다.
핀니 어택은 레이스 어택보다 강력하지만, 공격자가 어느정도의 리스크를 가진다. 만일 공격자가 본인의 블록을 네트워크에 전파시키기 전에 제 3자가 블록을 채굴해버릴 경우 핀니 어택은 실패한다. 이 경우 공격자는 블록 채굴 보상만큼의 손실을 입게 된다.
벡터76 어택(Vector76 Attack): 1 승인 상태를 믿는 타겟에 대한 공격 유형이다. 이 공격 역시 공격자가 직접 채굴을 해야 한다. 공격자는 채굴에 성공했을 경우, 생성할 블록에 본인의 코인을 타겟에게 보내는 전송내역을 포함시킨다. 공격자는 이 블록을 네트워크에 전파시키지 않고, 제 3자가 블록을 채굴할 때까지 기다린다. 제 3자의 블록에는 공격자->타겟으로의 전송 내역이 포함되지 않는다. 제 3자가 채굴에 성공하는 즉시 공격자는 타겟에 본인 블록이 생성되었음을 알린다. 타겟이 공격자의 블록을 제 3자의 블록보다 먼저 수신하고 이를 믿게 될 경우, 공격자의 전송 내역은 1승인 상태가 된다. 한편, 블록체인에서 공격자의 체인과 제 3자의 체인은 포크 상태가되어 경쟁하게 된다. 만일 공격자의 체인이 패배하여 제 3자의 체인이 메인체인이 되면, 공격자의 전송내역은 포함되지 않았으므로 1승인 상태였던 전송내역은 무효가 된다.
공격자 입장에서 백터76 어택은 핀니 어택의 헷지 전략이라고 볼 수 있다. 공격자의 체인이 승리하여 공격이 실패하더라도, 공격자는 채굴 보상을 지급받을 수 있다. 공격자의 체인이 패배할 경우, 이번에는 채굴 보상을 받을 수 없지만 타겟에 대한 공격은 성공한다. 공격 성공으로 인한 이익이 채굴 보상보다 클 경우, 공격자는 어떤 경우에도 이익을 취할 수 있다.
리플레이 어택(Replay Attack): 포크가 일어나 블록체인이 분리되더라도 지갑 전송내역이 모든 체인에 동일하게 적용되는 것을 의미한다. 이를 악용하면 타겟에 대한 공격이 가능하다. 먼저 공격자는 악의적으로 포크한 체인을 통해 타겟에게 코인을 전송한다. 타겟은 새롭게 코인을 받았다 생각하고 이 코인을 다른 지갑에 전송한다. 이 때 타겟의 코인은 메인 체인과 포크 체인 모두에서 전송되게 된다. 반면 공격자는 메인 체인을 통해 코인을 전송하지 않았다. 이후 포크체인이 누락되면, 타겟 입장에서는 보낸 코인만 있고 받은 코인은 없게 된다.
3. 보안 프로토콜
지분 증명(Proof Of Stake): 지분 증명은 작업 증명(Proof Of Work)에 비해 51% 어택에 더 강한 합의 프로토콜이라고 평가받는다. 51% 어택과 같은 블록체인 레벨의 공격이 성공하면 네트워크 신뢰성이 떨어지고, 이는 높은 확률로 코인 가격 하락으로 이어진다. 지분 증명 채굴자는 필연적으로 해당 코인을 보유해야하기 때문에 본인 지분 가치의 하락이라는 리스크를 안고 공격에 참여해야한다. 반면, 작업 증명의 채굴자는 해당 코인을 보유할 의무가 없기 때문에 51% 어택 위험에 상대적으로 더 노출되어 있다.
위임 증명(Delegated Proof Of Stake): 위임 증명은 잃을게 없는 문제(이중 채굴)과 그라인딩 어택에 대해 어느정도 내성을 갖는 합의 프로토콜으로 평가 받는다. 이중 채굴의 경우, 상대적으로 채굴자의 수가 적기 때문에 네트워크 구성원들이 감시하기 용이하다. 일부 위임 증명의 경우, 위임자(delegator/witness)들이 번갈아가며 균일한 블록 생성 기회를 갖기 때문에 그라인딩 어택에서 자유롭다.
캐스퍼(Casper): 캐스퍼는 이더리움이 지향하는 합의 프로토콜이다. 이 프로토콜은 지분 증명 채굴 역시 작업 증명처럼 기회비용을 갖도록 만든다. 작업 증명 채굴자는 잘못된 체인을 선택했을 경우 보상 없이 전기세만 소진된다는 기회비용을 갖는다. 캐스퍼의 경우 포크가 일어났을 때, 채굴자가 잘못된 체인을 선택할 경우 (혹은 선택한 체인이 경쟁에서 패배할 경우) 네트워크 합의에 따라 지분이 삭감된다. 따라서 채굴자가 이중 채굴을 선택할 경제적 유인이 줄어들게 된다. 한편, 지분 삭감은 과도한 패널티라는 의견도 있다.
코인 토싱(Coin Tossing): 조작 불가능하고 믿을 수 있는 랜덤 변수의 생성을 위한 프로토콜이며, 카르다노의 우로보로스 프로토콜이 채택한 방식이다. 코인 토싱은 불특정 다수의 참여자가 서로의 정보를 공평하고, 배신의 위험 없이 안전하게 교환할 수 있게 하는 프토콜이다. 이를 랜덤 변수 생성에 적용하면 네트워크 참여자가 각자가 만든 랜덤 변수를 안전하게 교환할 수 있게 된다. 랜덤 변수가 무결하고, 조작이 불가능하면 지분 증명 코인은 그라인딩 어택으로부터 자유롭다.
타임스탬프(Time Stamp): 롱레인지 어택을 막기 위해 지분 증명 코인에 적용된 변수이다. 블록 생성자는 블록의 해쉬 계산을 위해 타임스탬프(당시 시간)을 사용한다. 공격자가 만들어낸 포크 체인이 메인 체인을 따라잡더라도, 채굴자는 포크 체인의 공격을 타임스탬프를 보고 방어할 수 있다.
참고자료
위키피디아: 비트코인 약점, 이중 지불 공격
깃허브: 블록체인 리뷰(문제점)
기타: 비탈릭 칼럼(롱레인지 어택), 캐스퍼 프로토콜, 카르다노 백서(우로보로스)
SLee
이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 4.0 국제 라이선스에 따라 이용할 수 있습니다.
I guess, Koreans are loving crypto more than anyone, massive inflow of money by Korea. Good job! :-)
글 잘 읽었습니다! 아직 모르는 게 많아서 많이 공부해야겠습니다. 전 ㅠㅠ 많이 배워갑니다!
이정도면 메뉴얼이군요. 복잡한 내용을 간결하게 잘 설명해주셔서 감사합니다.^^
또 하나 배워갑니다~
여러 가지 보안 위협들이 존재하는군요.
새로운 것들을 많이 배웠습니다.
좋은 글 감사합니다.
뉴비로써 차근차근 배워나가는 중입니다...^^ 좋은글 잘 활용하겠습니다.
글 읽고 도움이 많이 됐어요. 감사합니다 :)
좋은 글 감사합니다.
모르는 용어들이 너무나 많네요.ㅎ
잘 배우고 갑니다.ㅎ
잘 정리된글 감사합니다^^
지식이 채워지네요. 감사합니다.
좋은 정보 감사합니다~!
늦게 시작했지만 덕분에 잘 따라가고 있어요. 감사합니다. ^^
아웅. 너무길어 숨을 쉴수가 없어요 ^^
잘 읽고 보팅하고 갑니당 ~
51% 어택에 사실 51%까지는 필요 없다고 전에 알려주시지 않았던가요! ㅋㅋㅋ
하나 하나 정독하면서 열공하고 있습니다
감사합니다^^
모르는 용어들이 너무 많아요 ㅋㅋㅋㅋ 기본부터 쭉 공부해봐야겠네요 :)
좋은 정보 감사합니다. 많은 도움이 되네요