在Linux中存储机密信息

6
抱歉,如果这个问题在这里已经被问过并得到了答案,简单的搜索没有给我太多信息。请随意更正标签并提供类似以下问题或主题讨论的链接。此外,我对Windows有一定了解,对Linux不是很了解,所以问题可能看起来很琐碎。
一些Windows应用程序使用注册表和其他一些不常见的地方存储其激活数据、试用期剩余天数,以及软件已安装在该操作系统上的事实。
在Linux中是否有类似的位置?
如果有,那么这些数据有多容易被发现,考虑到您不仅拥有根访问权限,而且可以调整内核并通过强制获取东西来获得几乎所有源代码?
如果在Linux中无法保护这些数据,其他所有事情都相等,那么它会对Linux商业软件的可用性产生多大影响?

1
由于只需要一个人就可以破解软件,所以这并不重要。例如在Windows上,您可以使用Filemon/Regmon轻松发现程序存储数据的位置。 - CodesInChaos
4个回答

6
你所说的是安全通过混淆实现,而且在 Windows 中注册表并不比 Linux 中的任何深度隐藏文件存储数据更加难以理解。然而,在 Linux 中,程序通常将其数据存储在用户主目录下以点 . 开头的文件中(表示这些文件的隐藏性质)。通常情况下,这些位置并不是非常难以理解。例如,Qt 有一个类 QSettings,在 Windows 中它使用系统注册表,但在 Linux 中数据存储在 .config/CorporationName/ProgramName.conf 中。许多其他程序也以这种方式存储数据。如果你对你的数据过于担心,当然可以采用任何你喜欢的加密、混淆方案 - 比 Windows 注册表更加混淆。
Windows 风格的注册表不可用会影响商业软件的可用性吗?即使只有很小一部分(但我不这么认为),平台上还有更严重的问题/特性,使得编写商业和封闭软件变得更加麻烦。 (但不是不可能)

1
我本来会给你一个+1的,但是因为最后一段的存在,我就算了。顺便说一下,GNOME的GConf提供了类似于Windows注册表的接口(在我看来更加易用)。 - Hasturkun
我不是一个经常使用GNOME的用户,但了解“GConf”还是很好的。在你的观点中,最后一段有什么问题?我认为问题在于对于一个人来说优势可能是缺点对于另一个人来说。众所周知,Linux偏爱开源软件,而苹果则更喜欢商业软件。 - RushPL

4

无论使用哪种操作系统,都不应该依赖混淆来保证安全性,因为这是最容易被破解的。无论您将数据存储在哪里,都应该加密,并且只在运行时尽可能短暂地解密。更好的方法是,如果您正在使用存储在您控制的服务器上的用户帐户,请将数据存储在那里,并在身份验证/授权期间执行检查。


如果密钥在应用程序的某个地方,我也可以获取它,只是时间问题,找到它并解密数据,对吧? - Alexey Frunze
@Alex,没错。这就是为什么我建议采用更好的方法,如果可能的话。否则你无法避免在应用程序中存储密钥。 - Paul Sasik

1

有几个选项来存储机密数据:

  • 简单的加密文件(可以使用gpg完成)

  • 加密容器(例如truecrypt,dm-crypt)

  • 加密分区或磁盘(dm-crypt)

不要忘记,您还应该使用加密交换。


1
唯一理论上安全的解决方案是通过获取网络连接,将数据存储为加密字符串,并仅在完全受您控制的中央服务器上解密。这对于Windows同样适用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接