# 스테가노그래피란? 이미지 속에 데이터를 숨기는 원리

스테가노그래피(steganography)는 메시지가 있다는 사실 자체를 아무도 의심하지 못하게 메시지를 숨기는 기술입니다. 암호화는 메시지를 읽을 수 없게 뒤섞고, 스테가노그래피는 휴가 사진이나 음성 메모 같은 평범한 것 안에 메시지를 넣어서 아무도 들여다볼 생각을 하지 않게 합니다. 이 단어는 "덮어 쓴 글"을 뜻하는 그리스어에서 왔습니다.

디지털 스테가노그래피는 대부분 사진을 다룹니다. 사진에는 아무도 차이를 보지 못한 채 살짝 건드릴 수 있는 수백만 개의 숫자가 들어 있기 때문입니다. 이 안내서는 실제로 존재하는 방법들, 즉 픽셀의 마지막 비트를 바꾸는 방법부터 JPEG 압축 안에서 작업하는 방법까지, 대부분의 "사진 속에 파일 숨기기" 요령이 진짜 스테가노그래피보다 단순한 것인 이유, 메신저 앱으로 사진을 보내면 숨겨진 부분이 자주 지워지는 이유, 그리고 숨겨진 데이터를 찾는 사람들인 스테간 분석가(steganalyst)가 하는 일을 설명합니다.

## 스테가노그래피란

모든 스테가노그래피 시스템은 같은 세 부분으로 이루어집니다. **페이로드**(payload)는 비밀입니다. 메시지, 파일, 폴더입니다. **캐리어**(carrier), 또는 커버(cover)는 그것을 담는 무해한 파일입니다. PNG, JPEG, WAV 녹음 같은 것입니다. 캐리어에 페이로드가 들어간 결과물을 스테고 파일(stego file) 또는 패키지라고 합니다. 이 주제에 대한 Wikipedia 문서는 유용한 네 번째 용어를 더합니다. **인코딩 밀도**(encoding density)는 캐리어 중 바뀐 부분의 비율입니다. 밀도가 낮을수록 변화를 알아채기 어렵고, 들어가는 데이터도 적습니다.

암호화에 비한 장점은 Wikipedia의 표현대로 비밀이 "조사 대상으로서 주목을 끌지 않는다"는 것입니다. 암호화된 파일은 무언가 보호되고 있다고 알립니다. 강아지 사진은 아무것도 알리지 않습니다. 이것이 약점이기도 합니다. 누군가 그 사진을 일단 의심하면 스테가노그래피만으로는 아무것도 보호하지 못하며, 그래서 제대로 된 도구는 페이로드를 먼저 암호화하고 그다음에 숨깁니다. 숨기기는 은폐를 사 줍니다. 은폐가 실패했을 때 내용을 안전하게 지키는 것은 암호화입니다.

## 이 아이디어는 컴퓨터보다 2,500년 앞섭니다

가장 오래된 이야기는 물리적입니다. 헤로도토스는 전령의 삭발한 머리에 메시지를 문신하고 머리카락이 다시 자란 뒤에 보낸 이야기를 설명합니다. 이후 세기에는 열을 가하면 나타나는 투명 잉크를 썼고, 20세기에는 마이크로도트가 글 한 쪽을 인쇄된 마침표 크기로 줄였습니다. 이 단어 자체는 1499년 요하네스 트리테미우스의 『스테가노그라피아』(*Steganographia*)에 처음 나타나며, 마법에 관한 책으로 위장한 암호학과 스테가노그래피 논문입니다.

디지털 버전은 같은 논리를 유지하되 두피를 파일 형식으로 바꿉니다. 캐리어에는 두 가지 성질만 있으면 됩니다. 일부가 사람이 알아채지 못하게 바뀔 수 있어야 하고, 어디를 봐야 하는지 아는 프로그램이 그 변화를 다시 읽을 수 있어야 합니다. 이미지에는 둘 다 풍부합니다.

## LSB 스테가노그래피는 각 색상의 마지막 비트를 바꿉니다

교과서적인 방법은 최하위 비트(least significant bit, LSB) 삽입입니다. 일반적인 이미지의 픽셀은 빨강, 초록, 파랑을 0에서 255 사이의 숫자로 저장하며, 각각 8비트로 기록됩니다. 마지막 비트의 값은 정확히 한 단계입니다. 뒤집으면 빨강 값 200이 201이 됩니다. 어떤 화면도 어떤 눈도 그 차이를 보여 줄 수 없습니다.

