🔐
C#でDPAPIを使用して機密データを安全に暗号化する方法
解法
C#でデータ保護API(DPAPI)を使用して機密データ(パスワードやAPIキーなど)を安全に暗号化・復号化する方法を紹介します。DPAPIを使用することで、Windowsの組み込み機能を利用して簡単かつ安全にデータを保護できます。
以下に具体的なコード例を示します:
using System;
using System.Text;
using System.Security.Cryptography;
// 暗号化関数
static string EncryptSensitiveData(string sensitiveData)
{
byte[] dataBytes = Encoding.UTF8.GetBytes(sensitiveData);
byte[] encryptedBytes = ProtectedData.Protect(dataBytes, null, DataProtectionScope.CurrentUser);
return Convert.ToBase64String(encryptedBytes);
}
// 復号化関数
static string DecryptSensitiveData(string encryptedData)
{
byte[] encryptedBytes = Convert.FromBase64String(encryptedData);
byte[] decryptedBytes = ProtectedData.Unprotect(encryptedBytes, null, DataProtectionScope.CurrentUser);
return Encoding.UTF8.GetString(decryptedBytes);
}
// 使用例
string apiKey = "my-super-secret-api-key";
Console.WriteLine($"元のAPIキー: {apiKey}");
string encryptedApiKey = EncryptSensitiveData(apiKey);
Console.WriteLine($"暗号化されたAPIキー: {encryptedApiKey}");
string decryptedApiKey = DecryptSensitiveData(encryptedApiKey);
Console.WriteLine($"復号化されたAPIキー: {decryptedApiKey}");
解説
-
NuGetパッケージのインストール:
まず、System.Security.Cryptography.ProtectedData
パッケージをインストールします。dotnet add package System.Security.Cryptography.ProtectedData
-
暗号化と復号化のメソッド:
-
EncryptSensitiveData
メソッド: APIキーなどの機密データを受け取り、DPAPIを使用して暗号化します。 -
DecryptSensitiveData
メソッド: 暗号化されたデータを受け取り、DPAPIを使用して元の機密データに復号化します。
-
-
DPAPIの使用例:
- APIキーを暗号化し、安全に保存できる形式に変換します。
- 必要なときに暗号化されたデータを復号化し、元のAPIキーを取得します。
補足情報
-
DPAPIの主な用途:
- アプリケーション設定内の機密情報(APIキー、アクセストークン)の保護
- ユーザーパスワードの安全な保存
- 暗号化キーやその他の機密データの保護
-
セキュリティ上の利点:
- Windows OSに組み込まれた暗号化機能を利用するため、独自の暗号化ロジックを実装するリスクを回避できます。
- ユーザーまたはマシン固有の鍵で暗号化されるため、他のユーザーやマシンでの復号化が困難です。
-
注意点:
- このコードはWindows環境でのみ動作します。
-
DataProtectionScope.CurrentUser
を使用しているため、暗号化されたデータは現在のユーザーアカウントでのみ復号化可能です。 - クロスプラットフォームアプリケーションでは、代替の暗号化方法を検討する必要があります。
DPAPIを使用することで、アプリケーション内の機密データを簡単かつ安全に保護できます。これにより、設定ファイルやデータベースに平文で機密情報を保存するリスクを大幅に軽減できます。
Discussion