Skip to main content

safeStorage

로컬 머신에 저장할 문자열을 간단하게 암호화하고 복호화하는 기능을 제공한다.

프로세스: 메인

이 모듈은 OS가 제공하는 암호화 시스템을 활용해 디스크에 저장되는 데이터에 추가적인 보호 기능을 제공한다. 각 플랫폼별 현재 보안 시맨틱은 다음과 같다.

  • macOS: 암호화 키는 앱을 위해 Keychain Access에 저장된다. 이 방식은 사용자의 재정의 없이는 다른 애플리케이션이 키를 로드할 수 없도록 한다. 따라서 동일한 사용자 공간에서 실행되는 다른 앱이나 사용자로부터 콘텐츠가 보호된다.
  • Windows: 암호화 키는 DPAPI를 통해 생성된다. Windows 문서에 따르면, "일반적으로 데이터를 암호화한 사용자와 동일한 로그온 자격 증명을 가진 사용자만 데이터를 복호화할 수 있다." 따라서 동일한 머신의 다른 사용자로부터는 보호되지만, 동일한 사용자 공간에서 실행되는 다른 앱으로부터는 보호되지 않는다.
  • Linux: 암호화 키는 윈도우 매니저와 시스템 설정에 따라 다양한 비밀 저장소에 생성되고 저장된다. 현재 지원되는 옵션은 kwallet, kwallet5, kwallet6, gnome-libsecret이며, 향후 Electron 버전에서 더 많은 옵션이 추가될 수 있다. 따라서 safeStorage API로 보호된 콘텐츠의 보안 시맨틱은 윈도우 매니저와 비밀 저장소에 따라 달라진다.
    • 일부 Linux 설정에서는 사용 가능한 비밀 저장소가 없을 수 있다. 사용 가능한 비밀 저장소가 없는 경우, safeStorage API로 저장된 항목은 하드코딩된 평문 비밀번호로 암호화되기 때문에 보호되지 않는다. 이 경우 safeStorage.getSelectedStorageBackend()basic_text를 반환한다.

macOS에서는 시스템 Keychain에 접근해야 하며, 이 과정에서 사용자 입력을 수집하기 위해 현재 스레드가 블로킹될 수 있다. Linux에서도 비밀번호 관리 도구가 사용 가능한 경우 동일한 현상이 발생할 수 있다.

safeStorage 모듈은 다음과 같은 메서드를 제공한다:

safeStorage.isEncryptionAvailable()

boolean 값을 반환 - 암호화가 가능한지 여부를 나타낸다.

  • Linux에서는 앱이 ready 이벤트를 발생시켰고 시크릿 키를 사용할 수 있는 경우 true를 반환한다.
  • MacOS에서는 Keychain을 사용할 수 있는 경우 true를 반환한다.
  • Windows에서는 앱이 ready 이벤트를 발생시킨 후 true를 반환한다.

safeStorage.encryptString(plainText)

  • plainText string

Buffer를 반환한다. 이는 암호화된 문자열을 바이트 배열로 표현한 것이다.

암호화가 실패하면 이 함수는 에러를 발생시킨다.

safeStorage.decryptString(encrypted)

  • encrypted Buffer

string을 반환한다. safeStorage.encryptString을 통해 암호화된 버퍼를 다시 문자열로 복호화한다.

복호화에 실패할 경우 이 함수는 에러를 던진다.

safeStorage.setUsePlainTextEncryption(usePlainText)

  • usePlainText boolean

이 함수는 리눅스 환경에서 현재 활성화된 데스크톱 환경에 대해 유효한 OS 패스워드 매니저를 확인할 수 없을 때, 대칭 키를 생성하기 위해 메모리 내 패스워드를 사용하도록 강제한다. 이 대칭 키는 암호화 및 복호화 함수에 사용된다. 이 함수는 윈도우와 맥OS에서는 아무런 동작을 하지 않는다.

safeStorage.getSelectedStorageBackend() Linux

string 타입을 반환한다. 리눅스에서 선택된 비밀번호 관리자의 사용자 친화적인 이름을 나타낸다.

이 함수는 다음 값 중 하나를 반환한다:

  • basic_text - 데스크톱 환경이 인식되지 않거나 --password-store="basic" 커맨드라인 플래그가 제공된 경우.
  • gnome_libsecret - 데스크톱 환경이 X-Cinnamon, Deepin, GNOME, Pantheon, XFCE, UKUI, unity 중 하나이거나 --password-store="gnome-libsecret" 커맨드라인 플래그가 제공된 경우.
  • kwallet - 데스크톱 세션이 kde4이거나 --password-store="kwallet" 커맨드라인 플래그가 제공된 경우.
  • kwallet5 - 데스크톱 세션이 kde5이거나 --password-store="kwallet5" 커맨드라인 플래그가 제공된 경우.
  • kwallet6 - 데스크톱 세션이 kde6인 경우.
  • unknown - 앱이 ready 이벤트를 발생시키기 전에 이 함수가 호출된 경우.