develop custom_top_html:no
default debug random = 0 / 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은 체인 스플릿의 주범인데, 관리자가 거의 신경을 안쓰고 있어서, 한번 오류가 생기면 몇일간 방치되고 있고 그 손해는 채굴자에게 고스란히 돌아갑니다.
default debug random = 0 / type = READ / detected = READ

List of Articles
번호 분류 제목 추천 수 조회 수 글쓴이 날짜
1520 질문 C언어 자료구조를 배우면 어떤 도움이되나요? 올해말에 컴공으로 편입계획중인데 알아보니 전공면접이 대부분자료구조랑 회로쪽이라는데 C언어 자료구조를 배우면 다른 프로그래밍언어에도 도움이되나요? 어떤식으로 도움이되나요?          ... 12 0 1642
5년존버
2019.01.08
개발 51% 공격 대비를 위한 페널티 시스템 소개 및 구현/정리 51% 공격이 감행되는 경우, 체인은 롤백이 될 수 있고, confirmation을 짧게 잡은 거래소의 경우 이중 출금 문제가 발생할 소지가 있습니다.   예를 들어 51% 공격에 의해서 100 블록이 lost 되... 25 16 3943
ethminer
2019.01.08
1518 질문 메타마스크 입금 문의드립니다.     메타마스크 가입해서 이더리움 계정지갑을 생성했습니다.   바로 빗섬에서 이더리움을 출금시키려고하니 주소가 올바르지않습니다 라고 나옵니다.   메타마스크에 있는 이더주소가 실제 지갑... 2 0 1728
심퉁이
2019.01.08
1517 질문 ERC20 토큰 전송 질문입니다. 우분투에 parity로 이더리움 블록을 쌓고 개발중입니다. 동기화는 다 되었구요.   이더리움은 php 로 curl 보낼 수 있도록 설정한다음 외부 api 에서 curl 명령어를 보내서 처리결과를 받아오도... 9 0 1824
비폭력무저항
2019.01.08
1516 질문 이더리움 하드포크관련 질문입니다!     안녕하세요. 이더리움 하드포크 관련 콘스탄티노플 에 대해서 궁금해서 질문 올립니다.   원래 하드포크를 하게되면 거래소에서 입출금 기록을 막고 하드포크를 진행하게 되어있는걸로 알고 ... 3 0 1392
블록체인배우고싶어요
2019.01.07
1515 질문 서버에 파이썬 올리기 안녕하세요 땡글에서 여러 고수님들 덕분에 매매프로그램은 완성하였습니다. 컴퓨터를 24시간 돌릴수가 없어 질문을 드리다가 서버(구글, 네이버,아마존)를 이용하는 방법이 있다고 알게되었습니... 18 0 2839
jins81c
2019.01.07
1514 질문 암호화폐 하나 만들었습니다. 나비코인이라 이름 붙였는데.... PoW에 UTXO, Peer to Peer 로 설명하면 다들 이해하시죠? 블록 만드는 시간은 길어도 1분쯤이면 되도록 했습니다.. go 언어로 제작했구요... 공개 블록체인 소스... 13 0 2895
Xmessiah
2019.01.07
1513 질문 geth client 맥에서 mining 오래걸리는현상     제 개발환경은 맥인데 geth client에서 miner.start() 함수로 마이닝할시에 첫블록이 거의 30분이지나서야 발견되고 그다음부턴 빨리빨리 진행되는데 이게 너무 느려서 공부하기가힘드네요  ... 0 499
chaindata
2019.01.06
1512 질문 비트멕스 취소주문 오류건...ㅠ.ㅠ 도와주세요. 안녕하세요   개발환경 : 비트멕스, ccxt, 파이썬   아래와 같이 order주문 취소를 넣었는데  자꾸 에러가 나네요... 몇군데 구글링한 내용대로 돌려도 아래와 같이 에러가 납니다...   해결 방... 2 0 2137
jins81c
2019.01.06
1511 질문 비트코인그린에서 마이닝하는쪽 질문입니다   비트코인 그린 소스에서  setgenerate true 를 해서 마이닝을 하니 아래와 같이 에러가 뜹니다   2019-01-04 10:49:37 CreateNewBlock(): total size 1000 2019-01-04 10:49:37 ERROR: CheckTr... 0 539
단테테테라매
2019.01.04
1510 개발 파이썬으로 만든 빗썸 json 가격 가져와서 파일로 저장하기 입니다. 제가 살면서 파이썬은 처음해보는 것이라 좀 부실합니다.   파이썬으로 빗썸 접속해서 BTC 가격을 가져오는 소스입니다.   리턴이 json이라 그나마 쉽습니다.   -------------------------------... 1 5 2066
쌍둥아빠
2019.01.04
1509 질문 이더리움 코인 보내기 질문입니다. 진짜.. 이더리움 너무 어렵네요. 믿을데라고는 여기 고수님들밖에 없습니다. ㅠ.ㅠ   현재 A 주소에 0.015 이더가 있습니다. 이 중 0.01 이더를 다른 주소로 보내고 싶습니다.   보내기 시도해보... 5 0 922
비폭력무저항
2019.01.04
1508 질문 24시간 코드 돌릴 수 있는 방법이 뭐가 있을까요? 파이썬으로 거래프로그램 하나 짰는데... 코인은 24시간이라..24시간 돌려야하는데 그 코드 하나 돌리기위해 24시간 컴터 돌리기도 머하고... 주식매매프로그램은 9~3시30분 정도만 켜놨으면 되... 28 0 7509
jins81c
2019.01.04
1507 질문 컴공지식 전무한상태에서 솔리디티 공부하기전에 기초지식 뭘해야하나요?     우선 아래에 블록체인 커리큘럼 관련 글 올린사람이고 금마님이 답을 잘해주셔서 감사드립니다. 그런데 아직도 정리가 안되서 질문드립니다. 파이썬 같은경우에 파이썬을 공부하다가 파싱 같... 8 0 1159
5년존버
2019.01.03
1506 질문 이더리움 토큰 질문이요~           안녕하세요 이더리움 공부중입니다. 우분투에서 공부를하고있는데, 메타마스크에선 토큰추가하는방법을찾아보니 쉽게설명이되어있어서 금방했는데요, 우분투에서는 토큰을추가 할 수 ... 0 530
피로
2019.01.03
1505 개발 비트맥스 bitmex 에러 - this request has expired - expires is in the past   비트맥스 api 를 수행하는데 제 PC에서는 잘 돌아가는 데 다른 PC에서 하면 다음과 같은 에러가 납니다.   this request has expired - expires is in the past   구글 검색하니 비트맥스 서버... 2 0 1229
부자아들
2019.01.03
1504 개발 08 블록과 블록체인 국내 대기업 L* 에서 교육한 블록체인 교육 실강입니다.   https://www.youtube.com/watch?v=VZEhR6QB78k                   ------------------------------------- 꼬리말 * 게시글 내용 삭제... 2 2 560
쌍둥아빠
2019.01.03
1503 질문 블록체인 제대로 배우고싶은데 커리큘럼 질문드립니다.       안녕하세요 전 24살 군필이구요. 컴공 지식은 없습니다. 첨에는 가상화폐만 관심있다가 블록체인 기술 제대로 배우고싶어서 질문드립니다.  우선 옛날에 스팀잇 통해서 조금씩보고 지금도 ... 8 0 1632
5년존버
2019.01.03
1502 질문 이더리움 송금에대한 질문드립니다 .     안녕하세요 이더리움 연구중입니다 .   다름이아니라 이더리움 메인넷에서 코인 받기 송금테스트중인데 받는건 정상적으로 잘받아집니다.   송금에서 내부 외부 테스트중입니다. 정상적으로 ... 4 0 656
피로
2019.01.02
1501 질문 메타마스크에서 소각 문의 드립니다.   코인개발 공부중인 초보입니다. 메타마스크와 연동해서 소각처리 해보고있는데요. 5개 수량이 있고 리믹스에서 2개 소각을 했는데요. 메타마스크에서 확인해보니 4.999999999999999998 이렇게 ... 2 0 638
심퉁이
2018.12.31
Board Pagination Prev 1 ... 12 13 14 15 16 17 18 19 20 21 ... 92 Next
/ 92
default debug random = 0 / type = READ / detected = READ