0

現在、「暗号化」オプションを許可する Web API を使用しています。

「共有キー」を持つようにアカウントをセットアップできます。このキーを使用して、サーバーに送信する前にクライアント上のすべてのデータを暗号化する必要があります。

彼らのウェブサイトからの詳細:

暗号化アルゴリズム: DES

ブロックモード: ECB

パディング: PKCS7 または PKCS5 (交換可能)

この意味での「共有鍵」は対称アルゴリズムであると信じています-復号化/暗号化に使用されるのと同じ鍵ですが、これについては間違っているかもしれません。

クライアント側でこのシナリオを処理するベスト プラクティスは何ですか?

アプリケーションのロジックでこのキーを使用してデータを暗号化する必要がある場合、ハッカーからどのように保護されますか?

私のアプリは C# で書かれていることに注意してください。つまり、実質的に無料で逆コンパイルできます。

4

3 に答える 3

1

キーが危険にさらされない限り、データの送信は安全です。クライアントとサーバーの接続を盗聴した人は、キーを持っていない限り、データを解読することはできません.

主な課題は、クライアントとサーバーの両方でローカルにキーを安全に保管することです。この目的のために、.NET のProtectedDataクラスを通じて公開されている Windows Data Protection API (DPAPI) を調べることをお勧めします。

于 2012-04-28T09:00:16.827 に答える
0

このようにして、クライアントは別のキーでデータを暗号化し、サーバーは別のキーで復号化します。これは、非対称暗号化/復号化と呼ばれます。

.NET Framework は、非対称暗号化のための RSACryptoServiceProvider クラスと DSACryptoServiceProvider クラスを提供します。これらのクラスは、既定のコンストラクターを使用して新しいインスタンスを作成するときに、公開キーと秘密キーのペアを作成します。非対称キーは、複数のセッションで使用するために保存することも、1 つのセッションだけのために生成することもできます。公開鍵は一般に公開できますが、秘密鍵は厳重に保護する必要があります。

For example [VB.NET]: 

Dim cspParam as CspParameters = new CspParameters()
cspParam.Flags = CspProviderFlags.UseMachineKeyStore
Dim RSA As System.Security.Cryptography.RSACryptoServiceProvider
           = New System.Security.Cryptography.RSACryptoServiceProvider(cspParam)

The key information from the cspParam object above can be saved via:

Dim publicKey as String = RSA.ToXmlString(False) ' gets the public key
Dim privateKey as String = RSA.ToXmlString(True) ' gets the private key

The above methods enable you to convert the public and / or private keys to Xml Strings.
 And of course, as you would guess, there is a corresponding FromXmlString method to get them back. 
 So to encrypt some data with the Public key. The no-parameter constructor is used as we are loading our keys from XML and 
 do not need to create a new cspParams object:

Dim str as String = "HelloThere"
Dim RSA2 As RSACryptoServiceProvider = New RSACryptoServiceProvider()
' ---Load the private key---
RSA2.FromXmlString(privateKey)
Dim EncryptedStrAsByt() As Byte =RSA2.Encrypt(System.Text.Encoding.Unicode.GetBytes(str),False)
Dim EncryptedStrAsString = System.Text.Encoding.Unicode.GetString(EncryptedStrAsByt)

and as a "proof of concept", to DECRYPT the same data, but now using the Public key:

Dim RSA3 As RSACryptoServiceProvider = New RSACryptoServiceProvider(cspParam)
'---Load the Public key---
RSA3.FromXmlString(publicKey)
Dim DecryptedStrAsByt() As Byte =RSA3.Decrypt(System.Text.Encoding.Unicode.GetBytes(EncryptedStrAsString), False)
Dim DecryptedStrAsString = System.Text.Encoding.Unicode.GetString(DecryptedStrAsByt)
于 2012-04-28T10:36:55.613 に答える
0

shared keyということであればpublic key、おそらく、非対称暗号化として知られるアルゴリズムの 1 つを使用しています。この方法では、公開鍵を使用してデータを復号化できないため、ハッカーに対して安全です。

対称の場合、すべてはキーの安全性に依存します。プログラムとは別に保存できます (ユーザーはフラッシュ ドライブに安全に保存できます)。したがって、各ユーザーは独自のキーを持っている必要があります。1 つの対称キーをすべてのユーザーに使用することはできません。

于 2012-04-28T08:27:00.063 に答える