パスワード保存の常識(?)

自己紹介

資料

パスワード保存の常識(?)

保存
  • saltを付けてハッシュ化
    • 保存された情報からはパスワードは復元困難
照合
  • 入力値にsaltを付けてハッシュ化. 保存情報と照合

GNU/Linuxでのパスワード保存

他のUnixも同様

形式
$id$salt$hashed
$6$3d1ahuOb$KiH....(略)

ハッシュとは?

暗号学的ハッシュ関数 - Wikipedia より

salt(ソルト, お塩)とは?

ハッシュの値をかきまぜる「お塩」.

実際の処理

PHP風の言語で記述

$x = '';
for($i = 0; $i < $iter; ++$i) {
$x = hash($x . $password . $salt);
}

どちらも ハッシュを何度も利用している(stretch)

stretchとは?

stretchの効果(1)

stretchの効果をはかるために, PHPのmcrypt拡張でSHA-256を繰り返し呼ぶコードで計測

Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz で 1秒に 約50万回計算できた.

stretchの効果(2)

文字数 総パスワード数
n 64^n
3 26万
4 1677万
5 10億
6 687億
7 4兆
8 281兆

stretchの効果(3)

1CPU(8コア)のPCでパスワード解析する場合を考察

なぜUnixはこの方式なのか?

常識(?)のまとめ

Webシステムでは?

鍵を用いる場合の手法案

(共通鍵)暗号

ハッシュ+暗号

常識(?)通りにハッシュ化したあとで暗号化

鍵付きハッシュ(1)

鍵付きハッシュ(2)

鍵付きハッシュ(3)

まとめ

方式 弱パスワードの保護 生パスワード復元 鍵管理
ハッシュ stretchで対応 不可能 不必要
暗号 可能 可能 必要
ハッシュ+暗号 可能 不可能 必要
鍵付きハッシュ 可能 不可能 必要

参考文献

man 3 crypt

Manpage of CRYPT

CRYPTOGRAPHY ENGINEERING

ISBN-13: 978-0470474242

認証技術 パスワードから公開鍵まで

ISBN-13: 978-4274065163