web-dev-qa-db-ja.com

JWTに推奨される非対称アルゴリズムは?

新しいWebサービスにJWT認証を実装していて、どの非対称アルゴリズムを選択すべきかわかりません。私は周りを検索しましたが、コンセンサスや明確な推奨事項は見つかりませんでした。 PyJWT docs によると、いくつかの異なるアルゴリズムから選択できます。

安全な(明らかに)、オーバーヘッドが少なく、将来性のあるアルゴリズムを使用したいと思います。法案に適合するアルゴリズムはどれですか?

3
user3607758

RFC7518 は、アルゴリズムと、それらがJWTライブラリの必須、推奨、またはオプションであるかどうかをリストします。これは、相互運用性の目的で、他のライブラリに実装されているアルゴリズムを選択するのに役立ちます。

セキュリティの観点から、これらのオプションがあります:

  • RSASSAとECDSAの比較。 ECDSAは楕円曲線を使用しており、RSAよりも安全であると考える人もいます。また、これらはより高速で、小さいキーを使用できます。
  • SHA256、SHA384、SHA512。 SHA256はブルートフォースすることがすでに不可能であるため、より多くのビットを使用することはほとんど意味がありません。
  • PKCS1-v1_5とPSS。 PSSにはセキュリティ上の利点がありますが、PKCS1よりも複雑であるため、実装エラーが発生する可能性が高くなります。

これらのオプションはすべて安全であり、違いは主に理論的なものです。 P-256とSHA-256を使用するECDSAをお勧めします(algパラメータ値ES256(仕様内)、以降

  • rFCによると、これは多くのJWT実装に実装される可能性が高いです。
  • 楕円曲線を使用しているため、セキュリティとパフォーマンスに多少の利点があります。

他の答えは量子コンピューターに言及した。現在、実行可能な量子コンピューターはありませんが、存在する場合、可能なすべてのJWTアルゴリズムを簡単に破ることができます。したがって、ポストクォンタムの観点から見ると、どれも同じように安全でないため、どちらを選択してもかまいません。

以下も参照してください。

3
Sjoerd

RSAはしばしば古くなり、多くの精査を経て生き残ったため、RSAはしばしば選択されるアルゴリズムです。あなたはそれを選んで間違って行くことはできません。 SHA256が壊れるところはどこにもないので、256バリアントは十分なIMOです。

メッセージのサイズを気にする場合は、JWTで行う可能性が高いため、ECCを使用することをお勧めします。理論的にはRSAと同じくらい安全でありながら、大幅に短い署名を可能にします。実際には、問題は実装にあります。過去には急上昇した曲線があり、カーブ外攻撃などの実装に関する多くの問題がありました。 ECCのIMOの実装に誤りがある可能性が高くなります。

PSアルゴリズムはRSAに基づいていますが、明らかに削減を証明するように変更されています。私は証明にあまり多くの株を与えません。それは比較的新しく複雑なので、実装に問題があるかもしれません。私はこれらを選びません。

したがって、最終的には、必要なセキュリティのレベルに応じて、これら2つの中から1つを選択します。 ES256は、ほとんどのWebアプリケーションにとっておそらくより良い選択です。

PS:いずれにしても、セキュリティ関連のバグ修正がある場合に備えて、jwtライブラリがタイムリーに更新されていることを確認する必要があります。

1
Peter Harmann