C를 안전한 Rust로 컴파일하는 공식화된 방법

6 hours ago 2

  • C를 안전한 Rust로 컴파일하기

  • Rust 언어의 인기가 급증하고 있지만, 많은 중요한 코드베이스는 여전히 C로 작성되어 있으며, 이를 수작업으로 다시 작성하는 것은 현실적이지 않음. 따라서 C를 Rust로 자동 번역하는 것이 매력적인 대안으로 떠오름.

  • 기존의 여러 연구들은 Rust의 다양한 기능(예: unsafe)을 사용하여 C의 점점 더 많은 부분을 처리하는 방향으로 나아가고 있음. 그러나 자동화의 전망이 매력적이지만, unsafe에 의존하는 코드를 생성하면 Rust가 제공하는 메모리 안전성 보장이 무효화되며, 따라서 기존 코드베이스를 메모리 안전한 언어로 포팅하는 주요 이점이 사라짐.

  • 우리는 다른 경로를 탐색하여 C를 안전한 Rust로 번역하는 방법을 연구함. 즉, Rust의 타입 시스템을 준수하여 메모리 안전성을 쉽게 보장하는 코드를 생성하는 것임.

  • 우리의 연구는 여러 독창적인 기여를 포함함:

    • C의 일부를 안전한 Rust로 타입 지향 번역
    • Rust의 슬라이스와 분할 연산을 사용하여 C의 포인터 산술을 표현할 수 있는 "분할 트리" 기반의 새로운 정적 분석
    • 어떤 빌림이 가변적이어야 하는지를 정확히 추론하는 분석
    • Rust의 비소유 및 소유 할당 구분과 호환되는 C의 구조체 타입에 대한 컴파일 전략
  • 우리는 이 방법론을 기존의 형식적으로 검증된 C 코드베이스에 적용함: HACL* 암호화 라이브러리, EverParse의 이진 파서 및 직렬화기. 지원하는 C의 부분 집합이 두 응용 프로그램을 안전한 Rust로 번역하기에 충분함을 보여줌.

  • 평가 결과, Rust의 별칭 규율을 위반하는 몇몇 부분에 대해서는 자동화된 외과적 재작성으로 충분하며, 삽입된 몇몇 전략적 복사본이 성능에 미치는 영향은 미미함을 확인함.

  • 특히, HACL*에 대한 접근 방식의 적용 결과, 모든 현대 알고리즘을 구현한 80,000 라인의 검증된 암호화 라이브러리가 순수 Rust로 작성됨. 이는 최초의 사례임.

Read Entire Article