Dandelion++가 모네로 거래의 출처를 보호하는 방법

공개됨:
By Diego Salazar

개인정보보호 우선

외부 사람들에게 모네로는 가상화폐로서 흥미가 떨어질 수 있습니다. '세계적 컴퓨터'라거나 '업계를 뒤흔들 것'이라는 뻔한 주장을 하지 않습니다. 모네로는 그저 지속적인 발전과 신기술 도입을 통해 대체성이 있고 개인정보보호가 보장되는 전자화폐일 뿐입니다.

이걸 별로 중요한 일이 아니라고 치부하는 사람들은 블록체인같은 영구적인 기록이 남는 공개레저에서 개인정보가 보호된다는 것이 얼마나 어려운지 이해하지 못하고 있습니다. 소량의 데이터 유출도 개인정보를 위협할 수 있습니다.

모네로는 보낸이, 받는이, 거래량 등 체인 내 데이터를 임시주소, 링서명, 페데르센 약속을 사용해 숨기고 있습니다. 이는 외부 체인 내 관찰자가 거래내역을 보고 중요정보를 유추할 확률을 최소화합니다. 하지만, 거래가 이뤄지고 있는 순간에만 할 수 있는 공격들도 있습니다.


IP 주소 공개 공격Attack to reveal IP address

이 공격은 거래의 시작 IP 주소를 찾으려고 합니다. 이 정보가 유출되면 누가 모네로를 거래했는지 알 수 있게 됩니다. 받는 사람과 거래량은 알 수 없지만, 모네로를 거래했다는 것만으로도 거래자가 위험에 빠지는 경우도 있습니다.

다행인 점은 IP 정보는 블록체인이 기록되지 않아 거래가 이뤄지는 순간에 공격이 이뤄지지 않는 한 이후에 유출될 위험은 없다는 것입니다. 또한 이러한 공격을 실행하기 위해서는 공격자가 네트워크 내 많은 노드를 장악하고 있어야 하기 때문에 공격을 받을 위험을 거의 없습니다. 하지만 누군가가 많은 노드를 장악하고 있다면, 어느 '방향'에서 거래가 시작됐는지 알 수 있을 것입니다.

이해하기 어려운 정보이기에 먼저 기본정보를 좀 더 설명하고 넘어가겠습니다. 모든 노드는 블록체인을 업데이트하고 정보를 공유하기 위해 네트워크 내 다른 노드와 연결되어 있습니다. 이런 연결을 통해 거래를 만들고 다른 거래들을 인지하고 네트워크 내 확산시킵니다. 노드는 오직 해당 노드가 알고 있는 정보만 확산시킬 수 있기 때문에, 가장 첫 노드가 거래를 시작한 노드라는 것을 알 수 있습니다.

만약 공격자가 네트워크 내 대다수의 노드를 장악하고 있다면, 장악하지 못한 다른 노드로부터 거래에 대한 정보를 듣고 정보의 흐름을 거슬러 올라가 어느 노드에서 거래가 시작되었는지 유추할 수 있을 것입니다.

아직도 이해가 안될 수 있기에 예시를 준비했습니다. 철수와 영희가 공통적으로 아는 친구가 있다고 생각해봅시다. 현재 이 친구는 어딨는지 보이지는 않지만, 목소리는 들립니다. 이 친구가 소리를 지르면 영희에 비해 철수가 먼저 듣고 더 크게 듣습니다. 여기서 우리는 친구는 영희보다 철수에게 더 가까이 있다는 것을 알 수 있습니다. 영희가 (순식간일지라도) 친구의 외침을 더 늦게 듣고 더 작게 들린다는 것은 친구를 찾기 위해선 영희가 아닌 철수 주변을 먼저 찾아봐야한다는 것입니다.

이런 식으로 공격자가 성공적으로 어느 노드가 정보를 보냈는지 알 수 있다면, 노드에 연결된 IP 주소를 확신할 수 있게 됩니다. 이 정보는 IP 주소를 통해 거주 국가와 인터넷 서비스 제공자(ISP)를 알 수 있고, ISP를 통해 IP 주소의 주인을 알 수 있기에 모네로의 익명성을 무너뜨리는 강력한 정보입니다.

방어수단

이 공격을 방어할 수 있는 방법 중 하나는 토르나 I2P같은 우회 서비스를 이용하는 것입니다. 이렇게 되면 공격자가 IP 주소를 알게 되더라도 실제 거래를 한 IP 주소가 아닌 프록시 주소나 토르의 노드 중 하나일 것입니다. 하지만 이는 근본적인 해결책이 될 수 없는게, 우회서비스나 VPN 등이 금지된 나라가 많고, 모든 사람들이 이런 우회서비스를 이용할 것을 기대하는 것은 비현실적이기 때문입니다. 외부 프로그램이나 서비스를 이용하지 않고 누구나 이용 가능한 해결책이 필요합니다.

이런 해결책 중 하나는 비트코인에 이용되었던 Dandelion 프로토콜이 업그레이드된 Dandelion++(DPP)입니다. 이 프로토콜에서는 민들레(dandelion)의 '씨앗'과 '줄기'로 나뉩니다.

줄기에서는 노드가 정보를 보낼 때 몇분에 한번씩 연결될 노드 중 무작위로 2개를 선택해 둘 중 하나의 노드로 정보를 보냅니다.

씨앗에서는 정보를 받아 내보낼 때 무작위로 선택된 노드가 아닌 연결된 모든 노드에 정보를 보내 정보를 완전히 확산시킵니다. 몇분에 한번씩 노드는 줄기가 될 지 씨앗이 될 지 무작위로 선택되며, 줄기 단계에서는 연결된 다른 노드들도 줄기라면 정보확산이 오래 걸리지만 한번 씨앗 노드를 만나면 순식간에 정보가 확산됩니다.

이는 정보를 모든 노드에 확산시켰고, 줄기를 (알수 없는 횟수만큼) 여러번 거쳐 씨앗 상태에서의 확산은 정보의 원 출처가 아니기에 이제 공격자가 더 이상 정보의 흐름을 추적할 수 없게합니다.

위에 말한 우회서비스와 DPP를 같이 사용하면 IP 공격으로부터 더욱 안전해질 수 있습니다. 하지만 DPP는 ISP를 사용한 다른 공격은 방어할 수 없는 것을 알아야 합니다.

모네로 0.16 버전부터는 DPP가 모네로 네트워크에 적용되어 자동으로 이용할 수 있습니다. 이는 모네로 네트워크 자체에 대한 공격도 방어할 수 있게 하며 왜 모네로가 보안에 있어 선두주자인지 보여주고 있습니다.

더 보기

© 2024 Blue Sunday Limited