블록체인 보안에 대한 이해
보안은 포괄적인 주제입니다. 여기에는 새로운 코인의 무분별한 생성에 대한 보호, 탈중앙화, 합의 프로토콜, 원장 불변성, 거래 보안, 개인정보 보호, 자산의 셀프 커스터디, 시빌 공격, 다양한 공격에 대한 저항성, 거버넌스 및 보안 예산 등이 포함됩니다. 블록체인은 일부 구성 요소가 다른 구성 요소의 보안에 의존하는 복잡한 시스템입니다. 의존성은 언뜻 보기에 명확하지 않을 때가 있습니다. 이 글은 초보자에게 해당 주제에 대한 개요를 보여주고 더 공부할 수 있도록 영감을 주는 것을 목표로 합니다. 자세한 내용은 다루지 않겠습니다. 많은 주제는 이전 문서에서 자세히 다루고 있습니다. 목표는 독자가, 보안이 한 가지 주제(51% 공격)에 관한 것이 아니며 포괄적으로 생각할 필요가 있다는 것을 이해하는 것입니다.
사용자에게 필요한 사항들
사람들은 자신이 사용하기로 선택한 시스템을 신뢰해야 합니다. 사용자들은 특정한 기대치를 가지고 있으며 이러한 기대치를 충족시켜야 합니다. 보안과 신뢰의 관계는 근본적이고 공생적인 관계입니다. 보안 메커니즘은 사용자와 네트워크 합의 참여자 및 팀이 속한 시스템 간의 신뢰를 구축하고 유지하는 데 필수적입니다.
사람들은 블록체인 지갑을 통해 네트워크를 사용합니다. 그들은 팀이 유지 관리하는 소프트웨어(프로토콜)를 신뢰한다는 것을 알아야 합니다. 다양한 형태를 취할 수 있는 거버넌스가 여기에 속합니다. 또한 사용자는 모든 합의 참여자, 즉 블록을 생성하거나 값비싼 자원(예: 카르다노 풀에 ADA 코인을 위임하거나 비트코인 풀에 해시 레이트를 위임)을 위임하는 사람들을 신뢰합니다.
사용자들은 네트워크가 탈중앙화되어 있음을 믿는다고 할 수 있습니다. 이 글의 뒷부분에서 살펴보겠지만, 보안은 종종 탈중앙화에 달려 있습니다.
사람들의 기대는 무엇일까요?
사용자의 기대는 미디어의 내러티브와 공개적으로 이용 가능한 정보를 기반으로 합니다. 기대치가 충족되지 않거나 심각한 문제가 발생한다면 보안 침해라고 말할 수 있습니다.
블록체인 기술의 가장 강력한 내러티브 중 하나는 블록체인 통화 정책을 변경하거나 새로운 코인을 무에서 유를 창조하는 것이 불가능하거나 쉽지 않다는 것입니다.
또한, 사람들이 셀프 커스터디 지갑을 사용하면 세상의 그 누구도 자신의 자산을 훔치거나 잔고를 변경하거나 자산 소비를 막을 수 없을 것이라고 믿습니다. 거래를 통해 자산을 사용할 수 있는 것은 오직 본인뿐입니다.
코인은 언제든지 사용할 수 있으므로 네트워크가 멈추지 않아야 합니다. 블록체인 네트워크는 견고하고 다양한 공격에 강해야 합니다. 누구도 사용자 계정을 동결하거나, 소유자의 유효한 서명 없이 코인을 다른 주소로 전송하는 유효하지 않은 트랜잭션을 생성하거나, 코인의 양을 부풀릴 수 없어야 합니다.
네트워크 가용성은 장기적인 경제적 지속 가능성과 관련이 깊습니다. 컨센서스 참여자는 네트워크를 위해 일하는 것에 대한 금전적 보상을 받아야 합니다. 즉, 보안은 통화 정책과 보상 메커니즘에 따라 달라집니다.
요약해 보겠습니다. 보안 요구 사항은 다음과 같이 규정될 수 있습니다:
- 팀 및 거버넌스. 버그를 수정하고 결함을 해결할 수 있는 능력.
- 소스 코드의 품질(취약점이 없어야 함).
- 합의 참여자(블록 생산자 및 위임자)의 정직한 행동.
- 네트워크 합의. 연속성, 블록체인 기록의 불변성, 데이터 무결성을 보장해야 함.
- 탈중앙화(의사결정 권한의 분산).
- 경제적 지속 가능성 및 보상 메커니즘. 이는 합의 참여자의 공정한 행동과 시스템의 수명을 보장하는 데 기여.
- 누구도(팀, 합의 참여자 등) 셀프 커스터디 사용자의 자산을 훔치지 못하도록 보장하는 기능. 이 글에서는 주로 트랜잭션에 초점을 맞추겠습니다.
보시다시피 보안은 복잡한 주제입니다. 언급된 사항 중 하나라도 작동하지 않거나, 신뢰할 수 없거나, 줄어든다면 사용자의 자산은 어떤 식으로든 위협을 받게 됩니다. 그렇다고 해서 반드시 자산을 잃을 수 있다는 의미는 아닙니다. 예를 들어, 네트워크를 사용할 때 다양한 제한을 받거나 누군가가 이득(트랜잭션 우선순위, MEW 공격 등)을 얻게 되어 공정성이나 정확성이 보장되지 않을 수 있음을 의미합니다.
위의 목록에 더 많은 포인트가 추가될 수 있습니다. 예를 들어 개인정보 보호, 규제 명확성, 셀프 커스터디(사용자에 대한 공격이 많음) 등이 있습니다. 자산의 셀프 커스터디는 블록체인 자체보다는 사용자와 관련이 있습니다. 그렇기 때문에 이 주제는 다루지 않겠습니다.
카르다노는 스마트 컨트랙트 플랫폼이므로, 디파이 서비스 사용과 관련된 또 다른 광범위한 주제가 보안이 될 수 있습니다. 이 글에서는 해당 주제를 다루지 않겠습니다.
블록체인 보안을 위협하는 몇 가지 예를 보여드리겠습니다.
팀이 규칙을 변경하려고 하거나, 버그를 수정하지 않거나, 실수로 새로운 버그를 만들 수 있습니다. 어떤 클라이언트든 버그를 포함할 수 있습니다(버그가 있을 가능성이 매우 높지만, 겉으로 드러나지 않을 수도 있습니다). 합의 참여자가 부정직하게 행동할 수 있습니다(트랜잭션 검열, 빈 블록 생성 등). 블록 생산자의 수가 적을 경우(소수가 지배적인 위치를 차지할 경우), 이들의 부정직한 행동은 네트워크에 큰 영향을 미칠 수 있습니다. 탈중앙화가 낮으면 외부 또는 내부 공격(디도스 공격, 팀 또는 합의 참여자에게 영향을 미치려는 시도)으로 이어질 수 있습니다. 합의 참여자는 보상을 받지 못하면 네트워크를 떠날 수 있습니다.
51% 공격
사람들에게 블록체인 보안이 무엇인지 물어보면 흔히 51% 공격에 대한 저항이라고 답합니다. 이 공격은 탈중앙화에 대한 중대한 보안 위협입니다. 이 공격은 네트워크 합의, 즉 탈중앙화에 필요한 고가의 리소스를 보유한 블록 생산자와 보유자를 겨냥한 공격입니다.
단일 주체 또는 그룹이 네트워크 지분(스테이크 코인) 또는 연산 능력(해시레이트)의 절반 이상을 장악할 때 발생합니다. 반드시 공격자가 정직한 참여자보다 더 비싼 자원을 얻으려는 외부 공격일 필요는 없습니다. 지배적인 합의 참여자에 의한 내부 권력 남용으로도 발생할 수 있습니다.
높은 수준의 통제는, 한 당사자가 네트워크에 지나치게 많은 영향력을 행사하지 못하도록 설계된 블록체인의 탈중앙화 기본 원칙을 훼손할 수 있습니다. 블록체인의 평판에 대한 공격도 이에 해당합니다.
비트코인 네트워크에서는 블록의 55% 이상이 단 2개의 지배적인 풀에 의해 채굴됩니다. 이 두 참여자가 내부 공격을 위해 협력할 수 있는 이론적 위험은 존재하지만, 실제로는 일어나지 않을 수도 있습니다. 위험은 이항 변수가 아니라 척도입니다.
공격자가 네트워크의 합의에서 우위를 점한다고 가정해 봅시다. 이 경우 공격자는 블록체인의 기록을 다시 쓰고, 같은 코인을 두 번 사용하고(이중지불 공격), 거래를 검열하고, 다른 참여자가 보상을 받지 못하게 하는 등의 행위를 할 수 있습니다. 구체적인 내용은 개별 블록체인마다 다를 수 있습니다.
공격자가 블록체인 네트워크의 51%를 장악하더라도 사용자 자금을 직접 탈취할 수는 없습니다. 개별 지갑과 지갑을 보호하는 암호화 키의 보안은 51% 공격으로 인해 손상되지 않기 때문입니다.
51% 공격을 통해 공격자가 특정 방식으로 블록체인을 조작할 수는 있지만, 사용자를 대신해 트랜잭션을 생성하거나 지갑 잔액을 변경할 수 있는 권한은 부여되지 않습니다. 공격자는 자신이 제출한 트랜잭션에만 영향을 줄 수 있습니다.
보안은 탈중앙화에 따라 달라집니다. 탈중앙화가 낮아질수록 공격의 위험은 증가합니다. 값비싼 자원을 보유하는 데 우위를 점할 수 있다면 네트워크를 공격할 수 있습니다.
카르다노의 탈중앙화는 수천 개의 활성 풀과 130만 명의 스테이커를 보유한 암호화폐에서 가장 높은 수준 중 하나입니다. 현재로서는 51% 공격을 감행할 가능성은 희박해 보입니다.
그러나 네트워크에 대한 공격은 언제나 고가의 리소스를 구매하기 위해 많은 자금을 투입하거나 현재 보유자로부터 부정한 방법으로 리소스를 획득할 수 있는 아이디어를 생각해 내야 한다는 전제하에 이루어집니다.
51% 공격을 시도할 수 있는 능력은 퍼블릭 블록체인의 고유한 특징입니다. 이를 막을 수 있는 유일한 방법은 높은 비용이나 공격의 복잡성뿐입니다.
보안과 탈중앙화
보안과 탈중앙화는 밀접한 관련이 있습니다.
탈중앙화는 51% 공격뿐만 아니라 디도스 공격과 같은 다양한 네트워크 공격으로부터 블록체인을 보호합니다.
탈중앙화 네트워크에는 소위 단일 장애 지점이 없어야 합니다. 단일 장애 지점은 공격자가 네트워크를 제어하거나 비활성화하는 데 성공할 경우 문제를 일으킬 수 있는 네트워크의 한 지점입니다. 네트워크에 많은 수의 풀이 있는 경우, 공격은 동시에 많은 노드에서 동시에 수행되어야 하기 때문에 공격하기가 매우 어렵습니다.
또한 네트워크는 원장 기록을 덮어쓰는 것에 대한 저항력이 있어야 합니다. 또한 노드 간 데이터 일관성을 보장해야 합니다.
탈중앙화는 여러 노드에 데이터를 분산시킴으로써 보안을 강화합니다(원장은 분산 데이터베이스입니다). 따라서 악의적인 공격자가 전체 네트워크를 손상시키려면 노드의 상당 부분을 동시에 공격해야 하므로 전체 네트워크를 손상시키기가 어렵습니다.
블록체인의 무결성은 암호화 해시와 블록의 체인화를 통해 유지됩니다. 공격자는 이미 확인되어 블록체인에 포함된 과거 트랜잭션을 변경할 수 없습니다. 그러려면 과거의 어느 시점부터 최신 블록까지 모든 기존 블록에 대해 대체 가능한 위조 체인(일련의 블록)을 생성할 수 있어야 합니다. 이는 고가의 자원을 소유하고 지배력을 확보하지 않고서는 불가능합니다.
이전 단락에서 이미 언급했듯이 탈중앙화 수준이 높으면 트랜잭션 검열에 대한 네트워크의 저항력이 높아집니다. 블록 생산자가 새 블록에 어떤 트랜잭션을 포함할지 자율적으로 결정할수록 검열이 발생하지 않을 확률이 높아집니다. 보다 구체적으로, 일부 블록 생산자는 트랜잭션 검열을 개시할 수 있습니다. 이들의 수가 적다면(지분이나 해시 레이트가 낮다면) 이들의 행동이 네트워크의 전반적인 기능을 크게 위협하지는 않을 것입니다.
따라서 네트워크에 많은 수의 블록 생산자뿐만 아니라 고가의 리소스를 위임하는 위임자도 다수 보유하는 것이 바람직합니다.
네트워크에서 트랜잭션이 성공적으로 검열된다면, 일부 사용자는 자산을 사용할 수 없게 되므로 보안이 침해될 수 있습니다(사용자 입장에서는 자산이 가치가 없게 됩니다).
클라이언트 규칙 변경에 대한 복원력
합의의 분산적 특성은 네트워크 규칙을 재작성할 때 중요합니다. 예를 들어, 프로토콜의 통화 정책을 변경하거나 새로운 코인을 무에서 유를 창조하는 등의 행위는 불가능합니다. 또한, 사용자 계정을 동결하거나 잔고를 변경할 수 있겠지만 클라이언트의 동작을 변경하는 것도 불가능합니다.
팀은 클라이언트의 동작을 정의하고 이를 구현했습니다. 소스 코드는 깃허브에서 찾을 수 있으므로 전 세계 누구나 자유롭게 사용할 수 있습니다. 퍼블릭 블록체인 프로젝트는 동작에 대해 투명합니다. 그러나 공격자나 팀에 의해 동작을 쉽게 변경할 수 없도록 해야 합니다.
원래의 규칙을 임의로 변경할 수는 없지만 버그를 수정하는 것은 가능해야 합니다.
프로토콜 규칙은 클라이언트의 소스 코드에 작성됩니다. 네트워크의 모든 운영자는 실행할 클라이언트 버전을 결정합니다. 공격자가 모든 운영자에게 사기성 클라이언트를 강제로 설치할 수 있는 방법은 없습니다. 합의에 참여한 모든 정직한 참여자가 커뮤니티의 기대에 부합하는 규칙을 가진 클라이언트 버전을 실행하고 우위를 점한다고 가정하면, 공격자는 프로토콜의 규칙을 변경할 방법이 없습니다.
유효한 서명 없이는 코인을 전송할 수 없습니다(이는 클라이언트의 원래 규칙입니다). 유효하지 않은 트랜잭션이 블록에 삽입되면 해당 블록은 무효가 됩니다. 이러한 블록은 네트워크의 정직한 노드에 의해 삭제됩니다. 네트워크 합의는 트랜잭션을 통해 허공에서 코인이 생성되는 것을 허용하지 않음으로써 통화 정책을 보호합니다.
사용자는 시스템이 통화 정책의 불변성과 자산 조작의 불가능성을 보장해주기를 기대합니다. 이는 탈중앙화와 암호화를 통해 보장됩니다. 사용자가 셀프 커스터디 지갑을 사용하면 자금이 안전하게 보호됩니다. 블록체인 네트워크가 잠시 멈췄다가 다시 시작되더라도 사용자는 여전히 자신의 코인과 토큰을 소유할 수 있습니다.
솔라나 네트워크는 과거에 여러 번 재시작해야 했습니다. 아무도 자산을 잃지 않았습니다. 그러나 팀과 블록 생산자가 예를 들어 마지막 10개의 블록을 삭제하기로 합의하면 자산이 손실될 수 있습니다(삭제된 거래 내역이 변경됨).
그렇기 때문에 블록체인 네트워크는 멈출 수 없는 방식으로 구축됩니다(연속성/활성성). 일부 노드가 오프라인 상태가 되더라도 네트워크의 나머지 노드는 계속해서 합의를 위해 활발히 활동할 수 있습니다. 그러나 네트워크 합의는 노드마다 다릅니다. 어떤 노드는 활성성을, 어떤 노드는 정확성을 선호합니다.
예기치 않은 네트워크 종료는 일부 소프트웨어 버그의 경우에만 발생할 수 있습니다. 카르다노 네트워크는 출시 이후 한 번도 멈춘 적이 없습니다. 이는 대부분의 다른 프로젝트에서도 마찬가지입니다.
보안 예산 및 보상 메커니즘
사용자의 관점에서 코인과 토큰의 존재는 그다지 중요하지 않지만, 주로 코인과 토큰을 다른 주소로 이동하여 사용할 수 있는 기능이 중요합니다.
사용자는 암호화된 비밀( 암호 문구)을 통해 지갑에 자산을 보관할 수 있습니다. 그러나 이 비밀은 독점적인 소유권을 보장하는 방식으로 다른 사람과 공유할 수 없습니다. 비밀을 아는 사람만이 코인의 소유자가 됩니다.
사용자는 트랜잭션을 처리하고, 새 블록에 포함시키고, 블록을 블록체인에 안전하게 추가할 수 있는 네트워크의 능력에 의존합니다. 블록체인 거래는 자산의 원래 소유자가 코인의 소유권(통제권)을 다른 사람에게 이전할 수 있는 유일한 방법입니다. 새로운 소유자는 코인을 독점적으로 제어할 수 있습니다.
따라서 네트워크가 사용 가능해야 하고, 존재해야 합니다. 안타깝게도 이것은 당연한 일이 아닙니다. 네트워크의 존재는 운영 비용을 감당할 수 있는 능력에 따라 결정됩니다.
마지막으로 다룰 주제는 보안 예산과 네트워크가 합의 참여자에게 보상을 지급할 수 있는 능력입니다.
이 경우에는 제3자가 사기(이중지불 공격)를 통해 부를 얻거나 블록체인의 평판을 떨어뜨리기 위해 수행하는 공격이 아니라는 것입니다. 이는 계속 줄어드는 보안 예산의 결과일 수 있습니다.
이 문제는 비트코인과 같은 작업 증명 네트워크에서 쉽게 설명할 수 있습니다. 작업 증명 네트워크는 컴퓨팅 파워(해시 레이트)를 위해 막대한 양의 전력을 소비해야 합니다. 비트코인 운영 비용은 채굴자가 부담합니다. 채굴자는 채굴한 각 블록에 대해 비트코인 프로토콜로부터 새로운 BTC를 받습니다.
문제는 BTC 코인의 수가 2,100만 개로 제한되어 있고 현재 1,950만 개 이상의 코인이 유통되고 있다는 것입니다. BTC 코인은 서서히 소진되고 있습니다. 4년마다 보상이 절반으로 줄어들 때마다 블록당 BTC 보상은 감소합니다.
해시 레이트를 동일하게(또는 더 높게) 유지하는 것은 네트워크가 많은 수수료를 징수하고 BTC 코인의 시장 가치가 계속 상승할 것이라는 가정을 전제로 합니다. 그렇지 않으면 채굴자는 점점 더 적은 보상을 받게 되며, 이는 해시 레이트를 낮추는, 즉 보안성을 낮추는 결과로 이어질 것입니다.
보안이 낮아진다는 것은 51% 공격을 감행하는 것이 더 저렴해진다는 것을 의미합니다. 채굴자가 이탈하면 탈중앙화가 감소할 수 있습니다.
따라서 블록체인 네트워크의 장기적인 존속은 많은 가정을 기반으로 하며, 보장되는 것은 아닙니다.
카르다노와 다른 많은 블록체인 네트워크는 본질적으로 동일한 문제에 직면해 있습니다. 지분 증명 네트워크는 운영 비용이 저렴하다는 장점이 있습니다(운영 비용이 최대 99% 낮습니다). 카르다노는 450억 개의 ADA 코인만 유통시킬 것입니다. 준비금에는 90억 개 미만의 ADA 코인이 있습니다.
비트코인과 마찬가지로 카르다노 준비금이 고갈되면, 수수료는 SPO와 스테이커에게 보상하기에 충분해야 합니다.
보안 예산은 향후 개발 상황을 예측하기 어렵다는 점에서 사용자에게 위험할 수 있습니다. 위험은 이론적으로 매우 느리게 점진적으로 높아질 수 있습니다. 그러나 51% 공격은 예기치 않게 발생할 수 있습니다.
결론
이 글에서는 보안과 관련하여 자주 논의되지 않는 주제와 (경험상) 초보자가 잘 모르는 주제에 중점을 두었습니다. 이 글에서 모든 주제와 세부 사항을 다루지는 않았습니다. 초보자에게 이 주제의 개요를 보여주고 올바른 교육 방향을 제시하는 것이 목표였습니다.
좋은 소식은 대부분의 공격이 사용자 자산의 손실로 이어지지 않는다는 것입니다. 사용자가 셀프 커스터디 지갑을 사용하고 암호화 비밀( 비밀 문구)을 보호할 수 있다면 자산을 잃는 일은 거의 없을 것입니다. 이 글에서 설명했듯이 사용자가 관심을 가져야 하는 것은 자산을 사용할 수 있는 기능입니다.
* Source: https://cexplorer.io/article/understanding-blockchain-security
* Translation: Ilhun@CryptoVeri enics_sky@naver.com
1 post - 1 participant