2

暗号化では、受信者の公開鍵を使用しますが、なぜ関数の「秘密」という用語を使用するのでしょうか。私には矛盾しているか混乱しているようです。

秘密鍵を使用するときは、何かに署名しています。この関数はと同じ結果をもたらすように見えopenssl_sign()ます。両方を試したところ、異なる出力が得られました。

この関数openssl_private_encryptには「プライベート」と「暗号化」があるため、暗号化用か署名用かわかりません。この関数は何のためにありますか?

4

1 に答える 1

2

一般に、秘密鍵を使用した OpenSSL 暗号化方式は、署名生成の非常に特殊な SSL 方式を提供するために使用されます。

複数のハッシュ関数からの出力を連結すると、連結された結果に含まれる最強のアルゴリズムと同等の衝突耐性が得られます。たとえば、古いバージョンの TLS/SSL は連結された MD5 と SHA-1 の合計を使用します。これにより、関数の 1 つで衝突を検出する方法が、両方の関数で保護されたトラフィックの偽造を許可しないようにします。

出典: 暗号化ハッシュ関数についてはウィキペディアのページを参照し、暗号化ハッシュ関数の連結を調べてください。

ほとんどのライブラリはそのような署名形式を提供しないため (また、署名の SSL バージョンはハッシュの周りに埋め込まれた ASN.1 構造を使用しないため)、ほとんどの場合、代わりに暗号化関数を使用して実装されます。発生している違いは、おそらく ASN.1 構造が欠落していることです (私が話している ASN.1 構造については、PKCS#1 v2.1 標準を参照してください)。

暗号化に使用されるパディングの代わりに、署名にPKCS#1 パディングを使用することにかなり賭けることができます。そして、示されているように、ASN.1 構造またはハッシュは含まれません。代わりに、指定されたデータを ASN.1 構造の代わりに使用します。

既存の (非推奨の) プロトコルのサポート外でこの関数を使用することはお勧めしません。暗号化の目的で使用すると、あらゆる種類の攻撃に対して脆弱になるため、その間違いを犯さないでください。

于 2013-02-19T00:04:51.200 に答える