---
# System prepended metadata

title: Steganography 제작기
tags: ["INHA\U0001F393"]

---

###### tags: `INHA🎓`
# Steganography 제작기

### 1. 요구사항

- bmp 파일안에 text를 숨기는 Steganography 프로그램 작성
- e, d 두가지 argument로 프로그램이 다르게 작동하도록 구성
  - e (encoding): 사용자에게 숨기려는 문자열을 입력받고, 주어진 bmp파일에 숨긴다
    - input: BMP file (default path -> "./origin.bmp"), String (from stdin)
    - output: BMP file (default path -> "./stego.bmp")
  - d (decoding): 문자열이 숨어있는 bmp 파일로 부터 해당 문자열을 추출한다
    - input: BMP file (default path -> "./stego.bmp")
    - output: 추출된 string (to stdout)

### 2. BMP File 이란

<img width="66%" src="https://i.imgur.com/ENLry4Z.png">


* bmp 파일은 픽셀 하나를 몇 비트로 저장하느냐 따라 구조가 달라짐 (해당 과제에서는 24비트 비트맵 사용)

* 24비트 비트맵을 사용하므로, 색상 테이블은 처리하지 않음

* 비트맵 파일 헤더

  * 비트맵 파일 식별 정보, 파일크기, 데이터 위치 등 포함

* 비트맵 정보 해더 (DIB 해더)

  * 가로 세로 크기, 해상도, 픽셀의 비트수 등 그림의 자세한 정보 포함

* 픽셀 데이터

  * 그림 파일의 실제 색상 정보
  * 픽셀당 색상 수가 16비트 미만일 때, 색상 테이블에 따로 색상 정보 저장 후 픽셀 데이터에서는 색상 테이블 인덱스 저장
  * 해당 과제에서 24비트 비트맵 사용 하므로 색상 테이블 처리 안함

  <img width="50%" src="https://i.imgur.com/3eBfvAI.png">

### 3. Encoding / Decoding 아이디어

1. **데이터 삽입 (채택 X)**
   * EOI (End Of Image) 바이트 뒤 데이터가 무시됨 -> 이 뒤에 데이터를 숨길 수 있음
   * 파일의 헤더 중 이미지에 영향을 주지 않는 부분 상당히 존재 -> 이 영역에 데이터 삽입 가능
   * 원본 이미지와 비교했을 때, 차이가 나지 않음
   * 이미지를 동일하게 가져갈 수 있는 장점이 있지만, 데이터의 사이즈가 충분히 클 때 bmp 파일의 사이즈가 대폭 증가해 의심 여지가 다분하다고 판단 -> **채택 X**
2. **데이터 변조 (채택 O)**
   * 24비트로 표현되는 픽셀 데이터의 LSB를 변조 -> 24비트가 하나의 색을 표현하므로 이미지가 변조되어도 알아채기 힘듬
   * 8바이트씩 끊어서 LSB를 가져오면 8비트 즉 char를 만들 수 있고 이를 ascii와 연관해 표현 가능함
   * bmp 파일의 사이즈 변동이 크지 않을 것으로 예상되고, 사용자가 HEX 값을 일일이 확인하여 패턴을 확인하지 않는 이상 의심의 여지가 없을것으로 판단 -> **채택 O**

### 4. 구현 결과

* Input Message

  `Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry’s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularized in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.`

* CLI Capture
![](https://i.imgur.com/2pKOdqU.png)
    - `e option`: 위 input message를 `./origin.bmp` 에 encoding 하여 `./stego.bmp`로 복사
    - `d option`: `./stego.bmp` 에 숨겨진 message를 decoding 하여 `stdout`으로 출력
    
* Origin VS Steganography
![](https://i.imgur.com/Y0zKj8Z.png)
![](https://i.imgur.com/721GzUp.png)
![](https://i.imgur.com/nOV65KB.png)

    * 육안으로 차이가 나지 않음
    * File size가 518KB 로 동일함
    * HEX값 byte 단위로 보았을 때, 뒷자리에서 미세한 차이를 보임
    


