포스트

100% 클라이언트 환경 기반 정보은닉(Steganography) 개인용 비밀금고 구축기

브라우저 단독 구동, AES-256, PBKDF2 및 파일 위장 기법을 활용한 개인 백업 시스템 구축

100% 클라이언트 환경 기반 정보은닉(Steganography) 개인용 비밀금고 구축기

작업과 문서화에 VSCode - Gemini 3.1 Pro (Preview) 모델 사용.

Show HN: 개인용 웹 브라우저 기반 AES-256 비밀 금고 및 데이터 은닉 시스템

순수 프론트엔드(Client-side) 브라우저 환경에서 동작하며, 스테가노그래피(Steganography) 기법과 한글 Passphrase를 조합한 개인용 암호화 툴박스/백업 시스템 구축 요약.

🛡️ 핵심 보안 기술 적용

  • 서버리스(Serverless) 오프라인 동작: 모든 암·복호화 연산이 브라우저에서 수행되어 서버나 네트워크로 데이터가 전송될 위험 0% 보장
  • 미국 정부 표준 알고리즘인 AES-256-CBC 사용
  • 무작위 대입 공격(Brute-force) 지연을 위해 키 파생 함수 PBKDF2 적용 (반복 횟수 1만~50만 번 조절 가능)
  • 해킹 사전(Rainbow Table) 및 패턴 분석 무력화를 위해 매 암호화마다 16바이트 Random SaltRandom IV를 새로 생성 적용

🥷 스테가노그래피(Steganography) 기반 파일 위장

  • 암호화된 데이터(Base64)를 secret.txt 등 눈에 띄는 파일로 저장하지 않고, 깃허브 블로그 저장소 내의 흔하고 지루한 플러그인 캐시 파일 등으로 위장하여 은닉
  • Git 커밋 시에도 chore: update config 등의 평범한 메시지로 위장, 공격자의 의심을 피하는 요소 구현

⚙️ 사용자 편의성과 해독 메커니즘

  • 암호화 결과물 텍스트(Base64) 내부에 생성된 Salt, IV, 반복 횟수(Iterations) 설정값을 덧붙여 패키징
  • 복호화 시 Javascript가 스스로 헤더를 파싱해 세팅값을 도출하므로, 사용자는 세팅값을 기억할 필요 없이 오로지 ‘마스터 비밀번호’만 입력하면 자동 해독
  • 블로그 서버에 은닉해 둔 위장 데이터 파일을 JS fetch() API로 클릭 한 번에 읽어와 복호화 텍스트 박스에 자동 삽입하는 로드 기능 지원

🔑 궁극의 패스프레이즈(Passphrase) 전략 도입

  • 흔히 쓰이는 영문+특수문자 10자리(예: qqww22!@) 대신, “자신만 아는 의미 있는 긴 한글 문장”을 마스터 비밀번호로 채택 (예: 삶을섞고술을바꿀시간)
  • 한글 조합(11,172자)의 방대한 경우의 수와 문장 길이 덕분에 해커의 무작위 대입 공격에 소요되는 시간을 늘려 원천 차단
  • 복잡한 기호나 숫자를 우겨넣지 않아도 되므로 암기가 쉬워, 망각에 의한 데이터 로스를 방지
  • 보안 격상 팁 (안티-크롤링/사전 공격 방어): 공개된 텍스트 데이터를 크롤링하여 대입해보는 공격을 방어하기 위해, 문장 사이에 본인만 아는 고정된 기호나 숫자(예: 삶을섞고[77]술을바꿀시간)를 섞어 쓰는 변형(Salting the Passphrase)을 주어 공격 방어.

⚠️ 보안 한계점 및 주의사항

  • 단일 실패점(SPOF): 기억에 의존하는 이 Passphrase 문장을 관리자 본인이 완전히 망각할 경우, 시스템 상 보안 해제 백도어가 존재하지 않아 영구적인 데이터 손실(복구 절대 불가) 초래.
  • 다수와의 협업이나 공유 용도로는 적합하지 않으며, 철저히 1인 한정 보안 개인 데이터 백업 스토리지로만 활용해야 함.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.