#author("2018-06-03T23:39:26+09:00;2018-06-03T22:45:25+09:00","","")
#author("2018-06-16T17:30:45+09:00;2018-06-16T16:35:55+09:00","","")
* パスワードハッシュアルゴリズムのSHA-2対応 [#i424f475]

- ページ: [[BugTrack]]
- 投稿者: [[umorigu]]
- 優先順位: 低
- 状態: 完了
- カテゴリー: 本体新機能
- 投稿日: 2018-04-28 (土) 00:51:06
- バージョン: 1.5.1
- リリース予定バージョン: 1.5.2

** メッセージ [#z673f016]
パスワード用のハッシュアルゴリズムにSHA-2(SHA-256, SHA-512)を利用できるようにする
パスワード用のハッシュアルゴリズムにSHA-2(SHA-256, SHA-384, SHA-512)を利用できるようにする

関連:
- [[BugTrack/709]]: パスワードのフォーマットを選択可能に(LDAP互換に)
- [[official:質問箱/5298]]: アカウント登録のリモート登録


--------

*** 使用できるフォーマット (追加) [#p7b992f7]

|~ |>|~保存フォーマット / scheme prefix                    | アルゴリズム   |ソルト(seed)|h
|  |                                    |                  |CENTER:         |CENTER:     |c
| 1| LDAP SSHA512 (sha-512 with a seed) | {SSHA512}        | SHA-512        | ''あり''   |
| 2| LDAP SHA512                        | {SHA512}         | SHA-512        | なし       |
| 3| LDAP SSHA384 (sha-384 with a seed) | {SSHA384}        | SHA-384        | ''あり''   |
| 4| LDAP SHA384                        | {SHA384}         | SHA-384        | なし       |
| 5| LDAP SSHA256 (sha-256 with a seed) | {SSHA256}        | SHA-256        | ''あり''   |
| 6| LDAP SHA256                        | {SHA256}         | SHA-256        | なし       |
| 7| PHP hash('sha512')関数の出力       | {x-php-sha512}   | SHA-512        | なし       |
| 8| PHP hash('sha384')関数の出力       | {x-php-sha384}   | SHA-384        | なし       |
| 9| PHP hash('sha256')関数の出力       | {x-php-sha256}   | SHA-256        | なし       |


*** 参考文献など (追加) [#e800f99b]

- RFC 6234: US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF) https:// tools.ietf.org/html/rfc6234
-- パスワードハッシュアルゴリズム SHA-2 (SHA-256, SHA-384, SHA-512を含む) について

- Internet-Draft: Lightweight Directory Access Protocol (LDAP): Hashed Attribute values for 'userPassword' (March 13, 2013)
https:// tools.ietf.org/html/draft-stroeder-hashed-userpassword-values-01
-- OpenLDAPが使用している scheme prefix の名称 "{SHA256}" "{SSHA256}" 等について

- OpenLDAP pw-sha2 モジュールのソースコード (GitHub上のミラー)
-- github.com/openldap/openldap/tree/master/contrib/slapd-modules/passwd/sha2

- 他製品での採用事例
-- Dovecot v2.x documentation: Authentication / Password Schemes wiki2.dovecot.org/Authentication/PasswordSchemes
- 他製品での事例
-- Dovecot v2.x documentation: Authentication / Password Schemes https:// wiki2.dovecot.org/Authentication/PasswordSchemes
 {SSHA256}SoR/78T5q0UPFng8UCXWQxOUKhzrJZlwfNtllAupAeUT+kQv
-- CA Directory - 12.6: 管理 / CA Directory を管理するツール / DXtools
docops.ca.com/cad126jp/%E7%AE%A1%E7%90%86/ca-directory/dxtools/dxpassword
-- iRedMail: Password hashes supported by iRedMail docs.iredmail.org/password.hashes.html
-- Hashcat: Example hashes hashcat.net/wiki/doku.php?id=example_hashes (AIXは少々イレギュラーであるようだ)
https:// docops.ca.com/cad126jp/%E7%AE%A1%E7%90%86/ca-directory/dxtools/dxpassword
-- iRedMail: Password hashes supported by iRedMail https:// docs.iredmail.org/password.hashes.html
 {SSHA512}FxgXDhBVYmTqoboW+ibyyzPv/wGG7y4VJtuHWrx+wfqrs/lIH2Qxn2eA0jygXtBhMvRi7GNFmL++6aAZ0kXpcy1fxag=
-- Hashcat: Example hashes https:// hashcat.net/wiki/doku.php?id=example_hashes
--- AIXは少々イレギュラーのようだ

*** SHA-2 ハッシュの生成方法 [#z9e39f86]

- OpenLDAP付属 の slappasswd コマンドによる生成方法 (CentOS 7 (7.4.1708) with openldap (openldap-2.4.44-5) の場合)
 $ alias slappasswd="slappasswd -o module-path=/usr/lib64/openldap -o module-load=pw-sha2"
 $ slappasswd -h '{SHA256}'  -s pass
 $ slappasswd -h '{SHA384}'  -s pass
 $ slappasswd -h '{SHA512}'  -s pass
 $ slappasswd -h '{SSHA256}' -s pass # saltは指定不可、ランダム、固定長
 $ slappasswd -h '{SSHA384}' -s pass # saltは指定不可、ランダム、固定長
 $ slappasswd -h '{SSHA512}' -s pass # saltは指定不可、ランダム、固定長
-- 備考: pw-sha2 モジュールが使用するsaltの長さ(上記ソースコードより / Base64 で処理する前)
 slapd-sha2.c:#define SHA2_SALT_SIZE 8
 slapd-sha2.c:   char          saltdata[SHA2_SALT_SIZE];

- OpenLDAP pw-sha2 モジュールのソースコード 上のREADMEに {SHA256} {SHA384} {SHA512} の生成方法として以下が紹介されている
 $ echo -n "secret" | openssl dgst -sha256 -binary | openssl enc -base64
 $ echo -n "secret" | openssl dgst -sha384 -binary | openssl enc -base64
 $ echo -n "secret" | openssl dgst -sha512 -binary | openssl enc -base64

- openssl_slappasswd.sh -- OpenLDAP slappasswd(with pw-sha2)-compatible hash generator using openssl and shellscript github.com/henoheno/openssl_slappasswd.sh
-- 上記の openssl を用いるアイデアを拡張し、SHA-2に関してslappasswd互換+αの機能性を持たせたシェルスクリプト
- openssl_slappasswd.sh -- OpenLDAP slappasswd(with pw-sha2)-compatible hash generator and verifier, only with openssl and shellscript -- https:// github.com/henoheno/openssl_slappasswd.sh
 $ ./openssl_slappasswd.sh -h '{SHA256}'  -s pass
 $ ./openssl_slappasswd.sh -h '{SHA384}'  -s pass
 $ ./openssl_slappasswd.sh -h '{SHA512}'  -s pass
 $ ./openssl_slappasswd.sh -h '{SSHA256}' -s pass # saltを指定しない場合ランダム、固定長
 $ ./openssl_slappasswd.sh -h '{SSHA384}' -s pass # saltを指定しない場合ランダム、固定長
 $ ./openssl_slappasswd.sh -h '{SSHA512}' -s pass # saltを指定しない場合ランダム、固定長
-- 上記の openssl を用いるアイデアを拡張し、SHA-2に関してslappasswd互換+αの機能性を持たせたシェルスクリプト。OpenLDAPが不要であるところがポイント。saltを指定可能。


--------
- 対応しました。[[commit:4669d6b232]] {x-php-sha256} と {x-php-sha512} が使えるようになりました -- [[umorigu]] &new{2018-04-28 (土) 23:14:57};
- 上記を受けて{x-php-sha384} {SHA256} {SSHA256} {SHA384} {SSHA384} {SHA512} {SSHA512} を実装しました。{SHA256} {SSHA256} {SHA384} {SSHA384} {SHA512} {SSHA512} については OpenLDAP 2.4.44 の slappasswd (with pw-sha2) で生成したハッシュを利用できる(互換性がある)事をテストしてあります。すみませんpukiwiki.ini.php や md5.inc.phpについては触っていません。(特にセキュリティにからむ部分であるため、ソースコードは別途メールで(も)お渡ししました) -- [[henoheno]] &new{2018-05-09 (水) 23:15:37};
- OpenLDAPでSHA-2の指定方法があるのですね。RFCにはなっていないようですが、取り込みました。ありがとうございます [[commit:9d67cfb2c0]] -- [[umorigu]] &new{2018-05-10 (木) 05:24:41};
-- (解説とまとめです)  OpenLDAP互換、という [[BugTrack/709]] の方向性を維持しているものの、  {CLEARTEXT}、{SMD5}、{SSHA}、{SHAnnn}、{SSHAnnn} は RFC 2307 に則った   scheme prefix ではありません。 -- [[henoheno]] &new{2018-06-16 (土) 16:29:11};
-- 上にある様にInternet-Draftも発行されているので、{SMD5}、{SSHA}、{SHAnnn}、{SSHAnnn}が将来  のRFCに追加されていた未来もあったのかもしれませんが、そこには至らなかった  ようです。 -- [[henoheno]] &new{2018-06-16 (土) 16:29:32};
-- x- で始まる scheme prefix は、RFC 2307に則った「その他のスキーム」の(元々  想定されていた)表記方法です。 -- [[henoheno]] &new{2018-06-16 (土) 16:29:41};
-- SHA-224, SHA-512/224, SHA-512/256 が実装対象でない理由は、単純にOpenLDAP(のpw-sha2)がそれらを実装していないからです。 -- [[henoheno]] &new{2018-06-16 (土) 16:35:55};

#comment


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.035 sec.

SourceForge