公開鍵暗号 - PHP&C#

誰でも正しい方向に向けることができます。

私はプライベートキーで文字列サーバー側(PHP)を暗号化しようとしているし、送信されたメッセージの信頼性を検証するために公開鍵を使ってクライアント側(C#)を復号化しようとしています。

ありがとう

0
@ Nacereddine:署名はまったく逆の動作です。これは明らかにOPが探しているものです( "...送信されたメッセージの信頼性を確認する")。
追加された 著者 dtb,
あなたは公開キーで暗号化し、私的キーで暗号化することを意味します。
追加された 著者 Nasreddine,
@dtb私は暗号化/解読の言葉を見たらすぐにその部分を見落としました。私の悪い。
追加された 著者 Nasreddine,
RSAで暗号化する場合は、セキュアにするためにMAG1 + SHA256およびe = 65537でOAEPを使用する必要があります。
追加された 著者 Scott Arciszewski,
どのような種類の暗号化を使用していますか、証明書はありますか?ほとんどの暗号化の問題は、弾みをつけて解決することができます。 bouncycastle.org/csharp
追加された 著者 albertjan,
送信者の真正性を確認したいだけですか?おそらく、何らかの署名メカニズムを使用するべきです
追加された 著者 albertjan,
RSAを使用してください)
追加された 著者 Nikita,
はい、私は私のコンテンツをハッシュして自分自身の署名を実装しています。そして、このハッシュサーバー側を暗号化し、真正性を検証するためにクライアント側を復号化します。
追加された 著者 Jamie Hunt,
任意の種類の暗号化を使用していない、証明書ではないものを使用することを好むでしょう。
追加された 著者 Jamie Hunt,

3 答え

RSAのような基本的な暗号アルゴリズムに基づいたカスタム暗号化方式を考え出さないでください。セキュリティプロトコルは非常に困難です。データの暗号化や署名について考える必要はなく、途中の攻撃、リプレイ攻撃、パッディング・オラクル攻撃などにも関わっています。

使いやすく理解しやすい標準化された、よくテストされたセキュリティプロトコルを使用することをお勧めします。HTTPSを使用する。

1
追加された
アプリケーションに付属する自己署名証明書を使用することができます。
追加された 著者 dtb,
@ Jamie実際には、自己署名証明書を使用する代わりに、自ら署名した自己証明書を持っていて、実際にサーバーで使用されている証明書に署名するCAを持つことをお勧めします。これにより、クライアントアプリケーションを再デプロイすることなく、サーバーのキーを簡単に変更できます。
追加された 著者 Paŭlo Ebermann,
@ JamieHuntあなたが「より認知された」当局からそれらを購入する場合、彼らは本当に高価です。あなたの目的を同じように果たす安いものがたくさんあります。
追加された 著者 John Cartwright,
しかし、私は本当に高価な証明書を購入する必要があります
追加された 著者 Jamie Hunt,

あなたがしたいことは暗号化ではなく署名と呼ばれます。

教科書ではRSA署名が「公開鍵で暗号化された秘密鍵で暗号化されている」と説明されていても、実際には(実際の暗号化の前の部分では)少し異なる手順を使用しているため、暗号化のために。

PHPでの署名の場合、 openssl_sign 機能を使用できるようです。

C#で署名をチェックするには、.NETの RSACryptoServiceProvider クラスで、VerifyDataメソッドを使用します。

もちろん、インターネット上の2つのエンティティ間(つまりサーバーからクライアントへ)の認証された転送であれば、SSL/TLSを使用するのが標準ソリューションです。アプリケーションにルート証明書を配布する場合は、商用CAの高価なものではなく、独自の証明書(または自分のCAの証明書)を使用できます。

0
追加された
互換性を持たせるために、これらの関数(またはクラス)のそれぞれに与えるアルゴリズム名を調べなければならないかもしれません。私はどちらかを使用しなかったので、まだ証言することはできません。
追加された 著者 Paŭlo Ebermann,
それはかなり困難な変換のように見えますが、私はそれを行うためのいくつかの方法を見つけました。
追加された 著者 Devela,
お互いに互換性があると言われるこれらの2つの機能はありますか?
追加された 著者 Devela,

.NETには、RSA暗号化/復号化の標準機能が含まれています。

PHPでRSAを使用するには、Googleが多くの実装を見つけることができます。

将来あなたがつまずく問題は、PHPと.NETの間でデータをやりとりすることだけです:

ADDED

RSAは手で実装するのが難しくない単純なアルゴリズムです。

こののソリューションはどうですか?

同じトピックについては、こちらここを参照してください。

0
追加された
RSAの標準実装を使用することをお勧めします。自作ではありません。私の答えで説明したように、暗号化ではなく署名が必要です。
追加された 著者 Paŭlo Ebermann,
@ JamieHunt、私は私の答えを更新しました
追加された 著者 Nikita,
RSAのPHP実装をお勧めしますか?私は良いものを見つけることができないようです、彼らはすべて私がサーバーにPHPモジュールをインストールする必要がある、または非常に遅く、時代遅れで、維持されていません。
追加された 著者 Jamie Hunt,
stevish.comのRSA実装は、それ自体との相互運用性しかなく、その事実のために攻撃の全ホストに対して脆弱です。私の推薦: phpseclib.sourceforge.net を使用してください。 OpenSSLが使用するのと同じ規格であるPKCS#1 v2.1暗号規格を実装しています。つまり、steivsh.comの実装とは異なり、相互運用性があり、ここに記載されている攻撃から保護します: en.wikipedia.org/wiki/…
追加された 著者 user1020147,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com