質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

4015閲覧

vb.netでのパスワードの安全な取扱い方

wellwell

総合スコア5

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2020/02/22 02:59

独学の初心者です。

vb.netでユーザーのヤフーメール等のメールアカウントを使用して、メールを送信するフォームアプリを作っています。
利便性を考えてアドレスやパスワードを保存できるようにしたいのですが、推奨されるパスワードの安全な取扱いがよくわかりません。(保存と使用)

コードとしては、mailmessageクラスを使用してsmtp認証をしようとしていて、その際Credentialsプロパティ に平文のパスワードを渡さないといけません。

https://www.websec-room.com/2013/02/27/239

この辺りのページを見ましたが、パスワードはハッシュ化しており、独自方法での管理は推奨されていないとのことで、平文を扱う場合の推奨方法が知りたいです。
保存の場合は何らかの暗号化をした後、保存するとしてその推奨方法はどのようなものなんでしょうか。
また使用する時にも、securestringという安全なクラスがあることはわかりましたが、他のページを見るとsecurestringの使用は推奨されていないと書いてあり、どうすればいいのかわかりませんでした。

初心者で的外れなことを聞いているかもしれませんが、1から教えて頂けると大変助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/22 03:14

質問者さん個人がメールを送るときに SMTP 認証を受けるための質問者さん個人のパスワードの話ですか? それとも、質問者さんが、例えばサイトの管理者か何かで、多数のユーザーのパスワードを DB などに保有して管理するときの話ですか?
Zuishin

2020/02/22 03:22 編集

リンク先にあるのはパスワードの保存方法ではなく、ユーザーの入力したパスワードが正しいかどうか確かめるためのデータの保存方法ですね。パスワードは保存していません。 これはサーバーで行うものです。 ローカルでパスワードを保存する際には、自分のみ閲覧できる場所に平文で保存しても一応大丈夫です。自分のログインが保護されているので保存したデータもログインパスワードで保護されているという理屈です。 PC がクラッキングされることを予測し、それでも守りたいほどの大事なデータなら二重三重の守りを固めなければいけません。
wellwell

2020/02/22 03:58

Zuishinさま 投稿ありがとうございます。 確かにログインにより既にデータは保護されているというのも納得できます。 難しく考え過ぎていたのかもしれません。 ただ一般のメーラーはどのようにパスワードを管理しているのか気になったのです。 適当にAESで暗号化して保存しておけばそれでよく、メモリ上に平文が流れることなどは気にしなくてよいということでしょうか?
退会済みユーザー

退会済みユーザー

2020/02/22 04:17 編集

私の回答にマイナス評価を付けた人、理由を書こう。
Zuishin

2020/02/22 04:25

メモリ上のことまで気にしていたら何もできません。そこまで考えているものは無いと思います。セキュリティと利便性は往々にしてトレードオフの関係にあるので、どこでバランスを取るかはそれぞれで考えなければならないと思いますが、PC に侵入された時点でだいたいアウトです。AES で暗号化するのは時間稼ぎにはなるのと、ユーザーにそれほど不便を強いないので、良い考えと私は思います。しかしそれで稼いだ時間を活用できないのでは単なる無駄です。セキュリティを気にするなら、パスワードが盗まれたことを検知するシステムと、その PC 以外から盗まれたパスワードを無効化する手段を持っておくのが良いのではないでしょうか。
wellwell

2020/02/22 04:58

Zuishinさま 技術者では無いので一般的に要求されるセキュリティレベルがどのくらいのものなのかわからなかったのです。 一般のメーラーやブラウザがパスワードを記憶してると思いますが、それと同程度のセキュリティが実現出来ればいいと思っています。 AESでは同程度にならないでしょうか?
Zuishin

2020/02/22 05:13

AES で暗号化するにはキーが必要で、今度はそのキーをどこに保存しておくかということが求められます。そのキーを AES で保護するとまたそのキーが必要になります。いつまでたどってもきりがないので、適当なところでやめなければいけません。「同程度のセキュリティ」とは言っても、セキュリティレベルはそのソフトによってまちまちですから、自分でどの程度までと決めなければいけません。 たとえばパスワードをバックアップできるソフトなどは、それをリストアするのにパスワードが必要なものとそうでないものがあると思います。必要でないソフトのセキュリティレベルは、必要なソフトのものより低いと言えます。 よって「同程度」というものはありません。あくまで提供元が決める、もしくはユーザーがオプションで選ぶことです。 私の個人的意見では、キーをアプリにハードコーディングした AES での保存でも十分だと認識しますし、おそらくそれがクラックされて社会的に責められることは、ほぼないと思います。が、保証はしませんし、できません。
wellwell

2020/02/22 08:32

遅れてすみません。 ありがとうございます。 大変参考になりました。 その線で進めてみようと思います。 独学だと情報は集められますが、既に古い情報もあるでしょうし何を参考にしていいか常識とか標準がわからず、一番苦労しています。
guest

回答2

0

ベストアンサー

質問に対する私のコメント、

質問者さん個人がメールを送るときに SMTP 認証を受けるための質問者さん個人のパスワードの話ですか? それとも、質問者さんが、例えばサイトの管理者か何かで、多数のユーザーのパスワードを DB などに保有して管理するときの話ですか?

に返事が無いですが、たぶん前者であろうと想像して・・・

まず以下の記事を読んでもらって、

