Open sorairolake opened 1 year ago
パスワードの長さに制限を加えないなら、bcryptで処理する前にパスワードをSHA-512とかで72バイトに収まるハッシュ値にしてから処理するか、Argon2やscryptとかの72バイトの制限のない鍵導出関数に変更すれば良いかもしれません。
Firefishではbcryptでパスワードがハッシュ化されている場合、サインイン時に自動的にArgon2idで再ハッシュ化しているようです^1。Misskeyでもこれと同様にbcryptでハッシュ化されていた場合は、サインインが成功したときに自動的にArgon2idで再ハッシュ化するのが良いかと思います。
上げ
例えば、「Sharkey 」のような多くの 「Misskey 」フォークからの離脱を考えている人々も、この変更から利益を得ることができるだろう。この変更によってセキュリティが強化されることは言うまでもない。
English = People looking to leave many of the Misskey forks, for example, Sharkey, could also benefit from this change. Not to mention the added security this could implement.
Summary
既にパスワードの長さを制限しているか、72バイトの制限を回避する対策をしていたのならすみません。
Misskeyは鍵導出関数としてbcryptを使っているかと思いますが、多くのbcryptの実装が入力の先頭の72バイトだけを使うようになっており、
bcryptjs
も同様です。なので、72バイト以上のパスワードを入力しても、先頭の72バイト以降は切り捨てられてしまうので、パスワードの最大の長さを72バイトに制限してはどうでしょうか。この場合、72バイト以上のパスワードを入力している利用者がパスワードが長すぎることの警告を受け取ることになるので、それが問題かと思います。あるいは、Argon2やscryptなどの入力できるパスワードの長さに72バイトの制限のない鍵導出関数に置き換えてはどうでしょうか。これらに変更した場合は72バイト以上のパスワードを入力している利用者もパスワードを短くする必要が無いと思います。どうしてもbcryptを維持する場合にはSHA-512などで事前に処理すれば72バイトの制限を回避することができると思いますが、この方法でも鍵導出関数を変更する場合でも再ハッシュ化は必要ですし、セキュリティ的にはArgon2やscryptに変更する方が良いと思います。