Nucleus(JP)フォーラム

NucleusCMS日本語版ユーザーのためのサポートフォーラムです。疑問が生じたらまずは記事検索をご利用ください。

ログインしていません。

#1 2007-12-16 16:00:09

Katsumi
メンバー
From: CA
登録日: 2005-06-24
投稿: 637
ウェブサイト

Re: Nucleus 3.31 (en) SHA encryption edition

英語版ですが、Nucleus のパスワード認証に、今まで使っていた MD5 ではなく、SHA1 もしくは SHA512 を使うものを作成してみました。時期バージョン、3.32 への実装テストのつもりです。新しいハッシュ関数を用いるだけでなく、パスワードにランダムな文字列を加えてからハッシュ関数を通す仕組み(Salt)を取り入れました。Salt は、config.php で、$HASH_SALT グローバル変数としてセットします。

ロジックとしては、こんな感じです。

1)MD5, SHA1, SHA512 の選択は、sha1() 及び、hash() 関数の有無で判断する。したがって、PHP4 (>=4.3.0) では SHA1 が、PHP5 (>=5.1.2) では SHA512 が使われる。

2)nucleus_member テーブルの mpassword にハッシュ値がセットされている場合は、Salt なしの MD5 と判断する。

3)それ以外のとき、mpassword にはハッシュ値をセットせず、smd5, sha1, ssha1, sha512, ssha512 のいずれかの値がセットされる(それぞれ、salt ありの MD5,、salt なしの sha1、salt ありの sha1、salt なしの sha512、salt ありの sha512に相当)。

4)ハッシュ方法の変更は、ログインの瞬間に行われる。

nucleus_member テーブルを変更しています。新たに、mpswdhash カラムを加え、mcookiekey カラムを、varchar(130)に変更しました。コアの変更部分のほとんどは、MEMBER.php で行っています。globalfunctions.php の関連部分も、若干書き換えています。

一番難しいのは、旧バージョンからのアップグレードを不具合無く行わせるところです。一応、いろいろな条件で3.3からのアップグレードを試してみましたが、今のところは不具合は出ていません。

ご意見、よろしくお願いします。

ここからダウンロードできます。アルファーバージョンです。評価のみにご使用ください。upgrade スクリプトも付属しています。

オフライン

#2 2014-09-09 10:45:18

yama
Administrator
登録日: 2005-07-07
投稿: 1,243
ウェブサイト

Re: Nucleus 3.31 (en) SHA encryption edition

検索すると当トピックが上位にヒットするので、新情報のポインタをつけておきます。

http://nucleuscms.github.io/docs/history.html
この件、リリース準備中のv3.70で対応します。アプローチが少し違っていて、主に下記のとおりです。

  • パスワードの格納先は現状どおりmpasswordに。ただしカラムサイズは将来性も考えて十分なサイズを確保する。(255文字)

  • 処理の一部でmd5関数を使う。phpassライブラリを改修すればsha1などに変更できるが、改修の手間を省く。ソルトの文字列長とストレッチ回数が十分にあるため特に問題なし

  • ソルトはハッシュ新規生成のたびにランダムに生成し、ハッシュ文字列と連結してデータベースに保存する

  • ハッシュ方法のアップデートを、アップデート後の初回ログイン時に自動的に行なう点は同じ

  • ハッシュ方法の新しい・古いは、ハッシュ文字列の形式がmd5のままかphpass形式になっているかで判定する

  • そのため、パスワードを忘れた時などにphpMyAdminなどでmd5でハッシュをかけたパスワードを直接セットする方法は今後もそのまま使える

採用した手法は定番的な方法で、詳細についてはこちら。基本的には、数文字程度のパスワードに、数十文字のランダム文字列(ソルト)を加え、この文字列に対してハッシュをかけ、得られたハッシュ文字列に対してさらにハッシュをかけ、さらにハッシュ・・・を数千回繰り返して、逆解析がほぼ不可能なハッシュ文字列を作るというものです。

オフライン

Board footer