Edited at

パスワードが平文で送られてきた

More than 1 year has passed since last update.

image

アプリの会員登録したら、登録したパスワードが平文で送られてきました :scream:

アプリ名は本文内から分かるので、このメールをゲットできたらアプリをインストールしてログインすることが出来てしまいます。生年月日や住所、メールアドレスなどが見ることができます。。

駄目なんだよ。 :rage:

って警報を鳴らしたい。

アプリの種類はお薬手帳で、薬局から薬と一緒に貰うQRコードを読み取って履歴を管理できるものです。ちょっと見たところ薬関連のアプリは沢山あったので流行ってるんですかね。

勝手な推測ですが、恐らくアプリの所有者はアプリやセキュリティの知識はなく、開発会社が仕様を決めたのかなと思いますが、酷すぎますね。実装したプログラマーも指摘するべきでしょう。

image

↑ 知らない人に届いてしまうことを想定してるのになぜ気づかない!

きっとデータベースにも平文のまま保存されているはずです。

きっとこんな感じ

+-----------+-------------+

| login_id | password |
+-----------+-------------+
| userA | password |
| userB | 11111 |
| userC | 0000 |
...

駄目なんだよ。 :rage:

不正にアクセスされてしまった場合でも被害を最小限にするために解読に時間が掛かるようにしておかなければなりません。どんな暗号化やハッシュ化しても時間があれば解読されてしまうことは注意してください。

例えば、パスワードとして 5f4dcc3b5aa765d61d8327deb882cf99 が保存されてたとすると、悪い人は直ぐMD5のハッシュ値だなと分かってしまいます。するとこのハッシュ値をもつ文字列を見つけるだけです。

$ echo -n 'password' | md5

5f4dcc3b5aa765d61d8327deb882cf99

パスワードの保存は、以下が一般的なので参考にしてもらいたい。

PHP: 安全なパスワードハッシュ

上記を補足すると、ソルトキーをユーザー毎に用意してパスワードと共にハッシュ化します。さらにハッシュを数千〜数万の単位で繰り返し(ストレッチング)て解読を遅くする方法です。

ソルトキーでレインボーテーブル(パスワードとハッシュ値の対照表)攻撃を遅くして(ユーザー毎のソルトキーなのでユーザーごとにレインボーテーブルを準備しないといけないので)、さらにストレッチングでブルートフォース攻撃(総当たり攻撃)を遅くするというものです。

コンピュータの処理性能は日々進化しているので、本来であれば日々ストレッチング回数を上げて遅くさせる時間を一定に保つことがベストなのです。ですが現実は難しいのでPHPの文献にあるような標準の1024回(2^10)ぐらいで個人的には良いと思ってます。少ない!と思う人が居たらごめんなさい、、

最後に。

こんな大変なことをしてまで保存しなくてはならないパスワードをメールで簡単に送ってはいけません。

駄目なんだよ。絶対に。 :rage: :rage:

追伸:

このアプリは改修検討してくれるそうです。直してくれる事を願ってます。 :bow: