BNS는 Blockchain Naming System의 약자로 탈중앙화 된 DNS입니다. BNS를 살펴보기 전에 먼저 DNS에 대해 살펴보겠습니다.
DNS는 Domain Name System의 약자이며, 숫자로 된 IP주소를 사람이 쉽게 읽을 수 있는 형태로 변환해 주는 기능을 제공합니다. 예를 들어 네이버의 아이피 주소는 223.130.195.95, 223.130.195.200 등입니다. 이러한 아이피 주소는 숫자로 되어있기 때문에 사용자가 읽거나 외우기 어렵습니다. 따라서 아이피를 naver.com으로, naver.com을 아이피로 변환하는 기능을 제공하는 DNS가 등장했습니다. DNS를 통해 사용자는 더 이상 복잡한 아이피 주소를 이용할 필요 없이 영어 단어로 이뤄진 주소를 사용할 수 있게 되었습니다. 예를 들어 사용자가 네이버에 접속하기 위해 naver.com을 입력하면 DNS 서비스 제공자는 네이버의 아이피 주소를 반환하게 됩니다. 그리고 사용자는 이 아이피 주소로 사이트에 접속하게 됩니다.
DNS를 제공하는 DNS 서버는 단일 시스템이 아닙니다. DNS 서버는 크게 로컬 DNS 서버, 루트 DNS 서버, TLD(Top-Level domain) 서버, Authoritative 서버로 나뉩니다. 사용자가 DNS에 아이피를 요청하는 경우 먼저 로컬 DNS 서버를 확인하게 됩니다. 로컬 DNS 서버는 캐시 역할을 하는 서버로, 만약 여기에 사용자가 입력한 주소에 맞는 아이피가 저장되어 있지 않다면 로컬 DNS 서버가 루트 DNS 서버로 요청을 전송하게 됩니다. DNS 루트 서버는 TLD 서버에 대한 정보를 로컬 DNS 서버로 전송하게 되고, 로컬 DNS 서버는 이를 이용해 TLD 서버로 요청을 보내게 됩니다. 이 과정을 반복해 로컬 DNS 서버는 최종적으로 Authoritative 서버에 요청을 보내 유저가 요구하는 아이피 주소를 찾게 됩니다.
이렇게 편리한 기능을 제공해주는 DNS를 이용하려면 사용자는 서비스를 제공하는 외부의 제3자를 신뢰해야 합니다. 만약 IP 불러오는 과정에서 악의적인 DNS 제공자가 존재한다면 피싱사이트의 아이피 주소를 알려줄 가능성이 있습니다. 또한 DNS는 중앙화 된 시스템이기 때문에 대규모 트래픽 공격인 디도스 공격에 취약할 수밖에 없습니다. 따라서 스택스는 탈중앙화 된 블록체인 기반 DNS인 BNS를 제안하였습니다.
BNS는 탈중앙화된 DNS로 DNS가 가진 중앙화의 문제점을 블록체인을 통해 해결하고, 복잡한 공개키 대신 사람이 읽을 수 있는 ID를 통해 블록체인에 거래를 요청할 수 있도록 하는 목적으로 개발되었습니다. 이는 이더리움의 ENS(Ethereum Name Service)와 비슷합니다.
BNS는 DNS와 비슷하게 로컬 BNS 서버, 루트 블록체인 그리고 TLD 블록체인으로 구성됩니다. 로컬 BNS 서버는 사용자가 신뢰할 수 있는 영역 안에 위치하게 됩니다. 예를 들어 사용자 컴퓨터 내부에 직접 저장될 수 있습니다. 로컬 BNS 서버는 루트 블록체인과 TLD 블록체인과 연결되어 있습니다. 로컬 BNS 서버는 연결된 루트 블록체인, TLD 블록체인과 항상 데이터를 동기화합니다.
이 과정에서 로컬 BNS 서버는 블록체인 상의 모든 내용을 저장해야 하기 때문에 부담이 클 수밖에 없습니다. 등록된 이름이 적은 경우에는 상관이 없지만, 만약 많은 사람들이 서비스를 이용하게 된다면 로컬 BNS 서버가 저장해야 할 파일은 수 백 기가바이트에 달할 수 있습니다. 따라서 BNS는 SNV(Simple Name Verification)라고 부르는 라이트 노드를 제공합니다. 이는 비트코인에서 사용하는 SPV와 비슷합니다. SPV에 대해서는 아래의 글을 참고해주세요.
[비트코인 기본 구조] 6. 머클트리와 SPV(Merkle Tree & SPV)
만약 블록체인이 모든 거래들을 계속해서 저장한다면 저장 공간이 지나치게 많이 필요할 것입니다. 따라서 비트코인 개발자인 사토시는 디스크 공간을 절약하기 위해 비트코인이 머클트리를
kwjdnjs.tistory.com
BNS에 이름을 등록하기 위해서는 크게 2개의 거래를 실행해야 합니다. 첫 번째 거래는 선주문(preordered) 거래입니다. 선주문 거래는 이름을 등록하기 원한다는 것을 블록체인에 요청하는 거래입니다. 이 과정에서 이름 등록 수수료를 지불합니다. 두 번째 거래는 등록(registered) 거래입니다. 이 거래를 실행하면 블록체인에 이름이 등록됩니다.
블록체인에 이름을 등록하는 과정에서 선주문 거래와 등록 거래를 나눠놓은 이유는 퍼블릭 블록체인의 특징 때문입니다. 퍼블릭 블록체인 상의 모든 거래는 공개되기 때문에 모든 사람이 거래의 내용을 모두가 볼 수 있습니다. 만약 A가 bitcoin이라는 이름을 등록하는 거래를 실행하게 되면 모든 사람들이 A가 해당 이름을 등록하기 원한다는 것을 알 수 있습니다. 이를 본 B가 bitcoin이라는 이름을 가져가기 위해 해당 요청을 추가로 보내게 된다면 A는 이름을 빼앗길 수 있습니다.
따라서 이 과정을 둘로 나눠서 실행하여 A가 원하는 이름을 등록하지 못하는 상황을 방지합니다. A는 먼저 선주문 거래를 요청합니다. 해당 요청이 성공하면 이어서 이름을 등록하는 등록 거래를 요청합니다. 만약 이를 본 B가 이름을 빼앗으려고 시도한다면 B는 블록체인에 첫 번째 거래인 선주문 거래를 먼저 보내야 합니다. 이미 A는 두 번째 거래를 요청한 상황이기 때문에, B가 두 번째 요청을 보낼 때에는 A가 이름을 등록한 상황이 됩니다. 이를 통해 A는 자신의 이름이 빼앗기는 것을 막을 수 있습니다. 추가적으로 등록된 이름을 변경해야 하는 경우 두 번째 거래인 등록 거래만을 취소하고 새로운 등록 거래를 보내면 되기 때문에 추가 비용 없이 이름을 변경할 수 있습니다.
이렇게 등록된 이름과 값(지갑 주소, 아이피 등)은 블록체인에 기록되어 누구나 볼 수 있고, 등록한 사람 이외에는 취소(변경)할 수 없는 기록이 됩니다. 이를 통해 중앙화 된 DNS에서 발생될 수 있는 문제들을 해결할 수 있습니다.
블록체인 관점에서 봤을 경우 BNS를 이용하면 복잡한 형태의 지갑 주소 대신 stacks.btc와 같은 형태의 사람이 쉽게 읽고 이해할 수 있는 주소를 사용할 수 있습니다. 아래 링크를 통해 실제로 BNS 서비스를 이용해볼 수 있습니다. 해당 서비스를 이용하기 위해서는 스택스 지갑이 필요합니다.
btc.us
A better internet built on Bitcoin. Claim your domain.
btc.us
지금까지 스택스에서 실제로 사용되고 있는 BNS와 이를 통한 Trust-to-Trust 원칙의 첫 번째 원칙인 탈중앙화된 DNS의 구현에 대해 알아보았습니다. 다음 글에서는 탈중앙화 된 저장소인 가이아(Gaia)에 대해 알아보겠습니다.
'스택스 > 웹 3.0' 카테고리의 다른 글
[스택스 웹 3.0] 3. 가이아(Gaia) (1) | 2022.08.14 |
---|---|
[스택스 웹 3.0] 1. Trust-to-Trust 디자인 (0) | 2022.07.01 |
[스택스 웹 3.0] 0. 들어가기 전에 (0) | 2022.07.01 |