프라이버시 정책을 코드에 결합한 스칼라 프레임워크 하프라크라테스
초록
하프라크라테스는 스칼라 컴파일러 플러그인과 프레임워크를 결합해 데이터 생성 시 정책을 메모리 구조에 결합한다. 원시 데이터는 애플리케이션 내부에 존재하지 않으며, 정책 검사는 선언 지점에서 중앙 집중식으로 수행된다. 데이터는 정책 막을 통과해 자유롭게 흐르지만, 접근·변경·탈라벨링·외부 전송 시 정책이 강제된다. 이를 통해 정책 변경이 단일 함수 수정만으로 가능하고, 다중 애플리케이션 간 데이터 정의를 공유할 때도 호환성을 유지한다.
상세 분석
하프라크라테스는 기존의 정적 정보 흐름 제어(IFC)와 동적 라벨링 접근법의 한계를 보완하기 위해 “oblivious membrane”(망각형 막)이라는 개념을 도입한다. 이 막은 정책이 적용된 타입을 원시 데이터와 완전히 분리시켜, 컴파일 타임에 원시 데이터가 애플리케이션 코드에 노출되지 않도록 한다. 구현 측면에서 플러그인은 15단계의 컴파일 파이프라인을 통해 정책이 선언된 생성자를 변형하고, 해당 타입의 모든 메서드를 정책 클래스에 복사한다. 복사된 메서드는 부작용 여부를 정적 분석하고, 부작용이 의심될 경우 정책 검사를 감싸는 조건문을 삽입한다. 이 과정에서 스칼라의 암시적 변환(implicit conversion)을 활용해 원시 타입 ↔ 정책 래퍼 간 자동 변환을 제공한다, 따라서 기존 라이브러리 호출이나 표준 API 사용 시에도 별도 래핑 코드가 필요하지 않다.
핵심 설계는 두 가지 목표를 만족한다. 첫째, 정책 중심의 중앙화이다. 정책 클래스는 Policy 트레이트를 구현하고 check 메서드에 탈라벨링 조건을 기술한다. 정책 클래스는 생성자에 enforce 키워드와 함께 믹스인되어, 해당 타입의 인스턴스가 생성될 때 자동으로 정책 보호 상태가 보장된다. 둘째, 투명한 사용성이다. 정책 래퍼는 원시 타입과 구조적으로 동등하도록 설계돼, 메서드 호출 시 원시 객체와 동일한 구문을 유지한다. 예를 들어 Int에 대한 정책 래퍼 `Policy
댓글 및 학술 토론
Loading comments...
의견 남기기