資格情報を使用するためにできることは何でも、攻撃者も同様です
難読化は実際にあなたを買いますか?時間。結局のところ、データは自分で使用するスキームと同様にあります。誰かがあなたのスキームが何であるかを理解するのは時間の問題です。これはすべて、パラノイアのレベルと、快適なリスクのレベルの評価に依存します。特に、資格情報を保存する方法は、データベースを実行しているマシンにアクセスできる人に依存する必要があります。
最終的にはゴムが道路にぶつかる必要があるので、出て行って征服してください。難読化を完全にノックしないでください。それをスマートなプラクティスと結合するようにするだけです。
アプローチと提案
アカウントごとにアプリケーションごとのAPIキーを生成し、マシンで使用する
サードパーティのアカウントからAPIキーを生成できる場合、これにより、すべての潜在的なアプリケーションをシャットダウンせずにアカウントへのアクセスを取り消すことができます。多くのサービスには、これらのタイプのAPIキー(Google、Twitter、stackexchange、Facebookなど)があります。
単に「アプリケーション」を設定し、消費者キーと秘密、およびアクセストークンとアクセスシークレットを使用します。マシンはこれらの資格情報を保存する必要があります。妥協が発生した場合、そのキーのセットを取り消す必要があります。さらに、アカウントごとのアクセス許可を指定することができます。
資格情報のセットにユーザーごとのパスワードを使用する
ユーザーがログインした場合にのみ、パスワードのセットを解除します。これを行うには、適切なハッシュスキームと、キーの前にいくつかのハッシュステップが発生する検証チェックに基づいてキーを生成します。
とにかくディスクに暗号化します
1つのキーを使用して、常に資格情報を暗号化できます。次に、保護するための鍵は1つだけです(他のすべての秘密を保護します)。その後、他の資格情報にアクセスする前に、復号化する必要があります。
システムのキーリングに秘密を保存します
Linuxで、を使用します gnome-keyring. 。次に、Simple Create-Read-Update-Deleteコールを作成して、パスワードデータベースとして扱うことができます。 GNOMEキーリングは、PKCS#11標準に基づいています。
Gnome-KeyringにはAPIがあります キーリングと取得アイテムに保存するため。
/* A callback called when the operation completes */
static void
found_password (GnomeKeyringResult res, const gchar* password, gpointer user_data)
{
/* user_data will be the same as was passed to gnome_keyring_find_password() */
// ... do something with the password ...
/* Once this function returns |password| will be freed */
}
static void
find_my_password()
{
gnome_keyring_find_password (GNOME_KEYRING_NETWORK_PASSWORD, /* The password type */
found_password, /* callback */
NULL, NULL, /* User data for callback, and destroy notify */
"user", "me",
"server", "gnome.org",
NULL);
}
Windows 7+では、「暗号化されたファイルシステム」(EFS)機能を使用します。すべてのファイルは、Windowsパスワードで順番に保護されている証明書で暗号化されます。
しかし、これをあなたを誤った安心感に陥らせないでください。これが実行中のサーバーである場合、誰かがボックスにネットワークアクセスを取得した場合、キーリングデータ自体にもアクセスできます。
アクセスを付与するリモートマシンをセットアップします
公開キーと秘密鍵のペアを使用して、資格情報またはロック解除キーへのアクセスを許可するマシンをセットアップできますか?
ハッシュで
ユーザー名とパスワードをハッシュすると、それらを取り戻していません。ハッシュは、一方向関数になるように設計されています。
あなたは出来る エンコード しかし、難読化のためのデータですが、私はそれを推奨していません。