web-dev-qa-db-ja.com

X509証明書を暗号化に使用する方法

X509のプロセスについては少し疑問があります。公開鍵と秘密鍵を生成するOpenPGP暗号化/復号化を知っています。公開鍵はベンダーと共有でき、ベンダーは鍵でデータを暗号化でき、秘密鍵を使用してデータを復号化できます。それは私にとってシンプルで簡単です。

X509に関しては、少し混乱しています。私のクライアントは、X509証明書を使用して、[AESのような対称暗号化を使用してすでに暗号化されている]機密情報を2人の間で[クライアントとベンダーの間で]転送したいと考えています。公開鍵のみを使用して証明書を生成できる場合のX509の動作。

ランダムに生成された1つのキーでAESを使用してデータを暗号化するとします。 X509を使用してこのデータをキーと共にベンダーに転送して、ネットワーク転送中に第三者が傍受しないようにするにはどうすればよいですか。

誰か説明していただけますか?ところで、私たちはSOAPメッセージに証明書情報を含めて)データを転送します

13
Nitin Gurram

X.509certificatesの形式です:証明書は特定の形式でnameと-を含むバイトのシーケンスです公開鍵、その上に デジタル署名 が計算され、証明書に埋め込まれます。署名者は Certification Authority です---asserts公開鍵がその名前で知られているエンティティによって実際に所有されていることを示します。署名を検証することで、証明書が本物であること、つまり、CAが実際に発行したものであることを確認できます。そして、そのようにして、公開鍵による名前のバインディングに信頼を得る(正直であり、だまされにくいCAを信頼しているため、署名の検証のためのCA鍵を知っているため、証明書の取得が必要になる場合があります)。 CA、およびその証明書の検証など、最大トラストアンカー別名ルート証明書)。

したがって、X.509はdistribute public keysの手段です。つまり、悪意のある第三者(つまり、あなた)が改ざんされないことを保証しながら、さまざまなアクター(たとえばあなた)が知ることができる方法です。 「攻撃者」)他の俳優の公開鍵。

OpenPGP は多くの標準フォーマットです。 One OpenPGPが定義するものの1つは、公開鍵を「名前」(電子メールアドレス)とともに暗号化する方法であり、これら2つに対する署名です。これは、実際にはそれ自体が証明書です(ただし、X.509と互換性のない形式です)。しかし、OpenPGPはprivateキーを使用して、ブッチのみであるバイトの束を暗号化するために、特定の個人の公開キーse(ブッチと呼ぶことにします)の方法も定義しています。 、復号化できます。技術的には、これはランダムに生成されたセッションキーを使用し、AES(または同様のもの)で生データを暗号化します。そのセッションキーは、受信者の公開キー(通常、RSAまたはElGamalタイプ)で暗号化されます。

したがって、問題については、「X.509で暗号化」する必要はありません。 X.509は暗号化について何も定義していません。 必要なものは、暗号化を説明する標準形式を使用することです受信者の公開鍵を使用およびX.509証明書に基づいて構築公開鍵の配布。 X.509と組み合わせたこの標準形式は、OpenPGPに類似しています。この標準フォーマットは存在し、 [〜#〜] cms [〜#〜] (以前は「PKCS#7」として知られていました)と呼ばれます。 CMSオブジェクトが電子メールで送信されると、これは標準の別のレイヤーになり、 S/MIME と呼ばれます。

CMS(またはS/MIME)は、非同期通信に必要なものです。ブロブを準備し、OpenPGPで行うように、後で受信者に送信します。 synchronous通信(送信者と受信者が同時に「オンライン」)を行うことができる場合は、 SSL/TLS (またはそのWeb版 [〜 #〜] https [〜#〜] )。 SSLでは、サーバーに公開鍵があり、X.509証明書としてクライアントに送信されます。クライアントは証明書を検証し、サーバーに含まれる公開鍵を使用してサーバーとのセッション鍵を確立し、そのセッション鍵でデータを暗号化します。

いずれにせよ、暗号化アルゴリズムをprotocolsに組み立てることは、正しく行うのが難しく、セキュリティをテストするのがほとんど不可能であり、危険に満ちていることが知られています。したがって、自分でミックスを作成することを想像しないでください。 CMSやSSLなどの既存の標準に依存する必要があります。

27
Thomas Pornin

X509証明書は、公開鍵を交換する方法です。ベンダーがAES暗号化を続行し、AESキーを公開キーで暗号化して、傍受されないようにAESキーを送信できるようにすることを望んでいるようです。非対称(公開/秘密キー)暗号化の最も一般的な使用法は、署名と対称キー交換です。

私の主な懸念は、SOAPリクエストで証明書を取得していることを言及していることです。これにより、検証がどのように行われているのかがわかりません。このステップは、私にとってあまり意味がありません。事前に証明書がわからない(したがって、証明書を送信する必要がないため)。それが、データにアクセスする必要があり、攻撃されていない適切なユーザーに対するものであるかどうかを検証する方法がわからない真ん中の男。

X509証明書は、システムが証明書が有効であること、および証明書を送信したユーザーに対して有効であることをシステムが認識できるように、署名したものにすることをお勧めします。次に、途中の男が要求を行っていても、証明書の秘密鍵がない限り、AES鍵を復号化できず、データは役に立ちません。

1
AJ Henderson