데이터베이스의 순차적인 ID가 웹사이트 URL에 그대로 노출되는 것은 기업에게 민감한 정보 유출의 위험을 안겨줍니다. 예를 들어, '/orders/1042'와 같은 URL은 경쟁사에게 주문 수량이나 성장률을 추측할 수 있는 단서를 제공할 수 있습니다. 이러한 문제를 해결하기 위해 Hashids나 Sqids 같은 ID 난독화(obfuscation) 라이브러리가 사용되어 왔지만, 이들은 진정한 키(key) 기반 암호화가 아니어서 보안에 취약하다는 지적이 있었습니다. 최근 'Arxid'라는 새로운 라이브러리가 공개되며, 이 문제를 빠르고 안전하게 해결할 수 있는 대안을 제시했습니다.
Arxid는 40비트 도메인(약 1.1조 개의 ID)에 걸쳐 균형 잡힌 파이스텔 네트워크(Feistel network)와 ARX(Add-Rotate-XOR) 라운드 함수를 사용하는 키 기반 가역적 순열 알고리즘입니다. 이는 입력된 정수 ID를 7자리 Base62 코드로 변환하며, 동일한 키를 사용하면 원래 ID로 되돌릴 수 있습니다. 특히, HMAC-SHA256 해시 함수를 사용하는 유사한 구조의 파이스텔 네트워크보다 약 16배 빠른 성능을 자랑합니다. 이는 라운드 함수가 해시 호출 대신 순수 정수 연산으로 구성되어 있기 때문입니다. Arxid는 데이터베이스에 별도의 조회 테이블이나 추가 컬럼 없이 기존의 순차적 정수 ID를 그대로 사용하면서도, 외부에 노출되는 ID는 예측 불가능한 코드로 바꿀 수 있습니다.
이러한 Arxid의 등장은 개발자와 기업에게 여러 중요한 의미를 가집니다. 첫째, 데이터베이스의 기본 키(primary key)를 UUID(Universally Unique Identifier)로 변경할 필요 없이 보안을 강화할 수 있습니다. UUID는 무작위성이 강하지만, 저장 공간을 많이 차지하고 URL이 길어지는 단점이 있습니다. Arxid는 기존의 효율적인 정수 ID를 유지하면서도 UUID와 유사한 난독화 효과를 제공합니다. 둘째, 경쟁사나 악의적인 사용자가 URL을 통해 서비스의 데이터 규모나 성장률을 파악하는 것을 효과적으로 방지할 수 있습니다. 셋째, Rust와 TypeScript 레퍼런스 구현 및 표준화된 스펙(SPEC.md)과 테스트 벡터(vectors.json)를 제공하여, 다양한 언어에서 동일한 방식으로 구현하고 상호 운용성을 보장합니다. 이는 개발자들이 여러 플랫폼에서 일관된 ID 난독화 솔루션을 쉽게 도입할 수 있게 합니다.