パスワード
サーバサイドでは復元できないように保存する
ユーザアカウントの保護の他、秘密鍵の保護などでも使われるのでそれぞれ標準的なものがある
8文字までをパスワード、それ以上をパスフェーズという分け方も過去にあったかもしれない
ダイジェスト(ハッシュ)を利用するが、MD5, SHA-1などは廃止されているのでパスワード専用のアルゴリズムや最低でもSHA-2、SHA-3とかどう?
他の認証手段へ
よく漏れる
単純なハッシュ化などでも漏れやすい
単純なパスワードを利用すると複雑な暗号化でも無意味
使える文字 (目安)
英数記号
まともなところはUnicode文字を使ってもよい
RFC 8265 Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords
ユーザー名とパスワードを表す国際化文字列の準備、適用、比較
RFC 7613 → 8265
他の手法 (推奨)
公開鍵認証 (SSHなど、ブラウザでもPKI認証できるよ) 物理鍵
あまり使われないHTTP認証
RFC 7616 HTTP Digest Access Authentication RFC 7617 The 'Basic' HTTP Authentication Scheme
RFC 7235 Hypertext Transfer Protocol (HTTP/1.1): Authentication
RFC 8120 Mutual Authentication Protocol for HTTP
照合
TLSなどで経路が暗号化されている前提では上のような方法が取れる
パスワード相当のもの
セッションID、APIのもの、などは制限付きのそんなかんじ
ハッシュ値を攪拌するためのものは鍵やパスワードではなくsalt (塩)という
WebのAPI利用では nonce という使い捨ての乱数コードなどもある
変更
Xなどが対応?
plane 暗号化なし (禁止)
単純なハッシュ, ソルトなど (禁止)
SHA-512
など
アカウント用
md5_crypt
Argon2i
Argon2d
Argon2id
sha256_crypt
sha512_crypt
など
RFC 7677 scram-sha-256 scram-sha-256-plus RFC 8265 Preparation, Enforcement, and Comparison of Internationalized Strings Representing Usernames and Passwords
暗号用
PBES2 パスワード→ブロック暗号・ストリーム暗号 クライアントサイドの暗号化
暗記?
平文を保存(他の方式を検討する)
パスワード管理ツール