メインコンテンツへ飛ぶ

safeStorage

文字列をローカルマシンに保管するにあたって簡単な暗号化と復号へのアクセスを可能にします。

プロセス: Main

このモジュールは、OS 提供の暗号システムを使用して、ディスクの保存データにさらなる保護を追加します。 各プラットフォームの現在のセキュリティセマンティクスの概要を以下に示します。

  • macOS: 暗号化鍵は、ユーザーの許可なしに他のアプリケーションが読み込めないように キーチェーンアクセス にてアプリ用に保存されます。 したがって、コンテンツは同じユーザー空間で実行されている他のユーザーや他のアプリから保護されます。
  • Windows: 暗号化鍵は DPAPI を介して生成されます。 Windows のドキュメントによると、「大抵、データを暗号化したユーザーと同じログオン資格情報を持つユーザーのみがデータを復号できます」。 したがって、コンテンツは同じマシン上の他のユーザーから保護されますが、同じユーザー空間で実行されている他のアプリからは保護されません。
  • Linux: 暗号化鍵は、ウインドウマネージャーとシステム設定に応じて異なるシークレットのストアで生成され、保存されます。 現在サポートされているオプションは kwalletkwallet5kwallet6gnome-libsecret ですが、Electron の将来のバージョンではさらに多くのオプションが利用可能になる可能性があります。 そのため、safeStorage API を介して保護されたコンテンツのセキュリティセマンティクスは、ウインドウマネージャーとシークレットのストアによって異なります。
    • 注意として、すべての Linux セットアップでシークレットのストアが利用できるわけではありません。 シークレットのストアが利用できない場合、safeStorage API で保存されたアイテムはハードコードされた平文のパスワードで暗号化されるため、保護はされません。 これは safeStorage.getSelectedStorageBackend()basic_text を返すかどうかで検出できます。

なお、Mac ではシステムのキーチェーンへのアクセスが必要であり、これらの呼び出しがユーザ入力の収集のために現在のスレッドをブロックすることがあります。 パスワード管理ツールが利用可能な場合、Linux でも同じことが言えます。

メソッド

safeStorage モジュールには以下のメソッドがあります。

safeStorage.isEncryptionAvailable()

戻り値 boolean - 暗号化が利用可能かどうか。

Linux では、app で ready イベントが発生し、かつ秘密鍵が利用可能である場合は true を返します。 MacOS では、キーチェーンが利用可能な場合は true を返します。 Windows では、アプリで ready イベントが発生した以降は true を返します。

safeStorage.encryptString(plainText)

  • plainText string

戻り値 Buffer - 暗号化した文字列を表すバイトの配列。

この関数は、暗号化に失敗するとエラーを送出します。

safeStorage.decryptString(encrypted)

  • encrypted Buffer

戻り値 string - 復号した文字列。 safeStorage.encryptString で得た暗号化されたバッファを、文字列に復号します。

この関数は、復号に失敗するとエラーを送出します。

safeStorage.setUsePlainTextEncryption(usePlainText)

  • usePlainText boolean

Linux でのこの関数は、現在のアクティブなデスクトップ環境に対して有効な OS のパスワードマネージャーを決定できない場合、モジュールがインメモリのパスワードを使って暗号化/復号関数で使用する共通鍵を作成させます。 この関数は Windows と macOS では何もしません。

safeStorage.getSelectedStorageBackend() Linux

戻り値 string - Linux で選択されたパスワードマネージャーのユーザーフレンドリーな名前。

この関数は以下のいずれかの値を返します。

  • 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 イベントを発行する前に関数が呼び出されたとき。