Windows 8で機密データをローカルファイルに保存する最良の方法は何ですか? oAuthトークン/パスワードを保存する必要があるC#アプリケーションを開発しています。NETではデータの暗号化/復号化が一般的であると聞きましたが、経験がありません。 Windows8アプリにはWindowsPhoneと同様の独自の個人用/保護されたストレージ領域があることを考えると、暗号化は依然として推奨/必要ですか?
また、データを要求するたびに暗号化/復号化すると、パフォーマンスの問題が発生しませんか? (カスタム/ライトアルゴリズムを作成する方が良いでしょうか?)
UPDATE:モダン/メトロアプリはお互いのものを突くことが制限されていますが、デスクトップアプリケーションは、これらのAPIを介して保存されたすべてのデータに無制限にアクセスできます。 http://www.hanselman.com/blog/SavingAndRetrieveingBrowserAndOtherPasswords.aspx を参照してください。これには、これを示すコードが含まれています。
Win8には PasswordVault という新しいAPIがあり、これらすべての難しい問題を処理するように設計されています。本当に使いやすく、安全で、ユーザーがマシン間をローミングするように構成できるため、資格情報を1回入力するだけで済みます。これをOAuthトークンに正常に使用しました
資格情報の取得(WinRTが発生する愚かな例外に注意してください...実際にはnullを返す必要があります):
const string VAULT_RESOURCE = "[My App] Credentials";
string UserName { get; set; };
string Password { get; set; };
var vault = new PasswordVault();
try
{
var creds = vault.FindAllByResource(VAULT_RESOURCE).FirstOrDefault();
if (creds != null)
{
UserName = creds.UserName;
Password = vault.Retrieve(VAULT_RESOURCE, UserName).Password;
}
}
catch(COMException)
{
// this exception likely means that no credentials have been stored
}
資格情報の保存:
vault.Add(new PasswordCredential(VAULT_RESOURCE, UserName, Password));
資格情報の削除(ユーザーがアプリのログアウトボタンをクリックしたとき):
vault.Remove(_vault.Retrieve(VAULT_RESOURCE, UserName));
必要なものによって異なります。本当にパスワードを保存する必要がある場合は、3DES/RC2/Rijndaelなどの双方向暗号化アルゴリズムを使用する必要があります。
ただし、パスワードが正しいかどうかを確認するだけの場合は、一方向性関数を使用してハッシュを保存することをお勧めします。
機密データを扱うときは、Windows 8を使用している場合でも、暗号化/ハッシュ化することをお勧めします。暗号化は余分なオーバーヘッドを意味しますが、ほとんどの場合、速度の違いに気付くことはありません。
独自のカスタム/ライトアルゴリズムを作成する方がよいでしょうか?警備員として、私はそれに反対するようアドバイスします。人々は、既存のアルゴリズムの穴をテストし、改善し、見つけようと何年も費やしています。したがって、生き残ったものはかなり良いです。