debug random = 1

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 CASH

ethminer's 서명

profile

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

 

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

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

 

ESN 주소: 0x0c74e46b115e19726997dd559d2b6ff1bfb79af6

ETH 주소: 0x89307cb2fa6b9c571ab0d7408ab191a2fbefae0a

댓글 24
  • profile
    크림메일 2019.01.08 22:08
    좋은 정보와 설명 감사드립니다.
  • profile
    대왕새우버거 2019.01.08 23:01
    공부허고가요 ^^
  • profile
    ddengle BOT 2019.01.08 23:01
    to 대왕새우버거 :
    대왕새우버거님 축하합니다. 5 보너스 캐시에 당첨되셨습니다.!!
  • ?
    CLO가즈아 2019.01.08 23:18
    와우 이해하기 쉽게 알려주셔서 감사합니다.
  • ?
    최배달 2019.01.09 00:01
    대단하십니다!!
  • profile
    내가총대멘다 2019.01.09 00:14

    이더리움이 향후 가끔, 종종 한번씩 51%공격 당할 때와
    주구장창 밤 낮 계속 당하는 건 못 막는다고 봅니다

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

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



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

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

    사실 이 문제는 블록체인 데이터 대신에 거래소가 DB를 따로 운용하기 때문에 "거래소"의 문제로 볼 수 있어서 사용자 입장에서는 원래 의미보더 더 심각하게 느껴지는 것이죠.
  • profile
    ddengle BOT 2019.01.09 07:12
    to ethminer :
    ethminer님 축하합니다. 17 보너스 캐시에 당첨되셨습니다.!!
  • ?
    marry 2019.01.09 00:43
    좋은 정보 감사합니다 ~~
  • ?
    마이닝러버 2019.01.09 01:42
    와~~ 정보 감사합니다..ㅎㅎㅎ
  • ?
    미스테리우스님 2019.01.09 01:46
    ㅋㅋㅋ 레벨에 맞는 생각
  • ?
    무명인 2019.01.09 03:53
    그리 쉬운 문제가 아닙니다.
  • profile

    당장 51%공격 당하기 좋습니다

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

     

    캡처s.JPG

     

  • ?
    AppA 2019.01.09 08:54
    쉬운 설명 감사합니다~~
  • ?
    사과야채 2019.01.09 15:50
    체인 분리가 일어날 수 있을 것 같은데 이에 대한 대책도 있나요?
  • profile
    ethminer 2019.01.09 18:24
    to 사과야채 :

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

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

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

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

    비트코인은 또한 넷해시가 너무 높아서 Penalty 시스템을 굳이 적용할 이유가 없을 것입니다.
    반면, 비트코인에서 갈라져 나온, 본문에도 나와있는 Horizon은 최근에 51% 공격을 받고 double spend에 의한 손실을 입었습니다. Horizon(ZenCash)에서 제안한 것이 바로 Penalty System이고 작년에 비로소 제안된 것이고 Horizon에도 구현되어 적용된 상태입니다.
  • ?
    고바이 2019.01.09 18:33
    좋은정보감사합니다
    공부하고갑니다
  • ?
    COANET 2019.01.12 16:55
    넷해쉬가 낮은 코인들 경우 쓰면 좋겠네요 저기서 double spend를 당한 코인들은 다 메인넷으로 분리된 코인들을 말하는 것이죠??
  • ?
    반복반복 2019.03.03 10:59
    잘 보고 갑니다!!!
  • ?
    팀반 2019.04.26 10:55
    거래 기록 자체가 사라지는데 어떻게 double spend가 발생하는 건가요?? 거래 기록이 사라지면 사라진 거래 이전으로 돌아가는거 아닌가요? 이해가 잘 안돼서 질문드립니다.
  • profile
    ethminer 2019.04.26 12:38
    to 팀반 :
    - 거래소는 블록체인을 안쓰고 자체 DB를 쓰는 것 때문에 문제가 되죠.
    거래소도 블록체인을 쓴다면 모든 기록이 되돌려지기때문에 double spend가 일어나지 않습니다.
  • ?
    팀반 2019.04.26 16:01
    to ethminer :
    아!! 알겠습니다!!

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
공지 [Air Drop 이벤트] 게시판을 신설합니다 13 updatefile 32740
땡글운영위원회
2019.05.17
공지 [땡글] (주)이에스엔운영 채용공고 16 updatefile 2 3274
ESN운영
2019.05.14
[AD] [AD] ESN으로만 신청 가능한 광고자리입니다. 14 11988
관리자
2019.01.02
1528 질문 DB는 아닌 듯   비트 주소 거의 다 나옵니다 1번 부터 156 아승기 개 다 나오는 주소는 아닌듯...   이걸로 해킹은 못하고 대신 빨리 돈 찾기 search 는 될 듯.....       자신의 공개키 찾기는  16진수 다시 10진수로 바꿔서 차근... 9 file 1103
내가총대멘다
2019.01.15
1527 개발 카카오게임 파트너사, BORA 해커톤 개최   http://www.sentv.co.kr/news/view/547488   게임 개발자분들은 눈여겨보실만한 판교 해커톤 정보 공유해봅니다.       블록체인 디지털 콘텐츠 플랫폼 프로젝트인 BORA(보라)가 경기도 판교에 있는 투썬 캠퍼스 ... file 529
수영귀신
2019.01.14
1526 질문 이더리움 참 어렵군요 이더리움 공부하고 있는 초보개발자입니다.   이더리움을 리눅스에 설치해서 테스트를 해보았습니다.   테스트넷에서 테스트를 하고 메인넷으로 바꿔서 해보고 있는데 싱크가 안됩니다.   이더 코인을 보냈는데 발란... 2 1480
로텔
2019.01.14
1525 질문 파이썬을 시작해보려고하는데요   현재 프론트는 React-native 를 하고 있고요    백앤드는 솔리디티 조금 할줄 압니다   파이썬이 여러군데에 쓰일수 있다고하여 조금 읽혀 두려고 하는데요    어디에 많이 쓸수 있고 어디서 주로 사용이 되는건가... 5 1056
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 434
COANET
2019.01.12
1523 질문 이더리움 코어를 설치하고 주소를 생성해서 이더를 보냈는데 밸런스가 0으로 나옵니다. 안녕하세요. 초보개발자입니다.   이더리움 서버를 설치하고 동기화는 다 됐습니다.   주소를 생성하고 그 주소로 이더를 보냈는데요...   이더스캔에서 조회해보면 전송이 완료 됐습니다. 그리고 밸런스도 맞게 나오... 12 654
로텔
2019.01.10
1522 개발 개발자들에게 필요한 지혜   코인을 개발할 계획이거나  거래소 개발자라면 꼭 알아할 난제 중 하나가 51%attack 과 중국,러시아등  asic채굴업자들 입니다   다 아시다시피 비트코인 51%어택은 당장이라도 가능한 현실입니다 이미 점거된 상황... 6 file 957
내가총대멘다
2019.01.10
1521 질문 자료구조 질문했었는데 컴공관련 질문좀만 더 답변해주시면 감사하겠습니다       우선 자료구조에 대해 답변해주신분 모두 감사드립니다.  자료구조의 중요성은 알았는데 질문조금만 더 하겠습니다.   1.자료구조를 배우는데 있어서 C언어를 먼저 기초적으로 배우고 자료구조로 넘어가는게 좋... 7 624
5년존버
2019.01.09
1520 질문 C언어 자료구조를 배우면 어떤 도움이되나요? 올해말에 컴공으로 편입계획중인데 알아보니 전공면접이 대부분자료구조랑 회로쪽이라는데 C언어 자료구조를 배우면 다른 프로그래밍언어에도 도움이되나요? 어떤식으로 도움이되나요?                       -------... 12 1028
5년존버
2019.01.08
» 개발 51% 공격 대비를 위한 페널티 시스템 소개 및 구현/정리 51% 공격이 감행되는 경우, 체인은 롤백이 될 수 있고, confirmation을 짧게 잡은 거래소의 경우 이중 출금 문제가 발생할 소지가 있습니다.   예를 들어 51% 공격에 의해서 100 블록이 lost 되고, 공격자의 블록으로... 24 16 3107
ethminer
2019.01.08
1518 질문 메타마스크 입금 문의드립니다.     메타마스크 가입해서 이더리움 계정지갑을 생성했습니다.   바로 빗섬에서 이더리움을 출금시키려고하니 주소가 올바르지않습니다 라고 나옵니다.   메타마스크에 있는 이더주소가 실제 지갑주소가 아닌가여?   ... 2 817
심퉁이
2019.01.08
1517 질문 ERC20 토큰 전송 질문입니다. 우분투에 parity로 이더리움 블록을 쌓고 개발중입니다. 동기화는 다 되었구요.   이더리움은 php 로 curl 보낼 수 있도록 설정한다음 외부 api 에서 curl 명령어를 보내서 처리결과를 받아오도록 해놓았습니다.   ER... 9 1054
비폭력무저항
2019.01.08
1516 질문 이더리움 하드포크관련 질문입니다!     안녕하세요. 이더리움 하드포크 관련 콘스탄티노플 에 대해서 궁금해서 질문 올립니다.   원래 하드포크를 하게되면 거래소에서 입출금 기록을 막고 하드포크를 진행하게 되어있는걸로 알고 있는데 빗썸, 업비트... 3 1164
블록체인배우고싶어요
2019.01.07
1515 질문 서버에 파이썬 올리기 안녕하세요 땡글에서 여러 고수님들 덕분에 매매프로그램은 완성하였습니다. 컴퓨터를 24시간 돌릴수가 없어 질문을 드리다가 서버(구글, 네이버,아마존)를 이용하는 방법이 있다고 알게되었습니다. 하지만 서버쪽은.... 18 1268
jins81c
2019.01.07
1514 질문 암호화폐 하나 만들었습니다. 나비코인이라 이름 붙였는데.... PoW에 UTXO, Peer to Peer 로 설명하면 다들 이해하시죠? 블록 만드는 시간은 길어도 1분쯤이면 되도록 했습니다.. go 언어로 제작했구요... 공개 블록체인 소스를 기반으로 하고있습... 13 2536
Xmessiah
2019.01.07
1513 질문 geth client 맥에서 mining 오래걸리는현상     제 개발환경은 맥인데 geth client에서 miner.start() 함수로 마이닝할시에 첫블록이 거의 30분이지나서야 발견되고 그다음부턴 빨리빨리 진행되는데 이게 너무 느려서 공부하기가힘드네요   https://ethereum.st... 356
chaindata
2019.01.06
1512 질문 비트멕스 취소주문 오류건...ㅠ.ㅠ 도와주세요. 안녕하세요   개발환경 : 비트멕스, ccxt, 파이썬   아래와 같이 order주문 취소를 넣었는데  자꾸 에러가 나네요... 몇군데 구글링한 내용대로 돌려도 아래와 같이 에러가 납니다...   해결 방법 부탁드립니다. ㅠ.... 2 1011
jins81c
2019.01.06
1511 질문 비트코인그린에서 마이닝하는쪽 질문입니다   비트코인 그린 소스에서  setgenerate true 를 해서 마이닝을 하니 아래와 같이 에러가 뜹니다   2019-01-04 10:49:37 CreateNewBlock(): total size 1000 2019-01-04 10:49:37 ERROR: CheckTransaction() : coinba... 430
단테테테라매
2019.01.04
1510 개발 파이썬으로 만든 빗썸 json 가격 가져와서 파일로 저장하기 입니다. 제가 살면서 파이썬은 처음해보는 것이라 좀 부실합니다.   파이썬으로 빗썸 접속해서 BTC 가격을 가져오는 소스입니다.   리턴이 json이라 그나마 쉽습니다.   ------------------------------------------- import ... 1 5 1002
쌍둥아빠
2019.01.04
1509 질문 이더리움 코인 보내기 질문입니다. 진짜.. 이더리움 너무 어렵네요. 믿을데라고는 여기 고수님들밖에 없습니다. ㅠ.ㅠ   현재 A 주소에 0.015 이더가 있습니다. 이 중 0.01 이더를 다른 주소로 보내고 싶습니다.   보내기 시도해보면,  {   "returnHead... 5 537
비폭력무저항
2019.01.04
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 ... 83 Next
/ 83