<figure><img src="/docs/guides/img/stego/lsb-bits.svg" alt="빨강 200, 초록 117, 파랑 54인 픽셀 하나를 이진수로 나타낸 그림. 각 값의 마지막 비트를 메시지 비트 1, 0, 1로 바꾸면 201, 116, 55가 됩니다. 두 색 견본은 똑같아 보입니다." loading="lazy" width="100%"><figcaption>픽셀 하나에 저장된 메시지 비트 세 개. 각 값은 255단계 중 많아야 한 단계 움직입니다.</figcaption></figure>

사진의 모든 값에 이를 반복하면 용량이 쌓입니다. 1,200만 화소 사진에는 색상 값이 3,600만 개 있으므로 각각 1비트면 3,600만 비트, 이론상 약 4.5MB입니다. 실제 도구는 조용히 하려고, 그리고 암호에서 유도한 의사 난수 순서로 비트를 흩뜨리기 때문에 훨씬 적게 쓰며, 그래서 페이로드는 이미지 위쪽의 깔끔한 덩어리가 아닙니다.

LSB는 모든 픽셀 값이 정확히 저장되는 PNG와 BMP 같은 무손실 형식에서만 동작합니다. 같은 이미지를 JPEG로 저장하면 압축기가 값을 반올림해서 마지막 비트와 메시지가 함께 뒤섞입니다.

스테간 분석가들이 가장 잘 이해하는 방법이기도 합니다. 자연스러운 사진은 낮은 비트에 특징적인 노이즈 패턴이 있으며, 그 비트를 완전히 무작위처럼 보이는 암호화된 데이터로 덮어쓰면 패턴이 바뀝니다. Westfeld와 Pfitzmann은 2000년에 LSB 삽입에 대한 통계적 공격을 발표했고, Fridrich, Goljan, Du는 2001년에 컬러 이미지에서 삽입이 "매우 가까운" 색상 쌍의 수를 늘린다는 것을 보였습니다. Wikipedia는 LSB만 바꾼 경우 "일부 경우 1%만큼 낮은 인코딩 밀도도 상당한 신뢰도로 탐지된다"고 전하지만, 이 수치는 그곳에서 출처가 없습니다. Hacker News의 한 댓글 작성자는 더 직설적으로 말했습니다. 단순한 LSB 치환이 만드는 노이즈는 "탐지하기 매우 쉽다"는 것입니다.

## JPEG 스테가노그래피는 압축 안에서 작동합니다

휴대폰과 웹의 대부분의 사진은 JPEG이므로, 도구들은 JPEG의 반올림에서 살아남을 방법을 찾아야 했습니다. 답은 반올림 전이 아니라 반올림 후에 데이터를 숨기는 것입니다.

JPEG 인코더는 이미지를 8×8 픽셀 블록으로 자르고 이산 코사인 변환(discrete cosine transform, DCT)으로 각 블록을 64개의 주파수 계수로 바꿉니다. 하나의 숫자는 블록의 평균 밝기를, 나머지는 거친 디테일과 섬세한 디테일을 나타냅니다. 그런 다음 이 계수를 품질 표로 나누고 반올림하는데, 손실이 일어나는 곳이 여기입니다. JPEG 스테가노그래피는 반올림된 계수 자체를 편집하므로, 이후 인코더가 하는 어떤 것도 메시지를 반올림해 없애지 못합니다.

초기 도구들은 이를 단순하게 했습니다. Provos와 Honeyman이 2001년에 테스트한 프로그램 중 둘인 JSteg와 JPHide는 계수의 낮은 비트를 바꾸어 전체 히스토그램을 이동시키고, 통계 검정이 이를 잡아냅니다. 1999년 Niels Provos가 만든 OutGuess는 의사 난수 계수에 비트를 삽입한 다음 다른 계수를 조정해 전체 히스토그램이 원본과 일치하게 하며, 이는 카이제곱 공격을 무력화하기 위한 것입니다.

오래가지 못했습니다. 2002년 Fridrich, Goljan, Hogea의 공격은 JPEG 블록 경계의 "블록성"(blockiness)을 측정해 OutGuess를 깨뜨렸고, 숨겨진 메시지의 길이까지 추정했습니다. 가장 잘 알려진 명령줄 도구인 steghide는 JPEG와 오디오에 다른 경로를 택합니다. 암호문(passphrase)으로 고른 값의 쌍을 서로 바꾸어 각 색상이나 샘플의 개수가 그대로 유지되게 하며, 제작자는 이를 "1차 통계 검정"에 강하다고 설명합니다.

