본문으로 건너뛰기
피드

엡스타인 아카이브 PDF에서 base64를 CNN으로 복원한 삽질기 — OCR은 쓸모없었음

security 약 4분
vote
0
댓글
북마크

DOJ 엡스타인 아카이브 PDF 이미지에 남아있는 base64 텍스트를 복원해 원본 PDF를 추출한 기술적 여정. OCR, KMeans 클러스터링 모두 실패하고 CNN으로 해결했지만 최종 보스는 'l' vs '1' 구분이었음.

  • 1

    OCR은 base64 같은 무의미한 문자열에 부적합 — 단어 조합 휴리스틱이 방해

  • 2

    KMeans 클러스터링은 문자 경계 슬라이싱 불완전으로 실패

  • 3

    CNN이 2줄의 ground truth만으로 대부분 문자를 인식

  • 4

    최종 문제: 저자 자신이 'l'과 '1'을 잘못 라벨링한 학습 데이터

PDF에서 base64를 추출하라

  • 미국 법무부(DOJ)의 엡스타인 아카이브 PDF에서 검열되지 않은 평문 base64 데이터가 이미지 안에 남아있는 걸 발견한 저자가, 이걸 실제로 복원해서 원본 PDF 파일(DBC12)을 추출하는 데 성공함
  • 결과물 자체는 "대단한 폭로"는 아니고, 엡스타인과 동료들의 금융 유착 관계를 보여주는 문서 하나. 하지만 기술적 과정이 진짜 볼만함

OCR은 base64에 쓸모없음

  • OCR이 LLM처럼 환각(hallucination)은 안 하지만, 바이트 단위 정확도가 필요한 작업에는 완전히 부적합함. 인식한 문자를 "의미 있는 단어"로 조합하려는 휴리스틱이 base64 같은 무의미한 문자열에서는 오히려 독이 됨
  • Tesseract에 휴리스틱 끄는 옵션이 있다고는 하는데 실측 효과 없었음. Adobe Acrobat OCR은 그냥 끔찍함 (저자 원문 그대로)
  • 아이러니하게도 모든 OCR 엔진이 고정폭(monospace) 폰트보다 가변폭(proportional) 폰트를 더 잘 인식함. 대부분의 학습 데이터가 가변폭이라서

KMeans 클러스터링 시도 → 실패

  • base64 알파벳이 64개(+패딩 =)니까 k=64로 KMeans 클러스터링하면 되지 않을까? 이론적으로는 맞는데, 입력 이미지에서 문자를 정확하게 잘라내는 게 불가능에 가까웠음
  • 직접 Courier New로 시드 버킷을 만들어서 매칭하는 것도 시도. 하지만 모노스페이스 폰트인데도 해상도 때문에 인접 문자 픽셀이 침범하는 문제 발생. O에서 오른쪽 1픽셀만 잘리면 C가 되는 수준

CNN이 진짜 마법이었음

  • 결국 CNN(합성곱 신경망)을 학습시킴. base64 데이터 2줄만 수동 타이핑해서 ground truth로 쓰고 학습시켰더니, 대부분의 문자를 정확히 인식함
  • 페이지별 정렬 그리드 드리프트 문제는, "이 이미지들은 스캔이 아니라 디지털 렌더링이니까 첫 페이지 그리드를 그냥 재사용하면 된다"는 깨달음으로 해결

중요

> 최종 보스는 'l'(소문자 L) vs '1'(숫자 1) 구분. 차이가 2~3픽셀에 불과하고, ClearType 서브픽셀 힌팅이 OpenCV 렌더링과 달라서 CNN도 계속 혼동함. 결국 학습 데이터에서 저자 자신이 1과 l을 잘못 라벨링한 걸 발견하고 수정하니까 복원 성공

  • 같은 base64 내용이 다른 아카이브 문서(EFTA02154109)에도 있었는데, 미묘하게 다른 렌더링 덕분에 교차 검증이 가능했음
  • 코드는 GitHub에 공개했지만, fish 셸 스크립트 + parallel + WSL 의존성이 섞여있어서 이식성은... 저자도 인정하는 부분
  • 다음 목표는 더 많은 base64 첨부파일 추출이지만, 나머지는 전부 가변폭 폰트라서 이 방법을 그대로 쓸 수 없다는 게 함정

기술적 삽질기의 정석. OCR→데이터사이언스→딥러닝으로 점진적으로 접근하는 과정과, 결국 인간 에러가 마지막 장벽이었다는 반전이 교훈적임.

댓글

댓글

댓글을 불러오는 중...

security

한양대 에리카와 네이버클라우드, 클라우드·보안·AI 인재 키우는 산학협력 체결

한양대 에리카가 네이버클라우드와 첨단 분야 지역인재 양성과 글로벌 산학협력을 위한 업무협약을 맺었다. 협력 범위는 클라우드, 사이버보안, 블록체인, 개인정보보호, 인공지능(AI), 디지털 전환(DX) 교육·연구 기반 구축까지 포함된다.

security

악성 npm 패키지가 AI 개발도구의 지침 파일과 MCP까지 노리기 시작함

이스트시큐리티가 웹과 탈중앙화금융 개발자를 겨냥한 악성 npm 패키지 캠페인을 포착했어. 공격자는 유명 웹3 도구를 사칭하는 데서 그치지 않고, AI 에이전트가 읽는 프로젝트 지침 파일과 MCP 기반 외부 도구 호출까지 공격 경로로 삼으려 했어.

security

금융권, 앤트로픽 미토스가 찾은 오픈소스 취약점에 긴급 점검 들어감

앤트로픽의 AI 모델 클로드 미토스가 1000개 넘는 오픈소스에서 대량의 취약점 후보를 찾아냈고, 그중 일부가 실제 취약점으로 검증돼 공개됐어. 금융당국은 nginx, wolfSSL, FreeRDP, Ghost 같은 널리 쓰이는 구성요소를 중심으로 금융권에 긴급 자산 점검과 패치 적용을 권고했어.

security

애플이 양자 내성 암호화 검증 코드를 공개했다, 핵심은 수학적 증명

애플이 corecrypto 라이브러리의 포스트 양자 암호화 구현과 검증 코드를 GitHub에 공개했다. ML-KEM, ML-DSA 구현과 형식 검증 접근을 공개해 보안 연구자들이 직접 검토할 수 있게 했고, 이 기술은 25억 대 이상 활성 기기에서 쓰이는 암호화 기반과 연결된다.

security

라라벨 번역 패키지 태그가 통째로 바뀌었다, 개발자 비밀값 털리는 공급망 공격

전 세계 라라벨 개발자가 쓰는 Laravel-Lang 패키지가 공격을 받아 Git 태그가 악성 버전을 가리키도록 바뀌었다. 5월 22일 약 90분 동안 4개 저장소의 태그가 교체됐고, 감염된 패키지는 AWS 키, GitHub 토큰, Stripe 시크릿, 암호화폐 지갑 복구 구문, SSH 개인키 등을 노렸다.