MW211 EXIT

devlog
設計/md5によるパスワード隠蔽
2014年04月18日
md5で変換(PHPでは「md5()」)すると、不可逆変換なので、元の値が類推できない。
この特性を使って、パスワードをmd5変換後の値で管理し、
万が一それが流出してもパスワードを読み取られないようにする対策がある。
#照合は変換後の値で同一かを判定する
  変換前の値を知らないと変換後の値を生成できないという寸法

但し、そのまま変換してしまうと、変換表を使って逆算できてしまう。
#想定される頻出の文字列を実際に変換してみて以下のような変換表がつくれる。
  ┌────┬────────────────┐
  │ 変換前 │             変換後             │
  ├────┼────────────────┤
  │pass    │1a1dc91c907325c69271ddf0c944bc72│
  ├────┼────────────────┤
  │passwd  │76a2173be6393254e72ffa4d6df1030a│
  ├────┼────────────────┤
  │password│5f4dcc3b5aa765d61d8327deb882cf99│
  ├────┼────────────────┤
  │admin   │21232f297a57a5a743894a0e4a801fc3│
  ├────┼────────────────┤
  │abc     │900150983cd24fb0d6963f7d28e17f72│
  ├────┼────────────────┤
  │123     │202cb962ac59075b964b07152d234b70│
  └────┴────────────────┘
「1a1dc91c907325c69271ddf0c944bc72」を入手した場合は、元は「pass」と類推できる。
また、隣の人と同じ変換後の値であれば、元も同じだったと類推できる。

ということで、ユーザIDなどの一意な情報を組み合わせて(文字列結合)、
変換すればセキュリティが高まるだろう。

また、「ユーザID+パスワード」だけだと類推されてしまう可能性があるので
「ユーザID+パスワード+適当な文字列」とかにすれば、もっとよい。
分類:設計