我有一个模块,其中包含一些字符串和一些应该很难获得但经常更改的私有(private)数据。我需要将此脚本放在可能访问它的各种机器上,以及由不应该拥有用于导出输出的信息的人读取代码的地方。
我真的很担心不时更改的字符串,因此我正在考虑创建一个脚本,提示输入这些值作为安全字符串并使用 key 加密它们并将它们转储到 xml 文件中。然后使用 XML 文件提供字符串。任何从该模块运行需要该数据的命令的人都必须提供 key ,以便可以解密字符串。
这基本上是我期望做的,但我将处理对象
$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 文件中的加密 key ?
最佳答案
然后加密的 secret 字符串本身是安全的,但它可能无法以这种形式使用。 ConvertTo-SecureString
会将其从加密的标准字符串转换为 SecureString
,但为此,您需要 key 。如果您的用户或脚本拥有 key ,那么他们就可以做任何事情。
您甚至可以将 SecureString
传递给您正在使用的任何应用程序,还是需要将其转换回常规字符串?如果 secret 数据在任何时候都是明文形式,那么您的用户就可以看到它。
即使您的应用程序支持 SecureString
,您仍然会遇到麻烦,因为 SecureString
很容易破解:
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto(
[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securestring)
)
用一些 key 加密 secret 数据,但允许低权限用户拥有 key 的方法被破坏了。这相当于“我不想让我的 friend 拿到我家的 key ,所以我会把 key 锁在一个盒子里,然后把盒子的 key 给他。”
关于security - PowerShell 的 ConvertFrom-SecureString -key 有多安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12520006/