Skip to content

보안 및 개인정보

Sudapapa Diary는 사용자의 데이터를 본인 PC에만 저장하며, 추적·텔레메트리 없이 동작합니다. 이 문서에서는 데이터 저장·암호화·외부 통신 정책을 자세히 설명합니다.

모든 데이터는 다음 폴더에 저장됩니다.

  • Directory%APPDATA%/sudapapadiary/Configurations
    • DirectoryDatabase
      • sudapapa.db (SQLite — 메인 데이터)
    • DirectoryBackups
      • Directoryjson-backup-YYYY-MM-DDTHH-MM-SS/
      • Directorydb-backup-YYYY-MM-DDTHH-MM-SS/
      • Directorymigration-backup-YYYY-MM-DDTHH-MM-SS/
    • Connections (이전 JSON 형식, 유지보수용)
  • Directory%APPDATA%/SudapapaDiary
    • license-server.db (라이선스·기기 정보)

%APPDATA%는 Windows 사용자별 폴더(C:\Users\<사용자>\AppData\Roaming)입니다. 다른 사용자 계정에서는 접근할 수 없습니다.

항목알고리즘비고
데이터 암호화AES-256-GCM키 파생: PBKDF2-SHA256, 100,000회, salt 32B
인증 태그128 bitsGCM 모드 자체 제공
IV (Nonce)128 bitscrypto.randomBytes로 매 암호화마다 신규
Salt256 bits매 암호화마다 신규, 결과에 함께 저장

저장 형식: salt:iv:authTag:ciphertext (모두 hex 인코딩, 콜론 구분)

데이터암호화 여부키 출처
비밀번호 매니저OWindows 자격 증명 관리자
Google·Microsoft·Kakao·Naver OAuth 토큰OWindows 자격 증명 관리자
일정·메모·즐겨찾기 본문X (DB 평문)
환경설정X (DB 평문)
백업 파일(.sdpb)O (사용자 암호)사용자가 입력한 암호

암호화 키는 Windows 자격 증명 관리자(Credential Manager) 에 저장됩니다.

항목
서비스 이름SudapapaDiary
계정 이름encryption-key
키 길이256 bits (32 bytes)

내부적으로는 keytar 모듈이 사용되며, OS의 보안 키 저장소(Windows DPAPI)가 키를 보호합니다. 즉, 다른 사용자 계정에서는 같은 PC라도 키를 읽을 수 없습니다.

앱 첫 실행 시 새 키가 자동 생성되어 자격 증명 관리자에 저장됩니다. 사용자가 직접 키를 입력하거나 백업할 필요는 없습니다.

Electron 앱은 Main Process(시스템 권한)와 Renderer Process(UI)를 분리하여 보안을 강화합니다.

보안 옵션설정효과
contextIsolationtrueRenderer 코드와 Preload 컨텍스트 분리
nodeIntegrationfalseRenderer에서 Node.js API 직접 호출 차단
sandbox(preload 제외)OS 격리 적용
webSecuritytrue외부 리소스 로드 정책 적용

Renderer는 window.electronAPI / window.subscriptionAPI 객체로 노출된 함수만 호출할 수 있습니다. 임의의 IPC 메시지나 파일 시스템 접근은 불가능합니다.

대표적 노출 API:

  • electronAPI.getEvents() — 일정 조회
  • electronAPI.saveSetting(key, value) — 환경설정 저장
  • subscriptionAPI.verifyLicense({...}) — 라이선스 검증

각 함수는 Main에서 입력값을 검증한 후에만 실제 작업을 수행합니다.

구독 팝업 등 외부 통신이 필요한 창은 명시적 CSP 헤더를 사용합니다.

default-src 'self';
style-src 'self' 'unsafe-inline';
script-src 'self' 'unsafe-inline';
connect-src 'self' http://localhost:* https://*.paddle.com;

connect-src에 명시되지 않은 도메인으로의 요청은 브라우저(Chromium)가 차단합니다.

앱이 외부와 통신하는 경우는 다음 7가지뿐입니다. 그 외 어떤 추적·통계 전송도 없습니다.

