2012-04-28 13 views
0

現在、「暗号化」オプションを許可するWeb APIを使用しています。クライアントでの暗号化のベストプラクティス

アカウントに「共有キー」を設定することができます。このキーを使用すると、サーバーに送信する前にクライアント上のすべてのデータを暗号化する必要があります。彼らのウェブサイトから

詳細:

暗号化アルゴリズム:DES

ブロックモード:ECB

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

「共有私が信じるかもしれないけれども、私が信じる対称的アルゴリズム - 復号化/暗号化に使用される同じ鍵これにong。

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

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

私のアプリはC#で書かれています。つまり、実質的に無料でデコンパイルすることができます。

答えて

0

public keyを意味する場合は、ほとんどの場合、asymmetric encryptionというアルゴリズムの1つを使用しています。公開鍵を使用してデータを復号化することはできないため、この方法ではハッカーにとって安全です。

対称型の場合は、すべてのキーの安全性に依存します。プログラムとは別に保存することができます(ユーザーはフラッシュドライブに安全に保存できます)。だから、各ユーザはそれ自身の鍵を持っていなければならない。すべての人に1つの対称鍵を使用することはできない。

+0

私の質問が更新されました。アルゴリズムはSymmetric(DES)と思われる。 –

+0

@liortal私は答えを更新しました。 –

1

鍵が侵害されていない限り、データの送信は安全です。鍵を持っていない限り、クライアントとサーバの接続を盗聴する者は誰でもデータを復号できません。

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

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) 
+0

APIが非対称暗号化を使用していないので、これは特定の質問に役立ちません。 –

+0

あなたのケースでは、サーバーデータベースから共有キーを読み取り、それを使用してください。このようにして、クライアントはハードコーディングされたキーを持っていないので、誰かがdllを逆コンパイルすると、情報が見つかりません。 –

+0

権限を与えたら、共有キーをセッションに保存できます。 –

関連する問題