Xamarin.Essentials:セキュリティで保護されたストレージXamarin.Essentials: Secure Storage

SecureStorage クラスは、単純なキーと値のペアを安全に格納するのに役立ちます。The SecureStorage class helps securely store simple key/value pairs.

作業開始Get started

この API の使用を始めるには、Xamarin.Essentials の概要ガイドを読み、ライブラリが正しくインストールされてプロジェクトに設定されていることを確認してください。To start using this API, read the getting started guide for Xamarin.Essentials to ensure the library is properly installed and set up in your projects.

SecureStorage の機能にアクセスするには、次のプラットフォーム固有の設定が必要です。To access the SecureStorage functionality, the following platform-specific setup is required:

ヒント

アプリの自動バックアップは Android 6.0 (API レベル 23) 以降の機能です。ユーザーのアプリ データ (共有の設定、アプリの内部ストレージ内のファイル、その他の特定のファイル) がバックアップされます。Auto Backup for Apps is a feature of Android 6.0 (API level 23) and later that backs up user's app data (shared preferences, files in the app's internal storage, and other specific files). アプリが新しいデバイスに再インストールまたはインストールされると、データが復元されます。Data is restored when an app is re-installed or installed on a new device. これは、バックアップされ、復元するときに暗号化解除できない共有の設定を利用する SecureStorage に影響を与えます。This can impact SecureStorage which utilizes share preferences that are backed up and can not be decrypted when the restore occurs. Xamarin.Essentials では、リセットできるようにキーを削除することで自動的にこのケースを処理しますが、自動バックアップを無効にすることで追加の手順を実行できます。Xamarin.Essentials automatically handles this case by removing the key so it can be reset, but you can take an additional step by disabling Auto Backup.

バックアップを有効または無効にするEnable or disable backup

AndroidManifest.xml ファイルの android:allowBackup 設定を false に設定することで、アプリケーション全体の自動バックアップを無効にすることができます。You can choose to disable Auto Backup for your entire application by setting the android:allowBackup setting to false in the AndroidManifest.xml file. この方法が推奨されるのは、データを復元する別の方法を計画する場合のみです。This approach is only recommended if you plan on restoring data in another way.

<manifest ... >
    ...
    <application android:allowBackup="false" ... >
        ...
    </application>
</manifest>

選択的バックアップSelective Backup

自動バックアップを構成して、特定のコンテンツのバックアップを無効にすることができます。Auto Backup can be configured to disable specific content from backing up. カスタム規則セットを作成して、バックアップ対象から SecureStore 項目を除外することができます。You can create a custom rule set to exclude SecureStore items from being backed up.

  1. AndroidManifest.xmlandroid:fullBackupContent 属性を設定します。Set the android:fullBackupContent attribute in your AndroidManifest.xml:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. auto_backup_rules.xml という名前の新しい XML ファイルを、AndroidResource のビルド アクションで Resources/xml ディレクトリに作成します。Create a new XML file named auto_backup_rules.xml in the Resources/xml directory with the build action of AndroidResource. 次に、SecureStorage を除くすべての共有の設定を含める次の内容を設定します。Then set the following content that includes all shared preferences except for SecureStorage:

    <?xml version="1.0" encoding="utf-8"?>
    <full-backup-content>
        <include domain="sharedpref" path="."/>
        <exclude domain="sharedpref" path="${applicationId}.xamarinessentials.xml"/>
    </full-backup-content>
    

セキュリティで保護されたストレージの使用Using Secure Storage

自分のクラスの Xamarin.Essentials に参照を追加します。Add a reference to Xamarin.Essentials in your class:

using Xamarin.Essentials;

指定された_キー_に対する値をセキュリティで保護されたストレージに保存するには:To save a value for a given key in secure storage:

try
{
  await SecureStorage.SetAsync("oauth_token", "secret-oauth-token-value");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

セキュリティで保護されたストレージから値を取得するには:To retrieve a value from secure storage:

try
{
  var oauthToken = await SecureStorage.GetAsync("oauth_token");
}
catch (Exception ex)
{
  // Possible that device doesn't support secure storage on device.
}

注意

要求されたキーに関連付けられている値が存在しない場合、GetAsyncnull を返します。If there is no value associated with the requested key, GetAsync will return null.

特定のキーを削除するには、次を呼び出します。To remove a specific key, call:

SecureStorage.Remove("oauth_token");

すべてのキーを削除するには、次を呼び出します。To remove all keys, call:

SecureStorage.RemoveAll();

プラットフォームの実装の詳細Platform Implementation Specifics

Android キーストアは、共有の設定[アプリのパッケージ ID].xamarinessentials というファイル名で保存する前に、値を暗号化するための暗号キーを格納するために使用されます。The Android KeyStore is used to store the cipher key used to encrypt the value before it is saved into a Shared Preferences with a filename of [YOUR-APP-PACKAGE-ID].xamarinessentials. 共有の設定ファイルで使用されるキー (暗号化キーではなく_値_の_キー_) は、SecureStorage API に渡されるキーの _MD5 ハッシュ_です。The key (not a cryptographic key, the key to the value) used in the shared preferences file is a MD5 Hash of the key passed into the SecureStorage APIs.

API レベル 23 以上API Level 23 and Higher

新しい API レベルでは、Android キーストアから AES キーを取得し、AES/GCM/NoPadding 暗号と共に使用して、共有の設定ファイルに格納する前に値を暗号化します。On newer API levels, an AES key is obtained from the Android KeyStore and used with an AES/GCM/NoPadding cipher to encrypt the value before it is stored in the shared preferences file.

API レベル 22 以下API Level 22 and Lower

古い API レベルでは、Android キーストアは RSA キーの格納のみをサポートしています。これは RSA/ECB/PKCS1Padding 暗号と共に使用され、AES キー (実行時にランダムで生成されます) を暗号化し、キー SecureStorageKey の下で共有の設定ファイルに格納されます (まだ作成されていない場合)。On older API levels, the Android KeyStore only supports storing RSA keys, which is used with an RSA/ECB/PKCS1Padding cipher to encrypt an AES key (randomly generated at runtime) and stored in the shared preferences file under the key SecureStorageKey, if one has not already been generated.

SecureStoragePreferences API を使用し、Preferences ドキュメントで説明されているのと同じデータ永続化に従います。SecureStorage uses the Preferences API and follows the same data persistence outlined in the Preferences documentation. デバイスが API レベル 22 以下から API レベル 23 以上にアップグレードされる場合、アプリをアンインストールするか RemoveAll を呼び出さない限り、この種類の暗号化が使用され続けます。If a device upgrades from API level 22 or lower to API level 23 and higher, this type of encryption will continue to be used unless the app is uninstalled or RemoveAll is called.

制限事項Limitations

この API は、少量のテキストを格納することを想定しています。This API is intended to store small amounts of text. 大量のテキストを格納するためにこれを使用しようとすると、パフォーマンスが低下する可能性があります。Performance may be slow if you try to use it to store large amounts of text.

APIAPI

他の Xamarin ビデオは、Channel 9 および YouTube でご覧いただけます。Find more Xamarin videos on Channel 9 and YouTube.