이 군비 경쟁이 지금도 이 분야의 모습입니다. Fridrich, Pevny, Kodovsky는 2007년에 통계적으로 탐지할 수 없는 JPEG 스테가노그래피를 "막다른 길"로 가득한 연구 문제라고 불렀고, 2012년에는 스테간 분석이 수천 개의 이미지 특징으로 훈련한 기계 학습 분류기로 옮겨 갔습니다. 온라인에서 보게 되는 두 가지 주장, 스테가노그래피가 "탐지하기 쉽다"는 것과 "탐지하기 어렵다"는 것은 모두 사실입니다. 경계선은 아이디어가 아니라 알고리즘입니다.

## "사진 속에 파일 숨기기"의 대부분은 진짜 스테가노그래피가 아니라 덧붙인 데이터입니다

YouTube에서 이미지 안에 파일을 숨기는 방법을 검색하면 가장 흔한 시연은 LSB가 전혀 아닙니다. Windows의 한 줄짜리 명령입니다.

<ol>
<li>사진과 zip 압축 파일을 같은 폴더에 둡니다.</li>
<li>명령 프롬프트에서 <code>copy /b photo.jpg + archive.zip combined.jpg</code>를 실행합니다. macOS나 Linux에서는 <code>cat photo.jpg archive.zip &gt; combined.jpg</code>가 같은 일을 합니다.</li>
<li><code>combined.jpg</code>를 열면 사진이 보입니다. 이름을 <code>.zip</code>으로 바꾸면 많은 압축 도구가 파일을 엽니다.</li>
</ol>

형식이 끝나는 방식 때문에 이것이 가능합니다. JPEG는 이미지 끝 표식(end-of-image marker)으로, PNG는 PNG 사양이 "PNG 데이터스트림의 마지막 청크"로 정의하는 IEND라는 청크로 끝납니다. 이미지 뷰어는 거기서 읽기를 멈추고 그 뒤의 것은 무시합니다. 반면 zip 리더는 파일 끝에서 압축 파일의 디렉터리를 찾아 거꾸로 작업합니다. 서로 다른 두 프로그램이 각각 유효한 것으로 읽는 파일을 **폴리글롯**(polyglot)이라고 하며, r/Steganography의 한 Reddit 사용자가 부른 "오래된 RAR 요령"이 가장 흔한 예입니다.

<figure><img src="/docs/guides/img/stego/three-ways.svg" alt="파일에 데이터를 숨기는 세 가지 방법의 다이어그램: 이미지 데이터 안의 픽셀 낮은 비트 바꾸기, 끝 표식 뒤에 바이트 덧붙이기, 끝 표식 앞에 형식이 허용하는 추가 레코드 넣기." loading="lazy" width="100%"><figcaption>숨겨진 데이터가 있을 수 있는 세 곳. 첫 번째만 사진 자체를 바꿉니다.</figcaption></figure>

세 번째 계열은 둘 사이에 있습니다. 대부분의 형식은 이름이 붙은 블록의 컨테이너이며 사용자 정의 블록을 추가할 방법을 정의합니다. PNG에는 보조 청크, JPEG에는 응용 세그먼트, MP4에는 사용자 정의 박스, PDF에는 주석이 허용됩니다. 블록을 인식하지 못하는 뷰어는 건너뛰므로 파일은 완전히 유효한 채로 어디서나 평소처럼 열립니다. 용량이 크고(비디오에서는 기가바이트 단위), 사진은 아무것도 바뀌지 않습니다.

뒤의 둘 중 어느 것도 엄밀한 의미의 스테가노그래피는 아닙니다. 픽셀을 건드리지도, 통계적으로 정상으로 보이게 하려 하지도 않기 때문입니다. 파일이 그림에 필요한 것보다 더 많이 담고 있을 뿐입니다. 최근 r/Steganography 샘플에서 가장 추천을 많이 받은 글은 BMP 스캔 라인의 패딩 바이트에 데이터를 숨겼으며, 그 글의 댓글 작성자들이 단서를 짚어 냈습니다. 한 명은 용량을 계산했고, 다른 한 명은 "png나 jpg가 아닌 이미지를 누가 보내면 바로 의심할 것"이라고 말했습니다. 덧붙이거나 끼워 넣은 데이터는 그림을 보는 사람에게서는 숨겨집니다. 파일 전체를 읽는 프로그램에게서는 숨겨지지 않으며, 파일은 같은 크기의 평범한 사진보다 눈에 띄게 큽니다.

