Windows 사용자 계정 잠금
PC 이석 시 Windows를 잠그세요. 자격 증명 관리자는 사용자 계정 단위 보호이므로 다른 사용자가 PC에 접근해도 키를 읽지 못합니다.
Sudapapa Diary는 사용자의 데이터를 본인 PC에만 저장하며, 추적·텔레메트리 없이 동작합니다. 이 문서에서는 데이터 저장·암호화·외부 통신 정책을 자세히 설명합니다.
모든 데이터는 다음 폴더에 저장됩니다.
%APPDATA%는 Windows 사용자별 폴더(C:\Users\<사용자>\AppData\Roaming)입니다. 다른 사용자 계정에서는 접근할 수 없습니다.
| 항목 | 알고리즘 | 비고 |
|---|---|---|
| 데이터 암호화 | AES-256-GCM | 키 파생: PBKDF2-SHA256, 100,000회, salt 32B |
| 인증 태그 | 128 bits | GCM 모드 자체 제공 |
| IV (Nonce) | 128 bits | crypto.randomBytes로 매 암호화마다 신규 |
| Salt | 256 bits | 매 암호화마다 신규, 결과에 함께 저장 |
저장 형식: salt:iv:authTag:ciphertext (모두 hex 인코딩, 콜론 구분)
| 데이터 | 암호화 여부 | 키 출처 |
|---|---|---|
| 비밀번호 매니저 | O | Windows 자격 증명 관리자 |
| Google·Microsoft·Kakao·Naver OAuth 토큰 | O | Windows 자격 증명 관리자 |
| 일정·메모·즐겨찾기 본문 | 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)를 분리하여 보안을 강화합니다.
| 보안 옵션 | 설정 | 효과 |
|---|---|---|
contextIsolation | true | Renderer 코드와 Preload 컨텍스트 분리 |
nodeIntegration | false | Renderer에서 Node.js API 직접 호출 차단 |
sandbox | (preload 제외) | OS 격리 적용 |
webSecurity | true | 외부 리소스 로드 정책 적용 |
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로 사용합니다.
자세한 내용은 구독 및 결제 문서 참고.
다른 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 추적 정보는 전송되지 않습니다.