3

私は、達成するのが難しいが頻繁に変更されるいくつかのプライベートデータを含むいくつかの文字列を含むモジュールを持っています。このスクリプトをさまざまなマシンに配置する必要があります。このスクリプトにアクセスして、出力を導出するために使用される情報を持っていない人がコードを読み取る可能性があります。

私は時々変化する文字列について本当に心配しているので、それらの値を安全な文字列として入力し、キーを使用して暗号化し、xml ファイルにダンプするスクリプトを作成することを検討しています。XML ファイルは、文字列を提供するために使用されます。そのデータを必要とするこのモジュールからコマンドを実行する人は、文字列を復号化できるようにキーを提供する必要があります。

これは基本的に私が期待していることですが、オブジェクトを扱います

$secure = Read-Host -AsSecureString
$encrypted =  ConvertFrom-SecureString -securestring $secure -key somekey
$encrypted | Export-Clixml testing.xml
$imported = Import-Clixml testing.xml
$value = ConvertTo-SecureString -string $imported -key somekey

文字列は、AES とも呼ばれる Rijndael 暗号化アルゴリズムを使用して暗号化されることを理解しています。

スクリプトへのアクセス権が与えられた場合、xml ファイル内の暗号化されたキーを解読するには、どれだけの労力が必要でしょうか?

4

2 に答える 2

2

暗号化された秘密の文字列自体は安全ですが、おそらくその形式では使用できません。 ConvertTo-SecureString暗号化された標準文字列から に変換しSecureStringますが、そのためにはキーが必要です。ユーザーまたはスクリプトがキーを持っている場合、彼らは何でもできます。

また、使用しているアプリケーションに を渡すこともできますSecureStringか?それとも、通常の文字列に戻す必要がありますか? 機密データがいつでもプレーンテキスト形式である場合、ユーザーはそれを見ることができます。

アプリケーションが をサポートしている場合でも、は簡単にクラックSecureStringできるため、まだ問題があります。SecureString

[System.Runtime.InteropServices.Marshal]::PtrToStringAuto(
  [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securestring)
 )

機密データを何らかのキーで暗号化するが、権限の低いユーザーがキーを持てるようにするというアプローチは破られています。これは、「友人に家の鍵を渡したくないので、鍵を箱に閉じ込めて、代わりに箱の鍵を彼に渡す」に相当します。

于 2012-09-20T20:53:59.397 に答える
1

スクリプトを実行するシステムが信頼できるものでない場合は、作業は必要ありません。SecureString処理にはキーが必要なため、スクリプトランナーはそれを知っている必要があります。信頼できない場合は、システムがすでに侵害されています。

この質問は何度も議論されてきました。

SecureStringWindowsのデータ保護APIを使用します。それは実際の状況で壊れないほど十分に強い可能性があります-ゴムホースの暗号解読を保存します。

達成しようとしていることをより詳細に説明すると、データを保護する方法があるかもしれません。

機密データを保護する1つの方法は、データを安全なシステムに保持することです。事前に生成されたトークン(GUIDなど)をクライアントに提供します。クライアントがデータを必要とするたびに、1つのトークンを安全なリモートシステムに送信します。トークンはIP/日付/その他に対してチェックされ、すべての処理はリモートシステムで実行されます。結果データはクライアントに返されます。結果データが信頼できる部分である場合、これは明らかに機能しませんが、とにかく信頼できないシステムにそのような情報を送信するのはなぜですか?

于 2012-09-20T20:22:38.920 に答える