## 사진을 공유하면 페이로드가 자주 파괴됩니다

숨겨진 데이터는 정확한 바이트가 살아남아야만 살아남으며, 사람들이 사진을 공유하는 많은 방법은 이를 보존하지 않습니다.

메신저 앱, 소셜 네트워크, 이미지 호스트가 사진을 받으면, 내가 보낸 파일을 그대로 저장하지 않는 경우가 많습니다. 이미지를 픽셀로 디코딩하고, 자주 크기를 줄이고, 대역폭을 아끼려고 완전히 새로운 압축 파일을 씁니다. 픽셀의 LSB 비트는 새 압축에 뒤섞입니다. 계수 수준의 JPEG 페이로드는 품질이 바뀔 때 반올림되어 사라집니다. 덧붙인 바이트와 추가 형식 레코드는 앱이 픽셀만으로 새 파일을 쓰기 때문에 대체로 복사되지 않습니다.

<figure><img src="/docs/guides/img/stego/recompression.svg" alt="흐름도: 숨겨진 데이터가 있는 사진을 USB 드라이브, 클라우드 드라이브, 이메일 첨부, 문서로 보내기로 파일 그대로 복사하면 변하지 않고 도착해 데이터가 살아남습니다. 사진으로 보내면 앱이 디코딩하고, 크기를 줄이고, 새 파일을 쓰므로 픽셀 비트는 뒤섞이고 추가 바이트와 레코드는 쓰이지 않습니다." loading="lazy" width="100%"><figcaption>숨겨진 부분은 파일을 바이트 단위로 그대로 복사할 때만 옮겨집니다.</figcaption></figure>

오늘날 어떤 앱이 이렇게 하는지에 대한 믿을 만한 공개 테스트는 없고, 동작은 버전과 "사진" 및 "문서" 보내기 방식에 따라 바뀌므로, 증명되기 전까지는 모든 공유를 손실이 있는 것으로 보세요. 일화는 모두 같은 방향을 가리킵니다. r/Steganography의 한 Reddit 사용자는 도구의 페이로드가 Reddit이 제공하는 WebP 버전이 아니라 Reddit에서 받은 PNG 다운로드에서만 살아남는다는 것을 발견했습니다. 한 Hacker News 댓글 작성자는 이전 시도를 떠올리며 "대부분의 이미지 호스트는 최적이 아닌 인코딩을 감지해서 '친절하게' 고쳐 줄 만큼 똑똑했다"고 했습니다. 안전한 습관은 단순합니다. 파일은 파일로 보내고, 원본을 삭제하기 전에 도착한 사본이 여전히 열리는지 확인하세요.

## 스테간 분석은 숨겨진 데이터를 찾는 기술입니다

Wikipedia는 스테간 분석(steganalysis)을 암호 해독의 대응물인 "스테가노그래피로 숨긴 메시지를 탐지하는 연구"라고 정의합니다. 목표는 세 단계입니다. 의심스러운 파일을 찾고, 페이로드가 있는지 판단하고, 가능하면 복구합니다. 앞의 둘은 통계와 파일 검사입니다. 세 번째는 보통 암호가 필요하며, 숨기기가 간파된 뒤에도 암호화가 중요한 이유입니다.

가장 잘 알려진 현장 연구가 실제로 세 번째 단계가 얼마나 어려운지 보여 줍니다. 2001년 Niels Provos와 Peter Honeyman은 eBay 경매의 이미지 200만 개를 스캔했습니다. 탐지기는 약 17,000개를 표시했고, 그것들에 대한 사전 공격에서는 숨겨진 메시지가 전혀 발견되지 않았습니다. Wikipedia 문서는 페이로드를 완전히 복구하고 복호화하지 않은 채 스테간 분석만으로 행동하는 것은 "매우 위험한 일"이라고 경고합니다. 그렇지 않으면 분석가에게 있는 것은 "파일이 수정되었을 수 있음을 나타내는 통계"뿐이기 때문입니다. 탐지가 어떤 모습인지와 그 한계의 전모는 [숨긴 사진도 들킬 수 있을까](/ko/guides/can-hidden-photos-be-detected)에 있습니다. 양쪽의 도구는 나이와 약점과 함께 [스테가노그래피 도구 비교](/ko/guides/steganography-tools)에서 비교합니다.

## HideFile이 도움이 되는 부분

