ユーザーが管理しているパスワードをファイルに保存しておき、後ほど利用するオープンソースのアプリケーションを開発しています。ただ保存したファイルのパスワードがそのまま見られるのはよくありません。そこでパスワードの部分を可逆な暗号方式を使って保存しようと考えていますが、結局暗号のキーがソースコードへ埋め込まれてしまうため、見ようと思えばソースを使って見えてしまうという問題を抱えています。これを解決するいい方法をご存知の方、お教えください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/11/15 21:14:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226

ポイント60pt

FirefoxやThunderbirdがやっているようにマスターパスワードを使うやり方はどうでしょう?

・パスワードはファイルに保存する。

・ただし平文では保存せずに、マスターパスワードを入力させてそれで暗号化したファイルを保存する。

・暗号化されたファイルのマスターパスワードはアプリケーションは知る必要が無いのでソースを見ても問題ない。

・アプリケーションの起動時or最初にパスワードが必要になるタイミングなどにマスターパスワードの入力をさせて、起動中はそれをメモりに覚えておく。

・アプリケーションはメモリ中のマスターパスワードでファイルを復号化して保存されたパスワードを取得する。

こんな感じです。

その他の回答1件)

id:dev_zer0 No.1

回答回数332ベストアンサー獲得回数25

ポイント10pt

多分、可逆な暗号方式を使って保存という考え方そのものが問題です

例えばUnixの場合は/etc/passwd(最近は/etc/shadow)にパスワードが保存されていますが

暗号化アルゴリズムを使って暗号化された後のパスワードを保存しています


多分、今の認証方式は

1. ファイルに生のパスワードを保存

2. ユーザから入力されたパスワードが1.と同じかどうかチェック

3. 同じ場合、認証成功

方式だと思いますが

1. ファイルに暗号化した後のパスワードを保存

 # 簡易な暗号化アルゴリズムは例えばcryptなどがあります

2. ユーザから入力されたパスワードを1.と同様の方法で暗号化する

3. ユーザから入力された暗号化されたパスワードが1.と同じかどうかチェック

4. 同じ場合、認証成功


という方法が一般的だと思います

一応、cryptのアルゴリズムは非可逆の為、

暗号化されたパスワードが漏洩したとしても

それから元のパスワードを推測することは難しいです

まぁ、総当り攻撃をすればどんな暗号でもいずれ破られてしまいますが...

id:y-kawaz No.2

回答回数1422ベストアンサー獲得回数226ここでベストアンサー

ポイント60pt

FirefoxやThunderbirdがやっているようにマスターパスワードを使うやり方はどうでしょう?

・パスワードはファイルに保存する。

・ただし平文では保存せずに、マスターパスワードを入力させてそれで暗号化したファイルを保存する。

・暗号化されたファイルのマスターパスワードはアプリケーションは知る必要が無いのでソースを見ても問題ない。

・アプリケーションの起動時or最初にパスワードが必要になるタイミングなどにマスターパスワードの入力をさせて、起動中はそれをメモりに覚えておく。

・アプリケーションはメモリ中のマスターパスワードでファイルを復号化して保存されたパスワードを取得する。

こんな感じです。

  • id:Sampo
    8年前の質問ですが、Windows環境に限ってならばよりよい解決方法があります。

    CryptProtectData関数 https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa380261(v=vs.85).aspx というAPIがあり、これによって「暗号化したユーザーにしか復号できない」もしくは「暗号化したコンピュータでしか復号できない」暗号文を生成可能です。

    これならばアプリがキーを持つことがないため質問の要件を満たせます。

この質問への反応(ブックマークコメント)

トラックバック

  • はてなで質問してみた。 Gmailなど、パスワードを使うサービスへ接続するためにはGmailへ接続するためのパスワードを入力する必要がありますよね。で、その内容を今は平文でファイルに保
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません