Skip to main content
QUICK REVIEW

[논문 리뷰] Flint for Safer Smart Contracts

Franklin Schrans, Daniel Hails|arXiv (Cornell University)|2019. 04. 13.
Blockchain Technology Applications and Security참고 문헌 16인용 수 12
한 줄 요약

Flint는 이더리움에서 보안성과 검증 가능성을 갖춘 스마트 컨트랙트를 작성하기 위해 설계된 정적 타이핑을 지원하는 도메인 특화 프로그래밍 언어이다. 보호 블록(타입스테이트를 통한 접근 제어), 원자적 자산 연산, 오버플로우가 발생하지 않는 산술 연산, 기본값으로 불변성 등을 통해 재진입 공격, 정수 오버플로우, 자산 손실 등의 일반적인 취약점을 방지하며, 형식적 검증 지원과 컴파일러에 의한 정확성 보장을 제공한다.

ABSTRACT

The Ethereum blockchain platform supports the execution of decentralised applications or smart contracts. These typically hold and transfer digital currency to other parties on the platform; however, they have been subject to numerous attacks due to the unintentional introduction of bugs. Over a billion dollars worth of currency has been stolen since its release in July 2015. As smart contracts cannot be updated after deployment, it is imperative that the programming language supports the development of robust contracts. We propose Flint, a new statically-typed programming language specifically designed for writing robust smart contracts. Flint's features enforce the writing of safe and predictable code. To encourage good practices, we introduce protection blocks. Protection blocks restrict who can run code and when (using typestate) it can be executed. To prevent vulnerabilities relating to the unintentional loss of currency, Flint Asset traits provide safe atomic operations, ensuring the state of contracts is always consistent. Writes to state are restricted, simplifying reasoning about smart contracts.

연구 동기 및 목표

  • 2015년 이후 10억 달러 이상의 손실을 초래한 스마트 컨트랙트 취약성 문제를 해결하기 위해.
  • 보안이 떨어지는 스마트 컨트랙트를 작성하는 것이 본질적으로 자연스럽지 않거나 불가능하도록 하는 프로그래밍 언어를 설계하기 위해.
  • 접근 제어, 원자적 상태 업데이트, 안전한 산술과 같은 보안 패턴에 언어 수준에서의 최우선 지원을 제공하기 위해.
  • 배포 후 감사나 런타임 분석에 의존하는 것보다 안전성 중심의 개발 모델로 전환하기 위해.
  • 형식적 검증 및 도구 통합을 지원하여 개발자가 정확하고 예측 가능하며 유지보수가 쉬운 컨트랙트를 작성할 수 있도록 하기 위해.

제안 방법

  • 타입스테이트를 사용해 유효한 실행 순서를 모델링함으로써, 누가 함수를 호출할 수 있고 어떤 컨트랙트 상태에서 호출할 수 있는지 제어하는 보호 블록을 도입한다.
  • 이더리움 웨이(Wei)를 위한 일등급의 자산 타입을 정의하여 원자적 이전, 분할, 병합 연산을 보장함으로써 균형 불일치를 방지한다.
  • 기본적으로 정수 산술 연산이 오버플로우하지 않도록 하며, 오버플로우 동작이 필요한 경우에만 명시적인 순환 연산자를 제공한다.
  • 기본적으로 불변성과 비공개 접근 권한을 적용하여, 가변성은 명시적 옵트인을 통해만 가능하게 한다.
  • 무한 루프 취약성을 제거하기 위해 반복문을 유한한 for-in 구조로 제한한다.
  • 정적 타이핑을 통해 배포 이전에 타입 오류를 탐지하여 컴파일 타임에 정확성을 확보한다.

실험 결과

연구 질문

  • RQ1재진입 공격, 정수 오버플로우, 잘못된 상태 전환과 같은 일반적인 스마트 컨트랙트 취약점을 방지할 수 있는 도메인 특화 프로그래밍 언어를 설계할 수 있는가?
  • RQ2타입스테이트와 접근 제어를 스마트 컨트랙트 언어에 통합하여 올바른 실행 순서와 호출자 인증을 강제로 구현할 수 있는가?
  • RQ3원자적 자산 연산이 컨트랙트 잔고 회계의 일관성 문제를 어느 정도 제거할 수 있는가?
  • RQ4기본으로 불변성과 안전한 산술 연산이 솔리디티 같은 언어에서 존재하는 공격 벡터를 상당히 줄일 수 있는가?
  • RQ5실용적인 언어에 형식적 안전 보장을 통합할 경우 개발 생산성과 코드 정확성에 어떤 영향을 미치는가?

주요 결과

  • Flint는 타입스테이트 기반 접근 제어를 통해 재진입 공격을 방지하며, 민감한 연산이 유효한 컨트랙트 상태에서만 호출될 수 있도록 보장한다.
  • 일등급의 자산 타입 사용으로 모든 이전이 원자적이고 일관되게 유지되어, 잘못된 잔고 추적과 관련된 취약성을 제거한다.
  • Flint의 정수 산술 연산은 오버플로우하지 않으며, 오버플로우 발생 시 예외를 던지므로 암묵적인 데이터 손상 방지한다.
  • 언어의 기본 불변성과 비공개 접근 권한으로 인해 명시적인 선언 없이 가변 상태를 의도치 않게 도입하는 것이 불가능해지며, 공격 벡터가 감소한다.
  • 컴파일러는 모든 상태 변경이 제한되고 예측 가능하도록 강제 적용하여 컨트랙트 동작에 대한 추론을 단순화한다.
  • 성능 벤치마크 결과, 최적화 단계 없이도 Flint의 컴파일된 코드가 솔리디티와 유사한 성능을 보이며 실용성의 가능성을 입증한다.

더 나은 연구,지금 바로 시작하세요

논문 읽기부터 검토까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.