新しいWebサービスにJWT認証を実装していて、どの非対称アルゴリズムを選択すべきかわかりません。私は周りを検索しましたが、コンセンサスや明確な推奨事項は見つかりませんでした。 PyJWT docs によると、いくつかの異なるアルゴリズムから選択できます。
安全な(明らかに)、オーバーヘッドが少なく、将来性のあるアルゴリズムを使用したいと思います。法案に適合するアルゴリズムはどれですか?
RFC7518 は、アルゴリズムと、それらがJWTライブラリの必須、推奨、またはオプションであるかどうかをリストします。これは、相互運用性の目的で、他のライブラリに実装されているアルゴリズムを選択するのに役立ちます。
セキュリティの観点から、これらのオプションがあります:
これらのオプションはすべて安全であり、違いは主に理論的なものです。 P-256とSHA-256を使用するECDSAをお勧めします(alg
パラメータ値ES256
(仕様内)、以降
他の答えは量子コンピューターに言及した。現在、実行可能な量子コンピューターはありませんが、存在する場合、可能なすべてのJWTアルゴリズムを簡単に破ることができます。したがって、ポストクォンタムの観点から見ると、どれも同じように安全でないため、どちらを選択してもかまいません。
以下も参照してください。
RSAはしばしば古くなり、多くの精査を経て生き残ったため、RSAはしばしば選択されるアルゴリズムです。あなたはそれを選んで間違って行くことはできません。 SHA256が壊れるところはどこにもないので、256バリアントは十分なIMOです。
メッセージのサイズを気にする場合は、JWTで行う可能性が高いため、ECCを使用することをお勧めします。理論的にはRSAと同じくらい安全でありながら、大幅に短い署名を可能にします。実際には、問題は実装にあります。過去には急上昇した曲線があり、カーブ外攻撃などの実装に関する多くの問題がありました。 ECCのIMOの実装に誤りがある可能性が高くなります。
PSアルゴリズムはRSAに基づいていますが、明らかに削減を証明するように変更されています。私は証明にあまり多くの株を与えません。それは比較的新しく複雑なので、実装に問題があるかもしれません。私はこれらを選びません。
したがって、最終的には、必要なセキュリティのレベルに応じて、これら2つの中から1つを選択します。 ES256は、ほとんどのWebアプリケーションにとっておそらくより良い選択です。
PS:いずれにしても、セキュリティ関連のバグ修正がある場合に備えて、jwtライブラリがタイムリーに更新されていることを確認する必要があります。