misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.1k stars 1.38k forks source link

パスワードの最大の長さを72バイトに制限するか鍵導出関数を変更する #11181

Open sorairolake opened 1 year ago

sorairolake commented 1 year ago

Summary

既にパスワードの長さを制限しているか、72バイトの制限を回避する対策をしていたのならすみません。

Misskeyは鍵導出関数としてbcryptを使っているかと思いますが、多くのbcryptの実装が入力の先頭の72バイトだけを使うようになっており、bcryptjsも同様です。なので、72バイト以上のパスワードを入力しても、先頭の72バイト以降は切り捨てられてしまうので、パスワードの最大の長さを72バイトに制限してはどうでしょうか。この場合、72バイト以上のパスワードを入力している利用者がパスワードが長すぎることの警告を受け取ることになるので、それが問題かと思います。

あるいは、Argon2やscryptなどの入力できるパスワードの長さに72バイトの制限のない鍵導出関数に置き換えてはどうでしょうか。これらに変更した場合は72バイト以上のパスワードを入力している利用者もパスワードを短くする必要が無いと思います。どうしてもbcryptを維持する場合にはSHA-512などで事前に処理すれば72バイトの制限を回避することができると思いますが、この方法でも鍵導出関数を変更する場合でも再ハッシュ化は必要ですし、セキュリティ的にはArgon2やscryptに変更する方が良いと思います。

sorairolake commented 1 year ago

パスワードの長さに制限を加えないなら、bcryptで処理する前にパスワードをSHA-512とかで72バイトに収まるハッシュ値にしてから処理するか、Argon2やscryptとかの72バイトの制限のない鍵導出関数に変更すれば良いかもしれません。

sorairolake commented 1 year ago

Firefishではbcryptでパスワードがハッシュ化されている場合、サインイン時に自動的にArgon2idで再ハッシュ化しているようです^1。Misskeyでもこれと同様にbcryptでハッシュ化されていた場合は、サインインが成功したときに自動的にArgon2idで再ハッシュ化するのが良いかと思います。

kakkokari-gtyih commented 4 months ago

上げ

Linux-Is-Best commented 2 months ago

例えば、「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.