我有一个模块,其中包含一些带有一些私有数据的字符串,这些数据应该很难获得,但会经常更改。我需要将此脚本放在各种机器上,这些机器可能会访问它,并且代码可能会被不应该拥有用于导出输出的信息的人读取。
我真的很担心不时变化的字符串,因此我正在考虑创建一个脚本,提示将这些值作为安全字符串,并使用密钥对它们进行加密并将它们转储到 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 文件中的加密密钥?
然后加密秘密字符串在其自己的是安全的,但以这种形式可能无法使用。ConvertTo-SecureString
会将其从加密的标准字符串转换为SecureString
,但要做到这一点,你需要钥匙。如果您的用户或脚本拥有密钥,那么他们就可以做任何事情。
你甚至可以通过SecureString
到您正在使用的任何应用程序,或者您是否需要将其转换回常规字符串?如果秘密数据在任何时候都是明文形式,那么您的用户就可以看到它。
即使您的应用程序支持SecureString
,你仍然被冲洗,因为SecureString
是很容易破解的:
[System.Runtime.InteropServices.Marshal]::PtrToStringAuto(
[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($securestring)
)
使用某个密钥加密秘密数据但允许低权限用户拥有该密钥的方法已被破坏。这相当于“我不想让我的朋友拥有我家的钥匙,所以我会把钥匙锁在一个盒子里,然后把盒子的钥匙给他。”
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)