SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
2018년 11월 30일
Smart Contract 보안&
데이터 분산 저장
타임게이트 SW 연구소
Remind
 address
- Account, Contract의 주소를 저장할 때 사용. (20 byte)
- Ether를 보내기 위한 자체 메서드 제공 transfer, send
 fallback
- contract의 이름없는 함수(입력, 리턴 signature가 없음)
- contract address에 Ether가 송금되면 호출
 require(statement)
- 입력 값이 false이면 예외를 던진다.
 revert()
- 실행을 취소하고 상태를 거래 신청 이전 상태로 되돌린다.
 ERC20(Ethereum Request for Comments)
- Ethereum 네트워크에 대한 개선제안을 위한 공식 프로토콜(’20’은 고유한 제안 ID 번호)
- Ethereum 상에서 발행되는 토큰 표준
Smart Contract를 이용한 해킹
재진입성의 약점을 노린 공격
- DAO 크래킹
정수 오버플로우를 이용한 공격
- SmartMesh 토큰 무한 생성
예기치않은 거래 되돌림
거래 순서 의존 문제를 이용한 공격
타임스탬프 의존 문제를 이용한 공격
DAO
DAO(Decentralized Autonomous Organization)란 탈중앙화된 자율조직
자율적인 방식의 벤처캐피탈 펀드 운용을 이더리움 플랫폼 상에서 가능하게 하려는
프로젝트
프로젝트에 참여할 수 있는 권한으로서 다오토큰(DAO Token) 투자를 모집
다오의 ICO에 참여한 투자자는 11,000명이 넘었으며 발행된 이더의 약 15%(당시
금액 1.5억달러) 가량을 모금 (2016년 4월)
투자를 받고자 하는 사람은 스마트 계약 코드로 투자 신청을 하면 투자자들이 그
코드를 확인하고 투자해 조건 성사 시 계약은 자동적으로 실행되는 구조
투자자들은 다오 토큰을 사고 팔 수 있었고 다시 이더로 바꾸는 반환 요청
가능
DAO Cracking
반환 요청 시 즉시 처리되어 잔액이 감소하는 것이 아니라 일정시간이 지난 후에야
처리되는 결함을 이용한 해킹
투자 반환 요청 후 자신의 잔고에서 반환 요청이 처리되기 전에 반복해서 반환 요
청을 하는 반복 공격(Recursive attack)
다오가 모집한 전체 자금 중 3분의 1에 달하는 360만 ether(약 5천만 달러)
탈취
재진입성 공격
 정상 거래
1 Ether 입금 잔액 추가
출금 요청 출금액 확인
송 금
금액 차감
1Ether 입금
 자신의 Account Address를
이용하여 1Ether를 Contract에
송금
 입금 요청한 Address를 Key로
1Ether가 계좌에 입금
금액 수령
잔액 > 요청 금액 ?
A
1Ether 출금
 자신의 Account Address를
이용하여 Contract에 출금요청
 출금액이 충분한지 확인한 후
요청한 계좌로 1 Ether를 송금
 송금이 완료되면 저장된 계좌의
액수를 차감
재진입성 공격
 정상 거래 1Ether 입금
 Contract Address를 이용하여
1Ether를 Contract에 송금
 입금 요청한 Address를 Key로
1Ether가 계좌에 입금
1Ether 출금
 Contract Address를 이용하여
Contract에 출금요청
 출금액이 충분한지 확인한 후
요청한 계좌로 1Ether를 송금
1 Ether 입금 1 Ether 송금 잔액 추가
출금 요청 출금 요청 출금액 확인
출 금
금액 차감
A’
A
재진입성 공격
 정상 거래 1Ether 입금
 Contract Address를 이용하여
1Ether를 Contract에 송금
 입금 요청한 Address를 Key로
1Ether가 계좌에 입금
1Ether 출금
 Contract Address를 이용하여
Contract에 출금요청
 출금액이 충분한지 확인한 후
요청한 계좌로 1Ether를 송금
 Contract에서 입금을 시도하나
접근한 Contract의 FallBack 호출
 FallBack 함수에서 다시 출금요청
1 Ether 입금 1 Ether 송금 잔액 추가
출금 요청 출금 요청 출금액 확인
출 금
금액 차감
A’
A
Fallback
재진입성 공격
 정상 거래 무한 출금 요청(Recursion)
 금액이 차감되지 않았기때문에
똑같은 금액으로 무한번 출금
요청
 가스가 모두 소진되면 재귀 멈춤
1 Ether 입금 1 Ether 송금 잔액 추가
출금 요청 출금 요청 출금액 확인
출 금
금액 차감
A’
A
Fallback
Gas Limit에 도달하거나 공격
대상의 소지 금액이 모두 소진
될 때까지 반복
재진입성 공격
 공격코드 예제 VulnerableFundraiser
 Address를 키값으로 입금한
금액을 mapping하여 저장하는
Contract
재진입성 공격
 공격코드 예제 VulnerableFundraiser
 VulnerableFundraiser를 공격할
Wallet
 사용자는 현재의 Contract Address
를 통해 공격할 Contract에 입금
출금을 실행
 Fundraiser에서 입금할 함수를
실행할 때 받는 대상이 Account
Address가 아니기 때문에 Wallet의
Fallback 함수가 호출
재진입성 공격
 Solution 실행순서 변경
 금액이 전송되기 이전에 토큰의
소유량을 차감한다.
Transfer() 사용
 GasLimit 2300을 기본으로 설정