스테가노그래피를 검색하는 대부분의 사람에게 은밀한 통신 채널이 필요한 것은 아닙니다. 다른 사람이 집어 드는 휴대폰이나 노트북에서 개인 사진이나 파일 몇 개가 눈에 띄지 않게 되기를 원할 뿐입니다. 그 일에는 고전적인 도구가 불편합니다. steghide는 JPEG와 WAV에 작은 페이로드만 담고, LSB 도구는 PNG가 필요하며, 어느 것도 둘러볼 수 있는 갤러리를 주지 않습니다.

HideFile은 위 도식의 세 번째 접근을 취합니다. 최신 브라우저에서 [hidefile.app](https://hidefile.app)으로 가서 평범한 사진, 비디오, PDF를 커버로 고르고, 개인 파일을 추가하고, 암호를 설정합니다. HideFile은 브라우저에서 파일을 암호화해 파일 형식이 허용하는 레코드로 저장하므로, 커버는 다른 어디서나 평범한 사진, 비디오, 문서로 여전히 열립니다. 암호와 함께 hidefile.app에서 열면 파일이 나타납니다. 아무것도 HideFile 서버로 업로드되지 않으며 설치할 것도 없습니다.

은폐와 암호화를 합친 것이며, 어느 부분이 일을 하는지에 대해 솔직합니다. HideFile은 픽셀을 바꾸지도, 통계 검정을 속이려 하지도 않습니다. 목적에 맞게 만든 도구는 커버에 데이터가 추가되었다는 것을 알아볼 수 있고, 암호 없이는 내용을 읽을 수 없습니다. 그래서 내 기기를 둘러보는 사람에게서 무언가를 치워 두는 데는 맞고, 훈련된 조사관, 국경 검색, 법적 압박에는 맞지 않는 도구입니다.

암호 복구는 없으며, 사진을 다시 인코딩하는 앱은 숨겨진 부분을 지워 버릴 수 있으므로 커버는 파일로 보관하고 공유하세요. 어떤 숨기기 요령이 무엇을 속이는지 전체 그림은 [사진에 파일 숨기기](/ko/guides/how-to-hide-files-in-plain-sight)를, 사진 금고 앱의 비교는 [사진 금고 앱은 안전할까](/ko/guides/is-photo-vault-safe)를 참고하세요.

## 출처

- Wikipedia: [Steganography](https://en.wikipedia.org/wiki/Steganography) (2026-10-13 판, 2026-10-14 확인)
- Wikipedia: [Steganalysis](https://en.wikipedia.org/wiki/Steganalysis) (2026-10-14 확인)
- Wikipedia: [OutGuess](https://en.wikipedia.org/wiki/OutGuess) (2026-10-14 확인)
- Provos and Honeyman, [Detecting Steganographic Content on the Internet](http://www.citi.umich.edu/techreports/reports/citi-tr-01-11.pdf), CITI Technical Report 01-11, 2001
- Westfeld and Pfitzmann, "Attacks on Steganographic Systems", Information Hiding (LNCS), 2000, [doi:10.1007/10719724_5](https://doi.org/10.1007/10719724_5)
- Fridrich, Goljan and Du, "Detecting LSB steganography in color and gray-scale images", IEEE Multimedia, 2001, [doi:10.1109/93.959097](https://doi.org/10.1109/93.959097)
- Fridrich, Pevny and Kodovsky, "Statistically undetectable JPEG steganography: dead ends, challenges, and opportunities", ACM MM&amp;Sec 2007, [doi:10.1145/1288869.1288872](https://doi.org/10.1145/1288869.1288872)
- Fridrich and Kodovsky, "Rich Models for Steganalysis of Digital Images", IEEE TIFS, 2012, [doi:10.1109/tifs.2012.2190402](https://doi.org/10.1109/tifs.2012.2190402)
- W3C: [PNG Specification (Third Edition)](https://www.w3.org/TR/png-3/), IEND 청크
- steghide: [project home](https://steghide.sourceforge.net/)
- Microsoft Learn: [copy command](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/copy)
- Reddit, r/Steganography: [hiding .txt files in images?](https://www.reddit.com/comments/1p032xi/)
- Reddit, r/Steganography: [BMP scan-line padding post](https://www.reddit.com/comments/1nn7l5v/)
- Reddit, r/Steganography: [PNG download keeps the data, WebP does not](https://www.reddit.com/comments/1lho85i/)
- Hacker News: [comment on naive LSB detection](https://news.ycombinator.com/item?id=11581277)
- Hacker News: [comment on image hosts re-encoding](https://news.ycombinator.com/item?id=11582783)
