pip install provedex: 당신의 Python AI 에이전트를 위한 변조 방지 블랙박스
요약
Provedex는 Python AI 에이전트의 감사 로그 무결성을 보장하기 위한 오픈 소스 블랙박스 솔루션입니다. 모든 에이전트 작업을 암호학적으로 서명하고 체인 형태로 기록하여, 로그의 수정이나 삭제를 방지하고 누구나 오프라인에서 검증할 수 있게 합니다.
핵심 포인트
- 암호학적 서명과 체이닝을 통한 감사 로그 변조 방지
- Rust 코어 기반의 PyO3 바인딩으로 높은 신뢰성과 성능 제공
- 추가만 가능한(append-only) NDJSON 파일 형식 사용
- 공개 키만 있으면 누구나 오프라인에서 로그 무결성 검증 가능
당신의 AI 에이전트 감사 로그(audit log)는 당신이 제어하는 데이터베이스에 저장됩니다. 이는 당신이 로그를 수정할 수 있음을 의미합니다. 나중에 규제 기관, 감사인 또는 법원이 에이전트가 실제로 무엇을 했는지 물을 때, 모든 사람은 당신의 말만 믿어야 합니다.
Provedex는 이를 해결하기 위한 오픈 소스 솔루션입니다. pip install provedex를 통해 당신의 Python 백엔드에 블랙박스 기록 장치를 제공합니다. 모든 에이전트 작업은 발생하는 즉시 암호학적으로 서명(cryptographically signed)되고, 이전 작업과 체인(chained)으로 연결되며, 추가만 가능한(append-only) 파일에 기록됩니다. 공개 키(public key)를 가진 사람은 누구든 당신에게 다시 연락할 필요 없이 오프라인에서 전체 내용을 검증할 수 있습니다. 단 하나의 이벤트라도 수정하거나 삭제하면 체인이 눈에 띄게 깨지게 됩니다.
네이티브 SDK는 참조 CLI가 사용하는 것과 동일한 Rust 코어에 대한 PyO3 바인딩(binding)이므로, Python에서 서명한 원장(ledger)은 Rust 검증기(verifier)와 바이트 단위로 일치하여 검증됩니다. 재구현이 아닌, 동일한 기본 요소(primitive)를 사용합니다.
설치 (Install)
pip install provedex
Linux x86_64, Linux aarch64, 그리고 macOS arm64의 cpython 3.11+용으로 사전 빌드된 휠(wheels)이 제공됩니다. 설치를 위해 Rust 툴체인(toolchain)이 필요하지 않습니다. 에이전트를 실행하는 백엔드 서비스에 이를 추가하세요.
백엔드에 적용되는 방식 (How it fits your backend)
provedex는 실행하는 서비스가 아니라 임베드(embed)하는 라이브러리입니다.
당신의 백엔드 (에이전트 + 자동화) 몇 달 후의 감사인
pip install provedex (공개 키만 필요함)
session.record(event) ---> ledger.ndjson ---> provedex verify -> VALID / BROKEN
...
- 프로세스 내에서 서명(Sign in-process). 에이전트가 증명할 가치가 있는 작업을 수행하는 곳 어디에서든
session.record(...)를 호출하면 됩니다. 이벤트는 발생하는 즉시 서명되어 추가되며, 네트워크 홉(network hop)이 발생하지 않습니다. - 키(key)와 원장(ledger)은 백엔드 호스트에 존재합니다. 키는 시작 시 당신이 제어하는 경로에서 한 번 읽어옵니다. 원장은 추가만 가능한 NDJSON 파일입니다.
- 공개 키만 있으면 언제 어디서든, 누구든 나중에 검증할 수 있습니다. 이러한 분리가 핵심입니다. 운영자는 로그의 무결성(integrity)을 위해 신뢰받을 필요가 없습니다.
퀵스타트 (Quickstart)
이벤트는 원본 콘텐츠가 아닌 콘텐츠의 SHA-256 다이제스트(digests)를 운반합니다. 무엇을 해싱하고 무엇을 평문으로 유지할지는 당신의 결정입니다.
import hashlib
import os
...
이것이 통합의 전부입니다: 세션을 열고, 증명이 필요한 시점에 이벤트를 기록하면 끝입니다. 서명(signing)과 체이닝(chaining)은 자동으로 수행됩니다.
공개 키만 사용하여 오프라인에서 검증하기
# 공개 키를 가진 사람이라면 누구나 나중에 오프라인에서 이 원장(ledger)을 검증할 수 있습니다.
report = provedex.verify_file(os.path.expanduser("~/.provedex/ledger.ndjson"))
assert report.ok
또는 동일한 파일에 대해 Rust CLI를 사용할 수도 있습니다:
provedex verify ~/.provedex/ledger.ndjson
두 방식 모두 하나의 정형 JSON (canonical-JSON) 인코더와 하나의 Ed25519 서명 스킴 (signature scheme)을 거치며, 두 방식 모두 바이트 수준의 테스트 벡터(test vectors)와 함께 사양(specs)으로 공개되어 있습니다. 이것이 Python으로 서명된 원장과 Rust 검증기가 바이트 단위까지 일치하는 이유입니다.
기록할 수 있는 7가지 항목
이벤트 스키마 (event schema)는 고정되어 있으며 가볍습니다. 일곱 가지 팩토리(factories)가 에이전트의 라이프사이클을 커버합니다:
| 팩토리 | 서명 내용 |
|---|---|
events.session_started(agent_id, model_id, session_id) | 세션 오픈 |
| ... |
고정된 스키마를 사용하는 것은 의도된 설계입니다. 어떤 언어로 작성된 검증기라도 어떤 형태의 데이터를 기대해야 하는지 정확히 알 수 있기 때문입니다.
네이티브 SDK vs 사이드카 (sidecar)
두 가지 통합 방식이 있으며, 제약 조건에 따라 선택하십시오:
- 네이티브 SDK (Native SDK) (본 포스트의 내용): 프로세스 내부(in-process)에서 동작하며, 서명에 1밀리초 미만이 소요되고 별도의 프로세스가 필요 없습니다. 에이전트를 실행하는 백엔드에 컴파일된 휠(wheel)을 추가할 수 있는 환경에서 가장 적합합니다.
- 사이드카 (Sidecar) (
provedex-agent): 이벤트를 POST로 전송하는 로컬호스트(localhost) HTTP 데몬입니다. 런타임에 네이티브 확장(native extension)을 추가하고 싶지 않거나 Python 환경이 아닌 경우에 가장 적합합니다. 이것이 기본 통합 방식입니다.
솔직한 수치를 말씀드리자면, M4 Pro 기준으로 I/O가 없는 프로세스 내부 서명은 약 11 $\mu$s가 소요됩니다. 모든 이벤트에 대해 추가(append) 및 fsync를 수행하는 전체 사이클은 약 3.8 ms이며, 모든 쓰기 작업에 fsync를 수행할 경우 초당 약 261개의 이벤트 처리가 가능합니다. 더 높은 처리량(throughput)이 필요하고 더 넓은 충돌 창(crash window)을 허용할 수 있다면 플러시(flush)를 배치(batch) 처리하십시오.
이것이 아닌 것들
관측성(observability)이 아니며, 개인정보(PII) 삭제 도구도 아니고, 컴플라이언스 대시보드도 아니며, 블록체인도 아닙니다. 이것은 단 하나의 원시 기능(primitive)입니다: 당신의 에이전트가 무엇을 했는지에 대한, 서명되고 체이닝되었으며, 제3자가 검증 가능한 증거(evidence)입니다. 코어 라이브러리는 영구적으로 Apache-2.0 라이선스를 따릅니다.
저장소(Repo), 사양(specs), 그리고 아키텍처 결정 기록(architecture decision records): https://github.com/provedex/provedex
만약 규제 기관이나 법원이 언젠가 "무엇을 했는지 증명하라"고 요구할 수 있는 곳 어디에서든 AI 에이전트(AI agents)를 실행한다면, 한 세션(session)에서 테스트해 보고 검증기(verifier)를 실행해 보세요. 피드백과 이슈 제기를 환영합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기