하며 Ether 전송이 이상이 발생하면
Exception 발생
Contract Address 접근 차단
 접근 Address의 사이즈 체크를
통해 차단
SmartMesh
 이더리움 기반의 라이트닝 네트워크와 협력하여 해당 네트워크 노드를 PC 포트
에서 모바일 포트로 이동시켜서 이동식 모바일, 웨어러블, 차량용 장비들과 P2P
방식으로 연결하는 IoT 원천의 프로토콜
 블루투스 메시 네트워킹을 이용하여 offline 상태에서도 블록체인 서비스를 제공
 Token을 이용하여 Mesh Network 프로토콜과 Micropayment를 구현
SMT Token(ERC20) Haking
 SMT Token은 표준 ERC20을 따라서 만들어진 Token
 상속 받은 ERC20의 함수를 이용하지 않고 개별 기능을 구현함
이더가 없는 사용자가 다른 제3자를 이용해 SMT토큰을 수수료로 내고 토큰을
보낼 수 있는것이 가능케 하는 기능을 구현
SMT Token(ERC20) Haking
 취약성 공격 Transaction
SMT Token(ERC20) Haking
 공격방식 transferProxy 입력 인자
 3번째([2]) 인자로 보낼 토큰
8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
을 입력 이를 2진수로 환산하면
100011111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111
1111111111111111
 4번째([3]) 인자로 수수료
700000000000000000000000000000000000000000
0000000000000000000001을 입력.
이를 2진수로 환산하면
111000000000000000000000000000000000000000
000000000000000000000000000000000000000000
000000000000000000000000000000000000000000
000000000000000000000000000000000000000000
000000000000000000000000000000000000000000
000000000000000000000000000000000000000000
001
SMT Token(ERC20) Haking
 공격방식  3번째와 4번째 인자를 더하게되면
uint의 상한값인 (2²⁵⁶ - 1)을 넘어간다.
정수 오버플로우
 정상거래
10 Token 입금 잔액 추가
송금요청 Tx 발생 잔액확인
송금액 : 5 Token
수수료 : 1Token
수수료 송금
희망금액 송금 5 Token 수령
1 Token 수령
A BC
정수 오버플로우
 비정상거래
10 Token 입금 잔액 추가
Tx 발생 잔액확인
송금액 :
1157920892373161954235709
8500868790785326998466564
0564039457584007913129639
935 Token
수수료 : 2 Token
발송인 : E
수취인 : E
수수료 송금
희망금액 송금Token 수령
2 Token 수령
1 < 10
115792089237316195
423570985008687907853
26998466564056403945758
4007913129639935 Token 송금
오버플로우
A A’
정수 오버플로우
 비정상거래
10 Token 입금 잔액 추가
Tx 발생 잔액확인
송금액 :
1157920892373161954235709
8500868790785326998466564
0564039457584007913129639
935 Token
수수료 : 2 Token
발송인 : E
수취인 : E
수수료 송금
희망금액 송금 Token 수령
2 Token 수령
1 < 10
115792089237316195
423570985008687907853
26998466564056403945758
4007913129639935 Token 송금
오버플로우
A C B
재진입성 공격
 Solution Overflow 감지
 금액이 전송되기 이전에 토큰의
소유량을 차감한다
토큰 총량 비교
 발행된 토큰 총량을 설정하고
거래 요청이 된 토큰량과 비교
정수 오버플로우 SmartMesh ERC20 Hack
 공격방식 Overflow 감지
 uint256 overflow의 취약성을
드러낸 함수
 토큰을 보낸 사람과 받는 사람은
동일한 account이고 수수료를
받으며 함수를 발생시킨 account는
동일인의 또 다른 account다.
예기치 않은 거래 되돌림
 정상거래
경매요청
경매금액 : 1 ether
경매금액
비교
Current Leader : address(0)
Highes Bid : 0 ether
Leader 설정
B
예기치 않은 거래 되돌림
 정상거래
경매요청
경매금액 : 2 ether
경매금액
비교
Current Leader : address(A)
Highes Bid : 1 ether
Leader 설정
경매요청
경매금액
비교
B
예기치 않은 거래 되돌림
 정상거래
경매요청
경매금액
비교
Current Leader : address(B)
Highes Bid : 2 ether
Leader 설정
경매요청
경매금액
비교
금액 반환
Leader 설정
반환 금액
수령
A B
예기치 않은 거래 되돌림
 비정상거래
경매신청
Current Leader : address(A’)
Highest Bid : 1 ether
경매신청
경매요청
Leader 설정Value : 1 ether
Value : 1 ether
경매금액 비교
경매금액 비교
금액 반환Revert()
Function ()
payable
A BA’
거래 순서 / 타임스탬프 의존 문제
 거래 순서 조작
 선착순으로 Coin을 지급하는 Contract
취지는 Transaction을 빨리 발생 시키는 사람이 Coin을 수령해야 하지만 Gas의
양을 통해서 거래 우선 순위를 조작할 수 있다.
 타임스탬프 의존 문제
 특정 시간에 Coin을 지급하는 Contract
Transaction이 블록에 실리는 시간이 Transaction이 처리된 시간이다. 그런데
블록이 생성되면 mining을 하고 있는 운영체제의 시간 값이 그대로 기록되기
때문에 miner가 조작할 수 있다.
예기치 않은 거래 되돌림
 공격코드 예제 Attacker
 Auction Contract를 공격할
Contract
 생성시 Deploy된 Auction의 주소를
