Security PowerShell的安全性如何';转换自SecureString-密钥

Security PowerShell的安全性如何';转换自SecureString-密钥,security,powershell,securestring,Security,Powershell,Securestring,我有一个模块,其中包含一些字符串和一些私有数据,这些数据应该很难获得,但经常更改。我需要将这个脚本放在各种机器上,在这些机器上它可能被访问,并且代码被不应该拥有用于导出输出的信息的人读取 我真的很担心字符串会随着时间的推移而变化,所以我正在考虑创建一个脚本,它会提示将这些值作为安全字符串输入,并使用密钥对它们进行加密,然后将它们转储到xml文件中。然后使用XML文件提供字符串。任何运行此模块中需要该数据的命令的人都必须提供密钥,以便对字符串进行解密 这基本上是我希望做的,但我将处理对象 $sec

我有一个模块,其中包含一些字符串和一些私有数据,这些数据应该很难获得,但经常更改。我需要将这个脚本放在各种机器上,在这些机器上它可能被访问,并且代码被不应该拥有用于导出输出的信息的人读取

我真的很担心字符串会随着时间的推移而变化,所以我正在考虑创建一个脚本,它会提示将这些值作为安全字符串输入,并使用密钥对它们进行加密,然后将它们转储到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
我知道字符串将使用Rijndael加密算法进行加密,我相信这也被称为AES


如果能够访问脚本,需要付出多少努力才能破解xml文件中的加密密钥?

如果运行脚本的系统不可靠,则无需付出任何努力。由于
SecureString
处理需要密钥,因此脚本运行程序必须知道该密钥-如果该密钥不可靠,则说明您的系统已经受到威胁

这个问题已经问了好几次了

SecureString
使用Windows的数据保护API。它很可能足够强大,在实际情况下是牢不可破的——除了密码分析

如果您更详细地解释您试图实现的目标,可能会有保护数据的方法


保护敏感数据的一种方法是将其保存在安全的系统中。给客户端一些预先生成的令牌,比如guid。每次客户端需要数据时,它都会向安全的远程系统发送一个令牌。根据IP/日期/任何内容检查令牌,并在远程系统上完成所有处理。结果数据返回给客户端。如果结果数据是机密部分,这显然不起作用,但为什么您要将此类信息发送到不可靠的系统?

那么加密的机密字符串本身是安全的,但在这种形式下可能无法使用
ConvertToSecureString
将其从加密的标准字符串转换为
SecureString
,但为此,您需要密钥。如果您的用户或脚本拥有密钥,那么他们可以做任何事情

您甚至可以将
SecureString
传递给您正在使用的任何应用程序,还是需要将其转换回常规字符串?如果机密数据在任何时候都是明文形式的,那么您的用户就可以看到它

即使您的应用程序支持
SecureString
,您仍然会受到攻击,因为
SecureString
容易被破解:

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

使用某些密钥加密机密数据,但允许低权限用户拥有密钥的方法已被打破。这相当于“我不想让我的朋友拥有我房子的钥匙,所以我会把钥匙锁在一个盒子里,然后把盒子的钥匙给他。”

仅SecureString的问题在于,它是针对用户帐户加密的,我需要一些特定用户的注意事项。我在各种不同的网络上工作,所有这些网络都彼此不同。我补充小地方的本地管理员。一个系统中的本地域管理员可能在其所在位置具有完全的系统访问权限,但另一个位置将具有不同的管理员。这个消息与我有关。向本地管理员透露是不明智的。换句话说,这是一个高于“林”的级别,因此在任何给定场景中都不会直接连接到提供给身份验证系统的权限,并且必须可用于各种帐户,包括不同AD林中的帐户。