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