Skip to content

Security

Yu Jin edited this page Apr 4, 2026 · 3 revisions

보안

아키텍처 개요

┌──────────────────────────────────────────────┐
│  OS 키체인 (macOS Keychain / Windows CM)     │
│  ┌────────────────────────────────────────┐  │
│  │  Fernet 암호화 (AES-128-CBC + HMAC)    │  │
│  │  ├── {profile}:appkey                  │  │
│  │  ├── {profile}:secretkey               │  │
│  │  ├── _salt (PBKDF2 솔트)              │  │
│  │  └── _verify (비밀번호 검증)          │  │
│  └────────────────────────────────────────┘  │
│  ┌────────────────────────────────────────┐  │
│  │  평문 (만료되는 값)                     │  │
│  │  └── {profile}:token                   │  │
│  └────────────────────────────────────────┘  │
└──────────────────────────────────────────────┘

~/.kiwoom/config.toml (비민감 정보만)
├── domain
├── account
└── default_profile

암호화 상세

항목 알고리즘
키 유도 PBKDF2-HMAC-SHA256, 100,000 iterations
암호화 Fernet (AES-128-CBC + HMAC-SHA256)
솔트 64자 랜덤 hex (secrets.token_hex(32))
라이브러리 cryptography (Python 표준 보안 라이브러리)

저장 위치별 보안

항목 저장 위치 암호화 비밀번호 필요
appkey / secretkey OS 키체인 Fernet O
토큰 OS 키체인 평문 X
domain / account config.toml 없음 X
캐시 (종목 리스트) ~/.kiwoom/cache/ 없음 X

주문 보안 (dangerous-mode)

기본 모드 (off)

모든 주문에 시스템 인증 필요:

OS 인증 방식
macOS Touch ID → 실패 시 시스템 비밀번호 (dscl)
Windows LogonUser Win32 API
Linux su (PAM)

Dangerous Mode (on)

kiwoom config set dangerous-mode on

시스템 인증을 비활성화합니다. --confirm 플래그로 프롬프트도 스킵 가능. 신뢰할 수 있는 환경에서만 사용하세요.

공격 시나리오별 방어

공격 방어
파일 읽기 (cat ~/.kiwoom/config.toml) 키 없음, 도메인/계좌만
AI 에이전트가 파일 Read 키 없음
keyring.get_password() 직접 호출 암호화된 값만 반환
다른 앱이 키체인 접근 OS가 권한 팝업 표시
토큰 탈취 만료되는 값, 재발급 가능
주문 시도 (기본 모드) Touch ID / 시스템 비밀번호 필요

환경변수 보안

appkey/secretkey는 환경변수를 지원하지 않습니다. 환경변수는 /proc/*/environ이나 ps e로 노출될 수 있기 때문입니다.

지원되는 환경변수 (비민감 정보만):

  • KIWOOM_DOMAIN
  • KIWOOM_ACCOUNT
  • KIWOOM_PROFILE

취약점 제보

보안 취약점은 공개 이슈로 등록하지 말고 Security Advisories로 비공개 제보해 주세요.

Clone this wiki locally