develop custom_top_html:no
default debug random = 1 / type = READ / detected = READ

51% 공격이 감행되는 경우, 체인은 롤백이 될 수 있고, confirmation을 짧게 잡은 거래소의 경우 이중 출금 문제가 발생할 소지가 있습니다.

 

예를 들어 51% 공격에 의해서 100 블록이 lost 되고, 공격자의 블록으로 대체되는 경우, 100 블록 이상을 confirmation 길이로 잡아버리면 double spend 문제는 간단히 무위에 그쳐버립니다.

 

특정 거래소의 confirmation이 100 블록이라면, 공격자는 51% 공격에 의해 100블록 이상을 몰래 캐어야 하는데,

200 confirmation이 된 이후에 출금을 하도록 하면 공격자는 헛고생 하는 셈이 되는 것이죠.

(다만, 채굴자들이 애써 캔 블록이 엉클이 되거나 고아(orphan)이 되는 것은 막을 수 없고, 채굴자 분들도 공격자때문에 손해를 보게 됩니다.)

 

그러면 51% 공격은 어떻게 이루어질까요?

 

예를 들어, 공격자가 51% 해시 공격에 의해서 double spend를 발생시키려고 한다고 했을때에

0. 현재 넷 해시로 100블록을 30분만에 캘 수 있다면 => 공격자는 최소 30분만에 혼자서 101블록을 캐야 합니다.

1. 이렇게 하려면 => private 상태에서 100여블록을 캐고. (private 상태이므로 해시 기여도를 쉽게 판독할 수없음)

2. 공격 대상의 블록체인보다 최소 1블록 이상 길어야 하고.

3. private 상태에서 재빠르게 public 상태로 전환시켜 체인 재편성(reorg)를 유발시

4. 노드는 가장 긴 체인을 발견하고 체인이 재편성(reorganization, 줄여서 reorg) 되면서 이전의 100여 블록이 lost된다. => TX 기록도 블록체인에서 사라져버립니다. (여기서 double spend 발생함) (orphan 블록 비율이 높아짐)

 

(갑자기 orphan 비율이 높아진다면 => 해시 공격이 감행중이라고 볼 수 있죠.)

 

그렇다면 이 문제를 해결할 수 있는 방법은 없는 것일까요?

아예 없지는 않습니다.

 

비교적 최근에 Horizon(ZenCash)가 이중지불 공격을 당했고, Pirl(이더리움 소스 포크) 및 Musicoin도 이중지불 공격을 당했는데 이 문제를 해결하기 위해서 Horizon에서는 Penalty System을 고안했습니다.

(Pirl에서는 이와 거의 동등한 방식을 구현하고 이를 PirlGuard로 부릅니다)

 

https://www.youtube.com/watch?v=E99wpSZs6iM (Horizon에서 만든 소개 영상)

 

예를 들어서, 100 블록을 몰래 캐서 블록 재편성(reorg)을 일으켜 => 100블록이 증발하게 하려는 공격을 무위로 돌리려면???

 

"특정개수 이상의 블록이 재편성(reorg)이 일어나는 것을 막으면 됩니다."

 

현재 비트코인이나 이더리움은 "가장 긴 체인"을 기준이 되도록 프로그래밍이 되어있는데, 여기에

가장 긴 체인을 따르되, 너무 낡은 블록이 재편성 일으키는 경우 벌점을 주어서 너무 낡은 블록이 재정렬에 편입되지 못하게 막는 것입니다.

블록체인은 바로 이전 블록을 기준으로 연결이되어 있기때문에, 재편성이 일어나는 그 시점 블록의 해시를 blacklist로 등록시켜버리거나 하면 이어지는 블록들은 재편성에서 제외되어버립니다. 추가적으로 이러한 시도를 하는 노드를 블랙리스트로 올려서 노드간에 블랙리스토 노드 정보를 교환하도록 하는 추가 안전장치도 가능할 것입니다. (pirl Guard는 콘트랙트를 사용해서 black list 노드를 따로 관리하는 것으로 보임)

 

공교롭게도 저는 바로 몇일 전부터 51% 공격 방지 방식에 대해서 개인적으로 스터디를 진행하였으며,

