他の誰かに公開鍵で秘密データを暗号化してもらい、秘密鍵で復号化する必要があります。私はOpenSSLを使用してRSA秘密鍵と公開鍵のペアを作成し、公開鍵を提供してすべてを機能させました。
最近、誰かが中間者攻撃の可能性があると指摘しました。悪者は私の公開鍵を受け入れ、自分の公開鍵を反対側に渡します。次に、反対側は秘密データを忠実に暗号化し、MITMに渡して復号化し、公開鍵で再暗号化してから、賢くならずに私に渡します。推奨される解決策は、公開鍵を相手側が信頼するCAに署名してから渡すことです。
実験として、自分のCAで署名できるCSRを作成しましたが、結果の証明書には、(暗号化された)秘密鍵も含まれます。暗号化されているかどうかに関係なく、秘密鍵を他の人に渡したくないのです。
公開鍵に署名する方法はありますか?
コメント
- 証明書に秘密鍵が含まれていますか?え?どのようにしてこれを行うことができましたか?そのファイルをpastebin.comに投稿できますか? (2番目のキーペアでやり直して、'オリジナルを共有する必要がないようにします。)
- 理解し始めていると思います。 CSRを生成するために秘密鍵が必要ですが、CSRと結果の証明書には秘密鍵が含まれていません。証明書は事実上、署名された公開鍵であり、まさに私が望んでいるものです。
回答
公開鍵への署名事実上証明書です。これらは、他の人に安全に通信できるように配布できる公開鍵証明書を作成するために実行する手順です。
セットアップ
- 秘密鍵を生成します:
openssl genrsa -out private.pem 2048
- 公開鍵を生成します:
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
- CSR(証明書署名要求)を作成する
openssl req -new -key private.pem -outcertificate.csr
- 自己署名証明書を作成します(この証明書は共有できます)
openssl x509 -req -days 365 -incertificate.csr -signkey private.pem -outcertificate.crt
暗号化
openssl rsautl -encrypt -inkey private.pem -keyform PEM -in data> Encryption_data
復号化
- 証明書から公開鍵を抽出します
openssl x509 -pubkey -noout -incertificate.crt> certpubkey.pem
- データを復号化します
openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -inencrypted_data>データ
鍵をCAに署名させる場合は、「CSRファイル(および現金)を選択したCAに送信する必要があります」と、自己署名証明書の代わりに使用できる証明書が提供されます。上記の手順で説明しました。
コメント
- これは私が求めていることの逆ですが、議論の目的で行います。反対側が復号化するには、MITM攻撃の対象となる私が抽出した公開鍵が必要か、(暗号化された)秘密鍵を含む証明書全体が必要です
- @ user1683793もう一方の端には2つの証明書が必要です。それらがすでに持っているはずの最初のもの(自己署名CA証明書)。 2つ目は、検証する公開鍵を含み、CA証明書で署名されています(関連付けられたCA秘密鍵を使用)。 2番目の証明書の有効性は、CA証明書の公開鍵を使用してテストされます。秘密鍵は常に秘密にされます。
- " -encrypt "と-"の代わりに"を復号化します-sign "および"-"を確認します。 (詳細はこちら: czeskis.com/random/openssl-encrypt-file.html )
- 機能しない: 2。データの復号化が機能しませんでした。使用:
openssl rsautl -decrypt -inkey certpubkey.pem -keyform PEM -pubin -in encrypted_data > data
このエラー/メッセージが表示されます:A private key is needed for this operation
- セクション
Setup
、ステップ2
はpublic.pem
を提供します-これ以上使用されません'ステップ。 CSRが秘密鍵で生成されている場合、その公開鍵はどのように使用されますか?
回答
プロセスには3つのエンティティが関与している必要があります。
- 送信者-あなた
- 受信者-ユーザー
- 認証局-信頼できるサードパーティ(または場合によってはあなた)
プロセス物事を安全に保つのが「送信者」であり、キーのペア(公開と秘密)を生成します。見やすくするために、これらをキーとロックと呼びます。鍵(秘密)は決して送信者の所有物を離れてはなりません。そのため、秘密鍵と呼ばれます。
次に、送信者は公開鍵(ロック)を使用して証明書署名要求(CSR)を生成します。 )認証局(信頼できるサードパーティ)に転送される認証局は、認証局の秘密鍵を使用して公開鍵(ロック)に署名します。
認証局は、「送信者」公開鍵を送信するようになりました。これは、認証局の秘密鍵によって「送信者」に署名され、現在は証明書になっています。
受信者は証明書を取得し(たとえば、Webブラウザーを介して)、有効であることを確認します。 「送信者」と「受信者」の両方が信頼できるサードパーティであるために持っている認証局の公開鍵。証明書の公開鍵が検証されると、「送信者」の公開鍵が変更されていないことを信頼できます*。
「受信者」が「送信者」にデータを送信する必要がある場合は、信頼できる証明書からの公開鍵を使用して、データを暗号文に暗号化し、それを「送信者」に渡します。「送信者」の秘密鍵のみが、「送信者」の公開鍵で暗号化された暗号文を復号化できるため、誰でも真ん中には本質的に役に立たない文字化けしたテキストがあります。
場合によっては、「送信者」は、異なるキーのセットで独自のCSRに署名するか、同じセットのキーで自己署名することにより、独自の証明書機関を生成できます。この場合、「送信者」の公開鍵は、信頼を得るために、安全なチャネルを介して両方の当事者に知られている必要があります。ソフトウェアでは、信頼できるサードパーティとして使用できる証明書を成果物に含めることができます。
*トラステッドは、認証局がCRL(証明書失効リスト)を維持し、すべての関係者がリストを監視している場合にのみ有効です。発行された証明書が侵害されていないことを確認します。認証局が侵害されて秘密鍵が漏洩した場合が存在し、その場合、侵害したエージェントは秘密鍵を使用して、「送信者」を模倣した信頼できる証明書を生成できます。 、その場合、MITMが可能であり、MITMは「送信者」からデータを受信し、「送信者」のような有効な証明書で復号化、保存、暗号化してから、「受信者」に渡すことができます。
回答
作成したCA証明書のコピーから暗号化された秘密鍵を取り出します(他の人に渡す場合)。秘密鍵はanothを含む証明書に署名するために使用する場合を除いて、そこにいる必要はありません。公開鍵。
公開鍵を送信する場合は、代わりに、関連付けられたCA秘密鍵を使用して署名された証明書全体(秘密鍵を除く)を送信します。内部の公開鍵の有効性を確認するには、証明書のハッシュを暗号化されたハッシュ(CAの秘密鍵を使用して暗号化されたもの)と照合する必要があります。これは、CAの公開鍵を使用して復号化されます。 。復号化が成功し、ハッシュが証明書のハッシュと一致する場合、証明書内の情報を信頼できます。
暗号化だけでなく、たとえばリプレイ攻撃などもあります。攻撃者は以前に保存された暗号化されたデータを送信します。 TLSは、平均的な人が考えるよりもはるかに多くをカバーしており、同様のシステムを実装することは絶対にお勧めできません。プライベートにすることを目的としたものには、可能な限りTLSを使用してください。