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 Salt와 Random 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 라이센스를 따릅니다.
