質問

を受け入れるサービスを開発中です。 POST リクエスト。いくつかの POST データは事前​​に暗号化する必要があります。 POST フォーム上の非表示フィールドに保存されるためです。

アプリケーションは C# で書かれていますが、サードパーティのクライアントが簡単に統合できるようにしたいと考えています。ほとんどのクライアントが PHP、クラシック ASP、または VB.Net を使用していることがわかりました。

サードパーティは暗号化のみを行う必要があります。私たちが復号化を行います。双方向のコミュニケーションはありません。

暗号化アルゴリズム、パディング モード、その他のオプションの最も互換性のある組み合わせは何ですか?

役に立ちましたか?

解決

キーを共有する安全な方法 (キーの RSA 暗号化、SSH または HTTPS リンクを介した取得、安全な電話回線で他の開発者に電話するなど) があると仮定すると、主要な最新の暗号化 (前述の AES など) のいずれかが使用できます。 @Ed Haber による)が適切でしょう。私は彼の提案である AES に賛成したいと思います。PHP、VB、Rubyなどのライブラリがあるはずです。

ただし、「双方向通信がない」場合は、対称キーを暗号化側に安全に取得するためのチャネル外の方法を見つける必要があることに注意してください。

他のヒント

サードパーティがデータを復号化できないようにしたい場合は、RSA などの非対称暗号化アルゴリズムを使用することになります。これにより、サードパーティがあなたの公開キーを使用してデータを暗号化し、その後、あなただけが公開しない秘密キーを使用してデータを復号化できます。あなたが言及したすべての言語で利用可能な RSA の実装があるはずです。

サードパーティがデータを復号化できるかどうかを気にしない場合は、AES が最適です。サードパーティと共有するキーが 1 つあります。このキーは暗号化と復号化の両方に使用されます。

バルクデータの暗号化には AES を使用し、AES キーの暗号化には RSA を使用します。データが十分に小さい場合は、RSA で全体を暗号化するだけです。

エド・ハーバーは言った

AESキーを暗号化するには、バルクデータ暗号化にAESを使用し、RSAを使用します。データが十分に小さい場合は、RSAですべてを暗号化するだけです。

これは良い解決策だと思います。私なら、アプリケーションに公開 RSA キーを取得するための API を公開させます。サードパーティがあなたに何かを送信したい場合、公開キーを取得します。次に、ブロック暗号 (AES) を使用して実際の暗号化を行うためのセッション キーを生成し、公開キーで暗号化してキーを送信します。秘密キーを使用してセッションキーを復号化します。次に、サードパーティは、あなたに送信したいデータを AES で (あなたも公開しているパディング スキームを使用して) 暗号化し、あなたに送信します。セッションキーを使用して復号化します。

上記の方法にはいくつかの問題があります。公開キーの公開以外に情報を送信していないため、セッション キーの生成方法を制御することはできません。これは、サードパーティが非常に安全でない方法でセッション キーを生成する可能性があることを意味しており、ユーザーにはそれが分からないということです。2 番目の問題は、データを送信したい人全員が、あなたと同じ方法で AES 用にデータをパディングする必要があることです。したがって、全員が調整していることを確認する必要があります。2 番目の問題はそれほど大きくありませんが、1 番目の問題は、特に暗号的に安全な優れた乱数ジェネレーターから本当に適切なセッション キーを生成するサードパーティをあまり信頼していない場合に問題になる可能性があります。

独自の XOR キーベースのビット暗号化を非常に簡単に実装できます。少し考えて創意工夫することで、アプリケーションに適したものを思いつくことができます。

PHP の例を次に示します。

function XOREncryption($InputString, $KeyPhrase){

    $KeyPhraseLength = strlen($KeyPhrase);

    for ($i = 0; $i < strlen($InputString); $i++){

        $rPos = $i % $KeyPhraseLength;

        $r = ord($InputString[$i]) ^ ord($KeyPhrase[$rPos]);

        $InputString[$i] = chr($r);
    }

    return $InputString;
}

ColdFusion には、上記で推奨されている AES を含む、さまざまなアルゴリズムとエンコーディングを処理できる暗号化機能と復号化機能があります。

情報は次のとおりです。 http://www.cfquickdocs.com/cf8/?getDoc=encrypt#Encrypt

簡単なコード例:

Key = generateSecretKey( 'AES' , 128 )

EncryptedText = encrypt( Text , Key , 'AES' , 'Hex' )

Text = decrypt( EncryptedText , Key, 'AES' , 'Hex' )

このライブラリでは同様の機能が利用できます。 PHP:
http://www.chilkatsoft.com/p/php_aes.asp

...そして Java、Python、Ruby など...
http://www.example-code.com/java/crypt2_aes_matchPhp.asp
http://www.example-code.com/python/aes_stringEncryption.asp

RSA が最適なアルゴリズムのようですね。

サーバーを HTTPS 経由で公開してみてはいかがでしょうか?そうすることで、HTTPS を処理できるクライアントはサービスを安全に利用できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top