2012-10-22 13 views
7

C#に関する質問があります。C#を逆アセンブルする

私は現在、医療用ソフトウェア製品に関する作業を行っていますが、重要なことの1つは、患者のデータが暗号化されていることを確認することです。

1.)System.Security.CryptographyのAES(Rijndael)のMicrosoft .NET実装はどれほど安全ですか?それには既知のセキュリティ上の欠陥がありますか、あるいはMSの実装だけを使っても問題ありませんか? (これらのアルゴリズムの基本的な背景を知っていますが、どのように動作するかを知るにはそれほど深くはありません)。

2.)データはアプリケーションと同じPCに保存されているため、C#アプリケーションから情報を取得するのはどれくらい難しいですか?私はどこかのコード

string encrypPassword = "ThisIsMyPassword"; 
string encryptedString = EncryptString(ClearString, encrypPassword); 
// save encryptedString to harddrive 

に私は、攻撃者が単に組み立てコードにまで行くことができ、その時点で私はこれに対して行うことができるすべてでは何もないことを知っていると仮定すると、(システムのことができるようにする必要がありますデータを暗号化/復号化する)がありますが、管理されているので、encryptPasswordを取得するためのC#のショートカットのようなものですか、それともまだアセンブリコードに行く必要がありますか?

+0

[暗号化キーを安全に.NETアセンブリに格納する方法]の複製可能性(http://stackoverflow.com/questions/2528405/how-to-safely-store-encryption-key-in-a-net-アセンブリ) – Rawling

+5

ポイント2)はあなたの主な問題です、約1)心配しないでください。 –

+1

あなたはDPAPIを見てみることができます。例えば:http://stackoverflow.com/q/5620028/60761 –

答えて

5

アプリにコンパイルされた固定パスワードがある場合は、データが安全でないため、AESのセキュリティと既知のセキュリティフォールトを気にする必要はありません。十分に知識のあるPCにアクセスできる人は、すべてのデータを復号化することができます。

通常、固定パスワードを見つけるには、プログラミングに関する知識は必要ありません。ほとんどの場合、良い16進エディタが行います。あなたは、どんなプログラミング言語が使われているか知る必要はありません。

データが1人のユーザーによって使用されている場合は、患者データのパスワードをWindowsパスワード(またはアカウント)に結びつけることができます。 Windowsはそのためにいくつかの特定の機能を提供しています。 .NETからアクセスする方法については、http://msdn.microsoft.com/en-us/library/aa302402.aspxを参照してください。

+0

あなた自身で試してみたい方は、ILDASMまたはリフレクター(どちらも無料)を使って自分のキーを見つけてください。あなたはバイナリからそれを得ることは自明です。 –

0

パスワードデータを保存するには、System.Security名前空間のSecureStringクラスを使用できます。

+1

'SecureString'にはいくつかの利点がありますが、関連性はほとんどありません。 OPははるかに大きな問題を抱え、 'SecureString'は解決できません。 – CodesInChaos

+1

@Jodrell文字列の読み込みを妨げないことさえありません。これは、エラーダンプやスワップファイルなど、いくつかの特定の脅威に対してのみ保護します。 – CodesInChaos

0

ほとんどのまともな難読化ツールは、コードの文字列をアセンブリのstringsセクションに格納する前に暗号化し、使用する前に復号化するメソッドを挿入します。これらの技術は、これまで分解器によってリバースエンジニアリングされてきました。

実際には、プログラミング言語で文字列を実際に安全に保存する方法はほとんどありません。誰かがいつもその文字列を見つけたり、それを構築するために使用したロジックをリバース・エンジニアリングすることができます。あなたができる最善のことは、時間と労力に値するものではないように、攻撃者を長く鎮圧することです。

あなたのケースでは、私はおそらくアプリで暗号化されたパスワードを保管しています(アプリの外で手作業で暗号化してコピー/ペーストする)。おそらくそれを部分に分割して、単一の文字列として格納されないようにします。それをまとめて、実行時に解読し、実行時にSecureStringに格納します。暗号化ロジックを隠すのに役立つので、良い難読化ツールに投資してください(セキュリティの弱いリンクになるでしょう)。

1

元の質問の最初の部分に答えて - AESのネイティブWindows実装は、NISTがFIPS 140-2に準拠していることを証明しています。システムにネットAesCryptoServiceProviderクラスを使用したWindowsのCrypto APIにCAPICOMコムラッパーを使用したWindowsクリプトAPIに

  • を使用して

    1. :認定インプリメンテーションへのアクセスに制限されています.Security.Cryptography名前空間(このクラスは.Net Framework 3.5まで利用できなくなりました)

    RijndaelManagedクラスの実装は同じであり、NIST認定プロセス(このプロセスは非常に長く非常に高価です)には達していません。

    Aesアルゴリズムは非常に安全です(軍用グレードの暗号化、特に256ビットのキーの変形)。

    最大の懸念事項(上記のポスターに同意する)は、暗号化パスワードをアプリケーションにプレーンテキストで埋め込むことです。

  • 関連する問題