Pirl에서 구현한 PirlGuard를 Musicoin에 적용한 사례등의 소스코드를 살펴보고 이를 정리해서 ESN 뿐만아니라 다른 이더리움 소스기반 포크 코인에서도 쉽게 적용이 가능하도록 하고, 테스트를 수행하였습니다.

 

https://github.com/EthersocialNetwork/go-ethereum/pull/1

 

테스트넷상으로 아주 잘 작동하고, 좀 더 다양한 테스트 케이스를 만들어 테스트해보아야 하겠지만, 이 방식은 이미 Horizen / Pirl / Musicoin에서 적용하여 쓰고 있는 방식이므로 이미 "어느정도 수준으로는" 검증이 된 방식이라 할 수 있을 것입니다.

5,682

ethminer님의 서명

주업은 오픈소스 프로그래머

 

ESN 디스코드 - https://discord.gg/hqHm69E

ESN 텔레그램 - https://t.me/ethersocialofficial

 

ESN 주소: 0x0c74e46b115e19726997dd559d2b6ff1bfb79af6

ETH 주소: 0x89307cb2fa6b9c571ab0d7408ab191a2fbefae0a

댓글 25
  • 좋은 정보와 설명 감사드립니다.
  • 공부허고가요 ^^
  • @대왕새우버거
    대왕새우버거님 축하합니다. 5 보너스 캐시에 당첨되셨습니다.!!
  • ?
    와우 이해하기 쉽게 알려주셔서 감사합니다.
  • ?
    대단하십니다!!
  • 이더리움이 향후 가끔, 종종 한번씩 51%공격 당할 때와
    주구장창 밤 낮 계속 당하는 건 못 막는다고 봅니다

    이미 51%정도가 아니라
    중국 러시아 등지에서 신형 asic로 90%이상 점유할 게 뻔하고
    더 값이 떨어져 비트코인채굴로 얻는 이득이 손실로 바뀐다면
    발전소 돌리고 전기세 펑펑 써가며 유지하는 것보다
    그들은 계속 공격해서 완전 망할 때까지 공격할 겁니다

    현재도 충분히 공격 가능하나 비트코인채굴해서 팔면 그게 더 이득이라 굳이 안하는 것처럼
    잘 보다가
    코인 가격 급락하면
    51%공격 이슈로 전세계 거래소 입출금 ALL STOP되기 전에 다 팔고 손 터는 게 최선이라 봅니다
    0원 되면 팔지도 못하테니.



    그들이 51%attack 못해서 안하는 게 아니라 굳이 아직은 할 필요 없어서 안하는 건 다 아는 사실 아닙니까?

  • @내가총대멘다
    블록 재편성(reorg)는 지금도 수없이 일어나죠. 문제는 긴 체인의 reorg입니다. 긴 체인이 reorg될 경우 판독이 가능하고 => 이를 경고 시스템을 발동시킨 후에 confirmation을 두배~10배로 늘려버리면 공격자는 헛고생 하게 되고,
    이 예시에서 볼 수 있는 것처럼 아예 노드에서 의심스러운 긴 체인을 버려버리고 블랙리스트 해시로 등록하면 51% 공격이 무위로 돌아갑니다.

    사실 이 문제는 블록체인 데이터 대신에 거래소가 DB를 따로 운용하기 때문에 "거래소"의 문제로 볼 수 있어서 사용자 입장에서는 원래 의미보더 더 심각하게 느껴지는 것이죠.
  • @ethminer
    ethminer님 축하합니다. 17 보너스 캐시에 당첨되셨습니다.!!
  • ?
    좋은 정보 감사합니다 ~~
  • ?
    와~~ 정보 감사합니다..ㅎㅎㅎ
  • ?
    ㅋㅋㅋ 레벨에 맞는 생각
  • ?
    그리 쉬운 문제가 아닙니다.
  • 당장 51%공격 당하기 좋습니다

    https://www.blockchain.com/ko/pools

     

    캡처s.JPG

     

  • ?
    쉬운 설명 감사합니다~~
  • ?
    체인 분리가 일어날 수 있을 것 같은데 이에 대한 대책도 있나요?
  • @사과야채

    Penalty System의 consensus는 가장 긴 체인 + delay된 긴 체인이 너무 긴 경우 벌점을 주는 방식으로 reorg 방지가 추가된 것입니다.

    공격자가 51% 공격을 감행했는데, reorg가 일어나지 않는다면 => 공격자는 계속 그 체인으로 캐게 되고, 국소적인 체인 스플릿이 발생하는 상황이 되겠지요. 문제는 거래소와, 채굴풀입니다. 거래소와 채굴풀이 공격자 체인을 무시하게되면 공격자는 선택에 기로에 서게 됩니다. 쓸모없어질 지도 모를 체인을 계속 캐느냐. 아니면 포기하느냐. 결국 노드들은 각자의 선택을 해야 하게 되고, 공격자를 편들지 않는 이상 스플릿난 체인은 도태되게 되겠지요.

    Penalty System은 이제 막 태어난 새로 제안된 블록체인 컨센서스입니다. 이와 함께 소규모 퍼블릭 체인의 51% 공격 대처 방안이 개발되어 보완될 것으로 생각합니다.

  • ?
    그게 가능하면 비트코인이 왜 적용을 안할까요? 가령 대륙간 네트워크 단절이 발생했다고 합시다. 수십분 동안 체인이 갈라져 서로 다른 두 그룹에서 각자 체인을 키우다가 네트워크가 정상으로 돌아왔을 때, 두 체인의 경합이 없다면 체인은 분리됩니다. 체인 분할 자연 발생이라는 재앙을 초래하게 되죠. 체인은 어떤 '룰'에 의해 반드시 다시 합쳐져야 합니다. 오래되었다고 판단할 수 있는건 없죠. 무슨 체인이 정답인지 어떻게 압니까... 현재 가장 긴 체인이 메인이다는 룰만큼 깔끔한 룰은 아직 없습니다.
  • @에공스페수
    말씀하신 것의 예를 잘 못 드신 듯 한데, 비트코인 블록 타임은 10분 내외이고, 수십분간 체인 스플릿이 난다 해도 겨우 몇블럭 넘어가는 수준입니다. 국소적으로 스플릿이 나더라도 겨우 몇블록 수준이니, 비트코인 confirmation 100 블록 수준에서 내에서 거의 벗어나지 않을 것 같군요.

    비트코인은 또한 넷해시가 너무 높아서 Penalty 시스템을 굳이 적용할 이유가 없을 것입니다.
    반면, 비트코인에서 갈라져 나온, 본문에도 나와있는 Horizon은 최근에 51% 공격을 받고 double spend에 의한 손실을 입었습니다. Horizon(ZenCash)에서 제안한 것이 바로 Penalty System이고 작년에 비로소 제안된 것이고 Horizon에도 구현되어 적용된 상태입니다.
  • ?
    좋은정보감사합니다
    공부하고갑니다
  • ?
    넷해쉬가 낮은 코인들 경우 쓰면 좋겠네요 저기서 double spend를 당한 코인들은 다 메인넷으로 분리된 코인들을 말하는 것이죠??
  • ?
    잘 보고 갑니다!!!
  • ?
    거래 기록 자체가 사라지는데 어떻게 double spend가 발생하는 건가요?? 거래 기록이 사라지면 사라진 거래 이전으로 돌아가는거 아닌가요? 이해가 잘 안돼서 질문드립니다.
  • @팀반
    - 거래소는 블록체인을 안쓰고 자체 DB를 쓰는 것 때문에 문제가 되죠.
    거래소도 블록체인을 쓴다면 모든 기록이 되돌려지기때문에 double spend가 일어나지 않습니다.
  • ?
    @ethminer
    아!! 알겠습니다!!
  • Pirl의 Penalty System의 단점으로는, 체인 스플릿입니다. 경쟁에서 진 체인을 제외시켜버리는데, 반면 제외된 노드가 스스로의 오류를 수정하거나 하지 않기때문에 관리자가 노드에 대해 신경을 쓰지 않거나 내버려두면 스플릿이 나 버립니다.

    Pirl의 채굴 풀중에 minerpool.net은 체인 스플릿의 주범인데, 관리자가 거의 신경을 안쓰고 있어서, 한번 오류가 생기면 몇일간 방치되고 있고 그 손해는 채굴자에게 고스란히 돌아갑니다.

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 설 명절 맞이로 이벤트는 한 주 쉬어갑니다. 새해 복 많이 받으세요! 3 3 67
ESN경매
2020.01.24
공지 2020 미스터리 박스 추첨 이벤트 결과 발표 11 5 122
ESN경매
2020.01.20
공지 게시판 캐시 적립 정책 변경 안내 (2019/12/20 시행) 11 3 246
관리자
2019.12.20
공지 가칭 "땡글 지갑" 베타테스터를 모집합니다. 35 file 17 1257
땡글개발자
2019.11.15
공지 로그인이 안되시는 분은 문의해주시기 바랍니다. 7 5 2804
땡글개발자
2019.08.21
1536 질문 코인번? 이건 어떻게 하는건가요? https://github.com/htkcoin/htk 라는 코인을 분석하고있습니다.   그런데 갑자기 궁금한게 코인을 태운다? 코인을 없앤다고 하는데    htk 라는 코인에서도 이런게 가능한가요?   그런 명령어 또는 방법이있는지 궁... 4 0 630
Destroy
2019.01.18
1535 질문 geth 동기화질문드립니다 ㅜㅜ     안녕하세요 이더리움 연구중입니다 .geth 동기화하려고하는데  ./geth --syncmode=fast --cache=1024 이렇게 동기화시작햇습니다. 동기화가 가다가 계속 멈춰있는데 원인이뭔지 모르겟습니다.. 도움주시면 감사하... 8 0 1761
피로
2019.01.17
1534 질문 해시파워 대량공습?   개발자 여러분   해시파워 외국 채굴업자 점유자들에게  장비 파워가 있어 고의로 51%공격 ㄹㄹ 안해서아이러니 하게도 도리어 비트코인은 51%Attac안전이 보장돼듯이 비트코인에 투입돼는 해시파워를 돌려서 이더... 12 0 1318
내가총대멘다
2019.01.17
1533 개발 ㅎㅎㅎ 이더리움은 참 어렵군요...   아 이더리움이 참 먼가 어렵네요...   비트코인할때는 코어만 깔면 다 됐었는데 말이죠.   송수신 간단하고 노티도되고 등등...   이더는 노티도 안되고 송수신이 주소별로 돼서 관리도 어렵고...   거기다 토큰도 ... 5 0 1278
로텔
2019.01.17
1532 개발 <기술분석>왜 콘스탄티노플 하드포크는 연기되었나? - EIP1283분석 콘스탄티노플 하드포크가 연기된 이유에 대한 기술 세미나영상과 자료입니다.   영상 : https://youtu.be/cdTSxsajibo   프레젠테이션 : https://docs.google.com/presentation/d/1eNf3qpkMxtWg6Tjck-mdRsBjq7JIVzdGB... 7 14 3833
철학자
2019.01.16
1531 질문 컴공수학중에서 이산수학이랑 선형대수중에 뭐가 더 중요한가요?       안녕하세요 블록체인 관련 일하고싶어서 이런저런 질문을 남겼었는데(답변해주셨던 모든분 감사드립니다)  어차피 1년후에 컴공으로 편입목표로 하는거  그냥 기초부터 착실하게 하자해서 1년간 C/C++ , 자료구... 6 1 2878
5년존버
2019.01.16
1530 질문 삭제한 글입니다 삭제한 글입니다 file 0 523
COANET
2019.01.16
1529 개발 트레이딩 수식 어떻게 세울지 어렵네요.       작년부터 조금씩 시스템 트레이딩 만들고 있는데요.   실시간처리시 처리량이 많아 시간이약간소요되네요. 병렬처리로 넘어갈까 수식공부할까 고민중인데요. 최근 폭락장에서 3개월간 시뮬레이션했을때 2프로 ... 4 1 892
Rodger
2019.01.15
1528 질문 DB는 아닌 듯   비트 주소 거의 다 나옵니다 1번 부터 156 아승기 개 다 나오는 주소는 아닌듯...   이걸로 해킹은 못하고 대신 빨리 돈 찾기 search 는 될 듯.....       자신의 공개키 찾기는  16진수 다시 10진수로 바꿔서 차근... 9 file 0 1262
내가총대멘다
2019.01.15
1527 개발 카카오게임 파트너사, BORA 해커톤 개최   http://www.sentv.co.kr/news/view/547488   게임 개발자분들은 눈여겨보실만한 판교 해커톤 정보 공유해봅니다.       블록체인 디지털 콘텐츠 플랫폼 프로젝트인 BORA(보라)가 경기도 판교에 있는 투썬 캠퍼스 ... file 0 663
수영귀신
2019.01.14
1526 질문 이더리움 참 어렵군요 이더리움 공부하고 있는 초보개발자입니다.   이더리움을 리눅스에 설치해서 테스트를 해보았습니다.   테스트넷에서 테스트를 하고 메인넷으로 바꿔서 해보고 있는데 싱크가 안됩니다.   이더 코인을 보냈는데 발란... 2 0 1703
로텔
2019.01.14
1525 질문 파이썬을 시작해보려고하는데요   현재 프론트는 React-native 를 하고 있고요    백앤드는 솔리디티 조금 할줄 압니다   파이썬이 여러군데에 쓰일수 있다고하여 조금 읽혀 두려고 하는데요    어디에 많이 쓸수 있고 어디서 주로 사용이 되는건가... 5 0 1230
COANET
2019.01.12
1524 질문 솔리디티 코드 Warning이 뜨는 이유를 알고싶고 없애고 싶은데요. function PetChangeTransaction( address _PETSITTER, address _master, uint _ownerpirce ) PetSitterModifyInfo(_PETSITTER) public payable { // var Owner = Owners[_seller]; require(PetSitters[msg.sender].p... 2 0 537
COANET
2019.01.12
1523 질문 이더리움 코어를 설치하고 주소를 생성해서 이더를 보냈는데 밸런스가 0으로 나옵니다. 안녕하세요. 초보개발자입니다.   이더리움 서버를 설치하고 동기화는 다 됐습니다.   주소를 생성하고 그 주소로 이더를 보냈는데요...   이더스캔에서 조회해보면 전송이 완료 됐습니다. 그리고 밸런스도 맞게 나오... 12 0 791
로텔
2019.01.10
1522 개발 개발자들에게 필요한 지혜   코인을 개발할 계획이거나  거래소 개발자라면 꼭 알아할 난제 중 하나가 51%attack 과 중국,러시아등  asic채굴업자들 입니다   다 아시다시피 비트코인 51%어택은 당장이라도 가능한 현실입니다 이미 점거된 상황... 6 file 0 1157
내가총대멘다
2019.01.10
1521 질문 자료구조 질문했었는데 컴공관련 질문좀만 더 답변해주시면 감사하겠습니다       우선 자료구조에 대해 답변해주신분 모두 감사드립니다.  자료구조의 중요성은 알았는데 질문조금만 더 하겠습니다.   1.자료구조를 배우는데 있어서 C언어를 먼저 기초적으로 배우고 자료구조로 넘어가는게 좋... 7 0 831
5년존버
2019.01.09
1520 질문 C언어 자료구조를 배우면 어떤 도움이되나요? 올해말에 컴공으로 편입계획중인데 알아보니 전공면접이 대부분자료구조랑 회로쪽이라는데 C언어 자료구조를 배우면 다른 프로그래밍언어에도 도움이되나요? 어떤식으로 도움이되나요?                       -------... 12 0 1298
5년존버
2019.01.08
개발 51% 공격 대비를 위한 페널티 시스템 소개 및 구현/정리 51% 공격이 감행되는 경우, 체인은 롤백이 될 수 있고, confirmation을 짧게 잡은 거래소의 경우 이중 출금 문제가 발생할 소지가 있습니다.   예를 들어 51% 공격에 의해서 100 블록이 lost 되고, 공격자의 블록으로... 25 16 3532
ethminer
2019.01.08
1518 질문 메타마스크 입금 문의드립니다.     메타마스크 가입해서 이더리움 계정지갑을 생성했습니다.   바로 빗섬에서 이더리움을 출금시키려고하니 주소가 올바르지않습니다 라고 나옵니다.   메타마스크에 있는 이더주소가 실제 지갑주소가 아닌가여?   ... 2 0 1125
심퉁이
2019.01.08
1517 질문 ERC20 토큰 전송 질문입니다. 우분투에 parity로 이더리움 블록을 쌓고 개발중입니다. 동기화는 다 되었구요.   이더리움은 php 로 curl 보낼 수 있도록 설정한다음 외부 api 에서 curl 명령어를 보내서 처리결과를 받아오도록 해놓았습니다.   ER... 9 0 1595
비폭력무저항
2019.01.08
Board Pagination Prev 1 ... 5 6 7 8 9 10 11 12 13 14 ... 86 Next
/ 86
PC debug / slots = 2 / size = 0 / random = 1