1

対称暗号化で OpenSSL を介して AES を使用する方法の多くの例を見てきました。しかし、非対称暗号化を使用しています。私の webapp には、公開鍵で暗号化された機密データが保存されています。これは、管理者が秘密鍵のパスフレーズを提供できる場合にのみ、後で秘密鍵で復号化されます。

私の実装はうまく機能していますが、非常に小さな入力がかなり大きな暗号化結果を生成することに気付きました。たとえば、16 文字の入力は 288 バイトの暗号化になります (元の 16 文字に復号化されます)。これらの暗号化された結果はデー​​タベース テーブルに格納されるため、入力サイズにはるかに近い暗号化された値を実現したいと考えています。予測可能な保管長も望まれます。

RSA 公開鍵/秘密鍵を使用していますが、PHP の OpenSSL 実装はデフォルトでどの暗号を使用していますか? 公開鍵/秘密鍵を使用するときに暗号を指定する方法の例は 1 つも見つかりませんでした。openssl_public_encrypt関数では、暗号定数の 1 つを指定できません。pub/pri キーが生成されるときに ( openssl_pkey_newを使用して) 何らかの形で暗号を指定することになっていますか?

4

2 に答える 2

0

AESは対称暗号化アルゴリズムであり、公開鍵と秘密鍵のペアをサポートしていません。暗号化できる人は誰でも暗号文を復号化できます。

AESをRSAのような非対称アルゴリズムと組み合わせて、ハイブリッドスキームを取得できます。RSAを使用して(ランダムな)AESキーを暗号化し、次にAESを使用して実際のデータを暗号化します。ただし、RSAモジュラスのサイズとほぼ同じ暗号文の最小サイズのRSAオーバーヘッドがあります(これはRSAの出力であるため)。

これは、おそらくキーの種類によっては、OpenSSL関数が実際に行うことだと思います。

他の公開鍵方式、特に楕円曲線に基づく方式があり、RSAと同様のセキュリティのためにオーバーヘッドを小さくすることができます。(ただし、これらがOpenSSLまたはそのPHPバインディングでサポートされているかどうかはわかりません。)

于 2012-09-22T23:52:56.857 に答える
0

RSA 秘密鍵と公開鍵を作成することをお勧めします。この素晴らしい記事を参照してください

于 2014-08-26T13:47:37.747 に答える