설정한다.
 bid() 메소드를 사용할 시 생성시
설정한 Auction의 Contract의 bid()
를 호출한다.
 Auction Contract에서 반환할 때
사용하는 send 메시지를 무효화
시키기 위해 revert()를 호출
예기치 않은 거래 되돌림
 Solution 사용자 출금 인터페이스
 Fallback이 호출됨에 따라
거래가 되돌려지는 현상을
다른 인터페이스 상에서 이루어지도록
한다.
오픈제플린
 Solidity에서 안전한 스마트 계약을 개발할 수 있도록 지원하는
라이브러리
 ERC20 기반 토큰, ICO, 소유권 등을 개발할 때 필요한 템플릿 제공
오픈제플린
 Onward with Ethereum Smart Contract
제플린 솔루션(Zeppelin Solutions)에서 Smart Contract의 보안성을
높이기 위해 제시한 설계 지침
I. 계약 상태를 항상 파악하고 문제 발생을 숨기지 않는다.
II. 안전한 입출금 기능을 구현
III. 조건-영향 상호작용 패턴 구현
(1) 함수를 실행하기 전에 함수 실행 조건을 갖췄는지 확인
(2) 조건에 맞지 않으면 함수 실행을 하지 않는다
(3) 상태를 업데이트한다
(4) 상태를 업데이트할 수 없으면 함수 실행을 바로 중단하고 거래 이전
상태로 되돌린다.
(5) 다른 계약이나 사용자에게 메시지를 리턴
오픈제플린
IV. EVM 플랫폼의 한계 고려
ex) 255 이상 배열 처리, 콜 스택 호출 횟수 1024
V. 테스트 작성과 실행
VI. 버그 리포트와 긴급 정지 기능 구현
버그를 발견한 사용자에게 토큰 보상하는 지급 구조 마련
버그 발견 시 contract 코드 수정을 위해 유지 관리 모드 전환등의
정지 기능 마련
VII. 자산 한도 제한 기능 구현
VIII. 모듈 단위로 기능 구현
오픈제플린
 IPFS (InterPlanetary File System)는 중앙화된 서버 없이 모든 컴퓨팅
장치를 동일한 파일 시스템으로 연결하려고 하는 P2P 분산 파일 시스템
 기존 중앙 집권의 위기기반 주소 지정이 아닌 컨텐츠 기반 주소 지정 방식
 분산 해시 테이블(DHT) 과 Git 버전 관리 시스템(Merkle DAG), BitTorrent 등
검증 된 인터넷 기술의 통합체
Distributed Hash Tables(DHT)
 네트워크에 참여한 노드들이 해시 테이블을 각자 관리하는 P2P 네트워크
Merkle Tree
 Merkle Tree는 데이터 구조 중 하나로, 하나의 부모에 두 아들이 존재하는
'binary tree’
 연쇄적으로 해시함수가 사용되기 때문에(아버지 해시 = hash(아들1 해시+아들
2 해시) ) 데이터가 조금이라도 위변조 될 경우, 가장 꼭대기에 존재하는 root
hash가 달라지기 때문에, 간단하게 데이터 무결성 보장
BitSwap
 Merkle Tree 보다 더 일반적인 자료구조
 Binary Tree는 아니지만 그래프이며, 아무 노드나 데이터를 보유 가능
 IPFS는 IPFS Object를 이용하여 유향 / 비순회 그래프 구현
 IPFS Object는 256kbyte의 상한 용량을 가지고 있다
 하나의 파일이 256kbyte 초과한다면 여러개의 IPFS로 그래프를 구성
I P F S Object
Data
Links
Name
Hash
Size
 Data : 256kB의 구조화 되지 않은 바이너리 데이터
 Link : 다른 객체의 주소를 가진 구조체 배열
 Name : Link의 이름
 Hash : 링크 된 IPFS 객체의 해시
 Size : 링크 된 IPFS 객체의 누적 크기
BitSwap
 BitTorrent는 P2P 파일 교환 프로토콜
 하나의 파일을 여러 조각으로 나누어, 각 노드끼리 자신이 갖고 있는 조각의 정
보를 알려주고 다른 노드들에게 자신이 필요한 조각을 요청
 하나의 노드 다른 노드들과 무수히 많은 세션을 생성하게 되며, 세션이 늘어남
에 따라 사용자의 다운로드 속도 증가
 BitSwap은 Bitorrent의 영감을 받은 프로토콜
 BitSwap Credit 시스템을 이용하여 물물교환 시스템(barter system)을 표방
File Coin
 파일을 오랜 시간 유지하고 좀 더 파일을 적극적으로 배포하여 네트워크에
항상 특정수 이상이 존재하게함으로써 파일의 보안성과 속도를 유지 하도록
인센티브 제공
 파일코인을 기반으로한 두가지 시장이 존재
I. 저장소 시장(Storage Market)
클라이언트는 저장소 마이너에게 토큰을 지불하고 파일을 저장
II. 검색 시장(Retrieval Market)
클라이언트는 검색 마이너에게 토큰을 지불하고 파일을 전달
Address
서울특별시 성동구 아차산로 17
11층 (성수동 1가, 서울숲엘타워)
우편번호 04789
Telephone
Tel : (02)575-0409
Fax: (02)6003-1987

Weitere ähnliche Inhalte

Was ist angesagt?

Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeAngel Boy
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)Angel Boy
 
ROP 輕鬆談
ROP 輕鬆談ROP 輕鬆談
ROP 輕鬆談hackstuff
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료TIMEGATE
 
