2017-02-08 8 views
0

私が検討しているコードベースでJWTがどのように実装されているかを理解しようとしています。私はthisthis非対称暗号とJWT

を読んしかし、それはこのコードベースに思える、クライアントは秘密鍵と公開鍵を持っている...これは、サーバーと、自身の秘密鍵の公開鍵を持っている(私は、サーバーが対応する秘密を持っていると仮定しますキー)。なぜこれが必要ですか?クライアントは公開鍵だけを必要とし、サーバは秘密鍵を必要としませんか?クライアントがメッセージを暗号化している場合、公開鍵を使用して暗号化することはできず、サーバはそれを復号化するために秘密鍵を必要としますか?逆に、公開鍵を使用してサーバーから暗号化されたメッセージを復号することはできませんか?クライアントが公開鍵と秘密鍵の2つのセットを必要とするのはなぜですか?読み取りから

(例えば電子メールプログラムなどの)ソフトウェアに署名デジタル署名を作成する

は、署名されるべき電子データの一方向ハッシュを作成します。その後、ユーザーの秘密鍵を使用してハッシュを暗号化し、ハッシュされたデータに固有の値を返します。暗号化されたハッシュは、ハッシュアルゴリズムなどの他の情報と共に、デジタル署名を形成する。データの変更が1ビットであっても、異なるハッシュ値になります。この属性を使用すると、署名者の公開鍵を使用してハッシュを復号することによって、他人がデータの整合性を検証できます。解読されたハッシュが同じデータの2番目に計算されたハッシュと一致する場合、データが署名されてから変更されていないことが証明されます。

  1. ハッシュ化されたデータと暗号化されたデータ間のdiffernceは何ですか?なぜ最初にハッシュする必要がありますか?ハッシュデータは暗号化されていますか?

  2. ここで、secon計算されたハッシュはどこから来ますか?解読者が公開鍵を暗号化されたデータに適用しようとしている場合...それはどのように成功したのでしょうか?それはそれを何と比較していますか?その比較ハッシュはどこから来たのですか?

+0

偉大な質問、よく、実際には1つの12の質問。 StackOverflowのための広すぎるIMO –

+0

:(私には長いラブリー回答を受け入れるでしょうか? – Jwan622

+0

一般に、StackOverflowのような場所で広範な質問が受け入れられないのはなぜですか? – Jwan622

答えて

2

JWTは、送信者の秘密鍵で署名されています(暗号化されていません)。 jWTコンテンツは、JWEを使用してオプションで暗号化できます。

署名と検証に対称キーが使用されます。非対称鍵ペアでは、メッセージは秘密鍵で署名され、公開されて検証されます。

デジタル署名は、変更からメッセージを保護し、送信者を識別します。非対称キーを使用すると、受信者は送信者の公開鍵を使用して秘密鍵を妥協することなく署名を検証できます。

JWT署名は目的に応じてクライアント側またはサーバー側の両方で使用できます。例えば、認証フローで

  • クライアント側:提示した後、最終的なユーザーに発行トークン:公開鍵が登録

  • サーバ側中にアップロードして、サーバーが署名を検証するAPIリクエスト、資格情報

内部的には、デジタル署名にはいくつかの暗号操作が含まれており、メッセージを暗号化します。encrハッシュをyptし、アルゴリズム識別子を追加します。しかし、すべてのプログラミング言語がそれをサポートしているので、これについて心配する必要はありません。

私はJWT &一般的な方法であなたの特定の質問に答える代わりに説明しようとしました。私はおそらくいくつか残しました。コメントしてください

+0

送信者と受信者が2組の秘密鍵と公開鍵を持つのはいつですか?私が検討している現在のコードでは、クライアントは公開鍵と別個の秘密鍵の両方を持っています。 – Jwan622

+0

そのコードのリンクを投稿するか、その汎用目的を説明できますか? – pedrofb

+0

コードを見ることなく、目的が分かりません。クライアントとサーバーが非対称キーのペアを持っている場合、おそらくデジタル署名によって相互認証を行いたいと考えています。対称暗号鍵を交換するためにも使用されますが、この鍵では片方の公開鍵だけが必要です – pedrofb

関連する問題