web-dev-qa-db-ja.com

JWEまたはJWSを使用することの長所/短所は何ですか

認証トークンシステムを実装しようとしているので、JSON Web暗号化(JWE)またはJSON Web署名(JWS)を使用することの長所と短所、および両方を使用することに意味があるかどうか(JWS内のJWE)を知りたいです)。

10
mike83_dev

JSON Web署名(JWS)クレームは、秘密署名鍵を使用してサーバーで検証できる署名で署名されます。これにより、クライアントとサーバー間でクレームが渡されたときにクレームが緩和されないことが保証されます。 JWSトークンの内容はBase64でエンコードされており、暗号化されていません(エンコードは暗号化とは異なることに注意してください!)。 Base64でエンコードされたデータは、ガベージテキストのように見えるという点で暗号化されているように見えますが、実際には、読み取り可能なデータに戻すのは簡単です。したがって、JWTに機密情報を含めないことを常にお勧めします。 JWTは、2者間(またはクライアントとサーバー間)で情報を交換する場合にのみ使用することをお勧めします。機密データは、トークンのペイロードとして渡されません。

しかし、トークンに個人情報を含めたい場合はどうでしょうか。機密情報が、攻撃者が簡単にデコードできるBase64でエンコードされたトークンに含まれることは望ましくありません。幸い、クレームデータを暗号化して保護する方法があります。これはJSON Web暗号化(JWE)として知られるより安全なレベルの保護です。クレームデータ(基本的にはJSONベースのデータ構造)を暗号化する方法を定義し、目的の受信者のみがトークンに存在する情報を読み取ることができるようにします。

Webトークンを処理する最良の方法は次のとおりです

  • トークンが許可されたクライアントから発信されたことがよく知られるように、署名します。
  • それを暗号化して、許可されたサーバーだけがそれが何を言っているかを知ることができるようにします。

Javaで利用できる、JSON Webトークンを暗号化できる優れたライブラリがいくつかあります。

  1. Jose4J
  2. ニンバス-JOSE-JWT

上記のライブラリは両方とも、JWTおよびJOSE(Javascript Object Signing and Encryption)仕様スイートのオープンソース(Apache 2.0)実装です。どちらも高品質のライブラリであり、間違った選択をすることはできません。ただし、JWT.IOには、使用可能な各ライブラリの違いを表示するための優れたUIがあります。

22
Aman

JWSはデータの署名に使用され、データの整合性が保護されます。これは、次のことを意味します。

  • Man-in-the-middle攻撃は、それが何であるかについてのデータを見ることができます
  • 中間者攻撃では、署名の検証が失敗するため、変更できません。

JWEは、データを暗号化し、整合性を保護するために使用されます

  • 中間者攻撃は、それが何であるかについてのデータを見ることができません
  • 検証が失敗するため、man-in-the-middle攻撃はそれを変更できません
8
Nether

JWSとJWEの目的は異なります。 JWSはクレームに署名するために使用され、JWEは機密データを送信するために使用されます。

認証システムを実装する場合は、JWSを使用してクレームの信頼性を検証する必要があります。

JWSのクレームの一部に機密情報が含まれている場合は、JWEを使用してJWSを暗号化することもできます。

ただし、JWEのみを使用することは、コンテキストでは意味がありません。

6