Linux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend ProgramingLinux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend ProgramingAngel Boy
 
MacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) ExploitationMacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) ExploitationAngel Boy
 
Heap exploitation
Heap exploitationHeap exploitation
Heap exploitationAngel Boy
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)Kris Mok
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mclMITSUNARI Shigeo
 
MySQLからPostgreSQLへのマイグレーションのハマリ所
MySQLからPostgreSQLへのマイグレーションのハマリ所MySQLからPostgreSQLへのマイグレーションのハマリ所
MySQLからPostgreSQLへのマイグレーションのハマリ所Makoto Kaga
 
Fail2ban - the system security for green hand -on linux os
Fail2ban  - the system security  for green hand -on linux osFail2ban  - the system security  for green hand -on linux os
Fail2ban - the system security for green hand -on linux osSamina Fu (Shan Jung Fu)
 
Page Cache in Linux 2.6.pdf
Page Cache in Linux 2.6.pdfPage Cache in Linux 2.6.pdf
Page Cache in Linux 2.6.pdfycelgemici1
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersBGA Cyber Security
 
Dawid Weiss- Finite state automata in lucene
 Dawid Weiss- Finite state automata in lucene Dawid Weiss- Finite state automata in lucene
Dawid Weiss- Finite state automata in luceneLucidworks (Archived)
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesCharles Nutter
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことMasahiko Sawada
 
Q4.11: Using GCC Auto-Vectorizer
Q4.11: Using GCC Auto-VectorizerQ4.11: Using GCC Auto-Vectorizer
Q4.11: Using GCC Auto-VectorizerLinaro
 

Was ist angesagt? (20)

Linux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledgeLinux binary Exploitation - Basic knowledge
Linux binary Exploitation - Basic knowledge
 
Pwning in c++ (basic)
Pwning in c++ (basic)Pwning in c++ (basic)
Pwning in c++ (basic)
 
ROP 輕鬆談
ROP 輕鬆談ROP 輕鬆談
ROP 輕鬆談
 
하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료하이퍼레저 패브릭 실습자료
하이퍼레저 패브릭 실습자료
 
Linux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend ProgramingLinux Binary Exploitation - Return-oritend Programing
Linux Binary Exploitation - Return-oritend Programing
 
MacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) ExploitationMacOS memory allocator (libmalloc) Exploitation
MacOS memory allocator (libmalloc) Exploitation
 
Heap exploitation
Heap exploitationHeap exploitation
Heap exploitation
 
为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)为啥别读HotSpot VM的源码(2012-03-03)
为啥别读HotSpot VM的源码(2012-03-03)
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
MySQLからPostgreSQLへのマイグレーションのハマリ所
MySQLからPostgreSQLへのマイグレーションのハマリ所MySQLからPostgreSQLへのマイグレーションのハマリ所
MySQLからPostgreSQLへのマイグレーションのハマリ所
 
Fail2ban - the system security for green hand -on linux os
Fail2ban  - the system security  for green hand -on linux osFail2ban  - the system security  for green hand -on linux os
Fail2ban - the system security for green hand -on linux os
 
競プロでGo!
競プロでGo!競プロでGo!
競プロでGo!
 
Build Programming Language Runtime with LLVM
Build Programming Language Runtime with LLVMBuild Programming Language Runtime with LLVM
Build Programming Language Runtime with LLVM
 
Page Cache in Linux 2.6.pdf
Page Cache in Linux 2.6.pdfPage Cache in Linux 2.6.pdf
Page Cache in Linux 2.6.pdf
 
Developing MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack RoutersDeveloping MIPS Exploits to Hack Routers
Developing MIPS Exploits to Hack Routers
 
これがCassandra
これがCassandraこれがCassandra
これがCassandra
 
Dawid Weiss- Finite state automata in lucene
 Dawid Weiss- Finite state automata in lucene Dawid Weiss- Finite state automata in lucene
Dawid Weiss- Finite state automata in lucene
 
JavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for DummiesJavaOne 2012 - JVM JIT for Dummies
JavaOne 2012 - JVM JIT for Dummies
 
pg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいことpg_bigmを触り始めた人に伝えたいこと
pg_bigmを触り始めた人に伝えたいこと
 
Q4.11: Using GCC Auto-Vectorizer
Q4.11: Using GCC Auto-VectorizerQ4.11: Using GCC Auto-Vectorizer
Q4.11: Using GCC Auto-Vectorizer
 

Ähnlich wie Ethereum 스마트 컨트랙트 보안

Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2Soobok Jin
 
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)경록 박
 
Ethereum Basics Part1
Ethereum Basics Part1Ethereum Basics Part1
Ethereum Basics Part1Soobok Jin
 
Erc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysisErc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysisSoobok Jin
 
Blockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreBlockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreihpark92
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platformJay JH Park
 
Bitcoin Basics Part3
Bitcoin Basics Part3Bitcoin Basics Part3
Bitcoin Basics Part3Soobok Jin
 
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안상욱 송
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)Colin Chae
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움 Jay JH Park
 
Bitcoin satoshi kor_chewers
Bitcoin satoshi kor_chewersBitcoin satoshi kor_chewers
Bitcoin satoshi kor_chewersDis Btopia
 
비트코인과 블록체인 핵심개념정리
비트코인과 블록체인 핵심개념정리비트코인과 블록체인 핵심개념정리
비트코인과 블록체인 핵심개념정리HANSUK KIM
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍Jay JH Park
 
