블럭체인 지갑과 NFT
Posted on Wednesday, January 5, 2022.
블럭체인 지갑과 NFT
NFT나 가상화폐는 디지털 자산이며, 자산의 소유권은 블럭체인상에 저장된다. 자산의 소유자의 비밀키로 자산(의 해시값)을 서명한 내용이 저장되므로 해당 자산에 대한 소유권이 증명된다. 비밀키를 가지고 있으면 자산 양도가 가능하다. 따라서 비밀키의 보관이 매우 중요하다.
블럭체인 지갑은 해당 블럭체인에서 사용되는 비밀키를 저장하는 소프트웨어이다. 대표적인 블럭체인 지갑으로서 다음과 같은 제품들이 있다.
- Ethereum: Metamask (https://metamask.io/), Bitski (https://wallet.bitski.com/)
- Solana: Phantom (https://phantom.app/)
- Klayton: Klip (https://klipwallet.com/)
NFT 거래
NFT 거래는 이론적으로는 분산형으로 일어날 수 있지만, 대부분 편의상 거래소에서 이루어진다. NFT 자산의 탐색(explore/browse), 경매, 매매등을 제공하기 때문이다. 사용자의 트랜잭션은 블럭체인 지갑을 매개체로 이루어진다. 해당 NFT 거래소와 거래가 가능한 블럭체인 지갑을 이용해야하며, 해당 블럭체인 지갑에서 금액을 지불하고, 블럭체인 지갑으로 NFT를 받는 형식이다.
OpenSea에서 제공하는 블럭체인 지갑은 아래와 같다. 이들 중 가장 널리 사용되는 메타마스크의 예를 들어 어떠한 보안 위협이 있는지 살펴보자.
메타마스크 보안 이슈
메타마스크는 크롬 브라우저 플러그인형태이며, 블록체인 트랜잭션이 필요한 비밀키(및 공개키 쌍)을 관리한다. NFT/가상화폐 서비스가 비밀키가 필요한 작업을 해야할 때 메타마스크에 작업을 요청하고, 메타마스크는 web3.js API를 이용하여 브라우저캐시에 저장된 비밀키를 접근하게 된다.
브라우저캐시에는 사용자의 비밀키가 패스워드로 암호화 되어 저장되어 있다.
사용자가 메타마스크를 사용함에 있어서 관리해야하는 정보는 두 가지이다
- 패스워드: 브라우저 로그인 시에 사용
- 비밀 구문: 새로운 접근 환경 또는 패스워드 분실시 사용
패스워드는 저장된 비밀키를 복호화 하기 위하여 필요하다. 비밀 구문은 날것의 비밀키를 사람이 저장하기 쉬운 형태로 코드화 한 것이다.
해커가 패스워드를 입수하면, 해당 메타마스크가 구동되는 PC에 접근하여 비밀키를 알아낸 후 자산을 탈취할 수 있다. 해커가 비밀구문을 입수하면, 블럭체인은 누구에게나 오픈되어 있으므로 바로 자산을 탈취할 수 있다.
그러면?
안전한 NFT거래를 위해서는 무엇보다 패스워드와 비밀 구문을 관리하여 유출되지 않도록 한다. 또한 지갑의 비밀키가 저장된 영역 (브라우저캐시)을 보호해야한다. 암호화된 비밀키를 대상으로 Brute-force 공격이 가능하기 때문이다. 또한 비밀키 관리를 하드웨어 지갑이나 HW Trusted Environment에 위임하여 안전성을 높일 수 있다.