통신 대상시점데이터
Google OAuth + Calendar API사용자가 Google 계정 연결 시인증 토큰, 캘린더/일정
Microsoft OAuth + Graph API사용자가 Microsoft 계정 연결 시인증 토큰, 캘린더/일정
Kakao OAuth + Calendar API사용자가 Kakao 계정 연결 시인증 토큰, 캘린더/일정
Naver OAuth + Calendar API사용자가 Naver 계정 연결 시인증 토큰, 캘린더/일정
Paddle (*.paddle.com)구독 결제 시결제 정보 (Paddle 보안 영역)
Sudapapa 라이선스 서버라이선스 검증·기기 등록라이선스 키, 기기 ID 해시, 이메일
releases.json 폴링자동 업데이트 확인현재 버전
항목정책
사용 통계 수집없음
크래시 보고 자동 전송없음 (사용자가 명시적으로 보낼 때만)
광고 식별자사용 안 함
제3자 분석 SDK없음
광고없음

라이선스 검증을 위해 MAC 주소를 SHA-256 해시한 16자리 hex를 기기 ID로 사용합니다.

  • MAC 주소 자체는 서버로 전송되지 않으며, 해시된 값만 사용됩니다.
  • 여러 NIC가 있는 PC는 정렬된 MAC 목록의 첫 번째를 우선 사용합니다.
  • MAC을 얻을 수 없으면 호스트명·플랫폼·CPU 모델 등으로 폴백합니다.

자세한 내용은 구독 및 결제 문서 참고.

다른 PC로 옮길 때 보안 키 영향:

데이터이전 가능 여부
일정·메모·즐겨찾기 (DB 평문)가능 (DB 파일 복사)
비밀번호 (자격 증명 관리자 키)불가 — 새 PC에서 다시 입력 필요
OAuth 토큰불가 — 각 서비스 재인증 필요
환경설정가능
라이선스가능 (기기 등록 한도 내)

권장 절차는 데이터 관리 → 다른 PC로 이전 문서 참고.

Windows 사용자 계정 잠금

PC 이석 시 Windows를 잠그세요. 자격 증명 관리자는 사용자 계정 단위 보호이므로 다른 사용자가 PC에 접근해도 키를 읽지 못합니다.

BitLocker 활성화

Pro 에디션 이상에서 BitLocker로 디스크 전체를 암호화하면 도난·분실 시에도 평문 데이터(일정·메모)가 보호됩니다.

강력한 백업 암호

설정 내보내기 시 8자 이상 + 특수문자 + 숫자 + 대소문자 혼용을 권장합니다. PBKDF2 100,000회로 무차별 대입에 강합니다.

외부 동기화 토큰 관리

각 서비스(Google·Microsoft 등) 계정 페이지에서 더 이상 사용하지 않는 PC의 권한을 정기적으로 회수하세요.

Q. 비밀번호 매니저의 데이터는 클라우드에 올라가나요? A. 아니요. 모든 비밀번호 데이터는 PC의 SQLite DB에 암호화되어 저장되며, 어떤 외부 서버에도 전송되지 않습니다.

Q. OAuth 토큰이 다른 사람에게 유출될 수 있나요? A. Windows 자격 증명 관리자 + AES-256-GCM 이중 보호로 같은 PC의 다른 사용자 계정에서도 읽을 수 없습니다. 단, 같은 사용자 계정에서 동작하는 악성 프로그램은 이론적으로 키에 접근할 수 있으므로, 백신·OS 업데이트를 유지하세요.

Q. 백업 파일을 클라우드(OneDrive·Google Drive 등)에 올려도 안전한가요? A. 백업 파일은 사용자 암호로 AES-256-GCM 암호화되어 있어 클라우드 저장 자체는 안전합니다. 다만 암호를 잃어버리면 복원할 수 없으니 별도 보관하세요.

Q. 라이선스 검증 시 어떤 정보가 서버로 전송되나요? A. 라이선스 키, 기기 ID 해시(16자리), 기기 표시 이름(예: MyPC (win32)), 이메일이 전송됩니다. MAC 주소 원본·OS 사용자명·IP 추적 정보는 전송되지 않습니다.