[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료
[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료
[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료Bitberry
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)제호 송
 
[코세나, kosena] NFT Minting제언서
[코세나, kosena] NFT Minting제언서[코세나, kosena] NFT Minting제언서
[코세나, kosena] NFT Minting제언서kosena
 
쉽게 풀어쓴 블록체인과 이더리움
쉽게 풀어쓴 블록체인과 이더리움쉽게 풀어쓴 블록체인과 이더리움
쉽게 풀어쓴 블록체인과 이더리움Dae Hyun Nam
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programmingihpark92
 
비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술Seong-Bok Lee
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Fermat Jade
 

Ähnlich wie Ethereum 스마트 컨트랙트 보안 (20)

Ethereum Basics Part 2
Ethereum Basics Part 2Ethereum Basics Part 2
Ethereum Basics Part 2
 
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
가상화폐와 블록체인 기술 Cryptocurrency & Blockchain Technology (KOR ver.)
 
Ethereum Basics Part1
Ethereum Basics Part1Ethereum Basics Part1
Ethereum Basics Part1
 
Erc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysisErc721 token & crypto kitties analysis
Erc721 token & crypto kitties analysis
 
Blockchain 2nd ethereum_core
Blockchain 2nd ethereum_coreBlockchain 2nd ethereum_core
Blockchain 2nd ethereum_core
 
세션1. block chain as a platform
세션1. block chain as a platform세션1. block chain as a platform
세션1. block chain as a platform
 
Bitcoin Basics Part3
Bitcoin Basics Part3Bitcoin Basics Part3
Bitcoin Basics Part3
 
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
이더리움 스마트계약 보안지침 가이드 2. 솔리디티 권고안
 
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
예제로 배우는 이더리움 결제구현 (거래소 지갑 구현 예시)
 
코어 이더리움
코어 이더리움 코어 이더리움
코어 이더리움
 
Bitcoin satoshi kor_chewers
Bitcoin satoshi kor_chewersBitcoin satoshi kor_chewers
Bitcoin satoshi kor_chewers
 
비트코인과 블록체인 핵심개념정리
비트코인과 블록체인 핵심개념정리비트코인과 블록체인 핵심개념정리
비트코인과 블록체인 핵심개념정리
 
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
세션4. 예제로 배우는 스마트 컨트랙트 프로그래밍
 
[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료
[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료
[비트베리파트너스데이] 비트베리 비즈니스 솔루션 소개 자료
 
Mastering ethereum(smart contract)
Mastering ethereum(smart contract)Mastering ethereum(smart contract)
Mastering ethereum(smart contract)
 
[코세나, kosena] NFT Minting제언서
[코세나, kosena] NFT Minting제언서[코세나, kosena] NFT Minting제언서
[코세나, kosena] NFT Minting제언서
 
쉽게 풀어쓴 블록체인과 이더리움
쉽게 풀어쓴 블록체인과 이더리움쉽게 풀어쓴 블록체인과 이더리움
쉽게 풀어쓴 블록체인과 이더리움
 
Blockchain 4th dapp programming
Blockchain 4th dapp programmingBlockchain 4th dapp programming
Blockchain 4th dapp programming
 
비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술비트코인으로 이해하는 블록체인 기술
비트코인으로 이해하는 블록체인 기술
 
Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)Blockchain Study(3) - 이더리움(Geth)
Blockchain Study(3) - 이더리움(Geth)
 

Mehr von TIMEGATE

UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동TIMEGATE
 
OpenSource License
OpenSource LicenseOpenSource License
OpenSource LicenseTIMEGATE
 
시계열분석의 이해
시계열분석의 이해시계열분석의 이해
시계열분석의 이해TIMEGATE
 
스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration스플렁크 Machine Learning Integration
스플렁크 Machine Learning IntegrationTIMEGATE
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요TIMEGATE
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detectionTIMEGATE
 
마이크로소프트 QnA Maker를 이용한 챗봇 만들기
마이크로소프트  QnA Maker를 이용한 챗봇 만들기마이크로소프트  QnA Maker를 이용한 챗봇 만들기
마이크로소프트 QnA Maker를 이용한 챗봇 만들기TIMEGATE
 
통계의 힘 (도서정리)
통계의 힘 (도서정리)통계의 힘 (도서정리)
통계의 힘 (도서정리)TIMEGATE
 

Mehr von TIMEGATE (8)

UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동UiPath와 Python ML(Machine Learning) 모델 연동
UiPath와 Python ML(Machine Learning) 모델 연동
 
OpenSource License
OpenSource LicenseOpenSource License
OpenSource License
 
시계열분석의 이해
시계열분석의 이해시계열분석의 이해
시계열분석의 이해
 
스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration스플렁크 Machine Learning Integration
스플렁크 Machine Learning Integration
 
하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요하이퍼레저 프로젝트 개요
하이퍼레저 프로젝트 개요
 
Azure ml studio_fraud_detection
Azure ml studio_fraud_detectionAzure ml studio_fraud_detection
Azure ml studio_fraud_detection
 
마이크로소프트 QnA Maker를 이용한 챗봇 만들기
마이크로소프트  QnA Maker를 이용한 챗봇 만들기마이크로소프트  QnA Maker를 이용한 챗봇 만들기
마이크로소프트 QnA Maker를 이용한 챗봇 만들기
 
통계의 힘 (도서정리)
통계의 힘 (도서정리)통계의 힘 (도서정리)
통계의 힘 (도서정리)
 

Ethereum 스마트 컨트랙트 보안

  • 1. 2018년 11월 30일 Smart Contract 보안& 데이터 분산 저장 타임게이트 SW 연구소
  • 2. Remind  address - Account, Contract의 주소를 저장할 때 사용. (20 byte) - Ether를 보내기 위한 자체 메서드 제공 transfer, send  fallback - contract의 이름없는 함수(입력, 리턴 signature가 없음) - contract address에 Ether가 송금되면 호출  require(statement) - 입력 값이 false이면 예외를 던진다.  revert() - 실행을 취소하고 상태를 거래 신청 이전 상태로 되돌린다.  ERC20(Ethereum Request for Comments) - Ethereum 네트워크에 대한 개선제안을 위한 공식 프로토콜(’20’은 고유한 제안 ID 번호) - Ethereum 상에서 발행되는 토큰 표준
  • 3. Smart Contract를 이용한 해킹 재진입성의 약점을 노린 공격 - DAO 크래킹 정수 오버플로우를 이용한 공격 - SmartMesh 토큰 무한 생성 예기치않은 거래 되돌림 거래 순서 의존 문제를 이용한 공격 타임스탬프 의존 문제를 이용한 공격
  • 4. DAO DAO(Decentralized Autonomous Organization)란 탈중앙화된 자율조직 자율적인 방식의 벤처캐피탈 펀드 운용을 이더리움 플랫폼 상에서 가능하게 하려는 프로젝트 프로젝트에 참여할 수 있는 권한으로서 다오토큰(DAO Token) 투자를 모집 다오의 ICO에 참여한 투자자는 11,000명이 넘었으며 발행된 이더의 약 15%(당시 금액 1.5억달러) 가량을 모금 (2016년 4월) 투자를 받고자 하는 사람은 스마트 계약 코드로 투자 신청을 하면 투자자들이 그 코드를 확인하고 투자해 조건 성사 시 계약은 자동적으로 실행되는 구조 투자자들은 다오 토큰을 사고 팔 수 있었고 다시 이더로 바꾸는 반환 요청 가능
  • 5. DAO Cracking 반환 요청 시 즉시 처리되어 잔액이 감소하는 것이 아니라 일정시간이 지난 후에야 처리되는 결함을 이용한 해킹 투자 반환 요청 후 자신의 잔고에서 반환 요청이 처리되기 전에 반복해서 반환 요 청을 하는 반복 공격(Recursive attack) 다오가 모집한 전체 자금 중 3분의 1에 달하는 360만 ether(약 5천만 달러) 탈취
  • 6. 재진입성 공격  정상 거래 1 Ether 입금 잔액 추가 출금 요청 출금액 확인 송 금 금액 차감 1Ether 입금  자신의 Account Address를 이용하여 1Ether를 Contract에 송금  입금 요청한 Address를 Key로 1Ether가 계좌에 입금 금액 수령 잔액 > 요청 금액 ? A 1Ether 출금  자신의 Account Address를 이용하여 Contract에 출금요청  출금액이 충분한지 확인한 후 요청한 계좌로 1 Ether를 송금  송금이 완료되면 저장된 계좌의 액수를 차감
  • 7. 재진입성 공격  정상 거래 1Ether 입금  Contract Address를 이용하여 1Ether를 Contract에 송금  입금 요청한 Address를 Key로 1Ether가 계좌에 입금 1Ether 출금  Contract Address를 이용하여 Contract에 출금요청  출금액이 충분한지 확인한 후 요청한 계좌로 1Ether를 송금 1 Ether 입금 1 Ether 송금 잔액 추가 출금 요청 출금 요청 출금액 확인 출 금 금액 차감 A’ A
  • 8. 재진입성 공격  정상 거래 1Ether 입금  Contract Address를 이용하여 1Ether를 Contract에 송금  입금 요청한 Address를 Key로 1Ether가 계좌에 입금 1Ether 출금  Contract Address를 이용하여 Contract에 출금요청  출금액이 충분한지 확인한 후 요청한 계좌로 1Ether를 송금  Contract에서 입금을 시도하나 접근한 Contract의 FallBack 호출  FallBack 함수에서 다시 출금요청 1 Ether 입금 1 Ether 송금 잔액 추가 출금 요청 출금 요청 출금액 확인 출 금 금액 차감 A’ A Fallback
  • 9. 재진입성 공격  정상 거래 무한 출금 요청(Recursion)  금액이 차감되지 않았기때문에 똑같은 금액으로 무한번 출금 요청  가스가 모두 소진되면 재귀 멈춤 1 Ether 입금 1 Ether 송금 잔액 추가 출금 요청 출금 요청 출금액 확인 출 금 금액 차감 A’ A Fallback Gas Limit에 도달하거나 공격 대상의 소지 금액이 모두 소진 될 때까지 반복
  • 10. 재진입성 공격  공격코드 예제 VulnerableFundraiser  Address를 키값으로 입금한 금액을 mapping하여 저장하는 Contract
  • 11. 재진입성 공격  공격코드 예제 VulnerableFundraiser  VulnerableFundraiser를 공격할 Wallet  사용자는 현재의 Contract Address 를 통해 공격할 Contract에 입금 출금을 실행  Fundraiser에서 입금할 함수를 실행할 때 받는 대상이 Account Address가 아니기 때문에 Wallet의 Fallback 함수가 호출
  • 12. 재진입성 공격  Solution 실행순서 변경  금액이 전송되기 이전에 토큰의 소유량을 차감한다. Transfer() 사용  GasLimit 2300을 기본으로 설정 하며 Ether 전송이 이상이 발생하면 Exception 발생 Contract Address 접근 차단  접근 Address의 사이즈 체크를 통해 차단
  • 13. SmartMesh  이더리움 기반의 라이트닝 네트워크와 협력하여 해당 네트워크 노드를 PC 포트 에서 모바일 포트로 이동시켜서 이동식 모바일, 웨어러블, 차량용 장비들과 P2P 방식으로 연결하는 IoT 원천의 프로토콜  블루투스 메시 네트워킹을 이용하여 offline 상태에서도 블록체인 서비스를 제공  Token을 이용하여 Mesh Network 프로토콜과 Micropayment를 구현
  • 14. SMT Token(ERC20) Haking  SMT Token은 표준 ERC20을 따라서 만들어진 Token  상속 받은 ERC20의 함수를 이용하지 않고 개별 기능을 구현함 이더가 없는 사용자가 다른 제3자를 이용해 SMT토큰을 수수료로 내고 토큰을 보낼 수 있는것이 가능케 하는 기능을 구현
  • 15. SMT Token(ERC20) Haking  취약성 공격 Transaction
  • 16. SMT Token(ERC20) Haking  공격방식 transferProxy 입력 인자  3번째([2]) 인자로 보낼 토큰 8fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 을 입력 이를 2진수로 환산하면 100011111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111111111111 1111111111111111  4번째([3]) 인자로 수수료 700000000000000000000000000000000000000000 0000000000000000000001을 입력. 이를 2진수로 환산하면 111000000000000000000000000000000000000000 000000000000000000000000000000000000000000 000000000000000000000000000000000000000000 000000000000000000000000000000000000000000 000000000000000000000000000000000000000000 000000000000000000000000000000000000000000 001
  • 17. SMT Token(ERC20) Haking  공격방식  3번째와 4번째 인자를 더하게되면 uint의 상한값인 (2²⁵⁶ - 1)을 넘어간다.
  • 18. 정수 오버플로우  정상거래 10 Token 입금 잔액 추가 송금요청 Tx 발생 잔액확인 송금액 : 5 Token 수수료 : 1Token 수수료 송금 희망금액 송금 5 Token 수령 1 Token 수령 A BC
  • 19. 정수 오버플로우  비정상거래 10 Token 입금 잔액 추가 Tx 발생 잔액확인 송금액 : 1157920892373161954235709 8500868790785326998466564 0564039457584007913129639 935 Token 수수료 : 2 Token 발송인 : E 수취인 : E 수수료 송금 희망금액 송금Token 수령 2 Token 수령 1 < 10 115792089237316195 423570985008687907853 26998466564056403945758 4007913129639935 Token 송금 오버플로우 A A’
  • 20. 정수 오버플로우  비정상거래 10 Token 입금 잔액 추가 Tx 발생 잔액확인 송금액 : 1157920892373161954235709 8500868790785326998466564 0564039457584007913129639 935 Token 수수료 : 2 Token 발송인 : E 수취인 : E 수수료 송금 희망금액 송금 Token 수령 2 Token 수령 1 < 10 115792089237316195 423570985008687907853 26998466564056403945758 4007913129639935 Token 송금 오버플로우 A C B
  • 21. 재진입성 공격  Solution Overflow 감지  금액이 전송되기 이전에 토큰의 소유량을 차감한다 토큰 총량 비교  발행된 토큰 총량을 설정하고 거래 요청이 된 토큰량과 비교
  • 22. 정수 오버플로우 SmartMesh ERC20 Hack  공격방식 Overflow 감지  uint256 overflow의 취약성을 드러낸 함수  토큰을 보낸 사람과 받는 사람은 동일한 account이고 수수료를 받으며 함수를 발생시킨 account는 동일인의 또 다른 account다.
  • 23. 예기치 않은 거래 되돌림  정상거래 경매요청 경매금액 : 1 ether 경매금액 비교 Current Leader : address(0) Highes Bid : 0 ether Leader 설정 B
  • 24. 예기치 않은 거래 되돌림  정상거래 경매요청 경매금액 : 2 ether 경매금액 비교 Current Leader : address(A) Highes Bid : 1 ether Leader 설정 경매요청 경매금액 비교 B
  • 25. 예기치 않은 거래 되돌림  정상거래 경매요청 경매금액 비교 Current Leader : address(B) Highes Bid : 2 ether Leader 설정 경매요청 경매금액 비교 금액 반환 Leader 설정 반환 금액 수령 A B
  • 26. 예기치 않은 거래 되돌림  비정상거래 경매신청 Current Leader : address(A’) Highest Bid : 1 ether 경매신청 경매요청 Leader 설정Value : 1 ether Value : 1 ether 경매금액 비교 경매금액 비교 금액 반환Revert() Function () payable A BA’
  • 27. 거래 순서 / 타임스탬프 의존 문제  거래 순서 조작  선착순으로 Coin을 지급하는 Contract 취지는 Transaction을 빨리 발생 시키는 사람이 Coin을 수령해야 하지만 Gas의 양을 통해서 거래 우선 순위를 조작할 수 있다.  타임스탬프 의존 문제  특정 시간에 Coin을 지급하는 Contract Transaction이 블록에 실리는 시간이 Transaction이 처리된 시간이다. 그런데 블록이 생성되면 mining을 하고 있는 운영체제의 시간 값이 그대로 기록되기 때문에 miner가 조작할 수 있다.
  • 28. 예기치 않은 거래 되돌림  공격코드 예제 Attacker  Auction Contract를 공격할 Contract  생성시 Deploy된 Auction의 주소를 설정한다.  bid() 메소드를 사용할 시 생성시 설정한 Auction의 Contract의 bid() 를 호출한다.  Auction Contract에서 반환할 때 사용하는 send 메시지를 무효화 시키기 위해 revert()를 호출
  • 29. 예기치 않은 거래 되돌림  Solution 사용자 출금 인터페이스  Fallback이 호출됨에 따라 거래가 되돌려지는 현상을 다른 인터페이스 상에서 이루어지도록 한다.
  • 30. 오픈제플린  Solidity에서 안전한 스마트 계약을 개발할 수 있도록 지원하는 라이브러리  ERC20 기반 토큰, ICO, 소유권 등을 개발할 때 필요한 템플릿 제공
  • 31. 오픈제플린  Onward with Ethereum Smart Contract 제플린 솔루션(Zeppelin Solutions)에서 Smart Contract의 보안성을 높이기 위해 제시한 설계 지침 I. 계약 상태를 항상 파악하고 문제 발생을 숨기지 않는다. II. 안전한 입출금 기능을 구현 III. 조건-영향 상호작용 패턴 구현 (1) 함수를 실행하기 전에 함수 실행 조건을 갖췄는지 확인 (2) 조건에 맞지 않으면 함수 실행을 하지 않는다 (3) 상태를 업데이트한다 (4) 상태를 업데이트할 수 없으면 함수 실행을 바로 중단하고 거래 이전 상태로 되돌린다. (5) 다른 계약이나 사용자에게 메시지를 리턴
  • 32. 오픈제플린 IV. EVM 플랫폼의 한계 고려 ex) 255 이상 배열 처리, 콜 스택 호출 횟수 1024 V. 테스트 작성과 실행 VI. 버그 리포트와 긴급 정지 기능 구현 버그를 발견한 사용자에게 토큰 보상하는 지급 구조 마련 버그 발견 시 contract 코드 수정을 위해 유지 관리 모드 전환등의 정지 기능 마련 VII. 자산 한도 제한 기능 구현 VIII. 모듈 단위로 기능 구현
  • 33. 오픈제플린  IPFS (InterPlanetary File System)는 중앙화된 서버 없이 모든 컴퓨팅 장치를 동일한 파일 시스템으로 연결하려고 하는 P2P 분산 파일 시스템  기존 중앙 집권의 위기기반 주소 지정이 아닌 컨텐츠 기반 주소 지정 방식  분산 해시 테이블(DHT) 과 Git 버전 관리 시스템(Merkle DAG), BitTorrent 등 검증 된 인터넷 기술의 통합체
  • 34. Distributed Hash Tables(DHT)  네트워크에 참여한 노드들이 해시 테이블을 각자 관리하는 P2P 네트워크
  • 35. Merkle Tree  Merkle Tree는 데이터 구조 중 하나로, 하나의 부모에 두 아들이 존재하는 'binary tree’  연쇄적으로 해시함수가 사용되기 때문에(아버지 해시 = hash(아들1 해시+아들 2 해시) ) 데이터가 조금이라도 위변조 될 경우, 가장 꼭대기에 존재하는 root hash가 달라지기 때문에, 간단하게 데이터 무결성 보장
  • 36. BitSwap  Merkle Tree 보다 더 일반적인 자료구조  Binary Tree는 아니지만 그래프이며, 아무 노드나 데이터를 보유 가능  IPFS는 IPFS Object를 이용하여 유향 / 비순회 그래프 구현  IPFS Object는 256kbyte의 상한 용량을 가지고 있다  하나의 파일이 256kbyte 초과한다면 여러개의 IPFS로 그래프를 구성 I P F S Object Data Links Name Hash Size  Data : 256kB의 구조화 되지 않은 바이너리 데이터  Link : 다른 객체의 주소를 가진 구조체 배열  Name : Link의 이름  Hash : 링크 된 IPFS 객체의 해시  Size : 링크 된 IPFS 객체의 누적 크기
  • 37. BitSwap  BitTorrent는 P2P 파일 교환 프로토콜  하나의 파일을 여러 조각으로 나누어, 각 노드끼리 자신이 갖고 있는 조각의 정 보를 알려주고 다른 노드들에게 자신이 필요한 조각을 요청  하나의 노드 다른 노드들과 무수히 많은 세션을 생성하게 되며, 세션이 늘어남 에 따라 사용자의 다운로드 속도 증가  BitSwap은 Bitorrent의 영감을 받은 프로토콜  BitSwap Credit 시스템을 이용하여 물물교환 시스템(barter system)을 표방
  • 38. File Coin  파일을 오랜 시간 유지하고 좀 더 파일을 적극적으로 배포하여 네트워크에 항상 특정수 이상이 존재하게함으로써 파일의 보안성과 속도를 유지 하도록 인센티브 제공  파일코인을 기반으로한 두가지 시장이 존재 I. 저장소 시장(Storage Market) 클라이언트는 저장소 마이너에게 토큰을 지불하고 파일을 저장 II. 검색 시장(Retrieval Market) 클라이언트는 검색 마이너에게 토큰을 지불하고 파일을 전달
  • 39. Address 서울특별시 성동구 아차산로 17 11층 (성수동 1가, 서울숲엘타워) 우편번호 04789 Telephone Tel : (02)575-0409 Fax: (02)6003-1987