"블록체인 보안"의 두 판 사이의 차이
leejia1222 (토론 | 기여) |
|||
(사용자 2명의 중간 판 8개는 보이지 않습니다) | |||
2번째 줄: | 2번째 줄: | ||
== 개요 == | == 개요 == | ||
− | + | 블록체인은 기밀성, 무결성, 가용성이 적용되어 이론적으로는 해킹이 불가능하다. 하지만 현재 기술 상황으로는 아직 완벽한 보안체계를 갖추지 못한 것으로 나타나고 있다. 블록체인이라고 하면 보안이 완벽할 것이라고 여기는 사람들이 많지만 결국 [[블록체인 플랫폼]]도 하나의 [[소프트웨어]] 프로그램일 뿐 완벽할 수 없다.<ref name="김은영">김은영 기자, 〈[https://www.sciencetimes.co.kr/news/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EB%B3%B4%EC%95%88-%EA%B0%95%ED%99%94-%EB%B0%A9%EC%95%88%EC%9D%80/ 블록체인 보안 강화 방안은? - 영지식 증명·자동화 탐지 툴 등 해결 대책 논의]〉, 《더사이언스타임즈》, 2019-07-11</ref> 블록체인은 새로운 기술이고, 기존 [[보안]]에 대한 개념으로 접근하기에는 한계가 많다. 그렇다고 보안을 완벽하다고 주장하기에도 기존에 통념적으로 사용되어 왔던 보안의 개념과 충돌한다. 보안의 영역은 다양한데, 그 영역을 먼저 정의할 필요가 있으며 그 정의된 영역에서 세분화하여 블록체인이 어떤 영역에서 어떻게 보안을 강화할 수 있는지를 먼저 살펴봐야 한다. 기본적으로 블록체인은 [[탈중앙화]]를 추구하기 때문에, 중앙화방식의 시스템에서 오는 보안의 문제점을 상당수 해결할 수 있다. 예를 들어 중앙화방식의 시스템에서는 관리자의 실수, 관리자의 도덕적 해이 등으로 발생할 수 있는 사고의 가능성이 항상 열려 있다. 즉, 관리자가 문제를 일으켰을 때 시스템으로 해결할 수 있는 보안적 조치가 취약한 것이 중앙화 방식의 시스템의 [[취약점]]이다. 이러한 취약점을 탈중앙화 방식의 시스템에서는 해결할 수 있다. 관리자의 문제, 관리자의 도덕적 해이등이 발생하더라도 시스템 전체가 도난당하거나 정보들이 유출될 수 있는 가능성의 한계가 많이 존재한다.<ref name="김동환">김동환 칼럼니스트, 〈[https://www.hankyung.com/thepen/article/107979 (김동환의 결국은 돈 문제야!) 블록체인 보안의 허점, 해결책은 존재하나?]〉, 《한국경제》, 2020-04-17</ref> | |
− | |||
− | |||
− | == 특징 == | + | ==특징== |
− | + | ===블록체인=== | |
+ | [[블록체인]]은 블록이라고 하는 관리 대상 데이터를 소규모 데이터들이 [[P2P]] 방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장 환경에 저장하여 누구라도 임의로 수정할 수 없고, 누구나 변경의 결과를 열람할 수 있는 분산 컴퓨팅 기술 기반의 원장 관리 기술이다. 근본적으로 분산 데이터 저장기술의 한 형태로, 지속해서 변경되는 데이터를 모든 참여 노드에 기록한 변경 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가능하도록 고안되었다. 블록체인 기술은 [[비트코인]]과 같은 [[암호화폐]] 거래에 사용된다.<ref>〈[https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8 블록체인]〉, 《위키백과》</ref> 블록체인은 권한(Permission) 및 합의 방식(Consensus Algorism)에 따라서 퍼블릭 블록체인(Public Blockchain), 프라이빗 블록체인(Private Blockchain), 컨소시엄 블록체인(Consortium Blockchain)으로 분류된다. 퍼블릭 블록체인은 [[이더리움]]이나 비트코인과 같이 누구나 네트워크에 참여하여 네트워크에서 발생하는 여러 행위가 공유되는 공개형 블록체인이다. 프라이빗 블록체인은 퍼블릭 블록체인과 반대로 나스닥의 링크나 미진과 같이 폐쇄형 블록체인으로 허가된 참여자 외에 거래내역과 행위들이 공유되지 않는다. 컨소시엄 블록체인은 퍼블릭, 프라이빗 블록체인의 성격이 결합한 형태로 [[코다]](Corda)나 [[하이퍼레저 패브릭]](Hyperledger Fabric)과같이 연합형 블록체인을 기반으로 한 반중앙형 성격을 띤다.<ref>보안관제센터 보안분석팀 김미희, 〈[http://www.igloosec.co.kr/BLOG_%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%20%EC%8B%9C%EB%8C%80%EC%9D%98%20%EB%B3%B4%EC%95%88%EC%9C%84%ED%98%91%EA%B3%BC%20%EB%8C%80%EC%9D%91%EB%B0%A9%EC%95%88?searchItem=&searchWord=&bbsCateId=1&gotoPage=1 블록체인 시대의 보안위협과 대응방안]〉, 《이글루시큐리티》, 2019-12-26</ref> | ||
− | + | 블록체인은 [[탈중앙화]]를 추구하기 때문에, [[중앙화]] 방식의 시스템에서 오는 보안의 문제점을 해결할 수 있다.<ref name="김동환"></ref> 또한 참여자들이 모두 원장을 투명하게 확인할 수 있다. 보안 분야에서 사용되는 블록체인 기술은 접근제어 성격이 강해 권한을 가진 사용자만 허가된 데이터에 접근할 수 있다.<ref>권정수 기자, 〈[https://www.comworld.co.kr/news/articleView.html?idxno=49658 (특별기획)보안업계, 블록체인 '기술'에 주목한다]〉, 《컴퓨터월드》, 2019-05-30</ref> 블록체인은 분산된 아키텍처이므로 별도의 중앙 기관 필요없이 개인 키와 암호화 방법을 사용하여 당사자 간의 교환과 자산을 보호할 수 있으며, 거래내역 장부는 네트워크 참여자 모두가 공동으로 소유하여 거래 데이터 조작을 방지할 수 있고, 무결성을 보장한다.<ref name="스">sungyu1223, 〈[https://steemit.com/kr/@sungyu1223/3krc2h 블록체인 기술의 특징 및 장단점을 일아봅니다.]〉, 《스팀잇》</ref><ref name="디">Stephen Evanczuk, 〈[https://www.digikey.kr/ko/articles/build-security-into-blockchain-applications-part-1 블록체인 응용 분야에 보안 구축 - 1부: 블록체인 작동 원리 및 개인 키 사용 방법]〉, 《Digi-Key》, 2019-10-08</ref> 반면 블록체인 기술의 특징적인 문제점은 모든 사용자가 함께 거래내역을 처리하고 검증하기 위해 프라이버시 리스크가 존재한다는 것이다. 특히 기업의 내부정보나 영업 기밀 등이 공유된다면 치명적일 수 있다.<ref name="스"></ref> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | === | + | ===불변성 및 합의=== |
− | + | 여러 특징들이 블록체인 보안과 관련되어 있지만, 그중에서도 가장 중요한 두 가지 개념은 합의와 불변성이다. 합의는 분산된 블록체인 네트워크 노드가 네트워크의 실제 상태와 트랜잭션의 유효성에 대해 합의하는 것을 말한다. 일반적으로, 합의를 달성하는 과정은 [[합의 알고리즘]]이라 불리는 것에 달려있다. 반면, 불변성은 이미 확인된 트랜잭션의 변경을 방지하는 블록체인의 기능을 의미한다. 이러한 트랜잭션은 보통 암호화폐 전송과 관련이 있지만, 화폐가 아닌 다른 형태의 디지털 데이터 기록을 의미할 수도 있다. 합의와 불변성을 통해 블록체인 네트워크에서 [[데이터]] [[보안]]을 위한 기본 틀이 만들어 진다. 합의 알고리즘이 시스템의 규칙을 준수하고 관련 당사자들이 네트워크의 현재 상태에 동의하도록 보장하는 반면, 불변성은 새로운 데이터 블록이 유효한 것으로 확인된 데이터와 트랜잭션을 온전하게 유지한다.<ref name="바이낸스">〈[https://academy.binance.com/ko/articles/what-makes-a-blockchain-secure 블록체인이 안전한 이유는 무엇일까요?]〉, 《바이낸스아카데미》, 2020-12</ref> | |
− | |||
− | |||
− | |||
− | |||
− | |||
+ | ===암호화 기술=== | ||
+ | 블록체인은 데이터 보안을 달성하기 위해 암호화 기술에 크게 의존하고 있다. 여기서 매우 중요한 암호화 기능 중 하나는 해싱이다. 해싱은 해시 함수로 알려진 알고리즘이 데이터 입력을 수신하고 고정 길이 값을 포함하는 정해진 출력을 반환하는 과정이다. 입력 크기에 관계없이 출력은 항상 동일한 길이를 나타낸다. 입력이 변경되면 출력은 완전히 달라진다. 그러나 입력 내용이 변경되지 않으면, 해시 함수를 아무리 많이 실행하더라도 해시 결과는 동일하다. 블록체인 내에서 해시라고 하는 이러한 출력 값은 데이터 블록의 고유 식별자로 활용된다. 각 블록의 해시는 이전 블록의 해시와 관련되어 생성되며, 이를 통해 블록은 서로 연결되어 블록체인을 형성한다. 또한 블록 해시는 해당 블록에 포함된 데이터에 의존하므로, 데이터를 변경하려면 블록 해시를 변경해야 한다. 그러므로 각 블록 해시는 해당 블록에 포함된 데이터와 이전 블록의 해시를 기반으로 생성된다. 이러한 해시 [[식별자]]는 블록체인 보안과 불변성을 유지하는 데 중요한 역할을 한다. 해싱은 트랜잭션 검증에 사용되는 합의 알고리즘에서도 활용된다. [[비트코인]] 블록체인의 [[작업증명]] 알고리즘은 합의를 달성하고 새로운 [[코인]]을 채굴하는 하기 위해 [[SHA-256]]이라는 해시 함수를 사용한다. 이는 데이터 입력을 수신하고 256비트 또는 64문자 길이의 해시를 출력한다. 암호화 기술은 장부에 기록된 트랜잭션을 보호하는 것 이외에도, 암호화폐를 보관하는 지갑의 보안에도 사용된다. 사용자가 자금을 주고 받을 수 있게 하는, 쌍으로 구성된 [[프라이빗 키]]와 [[퍼블릭 키]]는 비대칭 또는 공개 키 [[암호화]]를 통해 생성된다. 프라이빗 키는 트랜잭션에 대한 디지털 서명에 사용되며, 전송되는 코인의 소유권을 인증할 수 있다.<ref name="바이낸스"></ref> | ||
− | == | + | ===크립토이코노믹스=== |
− | + | 암호화 기술 이외에도 [[크립토이코노믹스]](Cryptoeconomics)라 알려진 비교적 새로운 개념이 블록체인 네트워크 보안을 유지하는 역할을 한다. 이는 [[게임이론]]이라 알려진, 사전에 정해진 규칙과 보상이 있는 상황에서 이성적인 행위자들에 대한 의사 결정을 수학적으로 모형화하는 연구 분야와 관련이 있다. 전통적인 게임이론이 다양한 경우에 광범위하게 적용될 수 있지만, 크립토이코노믹스는 분산된 블록체인 시스템 상의 노드의 행위를 모델링하고 설명한다. 크립토이코노믹스는 블록체인 프로토콜 내의 경제학과 참여자들의 행동에 기반해 도출될 수 있는 결과들에 대한 연구다. 크립토이코노믹스를 통한 보안은 블록체인 시스템 노드가 악의적이거나 잘못 행동하는 것보다 정직하게 행동할 때 더 많은 인센티브를 제공하는 개념에 기반한다. 비트코인 채굴에 사용되는 작업 증명 알고리즘은 이러한 인센티브 구조의 좋은 예가 될 수 있다. 비트코인의 창시자인 [[사토시 나카모토]](Satoshi Nakamoto)는 비트코인 채굴을 위한 기본 구조를 설계할 때, 의도적으로 비용과 자원이 많이 들게 했다. 이러한 복잡성과 컴퓨터 연산 능력의 필요로 인해, 작업증명 채굴은 [[채굴노드]]의 위치와 신분에 상관 없이 상당한 양의 자금과 시간을 필요로 한다. 이러한 구조는 악의적인 행동을 할 때 상당한 불이익을 받게 하며, 정직한 채굴 활동에 막대한 인센티브를 제공한다. 부정직하거나 비효율적인 노드는 블록체인 네트워크에서 빠르게 퇴출될 것이며, 정직하고 효율적인 [[채굴자]]들은 상당한 양의 블록 보상을 받을 수 있다. 이러한 위험과 보상의 균형은 단일 그룹이나 주체에 의해 블록체인 네트워크의 대다수의 [[해시레이트]]를 점유해 합의를 와해시키지 못하도록 보안을 제공한다. [[51% 공격]]이라고 알려진 이러한 공격이 성공적으로 시행된다면 엄청난 피해를 줄 수 있다. 경쟁적인 작업증명 채굴과 비트코인 네트워크 규모 때문에, 악의적인 행위자가 대다수 노드를 제어할 가능성은 극히 희박하다. 더욱이, 거대한 블록체인 네트워크의 51%를 제어하는데 필요한 연산 능력의 비용은 천문학적이며, 이는 상대적으로 적은 잠재적 보상을 위해 이처럼 큰 비용을 투자하려는 의욕을 꺾을 수 있다. 이러한 요소는 [[비잔티움 장애허용]]이라고 하는 블록체인의 특성에 기여하는데, 이는 기본적으로 분산화된 시스템이 일부 노드가 손상되거나 악의적으로 행동하더라도 정상적으로 계속 작동하게 하는 것이다. 과반수 이상의 악의적인 노드를 구축하는 비용이 엄두를 낼 수 없을만큼 높고, 정직한 행위에 보다 많은 인센티브가 주어지는 한, 시스템은 큰 방해없이 성장할 수 있다. 그러나 소규모 블록체인은 비트코인에 비해 시스템에 할당된 전체 해시레이트가 현저히 적기 때문에, 다수의 공격에 분명 취약하다는 점을 유의할 필요가 있다.<ref name="바이낸스"></ref> | |
− | |||
− | |||
− | |||
− | |||
− | == | + | == 구조 == |
− | + | ===해시=== | |
− | + | 블록체인 보안의 중요한 구성 요소는 블록 내용에 대한 [[해시]]와 같은 암호학적 [[해시 알고리즘]]을 이용하여 구현된다. 해시 함수는 일방향성과 충돌 회피성을 만족하는 암호학적 함수이다. 일방향성은 해시 입력에서 출력을 계산하는 것이 매우 쉬우나, 그 역동작은 매우 어려운 특성이다. 충돌 회피성은 동일한 해시 값을 갖는 두 개의 서로 다른 입력을 찾는 게 매우 어렵다는 특성이다. 해시는 파일, 텍스트 또는 이미지 등의 임의의 크기의 입력에 대해 고정된 출력을 산출하는 과정이다. 단일 [[비트]] 등의 해시 함수 입력의 작은 변화는 완전히 다른 출력 다이제스트 값을 산출한다. 대표적 해시 알고리즘은 [[SHA-2]], [[SHA-256]] 등이다. 해시는 [[작업증명]]의 핵심 암호 프리미티브이다.<ref name="엄홍열">엄홍열 순천향대학교 정보보호학과 교수, 〈[https://www.tta.or.kr/data/androReport/ttaJnal/177-2-3-6.pdf 블록체인 보안과 프라이버시]〉, 《TTA 저널》, 2018-05-06</ref> | |
− | |||
− | |||
− | |||
− | |||
− | == | + | ===트랜잭션=== |
− | + | [[트랜잭션]]은 자산 또는 가치의 이동을 기록한다. 트랜잭션은 방식에 따라 다르나 일반적으로 트랜잭션의 고유 식별자, 전달하고자 하는 각 자산 액수, 전달될 자산의 목록, 자산 이동의 목적지인 출력 주소, 전체 액수로 구성된다. 자산은 암호화폐나 자산 목록 단위이다. 자산 출력 주소는 노드 계정 [[공개키]]의 해시 결과 값인 익명 주소를 이용한다.<ref name="엄홍열"></ref> | |
+ | |||
+ | ===디지털 서명=== | ||
+ | [[디지털 서명]]은 공개키 암호 알고리즘을 이용한다. 디지털 서명은 정보의 부인방지와 자산 출처를 입증하는 기능을 제공하는 암호 프리미티브이다. 서명자는 트랜잭션 내용을 추후에 부인할 수 없는 부인방지 기능을 구현한다. 이에 더해 디지털 서명은 블록체인에서 자산 또는 암호화폐의 소유를 증명하기 위해 사용된다. 노드에 의해 디지털 서명된 트랜잭션은 전체 네트워크에 방송된다. 디지털 서명은 노드가 자신의 트랜잭션에 대한 부인 방지와 메시지 인증을 제공한다. 디지털 서명은 서명키 생성 단계, 서명 단계, 그리고 서명 확인 단계로 구성된다. 예를 들어 사용자 A는 다른 사용자 B에게 메시지를 보내려고 한다. 먼저 서명자는 자신의 공개키 서명 알고리즘을 위한 공개키와 개인키를 생성한다. 그리고 난 후 서명 단계에서 A는 트랜잭션의 해시 결과값을 구한다. 그런 후 서명자는 서명용 개인키로 해시 결과 값을 암호화하고 암호화된 해시 결과 값과 원본 트랜잭션을 B에게 보낸다. 서명 확인 단계에서 B는 A의 공개키로 서명 값의 유효성을 검사한다. B는 트랜잭션이 변조되었는지와 트랜잭션이 A로부터 왔다는 사실을 증명한다. B는 수신된 트랜잭션의 암호화된 해시 값을 복구한 후 수신된 트랜잭션에서 복구된 해시 결과값과 비교하여 트랜잭션에 대한 메시지 인증과 자산의 소유 증명을 확인할 수 있다. 블록체인에서 사용되는 전형적인 디지털 서명 알고리즘은 [[RSA]]와 [[타원곡선 디지털 서명 알고리즘]](ECDSA)이다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ===블록체인 동작 및 유형=== | ||
+ | 각 블록은 정해진 시간마다 생성된다. 채굴노드들은 블록 주기마다 모든 트랜잭션을 모아 트랜잭션 목록을 만들고, 그 트랜잭션 목록의 [[머클루트]] [[해시값]]을 계산한다. 그리고 이에 더해 이전 [[블록헤더]]의 해시값도 구한다. 또한 그 블록의 생성 시점을 나타내는 [[타임스탬프]] 값을 계산한다. 그런 후 이전 블록 헤더의 해시값, 현 블록 트랜잭션의 머클루트 해시값에 대해 [[넌스값]]을 조정하면서 그 해시 결과 값이 특정 값보다 작은 값이 되는 넌스값을 구한다. 이 퍼즐을 흔히 작업증명 과정이라고 한다. 블록체인 시스템은 [[퍼블릭 블록체인]], [[프라이빗 블록체인]], 그리고 [[컨소시엄 블록체인]] 등 세 가지 유형으로 분류된다. 유형의 기준은 체인에 입력할 다음 블록을 결정하기 위한 여러 노드 간에 수행되는 합의 과정에서 참여할 수 있는 노드들의 자격(허가형 또는 무허가형)이 있는지 여부와 블록 데이터를 읽을 수 있는 자격이 있는지(공개 또는 개인)에 따라 구분된다. 퍼블릭 블록체인에서는 모든 기록이 투명하게 공개되며 모든 노드들이 합의 과정에 참여할 수 있다. 컨소시엄 블록체인에서는 사전 선택된 노드 그룹만 합의 프로세스에 참여한다. 프라이빗 블록체인의 경우 특정 조직을 대표하는 노드만이 합의 프로세스에 참여할 수 있다. 프라이빗 블록체인은 합의 과정을 한 조직에서 완전히 통제하기 때문에 중앙 집중 네트워크로 간주된다. 여러 조직에 의해 구축된 컨소시엄 블록체인은 부분적으로 분산되어 있기 때문에 합의를 이루기 위해 일부 노드만 선택된다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ===합의 기법=== | ||
+ | 합의는 블록체인에 부가될 다음 블록을 결정하는 네트워크 상 노드 간에 수행되는 과정이다. 대표적인 합의 과정에 이용되는 합의 기법은 [[작업증명]](PoW), [[지분 증명]](PoS), [[프랙티컬 비잔틴 장애 허용]](PBET), [[위임지분증명]](DPoS) 등이 존재한다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ===지갑=== | ||
+ | 블록체인 시스템을 사용하는 대부분의 사용자는 개인키를 별도로 오프라인에 기록하지 않고 지갑이라고 불리는 소프트웨어가 개인키와 공개키, 노드 주소, 소유하는 자산 상태 등의 자산을 안전하게 저장한다. 지갑의 유형은 하드웨어 지갑, 소프트웨어 지갑 및 종이 지갑으로 구성된다. 하드웨어 지갑은 하드웨어 칩을 이용해 이용자의 크리덴셜을 관리한다. 소프트웨어 지갑은 소프트웨어로 구현되며 [[데스크톱]], [[스마트폰]], [[웹]]에서 크리덴셜이 관리된다. 종이 지갑은 종이에 주소 등을 출력해 관리한다. 개인키는 암호 기법을 이용해 생상되며 공개키에서 구하는 것이 매우 어렵다. 사용자가 개인키를 분실하면 해당 개인키와 연관된 모든 자산이 손실된다. 개인키가 도난당한 경우 공격자는 해당 개인키로 제어되는 모든 자산에 대한 모든 권한을 갖는다. 개인키는 일반적으로 소프트웨어 형태의 지갑에 저장되지만, 개인키의 보안은 매우 중요하므로 많은 사용자가 특수 보안 하드웨어를 사용하여 저장하기도 한다. 개인키 저장소는 블록체인 기술에 매우 중요하다. 비트코인이 도난당했다는 것은 이용자의 개인키가 유출되어 새 계정으로 돈을 보내는 트랜잭션에 서명하는 데 이용되었음을 의미하기도 한다. [[블록체인]] [[데이터]]는 일반적으로 변경될 수 없기 때문에 범죄자가 개인키를 도용하여 이와 연결된 자금을 공개적으로 다른 계정으로 이동하면 그 트랜잭션은 취소할 수 없다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ===스마트 계약=== | ||
+ | [[스마트 계약]]은 블록체인에 배포되는 코드 및 데이터 모음(함수 및 상태)이다. 스마트 계약은 블록체인에 저장되어 있는 코드가 특정 조건이 충족될 때 블록체인을 관리하는 노드에 의해 실행된다. 예를 들어 제3자에게 자금을 맡기고, 필요한 계약 조건이 충족될 때 트랜잭션을 수행한다. 조건이 충족되면 금액을 지불하여 이벤트 티켓을 구입하거나, 이벤트가 취소되면 자동으로 환불 처리하는 등의 행위를 수행하는 것이 스마트 계약이다. 이는 투명하고 자동화된 방식으로 수행된다. 블록체인으로 보내질 때 미래 트랜잭션은 스마트 계약 내의 공개 메소드로 데이터를 보낼 수 있다. 계약은 사용자가 제공한 데이터로 적절한 방법을 실행하여 서비스를 수행한다. 블록체인에 있는 코드는 변경 불가능하므로, 계정 간 자금을 보내는 것보다 더 복잡한 금융 트랜잭션의 신뢰할 수 있는 제3의 신뢰당사자로 사용될 수 있다. 스마트 계약은 계산을 수행하고, 정보를 저장하며, 자동으로 다른 계정에 자금을 보낸다. 실제로 모든 채굴노드는 새 블록을 채굴할 때 스마트 계약 코드를 동시에 실행한다. 따라서 스마트 계약 실행은 다른 블록체인 기반 암호화폐 응용에서 단순한 자금 이체보다 자원이 더 많이 소비될 수 있다. 종종 스마트 계약에 트랜잭션을 발행하는 사용자는 정상 트랜잭션 비용 외에도 코드 실행 비용이 추가 대가로 주어질 수 있다. 스마트 계약을 호출하면 실행 시간이 얼마나 될지에 대한 제한이 존재한다.이 제한 시간이 초과하면 코드 실행이 중지되고 해당 트랜잭션은 삭제된다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ===포크=== | ||
+ | 일반적으로 시스템의 업데이트 기술은 어렵다. 특히 시스템이 많은 사용자로 구성되어 있고, 전 세계에 배포되어 있으며, 블록 생성이 사용자의 합의에 의해 수행되는 경우, 시스템 업데이트는 더욱 어렵다. 블록체인 소프트웨어 구현 및 방식 변경을 [[포크]]라고 한다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ===암호화 알고리즘=== | ||
+ | 블록체인 응용에 이용되는 암호화 알고리즘에 결함이 발견되면 [[하드포크]]를 요구한다. 예를 들어, 기본 [[암호 알고리즘]]에서 결함이 발견되면 더 강력한 암호 알고리즘을 사용해야 하는 하드포크를 수행해야 한다. 하드포크가 발생하고 나서 네트워크 노드의 50% 이상이 새로운 소프트웨어 버전을 사용하기 전까지는 해당 시스템은 [[취약점]]을 가질 수 있다. 새 해시 알고리즘으로 업그레이드되면 기존 특수 목적 채굴 하드웨어가 무효화될 수 있으므로 이용자에게 실질적 문제를 초래할 수 있다. 블록체인 시스템에 존재하는 암호화 기능을 변경할 필요가 있는지 한 가지 가능성은 기존의 암호화 알고리즘 안전성을 크게 약화시키는 실용적인 [[양자컴퓨터]] 시스템이 개발될 때이다. 양자컴퓨터가 현실화되면 공개키/개인키 쌍에 대한 블록체인 기술에서 사용되는 맣은 암호화 알고리즘이 다른 알고리즘으로 대체되어야 한다. 이는 정수분해의 계산적 복잡성이나 [[이산대수]](DSA) 등 문제를 해결하는 문제에 안전성을 의존하는 암호 알고리즘이 양자컴퓨터에 매우 취약하기 때문이다. 블록체인의 다른 암호 프리미티브인 해시 알고리즘과 머클트리는 양자컴퓨터 공격에 훨씬 덜 취약하지만 양자 컴퓨터가 현실화될 때 여전히 취약하다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ==프라이버시 이슈== | ||
+ | ===이용자 주소=== | ||
+ | 노드의 주소는 특정 사용자와 매핑된다. 이 주소는 공개키에서 유도되며, 해시 함수를 사용하여 이용자의 공개키를 해시 함수에 입력해 유도된 결과값의 짧은 영숫자 문자열이다. 노드 주소는 디지털 자산을 송수신하는 데 사용된다. 대부분의 블록체인 시스템은 트랜잭션에서 시작 이용자 및 종점 이용자의 주소를 사용한다. 주소의 길이는 공개키보다 짧아야 하고 공개된다. 주소를 생성하려면 일반적으로 공개키를 가져와서 해시하고, 그 해시값을 텍스트로 변환한다. 주소는 이용자를 위한 블록체인에서 공개된 신원 역할을 수행하며, 주소를 [[QR코드]]로 변환하여 보다 쉽게 사용할 수 있다. 블록체인은 디지털 자산을 배포할 때 자산이 주소에 할당된다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | ===이용자 의사 익명성=== | ||
+ | 이용자는 많은 개인키/공개키 쌍을 생성할 수 있다. 따라서 원하는 대로 주소를 지정하여 다양한 수준 의사 익명성을 허용한다. 디지털 자산을 다른 노드에 전달하기 위해서는 해당 자산이 결합되어 있는 노드가 해당 자산의 소유를 증명해야 한다. 이는 노드의 서명용 개인키를 사용하여 해당 자산의 이동을 포함한 트랜잭션을 서명하며, 수신자는 이를 노드의 서명용 공개키를 이용하여 트랜잭션을 검증할 수 있다. 각 사용자는 생성된 주소로 블록체인과 상호작용한다. 이 주소는 사용자 실제 신원 정보를 포함하지 않는다. 따라서 블록체인은 노드의 익명성은 보장한다. 그런데 하나의 주소에 여러 트랜잭션을 연결할 수 있기 때문에 트랜잭션 익명성은 보장하지 않는다.<ref name="엄홍열"></ref> | ||
+ | |||
+ | == 보안 위협요소 == | ||
+ | 블록체인 보안을 검토해야 할 유형으로 각종 블록체인 서비스 단위의 보안 위협을 구성하는 블록체인 서비스 애플리케이션 단계, 블록체인 메인넷의 소프트웨어를 구성하는 스마트 계약 단계와 블록체인 네트워크(P2P) 네트워크로 구분할 수 있다. 이렇게 단위를 구분함으로써 어떠한 보안 위협이 어느 단계에서 주로 발생하게 되고, 또한 하나의 보안 위협만을 고려할 것이 아닌 단계별, 순차적으로 보안 위협이 얼마나 연관성이 있는지를 확인할 수 있다. | ||
+ | |||
+ | ===애플리케이션=== | ||
+ | ====전자지갑 탈취==== | ||
+ | 전자지갑은 암호자산을 저장할 수 있는 장치로서 상시 온라인 상태인 [[핫월렛]]과 사용하지 않을 때는 네트워크에서 분리시켜 별도 보관할 수 있는 [[콜드월렛]]으로 구분된다. 엄밀히 말하자면 블록체인 환경에서의 전자지갑은 암호화폐가 직접 보관되는 주머니의 개념이 아니다. 블록체인 시스템에서 암호화폐는 블록체인의 [[분산원장]]에 분산되어 있다. 즉, 전자지갑은 비유하자면 암호화폐의 주인을 증명할 수 있는 증명서를 보관하는 장소이다.<ref name="펜타시큐리티">〈[https://www.pentasecurity.co.kr/%ec%95%94%ed%98%b8%ed%99%94%ed%8f%90-%ec%a7%80%ea%b0%91%ec%9d%b4%eb%9e%80/ 암호화폐 지갑이란?]〉, 《펜타시큐리티》, 2019-05-08</ref> 따라서 전자지갑을 공격한다는 것은 블록체인 시스템을 직접 공격한다는 개념이라기보다 암호화폐 소유자의 개인 인증을 위한 비밀 키의 탈취를 통해 암호화폐의 정보를 위변조하는 개념이라고 볼 수 있다. 주로 일반적인 컴퓨팅 환경에서 동작하고 있는 지갑 소프트웨어에 [[랜섬웨어]]와 같은 [[악성코드]]의 감염을 통해 특정 주소의 자산을 동결시키거나 각 지갑의 주소를 생성하는 비밀 키를 탈취하여 위조한 주소를 생성, 배포함으로써 공격대상이 보유한 암호자산을 다른 지갑으로 옮기는 등의 공격을 실제 사례에서 확인할 수 있다.<ref name="키사">KISA 블록체인전문위원회, 〈[https://kisia.or.kr/bucket/uploads/2020/09/01/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%2B%EA%B8%B0%EC%88%A0%EB%8F%99%ED%96%A5%EB%B3%B4%EA%B3%A0%EC%84%9C%2B_%2Bkisia%2B%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%EC%A0%84%EB%AC%B8%EC%9C%84%EC%9B%90%ED%9A%8C.pdf 블록체인 전문위원회 블록체인 기술 동향 보고서]〉, 《한국정보보호산업협회》, 2020-01</ref> | ||
+ | |||
+ | ====이중지불 공격==== | ||
+ | 암호화폐의 대표격인 [[비트코인]]은 제3자의 개입 없이 [[이중지불]](double spending)에 대한 문제점을 해결함으로써 원본 가치의 전달, 즉 디지털 정보가 화폐로서의 역할을 수행할 수 있는 가능성을 열게 되었다. 이중지불의 개념은 한 번 사용한 가치를 다시 한 번 더 사용하는 것을 의미한다. 보통 블록체인 [[합의 알고리즘]]이 각 [[트랜잭션]]을 처리하고 검증하는데 걸리는 시간 간격을 이용하는 공격을 수행하기도 하며, 블록체인 내부의 프로토콜이 [[하드포크]] 되었을 때 부득이하게 기존 [[체인]]과 신규 체인 간의 [[전자지갑]] 주소의 인증키 중복 현상을 이용하는 등의 방법으로 공격을 수행하기도 한다. 이러한 이중지불 공격은 P2P 네트워크의 노드 51%를 장악하는 방식으로 구체화되어 합의 알고리즘을 무력화시킬 수 있는 공격을 수행하게 된다.<ref name="키사"></ref> | ||
+ | |||
+ | ====채굴 악성코드 감염==== | ||
+ | [[크립토재킹]](crypto jacking)은 자주 발생하는 [[채굴]] 악성코드 감염 사례이다. 다수의 사례에서 확인할 수 있듯이 인터넷을 사용하는 일반 사용자가 자신도 모르는 사이 자신의 PC에 채굴 소프트웨어가 설치됨으로써, 감염된 PC가 특정 암호화폐를 채굴한 뒤, 채굴된 암호화폐를 악성코드 유포자의 지갑으로 지속적으로 전송하게 되는 위협 요소이다.<ref name="마이클네이도">Michael Nadeau, 〈[https://www.csoonline.com/article/3253572/what-is-cryptojacking-how-to-prevent-detect-and-recover-from-it.html What is cryptojacking? How to prevent, detect, and recover from it]〉, 《CSO》, 2020-07-09</ref> 해당 공격을 통해 직접적으로 금전적인 피해를 입진 않지만, [[컴퓨팅파워]]를 도난당하는 결과를 초래하게 됨으로써, 컴퓨터의 성능저하로 인한 업무의 효율성 감소 등의 피해를 간접적으로 입게 된다. 보통 이메일 피싱 공격 또는 보안이 유지되지 않는 웹사이트 방문 등에 의해 악성코드가 PC에 설치되는 경우가 많지만, 웹 크립토재킹 방식의 공격도 빈번히 발생하고 있다. 웹 크립토재킹은 공격자가 특성 웹사이트에 악성 [[자바스크립트]] [[코드]]를 심어 놓는 방식의 공격이다.<ref name="다수">Muhammad Saad, Jeffrey Spaulding, Laurent Njilla, Charles Kamhoua, Sachin Shetty, DaeHun Nyang, Aziz Mohaisen, 〈[https://arxiv.org/abs/1904.03487 Exploring the Attack Surface of Blockchain: A Systematic Overview]〉, 《Cornell University》, 2019-04-06</ref> 단순하게 공격 대상자가 웹사이트에 저속하는 순간 별도의 소프트웨어 등의 설치 없이 컴퓨팅파워가 채굴에 도용되다가 웹사이트에서 빠져나오면 다시 채굴 도용이 중단되고 컴퓨팅파워가 정상으로 돌아오는 방식의 채굴 감염 사례가 늘어나고 있다.<ref name="키사"></ref> | ||
+ | |||
+ | ===스마트 계약=== | ||
+ | ====재진입 공격==== | ||
+ | [[재진입 공격]](reentracy attack)은 스마트 계약을 구성하는 코드 중에서 재귀 함수에 의한 [[취약점]]을 이용하는 공격을 의미한다. 다시 말해 암호자산의 인출과 같은 거래를 신청한 뒤 이전 거래의 종료 이전에 동일한 새로운 거래를 다시 반복 요청하는 방식이다. 즉, [[UTXO]] 정보를 2번 사용하게 되는 상황을 악의적으로 발생시키는 개념이다. 한 번의 거래가 합의 및 검증되는 시간적 간격을 이용하게 되면 이전 거래에서의 잔고 차감이 이루어지기도 전에 새로운 신청에 대한 잔고 확인이 실행되게 되고, 이전 거래에 의한 잔고 차감이 이루어지기 전인 현재의 잔고를 기준으로 다시 거래가 이루어짐으로써 이중거래가 발생하게 된다.<ref name="키사"></ref> | ||
+ | |||
+ | ====리플레이 공격==== | ||
+ | 기존 컴퓨팅 환경에서 자행되는 리플레이 공격과 마찬가지로 블록체인 환경에서도 [[리플레이 공격]](replay attack)이 가능하다. 블록체인 환경에서의 리플레이 공격은 하드포크된 기존 블록체인 시스템 내에서 유효성을 인정받은 트랜잭션이 새로운 블록체인 시스템의 스마트 계약에 입력되면 각각의 시스템의 인증키를 동일하게 사용하기 때문에 유효성을 인정받아 정해진 절차(송금 또는 출금)를 수행하게 되는 특성을 악이용하는 공격 방식이다. 예컨데 공격자는 공격 대상이 하드포크되기 전의 기존 블록체인 시스템 내에서 거래를 수행하는 중간 단계에서 데이터를 가로챈 뒤 가로챈 원본 데이터 그대로를 별도의 [[복호화]] 과정을 수행하지 않은 채로 하드포크되어 새롭게 생성된 블록체인 시스템에서 재전송함으로써 공격대상이 의도하지 않은 거래를 실행시킨다. 이러한 공격이 수행되면 공격 대상이 원하지 않는 거래를 지속적으로 발생시킬 수 있어 정당한 거래를 할 수 없도록 만들 수 있으며 사용하지 않은 자산을 의도적으로 소모시킬 수도 있다.<ref name="키사"></ref> | ||
+ | |||
+ | ====잔고증액 공격==== | ||
+ | 특정 블록체인 시스템의 스마트 계약에 암호화폐 잔액이 0이 아닌 경우에만 거래를 실행하는 조건이 있다고 가정할 경우, 공격자가 공격 대상의 계정 주소에 강제로 일정한 금액을 송금하여 잔액을 증가시킨 다음, 원래 실행할 수 없었던 거래를 강제로 실행시킨다는 개념의 공격 방식이다.<ref name="키사"></ref> | ||
+ | |||
+ | ===네트워크=== | ||
+ | ====51% 장악 공격==== | ||
+ | 블록체인 시스템에 대한 공격 방식 중 가장 대표적인 공격은 전체 [[노드]] [[해시파워]]의 51%를 장악하는 공격 방식이다. 전체 참여 노드의 51%가 특정 거래 요청에 대하여 검증 및 승인이 있을 경우 해당 거래로 인해 생성된 [[블록]]은 정상적으로 유효성을 가진 블록으로 인정되는 원리를 이용하는 것이다. 따라서 블록체인의 P2P 네트워크를 공격하는 공격자는 주로 전체 노드의 51% 이상을 차지하기 위해 각종 공격을 시도한다. 51%의 노드를 장악하게 되면 해당 시스템이 공격자에 의해 좌지우지될 수 있다는 점이 가장 큰 위협이라고 할 수 있다. 블록체인 네트워크의 51%를 차지하기 위한 공격에는 [[시빌 공격]](sybil attack)과 [[밸런스 공격]](balance attack)이 있다. 시빌 공격 방식은 블록체인 네트워크 내부에 허위의 채굴 노드를 공격자가 임의로 생성하여 51%를 장악하는 방식이며, 밸런스 공격은 공격자의 노드가 다른 [[채굴노드]]보다 압도적으로 우위에 있는 채굴 성능 또는 보유 지분 등을 기반으로 공격자가 생성한 체인 이외의 블록은 무효회 되도록 유도하는 공격 방식이다.<ref name="중국다수">Hai WangYong WangZigang CaoZhen LiGang Xiong, 〈[https://link.springer.com/chapter/10.1007/978-981-13-6621-5_5 An Overview of Blockchain Security Analysis]〉, 《Springer Link》, 2019-02-20</ref><ref name="책">Sarwar Sayeed, Hector Marco-Gisbert, 〈"Assessing Blockchain Consensus and Security Mechanisms against the 51% attack"〉, 《Applied Sciences》, 2019-04-29</ref> | ||
+ | |||
+ | ====허위 정보 전파 공격==== | ||
+ | 허위 정보 전파공격, 또는 [[이클립스 공격]](eclipse attack)은 공격자의 노드가 주변의 노드들에게 허위 블록정보를 지속적으로 전파함으로써 주변 노드의 해시파워를 낭비하게 하거나 허위 블록으로 거래를 수행하도록 하는 공격을 의미한다. 이러한 공격을 통해 노드의 51% 이상에게 허위 정보를 제공하여 잘못된 거래를 지속하게 하거나 허위 거래를 통해 공격자에게 암호화폐를 송금하게 하는 등의 공격을 수행할 수 있다.<ref name="중국다수"></ref><ref name="미다수">Yuval Marcus, Ethan Heilman, Sharon Goldberg, 〈[https://eprint.iacr.org/2018/236 Cryptology Low-Resource Eclipse Attacks on Ethereum's Peer-to-Peer Network]〉, 《ePrint Archive》, 2018-03-01</ref> | ||
+ | |||
+ | ====이기적 채굴 독점==== | ||
+ | [[이기적 채굴 독점]](selfish mining)은 채굴을 완료하였지만 해당 채굴 결과를 네트워크에 전파하지 않고 숨겨두고 있다가 다른 노드들의 네트워크 점유율이 공격자의 점유율을 넘어서려고 할 때 쌓아둔 블록을 네트워크에 전파함으로써 높은 점유율을 지속적으로 유지하여 채굴 보상을 독점할 수 있게 되는 공격 유형을 의미한다. 이러한 이기적 채굴 독점이 이루어지면 일반 채굴자보다 공격자가 훨씬 많은 채굴보상을 취할 수 있기 때문에 합의 네트워크의 신뢰도 및 참여 의지를 저하시키게 된다.<ref name="키사"></ref> | ||
+ | |||
+ | ====블록보류 공격==== | ||
+ | [[블록보류 공격]](block withholding attack)은 채굴한 블록을 공개하지 않는 행위로 이기적 채굴독점과 유사하다. 블록보류 공격도 이와 마찬가지로 해시파워가 다른 노드들보다 우위에 있을 경우 채굴 완료된 블록을 전파하지 않고 다음 블록을 계속 채굴해 나가는 방식을 활용한다. 공격자가 자신이 숨겨둔 블록의 길이를 길게 유지해 둔 뒤 특정 시점에서 암호화폐 인출을 실행하고 이후 한 번에 숨겨둔 블록을 공개하게 되면 인출 거래를 실행한 정당한 블록체인은 공격자가 숨겨둔 블록보다 길이가 짧기 때문에 거래 내역이 사라지게 되고 거래가 무효화되면서 차감된 암호화폐가 다시 돌아오게 되는 개념이다.<ref name="다수"></ref><ref name="또다수">Deepak Tosh, Sachin Shetty, Xueping Liang, Charles A. Kamhoua, 〈[https://www.researchgate.net/publication/317182715_Security_Implications_of_Blockchain_Cloud_with_Analysis_of_Block_Withholding_Attack Security Implications of Blockchain Cloud with Analysis of Block Withholding Attack]〉, 《IEEE Press》, 2017</ref> | ||
+ | |||
+ | ====디도스 공격==== | ||
+ | 기존의 인터넷 환경에서처럼 블록체인의 [[P2P]] [[네트워크]]에서도 [[디도스]](DDoS) 공격은 매우 강력한 공격이 될 수 있다. 블록체인의 합의 알고리즘은 트랜잭션을 검증하는데 일정한 시간이 필요하다. 이러한 네트워크의 특성에 따라 무한히 반복되는 동일한 또는 무작위의 허위 [[트래픽]]이 네트워크게 진입하게 되면 정당한 트랜잭션의 시간이 무한히 증가하기 때문에 정해진 서비스를 제공할 수 없게 된다. 블록체인의 스마트 계약에서는 조건이 마자면 자동으로 실행한다는 점을 이용함으로써 매우 다양한 방법으로 디도스 공격을 만들어 낼 수 있는데 예컨데 무한 루프에 빠지도록 하는 방법, 거래 검증을 위한 조건 부풀리기 등이 있다.<ref name="키사"></ref> | ||
+ | |||
+ | ====DNS/BGP 하이재킹==== | ||
+ | [[DNS]] 및 [[BGP]] 하이재킹 공격은 예컨데 암호자산을 송금하기 위한 목적지 전자지갑의 주소를 허위로 위조하여 기재하거나 경로 중간에 탈취함으로써 일반 사용자가 공격자가 만든 가짜 시스템을 정식 웹사이트 혹은 정식 페이지로 착각하게 만들어 접속하게 한 다음 위조된 서버 위치에서 중요 중요 정보를 공격 대상자 스스로가 입력하게 만들거나 공격 대상자의 특정 반응을 통해 주요 정보를 유출시키는 일종의 피싱 기법의 공격을 의미한다.<ref name="다수"></ref> | ||
{{각주}} | {{각주}} | ||
48번째 줄: | 100번째 줄: | ||
== 참고자료 == | == 참고자료 == | ||
* 〈[https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8 블록체인]〉, 《위키백과》 | * 〈[https://ko.wikipedia.org/wiki/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8 블록체인]〉, 《위키백과》 | ||
− | * | + | * sungyu1223, 〈[https://steemit.com/kr/@sungyu1223/3krc2h 블록체인 기술의 특징 및 장단점을 일아봅니다.]〉, 《스팀잇》 |
− | * 〈[https:// | + | * Deepak Tosh, Sachin Shetty, Xueping Liang, Charles A. Kamhoua, 〈[https://www.researchgate.net/publication/317182715_Security_Implications_of_Blockchain_Cloud_with_Analysis_of_Block_Withholding_Attack Security Implications of Blockchain Cloud with Analysis of Block Withholding Attack]〉, 《IEEE Press》, 2017 |
− | * | + | * Yuval Marcus, Ethan Heilman, Sharon Goldberg, 〈[https://eprint.iacr.org/2018/236 Cryptology Low-Resource Eclipse Attacks on Ethereum's Peer-to-Peer Network]〉, 《ePrint Archive》, 2018-03-01 |
− | * | + | * 엄홍열 순천향대학교 정보보호학과 교수, 〈[https://www.tta.or.kr/data/androReport/ttaJnal/177-2-3-6.pdf 블록체인 보안과 프라이버시]〉, 《TTA 저널》, 2018-05-06 |
− | * 〈[http://www.igloosec.co.kr/BLOG_%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%20%EC%8B%9C%EB%8C%80%EC%9D%98%20%EB%B3%B4%EC%95%88%EC%9C%84%ED%98%91%EA%B3%BC%20%EB%8C%80%EC%9D%91%EB%B0%A9%EC%95%88?searchItem=&searchWord=&bbsCateId=1&gotoPage=1 블록체인 시대의 보안위협과 대응방안]〉, 《이글루시큐리티》, 2019-12-26 | + | * Muhammad Saad, Jeffrey Spaulding, Laurent Njilla, Charles Kamhoua, Sachin Shetty, DaeHun Nyang, Aziz Mohaisen, 〈[https://arxiv.org/abs/1904.03487 Exploring the Attack Surface of Blockchain: A Systematic Overview]〉, 《Cornell University》, 2019-04-06 |
− | * | + | * Hai WangYong WangZigang CaoZhen LiGang Xiong, 〈[https://link.springer.com/chapter/10.1007/978-981-13-6621-5_5 An Overview of Blockchain Security Analysis]〉, 《Springer Link》, 2019-02-20 |
− | * | + | * Sarwar Sayeed, Hector Marco-Gisbert, 〈"Assessing Blockchain Consensus and Security Mechanisms against the 51% attack"〉, 《Applied Sciences》, 2019-04-29 |
− | * | + | * 〈[https://www.pentasecurity.co.kr/%ec%95%94%ed%98%b8%ed%99%94%ed%8f%90-%ec%a7%80%ea%b0%91%ec%9d%b4%eb%9e%80/ 암호화폐 지갑이란?]〉, 《펜타시큐리티》, 2019-05-08 |
+ | * 권정수 기자, 〈[https://www.comworld.co.kr/news/articleView.html?idxno=49658 (특별기획)보안업계, 블록체인 '기술'에 주목한다]〉, 《컴퓨터월드》, 2019-05-30 | ||
+ | * 김은영 기자, 〈[https://www.sciencetimes.co.kr/news/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8-%EB%B3%B4%EC%95%88-%EA%B0%95%ED%99%94-%EB%B0%A9%EC%95%88%EC%9D%80/ 블록체인 보안 강화 방안은? - 영지식 증명·자동화 탐지 툴 등 해결 대책 논의]〉, 《더사이언스타임즈》, 2019-07-11 | ||
+ | * Stephen Evanczuk, 〈[https://www.digikey.kr/ko/articles/build-security-into-blockchain-applications-part-1 블록체인 응용 분야에 보안 구축 - 1부: 블록체인 작동 원리 및 개인 키 사용 방법]〉, 《Digi-Key》, 2019-10-08 | ||
+ | * 보안관제센터 보안분석팀 김미희, 〈[http://www.igloosec.co.kr/BLOG_%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%20%EC%8B%9C%EB%8C%80%EC%9D%98%20%EB%B3%B4%EC%95%88%EC%9C%84%ED%98%91%EA%B3%BC%20%EB%8C%80%EC%9D%91%EB%B0%A9%EC%95%88?searchItem=&searchWord=&bbsCateId=1&gotoPage=1 블록체인 시대의 보안위협과 대응방안]〉, 《이글루시큐리티》, 2019-12-26 | ||
+ | * KISA 블록체인전문위원회, 〈[https://kisia.or.kr/bucket/uploads/2020/09/01/%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%2B%EA%B8%B0%EC%88%A0%EB%8F%99%ED%96%A5%EB%B3%B4%EA%B3%A0%EC%84%9C%2B_%2Bkisia%2B%EB%B8%94%EB%A1%9D%EC%B2%B4%EC%9D%B8%EC%A0%84%EB%AC%B8%EC%9C%84%EC%9B%90%ED%9A%8C.pdf 블록체인 전문위원회 블록체인 기술 동향 보고서]〉, 《한국정보보호산업협회》, 2020-01 | ||
+ | * 김동환 칼럼니스트, 〈[https://www.hankyung.com/thepen/article/107979 (김동환의 결국은 돈 문제야!) 블록체인 보안의 허점, 해결책은 존재하나?]〉, 《한국경제》, 2020-04-17 | ||
+ | * Michael Nadeau, 〈[https://www.csoonline.com/article/3253572/what-is-cryptojacking-how-to-prevent-detect-and-recover-from-it.html What is cryptojacking? How to prevent, detect, and recover from it]〉, 《CSO》, 2020-07-09 | ||
+ | * 〈[https://academy.binance.com/ko/articles/what-makes-a-blockchain-secure 블록체인이 안전한 이유는 무엇일까요?]〉, 《바이낸스아카데미》, 2020-12 | ||
== 같이 보기 == | == 같이 보기 == | ||
* [[보안]] | * [[보안]] | ||
− | |||
* [[블록체인]] | * [[블록체인]] | ||
− | * [[ | + | * [[해싱]] |
* [[비트코인]] | * [[비트코인]] | ||
* [[암호화폐]] | * [[암호화폐]] | ||
− | |||
− | |||
− | |||
− | |||
* [[노드]] | * [[노드]] | ||
− | * [[ | + | * [[채굴]] |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | {{보안| | + | {{보안|검토 필요}} |
2021년 1월 13일 (수) 16:38 기준 최신판
블록체인 보안(블록체인 保安, blockchain security)이란 대내외의 공격으로부터 블록체인상의 정보 자산을 안전하게 지키는 행위를 말한다.
개요[편집]
블록체인은 기밀성, 무결성, 가용성이 적용되어 이론적으로는 해킹이 불가능하다. 하지만 현재 기술 상황으로는 아직 완벽한 보안체계를 갖추지 못한 것으로 나타나고 있다. 블록체인이라고 하면 보안이 완벽할 것이라고 여기는 사람들이 많지만 결국 블록체인 플랫폼도 하나의 소프트웨어 프로그램일 뿐 완벽할 수 없다.[1] 블록체인은 새로운 기술이고, 기존 보안에 대한 개념으로 접근하기에는 한계가 많다. 그렇다고 보안을 완벽하다고 주장하기에도 기존에 통념적으로 사용되어 왔던 보안의 개념과 충돌한다. 보안의 영역은 다양한데, 그 영역을 먼저 정의할 필요가 있으며 그 정의된 영역에서 세분화하여 블록체인이 어떤 영역에서 어떻게 보안을 강화할 수 있는지를 먼저 살펴봐야 한다. 기본적으로 블록체인은 탈중앙화를 추구하기 때문에, 중앙화방식의 시스템에서 오는 보안의 문제점을 상당수 해결할 수 있다. 예를 들어 중앙화방식의 시스템에서는 관리자의 실수, 관리자의 도덕적 해이 등으로 발생할 수 있는 사고의 가능성이 항상 열려 있다. 즉, 관리자가 문제를 일으켰을 때 시스템으로 해결할 수 있는 보안적 조치가 취약한 것이 중앙화 방식의 시스템의 취약점이다. 이러한 취약점을 탈중앙화 방식의 시스템에서는 해결할 수 있다. 관리자의 문제, 관리자의 도덕적 해이등이 발생하더라도 시스템 전체가 도난당하거나 정보들이 유출될 수 있는 가능성의 한계가 많이 존재한다.[2]
특징[편집]
블록체인[편집]
블록체인은 블록이라고 하는 관리 대상 데이터를 소규모 데이터들이 P2P 방식을 기반으로 생성된 체인 형태의 연결고리 기반 분산 데이터 저장 환경에 저장하여 누구라도 임의로 수정할 수 없고, 누구나 변경의 결과를 열람할 수 있는 분산 컴퓨팅 기술 기반의 원장 관리 기술이다. 근본적으로 분산 데이터 저장기술의 한 형태로, 지속해서 변경되는 데이터를 모든 참여 노드에 기록한 변경 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가능하도록 고안되었다. 블록체인 기술은 비트코인과 같은 암호화폐 거래에 사용된다.[3] 블록체인은 권한(Permission) 및 합의 방식(Consensus Algorism)에 따라서 퍼블릭 블록체인(Public Blockchain), 프라이빗 블록체인(Private Blockchain), 컨소시엄 블록체인(Consortium Blockchain)으로 분류된다. 퍼블릭 블록체인은 이더리움이나 비트코인과 같이 누구나 네트워크에 참여하여 네트워크에서 발생하는 여러 행위가 공유되는 공개형 블록체인이다. 프라이빗 블록체인은 퍼블릭 블록체인과 반대로 나스닥의 링크나 미진과 같이 폐쇄형 블록체인으로 허가된 참여자 외에 거래내역과 행위들이 공유되지 않는다. 컨소시엄 블록체인은 퍼블릭, 프라이빗 블록체인의 성격이 결합한 형태로 코다(Corda)나 하이퍼레저 패브릭(Hyperledger Fabric)과같이 연합형 블록체인을 기반으로 한 반중앙형 성격을 띤다.[4]
블록체인은 탈중앙화를 추구하기 때문에, 중앙화 방식의 시스템에서 오는 보안의 문제점을 해결할 수 있다.[2] 또한 참여자들이 모두 원장을 투명하게 확인할 수 있다. 보안 분야에서 사용되는 블록체인 기술은 접근제어 성격이 강해 권한을 가진 사용자만 허가된 데이터에 접근할 수 있다.[5] 블록체인은 분산된 아키텍처이므로 별도의 중앙 기관 필요없이 개인 키와 암호화 방법을 사용하여 당사자 간의 교환과 자산을 보호할 수 있으며, 거래내역 장부는 네트워크 참여자 모두가 공동으로 소유하여 거래 데이터 조작을 방지할 수 있고, 무결성을 보장한다.[6][7] 반면 블록체인 기술의 특징적인 문제점은 모든 사용자가 함께 거래내역을 처리하고 검증하기 위해 프라이버시 리스크가 존재한다는 것이다. 특히 기업의 내부정보나 영업 기밀 등이 공유된다면 치명적일 수 있다.[6]
불변성 및 합의[편집]
여러 특징들이 블록체인 보안과 관련되어 있지만, 그중에서도 가장 중요한 두 가지 개념은 합의와 불변성이다. 합의는 분산된 블록체인 네트워크 노드가 네트워크의 실제 상태와 트랜잭션의 유효성에 대해 합의하는 것을 말한다. 일반적으로, 합의를 달성하는 과정은 합의 알고리즘이라 불리는 것에 달려있다. 반면, 불변성은 이미 확인된 트랜잭션의 변경을 방지하는 블록체인의 기능을 의미한다. 이러한 트랜잭션은 보통 암호화폐 전송과 관련이 있지만, 화폐가 아닌 다른 형태의 디지털 데이터 기록을 의미할 수도 있다. 합의와 불변성을 통해 블록체인 네트워크에서 데이터 보안을 위한 기본 틀이 만들어 진다. 합의 알고리즘이 시스템의 규칙을 준수하고 관련 당사자들이 네트워크의 현재 상태에 동의하도록 보장하는 반면, 불변성은 새로운 데이터 블록이 유효한 것으로 확인된 데이터와 트랜잭션을 온전하게 유지한다.[8]
암호화 기술[편집]
블록체인은 데이터 보안을 달성하기 위해 암호화 기술에 크게 의존하고 있다. 여기서 매우 중요한 암호화 기능 중 하나는 해싱이다. 해싱은 해시 함수로 알려진 알고리즘이 데이터 입력을 수신하고 고정 길이 값을 포함하는 정해진 출력을 반환하는 과정이다. 입력 크기에 관계없이 출력은 항상 동일한 길이를 나타낸다. 입력이 변경되면 출력은 완전히 달라진다. 그러나 입력 내용이 변경되지 않으면, 해시 함수를 아무리 많이 실행하더라도 해시 결과는 동일하다. 블록체인 내에서 해시라고 하는 이러한 출력 값은 데이터 블록의 고유 식별자로 활용된다. 각 블록의 해시는 이전 블록의 해시와 관련되어 생성되며, 이를 통해 블록은 서로 연결되어 블록체인을 형성한다. 또한 블록 해시는 해당 블록에 포함된 데이터에 의존하므로, 데이터를 변경하려면 블록 해시를 변경해야 한다. 그러므로 각 블록 해시는 해당 블록에 포함된 데이터와 이전 블록의 해시를 기반으로 생성된다. 이러한 해시 식별자는 블록체인 보안과 불변성을 유지하는 데 중요한 역할을 한다. 해싱은 트랜잭션 검증에 사용되는 합의 알고리즘에서도 활용된다. 비트코인 블록체인의 작업증명 알고리즘은 합의를 달성하고 새로운 코인을 채굴하는 하기 위해 SHA-256이라는 해시 함수를 사용한다. 이는 데이터 입력을 수신하고 256비트 또는 64문자 길이의 해시를 출력한다. 암호화 기술은 장부에 기록된 트랜잭션을 보호하는 것 이외에도, 암호화폐를 보관하는 지갑의 보안에도 사용된다. 사용자가 자금을 주고 받을 수 있게 하는, 쌍으로 구성된 프라이빗 키와 퍼블릭 키는 비대칭 또는 공개 키 암호화를 통해 생성된다. 프라이빗 키는 트랜잭션에 대한 디지털 서명에 사용되며, 전송되는 코인의 소유권을 인증할 수 있다.[8]
크립토이코노믹스[편집]
암호화 기술 이외에도 크립토이코노믹스(Cryptoeconomics)라 알려진 비교적 새로운 개념이 블록체인 네트워크 보안을 유지하는 역할을 한다. 이는 게임이론이라 알려진, 사전에 정해진 규칙과 보상이 있는 상황에서 이성적인 행위자들에 대한 의사 결정을 수학적으로 모형화하는 연구 분야와 관련이 있다. 전통적인 게임이론이 다양한 경우에 광범위하게 적용될 수 있지만, 크립토이코노믹스는 분산된 블록체인 시스템 상의 노드의 행위를 모델링하고 설명한다. 크립토이코노믹스는 블록체인 프로토콜 내의 경제학과 참여자들의 행동에 기반해 도출될 수 있는 결과들에 대한 연구다. 크립토이코노믹스를 통한 보안은 블록체인 시스템 노드가 악의적이거나 잘못 행동하는 것보다 정직하게 행동할 때 더 많은 인센티브를 제공하는 개념에 기반한다. 비트코인 채굴에 사용되는 작업 증명 알고리즘은 이러한 인센티브 구조의 좋은 예가 될 수 있다. 비트코인의 창시자인 사토시 나카모토(Satoshi Nakamoto)는 비트코인 채굴을 위한 기본 구조를 설계할 때, 의도적으로 비용과 자원이 많이 들게 했다. 이러한 복잡성과 컴퓨터 연산 능력의 필요로 인해, 작업증명 채굴은 채굴노드의 위치와 신분에 상관 없이 상당한 양의 자금과 시간을 필요로 한다. 이러한 구조는 악의적인 행동을 할 때 상당한 불이익을 받게 하며, 정직한 채굴 활동에 막대한 인센티브를 제공한다. 부정직하거나 비효율적인 노드는 블록체인 네트워크에서 빠르게 퇴출될 것이며, 정직하고 효율적인 채굴자들은 상당한 양의 블록 보상을 받을 수 있다. 이러한 위험과 보상의 균형은 단일 그룹이나 주체에 의해 블록체인 네트워크의 대다수의 해시레이트를 점유해 합의를 와해시키지 못하도록 보안을 제공한다. 51% 공격이라고 알려진 이러한 공격이 성공적으로 시행된다면 엄청난 피해를 줄 수 있다. 경쟁적인 작업증명 채굴과 비트코인 네트워크 규모 때문에, 악의적인 행위자가 대다수 노드를 제어할 가능성은 극히 희박하다. 더욱이, 거대한 블록체인 네트워크의 51%를 제어하는데 필요한 연산 능력의 비용은 천문학적이며, 이는 상대적으로 적은 잠재적 보상을 위해 이처럼 큰 비용을 투자하려는 의욕을 꺾을 수 있다. 이러한 요소는 비잔티움 장애허용이라고 하는 블록체인의 특성에 기여하는데, 이는 기본적으로 분산화된 시스템이 일부 노드가 손상되거나 악의적으로 행동하더라도 정상적으로 계속 작동하게 하는 것이다. 과반수 이상의 악의적인 노드를 구축하는 비용이 엄두를 낼 수 없을만큼 높고, 정직한 행위에 보다 많은 인센티브가 주어지는 한, 시스템은 큰 방해없이 성장할 수 있다. 그러나 소규모 블록체인은 비트코인에 비해 시스템에 할당된 전체 해시레이트가 현저히 적기 때문에, 다수의 공격에 분명 취약하다는 점을 유의할 필요가 있다.[8]
구조[편집]
해시[편집]
블록체인 보안의 중요한 구성 요소는 블록 내용에 대한 해시와 같은 암호학적 해시 알고리즘을 이용하여 구현된다. 해시 함수는 일방향성과 충돌 회피성을 만족하는 암호학적 함수이다. 일방향성은 해시 입력에서 출력을 계산하는 것이 매우 쉬우나, 그 역동작은 매우 어려운 특성이다. 충돌 회피성은 동일한 해시 값을 갖는 두 개의 서로 다른 입력을 찾는 게 매우 어렵다는 특성이다. 해시는 파일, 텍스트 또는 이미지 등의 임의의 크기의 입력에 대해 고정된 출력을 산출하는 과정이다. 단일 비트 등의 해시 함수 입력의 작은 변화는 완전히 다른 출력 다이제스트 값을 산출한다. 대표적 해시 알고리즘은 SHA-2, SHA-256 등이다. 해시는 작업증명의 핵심 암호 프리미티브이다.[9]
트랜잭션[편집]
트랜잭션은 자산 또는 가치의 이동을 기록한다. 트랜잭션은 방식에 따라 다르나 일반적으로 트랜잭션의 고유 식별자, 전달하고자 하는 각 자산 액수, 전달될 자산의 목록, 자산 이동의 목적지인 출력 주소, 전체 액수로 구성된다. 자산은 암호화폐나 자산 목록 단위이다. 자산 출력 주소는 노드 계정 공개키의 해시 결과 값인 익명 주소를 이용한다.[9]
디지털 서명[편집]
디지털 서명은 공개키 암호 알고리즘을 이용한다. 디지털 서명은 정보의 부인방지와 자산 출처를 입증하는 기능을 제공하는 암호 프리미티브이다. 서명자는 트랜잭션 내용을 추후에 부인할 수 없는 부인방지 기능을 구현한다. 이에 더해 디지털 서명은 블록체인에서 자산 또는 암호화폐의 소유를 증명하기 위해 사용된다. 노드에 의해 디지털 서명된 트랜잭션은 전체 네트워크에 방송된다. 디지털 서명은 노드가 자신의 트랜잭션에 대한 부인 방지와 메시지 인증을 제공한다. 디지털 서명은 서명키 생성 단계, 서명 단계, 그리고 서명 확인 단계로 구성된다. 예를 들어 사용자 A는 다른 사용자 B에게 메시지를 보내려고 한다. 먼저 서명자는 자신의 공개키 서명 알고리즘을 위한 공개키와 개인키를 생성한다. 그리고 난 후 서명 단계에서 A는 트랜잭션의 해시 결과값을 구한다. 그런 후 서명자는 서명용 개인키로 해시 결과 값을 암호화하고 암호화된 해시 결과 값과 원본 트랜잭션을 B에게 보낸다. 서명 확인 단계에서 B는 A의 공개키로 서명 값의 유효성을 검사한다. B는 트랜잭션이 변조되었는지와 트랜잭션이 A로부터 왔다는 사실을 증명한다. B는 수신된 트랜잭션의 암호화된 해시 값을 복구한 후 수신된 트랜잭션에서 복구된 해시 결과값과 비교하여 트랜잭션에 대한 메시지 인증과 자산의 소유 증명을 확인할 수 있다. 블록체인에서 사용되는 전형적인 디지털 서명 알고리즘은 RSA와 타원곡선 디지털 서명 알고리즘(ECDSA)이다.[9]
블록체인 동작 및 유형[편집]
각 블록은 정해진 시간마다 생성된다. 채굴노드들은 블록 주기마다 모든 트랜잭션을 모아 트랜잭션 목록을 만들고, 그 트랜잭션 목록의 머클루트 해시값을 계산한다. 그리고 이에 더해 이전 블록헤더의 해시값도 구한다. 또한 그 블록의 생성 시점을 나타내는 타임스탬프 값을 계산한다. 그런 후 이전 블록 헤더의 해시값, 현 블록 트랜잭션의 머클루트 해시값에 대해 넌스값을 조정하면서 그 해시 결과 값이 특정 값보다 작은 값이 되는 넌스값을 구한다. 이 퍼즐을 흔히 작업증명 과정이라고 한다. 블록체인 시스템은 퍼블릭 블록체인, 프라이빗 블록체인, 그리고 컨소시엄 블록체인 등 세 가지 유형으로 분류된다. 유형의 기준은 체인에 입력할 다음 블록을 결정하기 위한 여러 노드 간에 수행되는 합의 과정에서 참여할 수 있는 노드들의 자격(허가형 또는 무허가형)이 있는지 여부와 블록 데이터를 읽을 수 있는 자격이 있는지(공개 또는 개인)에 따라 구분된다. 퍼블릭 블록체인에서는 모든 기록이 투명하게 공개되며 모든 노드들이 합의 과정에 참여할 수 있다. 컨소시엄 블록체인에서는 사전 선택된 노드 그룹만 합의 프로세스에 참여한다. 프라이빗 블록체인의 경우 특정 조직을 대표하는 노드만이 합의 프로세스에 참여할 수 있다. 프라이빗 블록체인은 합의 과정을 한 조직에서 완전히 통제하기 때문에 중앙 집중 네트워크로 간주된다. 여러 조직에 의해 구축된 컨소시엄 블록체인은 부분적으로 분산되어 있기 때문에 합의를 이루기 위해 일부 노드만 선택된다.[9]
합의 기법[편집]
합의는 블록체인에 부가될 다음 블록을 결정하는 네트워크 상 노드 간에 수행되는 과정이다. 대표적인 합의 과정에 이용되는 합의 기법은 작업증명(PoW), 지분 증명(PoS), 프랙티컬 비잔틴 장애 허용(PBET), 위임지분증명(DPoS) 등이 존재한다.[9]
지갑[편집]
블록체인 시스템을 사용하는 대부분의 사용자는 개인키를 별도로 오프라인에 기록하지 않고 지갑이라고 불리는 소프트웨어가 개인키와 공개키, 노드 주소, 소유하는 자산 상태 등의 자산을 안전하게 저장한다. 지갑의 유형은 하드웨어 지갑, 소프트웨어 지갑 및 종이 지갑으로 구성된다. 하드웨어 지갑은 하드웨어 칩을 이용해 이용자의 크리덴셜을 관리한다. 소프트웨어 지갑은 소프트웨어로 구현되며 데스크톱, 스마트폰, 웹에서 크리덴셜이 관리된다. 종이 지갑은 종이에 주소 등을 출력해 관리한다. 개인키는 암호 기법을 이용해 생상되며 공개키에서 구하는 것이 매우 어렵다. 사용자가 개인키를 분실하면 해당 개인키와 연관된 모든 자산이 손실된다. 개인키가 도난당한 경우 공격자는 해당 개인키로 제어되는 모든 자산에 대한 모든 권한을 갖는다. 개인키는 일반적으로 소프트웨어 형태의 지갑에 저장되지만, 개인키의 보안은 매우 중요하므로 많은 사용자가 특수 보안 하드웨어를 사용하여 저장하기도 한다. 개인키 저장소는 블록체인 기술에 매우 중요하다. 비트코인이 도난당했다는 것은 이용자의 개인키가 유출되어 새 계정으로 돈을 보내는 트랜잭션에 서명하는 데 이용되었음을 의미하기도 한다. 블록체인 데이터는 일반적으로 변경될 수 없기 때문에 범죄자가 개인키를 도용하여 이와 연결된 자금을 공개적으로 다른 계정으로 이동하면 그 트랜잭션은 취소할 수 없다.[9]
스마트 계약[편집]
스마트 계약은 블록체인에 배포되는 코드 및 데이터 모음(함수 및 상태)이다. 스마트 계약은 블록체인에 저장되어 있는 코드가 특정 조건이 충족될 때 블록체인을 관리하는 노드에 의해 실행된다. 예를 들어 제3자에게 자금을 맡기고, 필요한 계약 조건이 충족될 때 트랜잭션을 수행한다. 조건이 충족되면 금액을 지불하여 이벤트 티켓을 구입하거나, 이벤트가 취소되면 자동으로 환불 처리하는 등의 행위를 수행하는 것이 스마트 계약이다. 이는 투명하고 자동화된 방식으로 수행된다. 블록체인으로 보내질 때 미래 트랜잭션은 스마트 계약 내의 공개 메소드로 데이터를 보낼 수 있다. 계약은 사용자가 제공한 데이터로 적절한 방법을 실행하여 서비스를 수행한다. 블록체인에 있는 코드는 변경 불가능하므로, 계정 간 자금을 보내는 것보다 더 복잡한 금융 트랜잭션의 신뢰할 수 있는 제3의 신뢰당사자로 사용될 수 있다. 스마트 계약은 계산을 수행하고, 정보를 저장하며, 자동으로 다른 계정에 자금을 보낸다. 실제로 모든 채굴노드는 새 블록을 채굴할 때 스마트 계약 코드를 동시에 실행한다. 따라서 스마트 계약 실행은 다른 블록체인 기반 암호화폐 응용에서 단순한 자금 이체보다 자원이 더 많이 소비될 수 있다. 종종 스마트 계약에 트랜잭션을 발행하는 사용자는 정상 트랜잭션 비용 외에도 코드 실행 비용이 추가 대가로 주어질 수 있다. 스마트 계약을 호출하면 실행 시간이 얼마나 될지에 대한 제한이 존재한다.이 제한 시간이 초과하면 코드 실행이 중지되고 해당 트랜잭션은 삭제된다.[9]
포크[편집]
일반적으로 시스템의 업데이트 기술은 어렵다. 특히 시스템이 많은 사용자로 구성되어 있고, 전 세계에 배포되어 있으며, 블록 생성이 사용자의 합의에 의해 수행되는 경우, 시스템 업데이트는 더욱 어렵다. 블록체인 소프트웨어 구현 및 방식 변경을 포크라고 한다.[9]
암호화 알고리즘[편집]
블록체인 응용에 이용되는 암호화 알고리즘에 결함이 발견되면 하드포크를 요구한다. 예를 들어, 기본 암호 알고리즘에서 결함이 발견되면 더 강력한 암호 알고리즘을 사용해야 하는 하드포크를 수행해야 한다. 하드포크가 발생하고 나서 네트워크 노드의 50% 이상이 새로운 소프트웨어 버전을 사용하기 전까지는 해당 시스템은 취약점을 가질 수 있다. 새 해시 알고리즘으로 업그레이드되면 기존 특수 목적 채굴 하드웨어가 무효화될 수 있으므로 이용자에게 실질적 문제를 초래할 수 있다. 블록체인 시스템에 존재하는 암호화 기능을 변경할 필요가 있는지 한 가지 가능성은 기존의 암호화 알고리즘 안전성을 크게 약화시키는 실용적인 양자컴퓨터 시스템이 개발될 때이다. 양자컴퓨터가 현실화되면 공개키/개인키 쌍에 대한 블록체인 기술에서 사용되는 맣은 암호화 알고리즘이 다른 알고리즘으로 대체되어야 한다. 이는 정수분해의 계산적 복잡성이나 이산대수(DSA) 등 문제를 해결하는 문제에 안전성을 의존하는 암호 알고리즘이 양자컴퓨터에 매우 취약하기 때문이다. 블록체인의 다른 암호 프리미티브인 해시 알고리즘과 머클트리는 양자컴퓨터 공격에 훨씬 덜 취약하지만 양자 컴퓨터가 현실화될 때 여전히 취약하다.[9]
프라이버시 이슈[편집]
이용자 주소[편집]
노드의 주소는 특정 사용자와 매핑된다. 이 주소는 공개키에서 유도되며, 해시 함수를 사용하여 이용자의 공개키를 해시 함수에 입력해 유도된 결과값의 짧은 영숫자 문자열이다. 노드 주소는 디지털 자산을 송수신하는 데 사용된다. 대부분의 블록체인 시스템은 트랜잭션에서 시작 이용자 및 종점 이용자의 주소를 사용한다. 주소의 길이는 공개키보다 짧아야 하고 공개된다. 주소를 생성하려면 일반적으로 공개키를 가져와서 해시하고, 그 해시값을 텍스트로 변환한다. 주소는 이용자를 위한 블록체인에서 공개된 신원 역할을 수행하며, 주소를 QR코드로 변환하여 보다 쉽게 사용할 수 있다. 블록체인은 디지털 자산을 배포할 때 자산이 주소에 할당된다.[9]
이용자 의사 익명성[편집]
이용자는 많은 개인키/공개키 쌍을 생성할 수 있다. 따라서 원하는 대로 주소를 지정하여 다양한 수준 의사 익명성을 허용한다. 디지털 자산을 다른 노드에 전달하기 위해서는 해당 자산이 결합되어 있는 노드가 해당 자산의 소유를 증명해야 한다. 이는 노드의 서명용 개인키를 사용하여 해당 자산의 이동을 포함한 트랜잭션을 서명하며, 수신자는 이를 노드의 서명용 공개키를 이용하여 트랜잭션을 검증할 수 있다. 각 사용자는 생성된 주소로 블록체인과 상호작용한다. 이 주소는 사용자 실제 신원 정보를 포함하지 않는다. 따라서 블록체인은 노드의 익명성은 보장한다. 그런데 하나의 주소에 여러 트랜잭션을 연결할 수 있기 때문에 트랜잭션 익명성은 보장하지 않는다.[9]
보안 위협요소[편집]
블록체인 보안을 검토해야 할 유형으로 각종 블록체인 서비스 단위의 보안 위협을 구성하는 블록체인 서비스 애플리케이션 단계, 블록체인 메인넷의 소프트웨어를 구성하는 스마트 계약 단계와 블록체인 네트워크(P2P) 네트워크로 구분할 수 있다. 이렇게 단위를 구분함으로써 어떠한 보안 위협이 어느 단계에서 주로 발생하게 되고, 또한 하나의 보안 위협만을 고려할 것이 아닌 단계별, 순차적으로 보안 위협이 얼마나 연관성이 있는지를 확인할 수 있다.
애플리케이션[편집]
전자지갑 탈취[편집]
전자지갑은 암호자산을 저장할 수 있는 장치로서 상시 온라인 상태인 핫월렛과 사용하지 않을 때는 네트워크에서 분리시켜 별도 보관할 수 있는 콜드월렛으로 구분된다. 엄밀히 말하자면 블록체인 환경에서의 전자지갑은 암호화폐가 직접 보관되는 주머니의 개념이 아니다. 블록체인 시스템에서 암호화폐는 블록체인의 분산원장에 분산되어 있다. 즉, 전자지갑은 비유하자면 암호화폐의 주인을 증명할 수 있는 증명서를 보관하는 장소이다.[10] 따라서 전자지갑을 공격한다는 것은 블록체인 시스템을 직접 공격한다는 개념이라기보다 암호화폐 소유자의 개인 인증을 위한 비밀 키의 탈취를 통해 암호화폐의 정보를 위변조하는 개념이라고 볼 수 있다. 주로 일반적인 컴퓨팅 환경에서 동작하고 있는 지갑 소프트웨어에 랜섬웨어와 같은 악성코드의 감염을 통해 특정 주소의 자산을 동결시키거나 각 지갑의 주소를 생성하는 비밀 키를 탈취하여 위조한 주소를 생성, 배포함으로써 공격대상이 보유한 암호자산을 다른 지갑으로 옮기는 등의 공격을 실제 사례에서 확인할 수 있다.[11]
이중지불 공격[편집]
암호화폐의 대표격인 비트코인은 제3자의 개입 없이 이중지불(double spending)에 대한 문제점을 해결함으로써 원본 가치의 전달, 즉 디지털 정보가 화폐로서의 역할을 수행할 수 있는 가능성을 열게 되었다. 이중지불의 개념은 한 번 사용한 가치를 다시 한 번 더 사용하는 것을 의미한다. 보통 블록체인 합의 알고리즘이 각 트랜잭션을 처리하고 검증하는데 걸리는 시간 간격을 이용하는 공격을 수행하기도 하며, 블록체인 내부의 프로토콜이 하드포크 되었을 때 부득이하게 기존 체인과 신규 체인 간의 전자지갑 주소의 인증키 중복 현상을 이용하는 등의 방법으로 공격을 수행하기도 한다. 이러한 이중지불 공격은 P2P 네트워크의 노드 51%를 장악하는 방식으로 구체화되어 합의 알고리즘을 무력화시킬 수 있는 공격을 수행하게 된다.[11]
채굴 악성코드 감염[편집]
크립토재킹(crypto jacking)은 자주 발생하는 채굴 악성코드 감염 사례이다. 다수의 사례에서 확인할 수 있듯이 인터넷을 사용하는 일반 사용자가 자신도 모르는 사이 자신의 PC에 채굴 소프트웨어가 설치됨으로써, 감염된 PC가 특정 암호화폐를 채굴한 뒤, 채굴된 암호화폐를 악성코드 유포자의 지갑으로 지속적으로 전송하게 되는 위협 요소이다.[12] 해당 공격을 통해 직접적으로 금전적인 피해를 입진 않지만, 컴퓨팅파워를 도난당하는 결과를 초래하게 됨으로써, 컴퓨터의 성능저하로 인한 업무의 효율성 감소 등의 피해를 간접적으로 입게 된다. 보통 이메일 피싱 공격 또는 보안이 유지되지 않는 웹사이트 방문 등에 의해 악성코드가 PC에 설치되는 경우가 많지만, 웹 크립토재킹 방식의 공격도 빈번히 발생하고 있다. 웹 크립토재킹은 공격자가 특성 웹사이트에 악성 자바스크립트 코드를 심어 놓는 방식의 공격이다.[13] 단순하게 공격 대상자가 웹사이트에 저속하는 순간 별도의 소프트웨어 등의 설치 없이 컴퓨팅파워가 채굴에 도용되다가 웹사이트에서 빠져나오면 다시 채굴 도용이 중단되고 컴퓨팅파워가 정상으로 돌아오는 방식의 채굴 감염 사례가 늘어나고 있다.[11]
스마트 계약[편집]
재진입 공격[편집]
재진입 공격(reentracy attack)은 스마트 계약을 구성하는 코드 중에서 재귀 함수에 의한 취약점을 이용하는 공격을 의미한다. 다시 말해 암호자산의 인출과 같은 거래를 신청한 뒤 이전 거래의 종료 이전에 동일한 새로운 거래를 다시 반복 요청하는 방식이다. 즉, UTXO 정보를 2번 사용하게 되는 상황을 악의적으로 발생시키는 개념이다. 한 번의 거래가 합의 및 검증되는 시간적 간격을 이용하게 되면 이전 거래에서의 잔고 차감이 이루어지기도 전에 새로운 신청에 대한 잔고 확인이 실행되게 되고, 이전 거래에 의한 잔고 차감이 이루어지기 전인 현재의 잔고를 기준으로 다시 거래가 이루어짐으로써 이중거래가 발생하게 된다.[11]
리플레이 공격[편집]
기존 컴퓨팅 환경에서 자행되는 리플레이 공격과 마찬가지로 블록체인 환경에서도 리플레이 공격(replay attack)이 가능하다. 블록체인 환경에서의 리플레이 공격은 하드포크된 기존 블록체인 시스템 내에서 유효성을 인정받은 트랜잭션이 새로운 블록체인 시스템의 스마트 계약에 입력되면 각각의 시스템의 인증키를 동일하게 사용하기 때문에 유효성을 인정받아 정해진 절차(송금 또는 출금)를 수행하게 되는 특성을 악이용하는 공격 방식이다. 예컨데 공격자는 공격 대상이 하드포크되기 전의 기존 블록체인 시스템 내에서 거래를 수행하는 중간 단계에서 데이터를 가로챈 뒤 가로챈 원본 데이터 그대로를 별도의 복호화 과정을 수행하지 않은 채로 하드포크되어 새롭게 생성된 블록체인 시스템에서 재전송함으로써 공격대상이 의도하지 않은 거래를 실행시킨다. 이러한 공격이 수행되면 공격 대상이 원하지 않는 거래를 지속적으로 발생시킬 수 있어 정당한 거래를 할 수 없도록 만들 수 있으며 사용하지 않은 자산을 의도적으로 소모시킬 수도 있다.[11]
잔고증액 공격[편집]
특정 블록체인 시스템의 스마트 계약에 암호화폐 잔액이 0이 아닌 경우에만 거래를 실행하는 조건이 있다고 가정할 경우, 공격자가 공격 대상의 계정 주소에 강제로 일정한 금액을 송금하여 잔액을 증가시킨 다음, 원래 실행할 수 없었던 거래를 강제로 실행시킨다는 개념의 공격 방식이다.[11]
네트워크[편집]
51% 장악 공격[편집]
블록체인 시스템에 대한 공격 방식 중 가장 대표적인 공격은 전체 노드 해시파워의 51%를 장악하는 공격 방식이다. 전체 참여 노드의 51%가 특정 거래 요청에 대하여 검증 및 승인이 있을 경우 해당 거래로 인해 생성된 블록은 정상적으로 유효성을 가진 블록으로 인정되는 원리를 이용하는 것이다. 따라서 블록체인의 P2P 네트워크를 공격하는 공격자는 주로 전체 노드의 51% 이상을 차지하기 위해 각종 공격을 시도한다. 51%의 노드를 장악하게 되면 해당 시스템이 공격자에 의해 좌지우지될 수 있다는 점이 가장 큰 위협이라고 할 수 있다. 블록체인 네트워크의 51%를 차지하기 위한 공격에는 시빌 공격(sybil attack)과 밸런스 공격(balance attack)이 있다. 시빌 공격 방식은 블록체인 네트워크 내부에 허위의 채굴 노드를 공격자가 임의로 생성하여 51%를 장악하는 방식이며, 밸런스 공격은 공격자의 노드가 다른 채굴노드보다 압도적으로 우위에 있는 채굴 성능 또는 보유 지분 등을 기반으로 공격자가 생성한 체인 이외의 블록은 무효회 되도록 유도하는 공격 방식이다.[14][15]
허위 정보 전파 공격[편집]
허위 정보 전파공격, 또는 이클립스 공격(eclipse attack)은 공격자의 노드가 주변의 노드들에게 허위 블록정보를 지속적으로 전파함으로써 주변 노드의 해시파워를 낭비하게 하거나 허위 블록으로 거래를 수행하도록 하는 공격을 의미한다. 이러한 공격을 통해 노드의 51% 이상에게 허위 정보를 제공하여 잘못된 거래를 지속하게 하거나 허위 거래를 통해 공격자에게 암호화폐를 송금하게 하는 등의 공격을 수행할 수 있다.[14][16]
이기적 채굴 독점[편집]
이기적 채굴 독점(selfish mining)은 채굴을 완료하였지만 해당 채굴 결과를 네트워크에 전파하지 않고 숨겨두고 있다가 다른 노드들의 네트워크 점유율이 공격자의 점유율을 넘어서려고 할 때 쌓아둔 블록을 네트워크에 전파함으로써 높은 점유율을 지속적으로 유지하여 채굴 보상을 독점할 수 있게 되는 공격 유형을 의미한다. 이러한 이기적 채굴 독점이 이루어지면 일반 채굴자보다 공격자가 훨씬 많은 채굴보상을 취할 수 있기 때문에 합의 네트워크의 신뢰도 및 참여 의지를 저하시키게 된다.[11]
블록보류 공격[편집]
블록보류 공격(block withholding attack)은 채굴한 블록을 공개하지 않는 행위로 이기적 채굴독점과 유사하다. 블록보류 공격도 이와 마찬가지로 해시파워가 다른 노드들보다 우위에 있을 경우 채굴 완료된 블록을 전파하지 않고 다음 블록을 계속 채굴해 나가는 방식을 활용한다. 공격자가 자신이 숨겨둔 블록의 길이를 길게 유지해 둔 뒤 특정 시점에서 암호화폐 인출을 실행하고 이후 한 번에 숨겨둔 블록을 공개하게 되면 인출 거래를 실행한 정당한 블록체인은 공격자가 숨겨둔 블록보다 길이가 짧기 때문에 거래 내역이 사라지게 되고 거래가 무효화되면서 차감된 암호화폐가 다시 돌아오게 되는 개념이다.[13][17]
디도스 공격[편집]
기존의 인터넷 환경에서처럼 블록체인의 P2P 네트워크에서도 디도스(DDoS) 공격은 매우 강력한 공격이 될 수 있다. 블록체인의 합의 알고리즘은 트랜잭션을 검증하는데 일정한 시간이 필요하다. 이러한 네트워크의 특성에 따라 무한히 반복되는 동일한 또는 무작위의 허위 트래픽이 네트워크게 진입하게 되면 정당한 트랜잭션의 시간이 무한히 증가하기 때문에 정해진 서비스를 제공할 수 없게 된다. 블록체인의 스마트 계약에서는 조건이 마자면 자동으로 실행한다는 점을 이용함으로써 매우 다양한 방법으로 디도스 공격을 만들어 낼 수 있는데 예컨데 무한 루프에 빠지도록 하는 방법, 거래 검증을 위한 조건 부풀리기 등이 있다.[11]
DNS/BGP 하이재킹[편집]
DNS 및 BGP 하이재킹 공격은 예컨데 암호자산을 송금하기 위한 목적지 전자지갑의 주소를 허위로 위조하여 기재하거나 경로 중간에 탈취함으로써 일반 사용자가 공격자가 만든 가짜 시스템을 정식 웹사이트 혹은 정식 페이지로 착각하게 만들어 접속하게 한 다음 위조된 서버 위치에서 중요 중요 정보를 공격 대상자 스스로가 입력하게 만들거나 공격 대상자의 특정 반응을 통해 주요 정보를 유출시키는 일종의 피싱 기법의 공격을 의미한다.[13]
각주[편집]
- ↑ 김은영 기자, 〈블록체인 보안 강화 방안은? - 영지식 증명·자동화 탐지 툴 등 해결 대책 논의〉, 《더사이언스타임즈》, 2019-07-11
- ↑ 2.0 2.1 김동환 칼럼니스트, 〈(김동환의 결국은 돈 문제야!) 블록체인 보안의 허점, 해결책은 존재하나?〉, 《한국경제》, 2020-04-17
- ↑ 〈블록체인〉, 《위키백과》
- ↑ 보안관제센터 보안분석팀 김미희, 〈블록체인 시대의 보안위협과 대응방안〉, 《이글루시큐리티》, 2019-12-26
- ↑ 권정수 기자, 〈(특별기획)보안업계, 블록체인 '기술'에 주목한다〉, 《컴퓨터월드》, 2019-05-30
- ↑ 6.0 6.1 sungyu1223, 〈블록체인 기술의 특징 및 장단점을 일아봅니다.〉, 《스팀잇》
- ↑ Stephen Evanczuk, 〈블록체인 응용 분야에 보안 구축 - 1부: 블록체인 작동 원리 및 개인 키 사용 방법〉, 《Digi-Key》, 2019-10-08
- ↑ 8.0 8.1 8.2 〈블록체인이 안전한 이유는 무엇일까요?〉, 《바이낸스아카데미》, 2020-12
- ↑ 9.00 9.01 9.02 9.03 9.04 9.05 9.06 9.07 9.08 9.09 9.10 엄홍열 순천향대학교 정보보호학과 교수, 〈블록체인 보안과 프라이버시〉, 《TTA 저널》, 2018-05-06
- ↑ 〈암호화폐 지갑이란?〉, 《펜타시큐리티》, 2019-05-08
- ↑ 11.0 11.1 11.2 11.3 11.4 11.5 11.6 11.7 KISA 블록체인전문위원회, 〈블록체인 전문위원회 블록체인 기술 동향 보고서〉, 《한국정보보호산업협회》, 2020-01
- ↑ Michael Nadeau, 〈What is cryptojacking? How to prevent, detect, and recover from it〉, 《CSO》, 2020-07-09
- ↑ 13.0 13.1 13.2 Muhammad Saad, Jeffrey Spaulding, Laurent Njilla, Charles Kamhoua, Sachin Shetty, DaeHun Nyang, Aziz Mohaisen, 〈Exploring the Attack Surface of Blockchain: A Systematic Overview〉, 《Cornell University》, 2019-04-06
- ↑ 14.0 14.1 Hai WangYong WangZigang CaoZhen LiGang Xiong, 〈An Overview of Blockchain Security Analysis〉, 《Springer Link》, 2019-02-20
- ↑ Sarwar Sayeed, Hector Marco-Gisbert, 〈"Assessing Blockchain Consensus and Security Mechanisms against the 51% attack"〉, 《Applied Sciences》, 2019-04-29
- ↑ Yuval Marcus, Ethan Heilman, Sharon Goldberg, 〈Cryptology Low-Resource Eclipse Attacks on Ethereum's Peer-to-Peer Network〉, 《ePrint Archive》, 2018-03-01
- ↑ Deepak Tosh, Sachin Shetty, Xueping Liang, Charles A. Kamhoua, 〈Security Implications of Blockchain Cloud with Analysis of Block Withholding Attack〉, 《IEEE Press》, 2017
참고자료[편집]
- 〈블록체인〉, 《위키백과》
- sungyu1223, 〈블록체인 기술의 특징 및 장단점을 일아봅니다.〉, 《스팀잇》
- Deepak Tosh, Sachin Shetty, Xueping Liang, Charles A. Kamhoua, 〈Security Implications of Blockchain Cloud with Analysis of Block Withholding Attack〉, 《IEEE Press》, 2017
- Yuval Marcus, Ethan Heilman, Sharon Goldberg, 〈Cryptology Low-Resource Eclipse Attacks on Ethereum's Peer-to-Peer Network〉, 《ePrint Archive》, 2018-03-01
- 엄홍열 순천향대학교 정보보호학과 교수, 〈블록체인 보안과 프라이버시〉, 《TTA 저널》, 2018-05-06
- Muhammad Saad, Jeffrey Spaulding, Laurent Njilla, Charles Kamhoua, Sachin Shetty, DaeHun Nyang, Aziz Mohaisen, 〈Exploring the Attack Surface of Blockchain: A Systematic Overview〉, 《Cornell University》, 2019-04-06
- Hai WangYong WangZigang CaoZhen LiGang Xiong, 〈An Overview of Blockchain Security Analysis〉, 《Springer Link》, 2019-02-20
- Sarwar Sayeed, Hector Marco-Gisbert, 〈"Assessing Blockchain Consensus and Security Mechanisms against the 51% attack"〉, 《Applied Sciences》, 2019-04-29
- 〈암호화폐 지갑이란?〉, 《펜타시큐리티》, 2019-05-08
- 권정수 기자, 〈(특별기획)보안업계, 블록체인 '기술'에 주목한다〉, 《컴퓨터월드》, 2019-05-30
- 김은영 기자, 〈블록체인 보안 강화 방안은? - 영지식 증명·자동화 탐지 툴 등 해결 대책 논의〉, 《더사이언스타임즈》, 2019-07-11
- Stephen Evanczuk, 〈블록체인 응용 분야에 보안 구축 - 1부: 블록체인 작동 원리 및 개인 키 사용 방법〉, 《Digi-Key》, 2019-10-08
- 보안관제센터 보안분석팀 김미희, 〈블록체인 시대의 보안위협과 대응방안〉, 《이글루시큐리티》, 2019-12-26
- KISA 블록체인전문위원회, 〈블록체인 전문위원회 블록체인 기술 동향 보고서〉, 《한국정보보호산업협회》, 2020-01
- 김동환 칼럼니스트, 〈(김동환의 결국은 돈 문제야!) 블록체인 보안의 허점, 해결책은 존재하나?〉, 《한국경제》, 2020-04-17
- Michael Nadeau, 〈What is cryptojacking? How to prevent, detect, and recover from it〉, 《CSO》, 2020-07-09
- 〈블록체인이 안전한 이유는 무엇일까요?〉, 《바이낸스아카데미》, 2020-12
같이 보기[편집]