보안

귀하의 금융 데이터를 보호하는 방법

요약: Bank Statement Parser는 모든 데이터를 로컬에서 처리하고, 기본적으로 PII를 마스킹하며, XXE 공격에 대해 XML 파싱을 강화하고, Ollama를 통해 LLM을 로컬에서 실행하며, SHA-256 해시 잠금 종속성 및 CycloneDX SBOM과 함께 제공됩니다.

보안 중심 설계

Bank Statement Parser는 민감한 금융 데이터를 처리하기 위해 만들어졌습니다. 모든 설계 결정은 보안, 프라이버시, 감사 가능성을 최우선으로 합니다.

클라우드 종속성 제로

모든 처리는 런타임 내에서 로컬로 이루어집니다. 결정적 파서는 네트워크 호출을 하지 않습니다. 하이브리드 PDF 파이프라인은 로컬 LLM 추론을 위해 Ollama를 사용하며 클라우드 API로 데이터를 전송하지 않습니다. XML 파서는 아웃바운드 접근을 방지하기 위해 no_network=True, resolve_entities=False, load_dtd=False로 명시적으로 설정됩니다.

PII 마스킹

개인 식별 정보(이름, IBAN, 우편 주소)는 CLI 출력 및 스트리밍 모드에서 자동으로 마스킹됩니다. 기본적으로 활성화되어 있습니다.

XML 보안 (XXE 보호)

모든 XML 파싱은 강화된 설정의 lxml을 사용합니다.

ZIP 아카이브 보안

iter_secure_xml_entries()가 추출 전에 모든 ZIP 멤버의 유효성을 검사합니다.

경로 탐색 방지

입력 유효성 검사가 위험한 파일 경로를 차단합니다.

잔액 검증 (Golden Rule)

모든 PDF 추출은 다음 수식으로 검증됩니다: opening balance + credits − debits == closing balance. 결과는 VERIFIED, DISCREPANCY 또는 FAILED로 태그됩니다. 불일치는 --type review로 대화형 검토가 가능합니다.

결정적 출력

구조화된 형식(CAMT, PAIN.001, CSV, OFX, QFX, MT940)의 경우 동일한 입력 파일이 주어지면 파서는 매 실행마다 바이트 단위로 동일한 출력을 생성합니다. 무작위성, 모델 추론, 경험적 샘플링이 없습니다. 이것은 다음 항목에 필수적입니다:

공급망 보안

로컬에서 확인

python -m pytest                          # 718 tests, 100% branch coverage
python scripts/verify_locked_hashes.py    # SHA-256 hash verification
git log --show-signature -1               # Verify commit signature