저장 시 암호화 (불가능한 경우 제외), 그리고 파일 자체에서 이를 명시
Notifio의 자동 응답 기능은 사용자 응답을 기록하여 향후 자동 응답을 생성하며, 이 데이터를 어디에도 업로드하지 않고 로컬에 저장합니다. 이 민감한 데이터에 대한 전체 보안 경계는 사용자의 디스크에 있는 로컬 파일입니다. Electron의 safeStorage는 암호화를 제공하지만, 모든 Linux 환경에서 사용 가능성이 보장되지 않아 정상적인 폴백(fallback)이 필요합니다.이를 관리하기 위해 Notifio에서 작성한 모든 파일에는 "Envelope" 구조에 "enc" 필드가 포함되어 암호화되었는지 또는 일반 텍스트로 저장되었는지 명시적으로 나타냅니다. 이는 그렇지 않으면 구문 분석 실패로 나타날 암호화된 데이터와 손상된 데이터 간의 모호성을 방지합니다. "writeEnvelope" 함수는 safeStorage를 사용할 수 있을 때 이를 사용하여 데이터를 암호화하고, 그렇지 않으면 일반 텍스트 JSON 문자열로 저장합니다.이 설계는 실행 중인 키링이 없는 Linux 머신과 같이 암호화가 불가능한 시나리오에서 기밀성보다 가용성을 우선시하는 의식적인 결정을 내립니다. 이러한 경우 데이터는 사용자 홈 디렉터리 내에 일반 텍스트로 저장되어 기능이 계속 작동하도록 합니다. "readEnvelope" 함수는 "enc" 필드를 명시적으로 확인하고 파일 형식을 추측하는 것을 거부하며, 암호화된 데이터를 해독할 수 없는 경우 오류를 발생시킵니다."Envelope" 자체에는 콘텐츠 버전과 별도로 버전 번호가 있어 컨테이너 형식과 콘텐츠 모양이 독립적으로 변경될 수 있음을 인정합니다. "canEncrypt" 함수는 safeStorage의 잠재적인 비가용성을 정상적으로 처리하여 Electron 환경 외부에서 오류를 발생시키는 대신 false를 반환합니다. 이 접근 방식은 플랫폼 API 종속성 없이 모듈을 안정적으로 로드하고 테스트할 수 있도록 합니다.중요하게도 읽기 경로는 파일 형식을 추측하는 것을 명시적으로 거부합니다. 파일이 암호화되었다고 주장하지만 safeStorage를 사용할 수 없는 경우 특정 오류를 발생시켜 암호문을 콘텐츠로 구문 분석하려는 시도를 방지합니다. 이 명확한 오류 보고는 지원 및 디버깅에 중요하며 암호화 실패와 일반 손상을 구분합니다.손상된 파일을 읽으면 폴백이 반환되어 덮어쓰기로 이어질 수 있지만, 이 위험은 데이터의 특정 특성(예: 단일 부울 또는 새 콘텐츠가 추가될 때만 기록되는 녹음)으로 완화됩니다. 설정 및 녹음 파일 모두에 동일한 봉투 형식이 사용되어 암호화 경로를 간소화하고 지속성 문제가 발생할 경우 디버깅을 단순화합니다.데이터 구조가 발전함에 따라 마이그레이션은 레거시 목적으로 여전히 액세스해야 하는 필드를 삭제할 수 있습니다. 이러한 경우 특정 "legacyMessage" 함수는 기본 마이그레이션을 우회하여 이전 데이터를 검색하며, 필드를 삭제하는 것이 완전히 비용이 없는 것은 아님을 인정합니다. 전반적인 규칙은 파일이 작성된 방식을 명시적으로 명시해야 하며, 명확한 오류 처리를 용이하게 하고 특정 코드 실행 없이 외부 분석을 가능하게 합니다.