メールの送受信を暗号化するPOP3s/IMAP4s/SMTPs(over SSL)とは
https://www.atmarkit.co.jp/ait/articles/0801/18/news126.html

上の記事の図にある「メールサーバ」⇔「メールクライアント」の間の暗号化を実現するために、質問者さんが作っている「メールを送信するフォームアプリ」をどのように実装するかを考える話になると思います。

vb.net smtp ssl などをキーワードにググるといろいろ参考になりそうな記事がヒットすると思います。例えば下記。自分でもやってみてください。

SSL/TLSを使用してSMTPでメールを送信する
https://dobon.net/vb/dotnet/internet/smtpssltls.html

【追記】

デスクトップ上にパスワードを書いたtxtファイルを置いている、等と揶揄されることがよくあると思いますが、ローカルでそういった事態を起こさないパスワードの保存方法が知りたかったのです。

下の 2020/02/22 13:02 の私のコメントで「参考に後で画像を回答欄に貼っておきます」と書きましたが、下にそれを貼っておきます。

イメージ説明

こういう機能があっても ID / パスワード一覧のメモを作る人はいると思いますが、それは質問者さんのメーラーの作り方とは次元の違う話だと思います。

個人の PC がクラッキングされてメーラーに保存したパスワードが漏洩する可能性まで考えるという話をしたいのですか?

投稿2020/02/22 03:40

編集2020/02/22 04:33
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wellwell

2020/02/22 03:50

SurferOnWwwさま 早速の回答ありがとうございます。 イメージとしてはユーザーにアプリを配布して第三者に使ってもらうイメージです。 通信経路上の話はおっしゃる通りsmtp over sslでの送信を考えております。 私が聞きたかったのはローカル上でのパスワードの取扱いについてです。 デスクトップ上にパスワードを書いたtxtファイルを置いている、等と揶揄されることがよくあると思いますが、ローカルでそういった事態を起こさないパスワードの保存方法が知りたかったのです。 うまく説明出来ずすみません。
退会済みユーザー

退会済みユーザー

2020/02/22 04:02

> デスクトップ上にパスワードを書いたtxtファイルを置いている、等と揶揄されることがよくあると思いますが、ローカルでそういった事態を起こさないパスワードの保存方法が知りたかったのです。 質問者さんが作っている「メールを送信するフォームアプリ」に保存できるように作れば良いと思いますが。 質問者さんが普段使っているメーラーもそうなっていませんか? 自分は Windows Live メールを使ってますが、そういう設定があります。参考に後で画像を回答欄に貼っておきます。
wellwell

2020/02/22 04:47

画像までいろいろとありがとうございます。 >質問者さんが作っている「メールを送信するフォームアプリ」に保存できるように作れば良いと思いますが。 すみません、この部分の具体的な方法がわからないので教えて頂けますでしょうか? アウトルックの場合だとレジストリ に保存していたと思いますが、レジストリ も今は推奨ではないと聞きます。 上にも書きましたが、私の知識ですと、パスワードをAESで暗号化してXMLに保存するくらいしかわかりません。 > 個人の PC がクラッキングされてメーラーに保存したパスワードが漏洩する可能性まで考えるという話をしたいのですか? その可能性も考えています。 ですが、一般のメーラーのセキュリティレベルが実現出来ればそれでいいと考えています。 一般のメーラーに比べて私のアプリのセキュリティレベルが低いことでユーザーに危険を及ぼすという事態を避けたいのです。
YAmaGNZ

2020/02/22 05:00

自分で作成したアプリケーションでパスワードを保存する際の安全性についての話なのに何の話してるの?
退会済みユーザー

退会済みユーザー

2020/02/22 05:15 編集

Windows Forms アプリでユーザー固有の情報を保存しユーザーに変更を許すなら、自分が思いつくのは Settings.settings にスコープをユーザーに設定して保存するということです。 その場合、以下のフォルダに user.config という名前で保存されます。 C:\Users\<ユーザー名>\AppData\Local\<アプリケーション名> 詳しくは以下の記事を見てください。 構成ファイルの保存場所 http://surferonwww.info/BlogEngine/post/2019/09/01/where-are-configuration-files.aspx その暗号化の話は「config 暗号化」などをキーワードにググると参考になる記事がいろいろヒットすると思いますので、やってみてください。
wellwell

2020/02/22 08:18

遅れてすみません。 教えて頂いた方法で調べてやってみようと思います。 大変ありがとうございました。
退会済みユーザー

退会済みユーザー

2020/02/22 08:44

質問者さんの知りたい情報は得られてこれ以上質問が無ければこのスレッドはクローズしてください。まだ不明点・質問があれば、それを書いてください。
退会済みユーザー

退会済みユーザー

2020/02/22 08:46

上の私のレスが行き違いになってしまったようで、すみません。
guest

0

勝手に追記、覚え書き

パスワードの保存先としてはウィンドウズ 標準の資格情報マネージャーというものがあると知り、最適と判断

資格情報マネージャーはwin32APIから操作可能だが、vb.netのフォームアプリでは列挙体でのパラメータ指定等かなり面倒でnugetからAPIを叩くパッケージを導入

ユニバーサルウィンドウズ プラットフォームでの開発ではpasswordvaultクラスを使えば簡単に資格情報マネージャーを操作できるようでした
但し、前者はWindows資格情報、後者はweb資格情報を操作しており、厳密には操作対象は異なる

投稿2020/04/16 04:31

wellwell

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問