JWT をデコードできる場合、それらはどのように安全ですか? 質問する

JWT をデコードできる場合、それらはどのように安全ですか? 質問する

もし私がJWTペイロードをデコードできるのですが、それはどのように安全なのでしょうか? ヘッダーからトークンを取得し、ペイロード内のユーザー情報をデコードして変更し、同じ正しいエンコードされたシークレットとともに送り返すだけではだめなのでしょうか?

安全でなければならないことはわかっていますが、テクノロジーについて理解したいだけです。何が足りないのでしょうか?

ベストアンサー1

JWT は署名、暗号化、またはその両方を行うことができます。トークンが署名されていても暗号化されていない場合、誰でもその内容を読み取ることができますが、秘密鍵がわからない場合は変更できません。そうしないと、受信者は署名が一致しなくなったことに気付きます。

コメントへの回答: コメントを正しく理解できたかどうかわかりません。念のため確認しますが、デジタル署名についてご存知ですか? 1 つのバリエーション (対称型の HMAC ですが、他にも多数あります) について簡単に説明します。

アリスがボブに JWT を送信したいとします。両者は共通の秘密を知っています。マロリーはその秘密を知りませんが、干渉して JWT を変更したいと考えています。それを防ぐために、アリスはHash(payload + secret)これを計算して署名として追加します。

メッセージを受信したボブは、Hash(payload + secret)署名が一致するかどうかを確認するために計算を行うこともできます。ただし、マロリーがコンテンツ内の何かを変更した場合、一致する署名 ( Hash(newContent + secret)) を計算することはできません。彼女は秘密を知らず、それを見つける方法もありません。つまり、彼女が何かを変更すると、署名が一致しなくなり、ボブは JWT を受け入れなくなります。

他の人にメッセージを送信し{"id":1}、 で署名したとしますHash(content + secret)(ここでは + は単なる連結です)。 SHA256 ハッシュ関数を使用すると、取得する署名は次のようになります。330e7b0775561c6e95797d4dd306a150046e239986f0a1373230fda0235bda8c次はあなたの番です。マロリーの役を演じて、メッセージ に署名してみてください{"id":2}。 署名できないのは、私が使用した秘密がわからないためです。 受信者が秘密を知っていると仮定すると、受信者はどのメッセージの署名も計算して、正しいかどうかを確認できます。

おすすめ記事