암호를 건 ZIP 파일에서 문서 내용은 열리지 않아도 파일 이름은 보일 수 있다. DNTNEWS가 개인정보 없는 합성 문서 두 개를 AES-256 ZIP으로 압축한 뒤 암호 없이 목록을 조회하자 ‘DEMO_contract_2026.txt’와 ‘DEMO_budget_3000000.txt’가 그대로 나왔다. 내용 읽기는 암호를 요구했다.
같은 문서를 7Z로 만들었을 때도 파일명 암호화를 끄면 목록이 보였다. 파일명 암호화를 켠 7Z는 목록 조회 단계부터 암호를 요구했다. ‘암호를 넣었다’는 사실에 더해 어떤 정보까지 보호하도록 만들었는지 봐야 하는 이유다.
같은 문서 두 개, 세 종류의 압축 파일
10월 24일 Python 라이브러리 pyzipper 0.4.0과 py7zr 1.1.4로 실험 파일을 만들었다. 문서에는 합성 시험문이라는 문구와 가상 파일명만 넣었다. 실제 계약서·예산 자료나 개인 파일을 사용하지 않았다.
| 만든 압축 파일 | 암호 없는 목록 조회 |
|---|---|
| AES-256 ZIP, 501바이트 | 파일명 2개 표시 |
| 7Z, 파일명 암호화 끔, 320바이트 | 파일명 2개 표시 |
| 7Z, 파일명 암호화 켬, 378바이트 | 암호 요구(PasswordRequired) |
ZIP 목록은 Python 표준 zipfile로 읽고, 내용은 pyzipper로 다시 확인했다. 암호를 생략하거나 틀린 암호를 넣으면 내용을 읽지 못했고, 정답 암호로는 두 원문과 같은 바이트가 복원됐다. 두 7Z 파일도 정답 암호로 풀어 원문 두 개가 같은지 비교했다. 파일 크기 차이는 이번 작은 합성 문서의 결과이며 압축 성능 순위로 일반화할 수 없다.

실험용 압축 파일·재현 코드 ZIP에는 세 파일과 설명서를 넣었다. 데모 암호는 DNTNEWS-DEMO-20261024다. 누구나 확인하도록 공개한 시험값이므로 실제 문서의 비밀번호 예시로 쓰지 말아야 한다. 이번 실험은 암호 강도를 공격하거나 Windows·반디집의 실제 화면 호환성을 시험한 결과가 아니다.
AES-256이라는 표시는 내용 암호화의 강도를 말한다
WinZip 암호화 안내는 압축 안의 파일 내용과 이름·날짜·크기 등 디렉터리 정보를 구분한다. 강한 암호화 방식이어도 파일명 같은 정보가 디렉터리에 남으면 이름에 적힌 거래처, 문서 종류나 금액이 드러날 수 있다. 이번 ZIP도 AES-256을 적용했지만 파일명 두 개는 조회됐다.
반디집 파일명 암호화 안내는 이름까지 숨기려면 7Z 형식을 선택하도록 안내한다. 프로그램과 버전에 따라 7Z를 만들 때 관련 옵션이 자동으로 켜지거나 ‘파일명 암호화’ 선택 항목으로 표시될 수 있다. 7Z 확장자만 보고 이름까지 보호됐다고 판단하지 말고 실제 생성 설정과 결과를 확인해야 한다.
이 기사의 ZIP 결과는 위 방식으로 만든 파일과 일반적인 WinZip·반디집 안내 범위다. ZIP이라는 확장자를 쓰는 모든 구현·특수 암호화 확장 기능을 전부 시험한 것은 아니다. 받는 쪽이 지원하는 형식과 조직에서 승인한 전송 방법도 함께 맞춰야 한다.
보내기 전에는 바깥 파일명도 읽어본다
7Z 내부 이름을 암호화해도 첨부파일 자체의 이름은 수신자에게 보인다. 바깥 이름을 ‘거래처명_계약금액.7z’로 적으면 내부 목록을 숨겨도 그 정보는 그대로 전해진다. 안과 밖의 파일명에서 불필요한 민감정보를 빼고, 실제 암호를 메시지와 같은 경로로 함께 전달하지 않도록 전송 정책을 확인한다.
마지막 확인은 생성한 파일의 사본으로 한다. 암호가 자동 입력되거나 저장되지 않은 환경에서 목록을 열어보고, 암호를 입력한 뒤 원문이 제대로 복원되는지 확인한다. 목록이 보였다는 사실과 내용을 읽을 수 있다는 사실은 별도로 기록해야 한다. 새 압축 파일을 만들었다고 원본 문서나 이전에 보낸 사본이 없어지는 것도 아니다.
문서 내용을 가리는 작업이라면 검은 도형을 얹은 PDF의 문자열 추출 실험도 참고할 만하다. 사진을 함께 전달할 때는 GPS만 지운 JPEG에 남은 촬영일·기기명처럼 파일에 남는 정보의 범위를 따로 확인해야 한다.

