보안과 성능, 두 마리 토끼를 잡은 bijou64 인코딩 방식

by DD
5일 전
조회수 4

bijou64는 Subduction CRDT sync protocol을 위해 개발된 가변 길이 정수 인코딩(Varint) 방식으로, 보안과 성능을 동시에 개선함

LEB128과 비교하여 디코딩 속도(Decoding Speed)가 최대 10배 빠르며, 특히 큰 숫자에 대한 성능 우위가 뚜렷함

Canonicality(정규성)를 보장하여, 동일한 값을 여러 방식으로 인코딩하는 문제를 원천적으로 차단하여 보안을 강화함

Git과 같은 시스템에서 사용되는 유사한 인코딩 방식과의 비교를 통해, 다양한 정수 인코딩 방식에 대한 논의가 이루어짐

bijou64의 설계 원리: Canonicality 보장

bijou64는 각 정수를 유일한 방식으로 인코딩하는 Canonicality(정규성)를 설계 목표로 한다. LEB128과 달리, bijou64는 첫 번째 바이트(First Byte)를 통해 숫자 크기를 결정하고, 이후 바이트들을 Offset(오프셋) 방식으로 구성하여 중복 표현을 방지한다. 이러한 설계는 보안 취약점(Security Vulnerability)을 사전에 차단하고, 디코딩 과정에서 추가적인 검증 단계를 제거하여 성능을 향상시킨다.

LEB128과의 성능 비교: 벤치마크 결과

벤치마크 결과에 따르면, bijou64는 LEB128보다 전반적으로 빠른 디코딩 속도를 보인다. 특히, 큰 숫자를 처리할 때 최대 10배까지 성능 우위를 나타낸다. 이는 bijou64가 연속적인 비트 스캔(Continuation-bit Scanning)을 수행하지 않고, 첫 번째 바이트에서 메모리 할당(Memory Allocation) 크기를 결정하기 때문이다. 이러한 설계는 Branch Predictor(분기 예측)의 효율성을 높여 성능 향상에 기여한다.

Canonicality가 중요한 이유: 보안 측면

bijou64의 Canonicality(정규성) 보장은 보안 측면에서 중요한 의미를 갖는다. LEB128과 같은 방식은 동일한 값을 여러 방식으로 인코딩할 수 있어, Canonicalisation Attack(정규화 공격)에 취약하다. bijou64는 이러한 공격을 원천적으로 방지하여, Signature(서명)Content-addressing(콘텐츠 주소 지정)과 같은 보안 관련 프로토콜의 안전성을 강화한다. 특히, 데이터 미저장 정책(Zero-Retention Policy)을 사용하는 시스템에서 유용하다.

bijou64의 기술적 특징: Big-endian과 Byte-swap

bijou64는 Big-endian(빅 엔디안) 방식을 사용하여 데이터를 저장하며, 이는 현대 CPU의 Byte-swap(바이트 스왑) 명령어를 활용하여 디코딩 속도를 높이는 데 기여한다. 또한, Tier Selection(계층 선택)을 위한 분기 예측이 안정적으로 이루어지도록 설계되어, 성능 일관성을 확보한다. 이러한 특징들은 bijou64가 LEB128보다 빠른 디코딩 속도를 제공하는 주요 요인으로 작용한다.

bijou64: A variable-length integer encoding