2009-08-14 126 views
0

情况如下:我们有一个公共库,它可以从我们设置的中央配置存储检索数据库连接详细信息。每个应用程序在使用数据库时都使用这个库。如何验证应用程序是它说的应用程序?

基本上,它会调用存储过程并说“我是{xyz}应用程序,我需要连接o”,它将返回该应用程序主数据库(服务器,实例,数据库,用户和密码)。

如何锁定下来,以便只有应用程序{xyz}可以检索{xyz}数据库的密码(每个应用程序都有一个数据库详细信息列表......我只需要保护密码) ?

回答

1

关闭我的头顶,尝试PKI。

+0

PKI不是一个小问题。你能扩展一些吗? – 2009-08-14 15:29:14

+0

我在密码学本身并不是一个新手,但我脑海中有这样的东西。虽然它有点粗略,但可能会起作用。 这是根据您可以访问应用程序的源的假设,并自己构建二进制文件 1.生成密钥对 2.随身携带 3.嵌入公钥与私钥每个应用程序实例 4.每当应用程序需要访问数据库时,使用时间戳生成签名字符串。 5.收到请求后,用您的私钥交叉验证签名。 – Everyone 2009-08-14 17:26:50

3

通常的方法是每个应用程序有不同的配置存储,并为每个应用程序提供不同的用户/密码以连接到配置存储。

这不会阻止任何人更改应用程序并用应用程序Y的值替换应用程序X的用户/密码,但它更安全一些,特别是当您编译此数据而不是通过配置提供时文件。

如果您想要真正安全,您必须先创建与存储的安全连接(因此您需要一个支持该连接的数据库驱动程序)。此连接必须使用安全密钥创建,该安全密钥在每个应用程序中都是唯一的,并且可以进行验证(因此无人可以复制它们)。您需要使用散列保护可执行文件(应用程序将以某种方式计算自己的散列并将其发送给将为每个应用程序提供有效散列列表的服务器)。

总而言之,这不是一件简单的事情,你可以用一个不起眼的选项打开。首先,您需要学习很多有关安全和安全数据交换的知识。您需要一种方法来安全地将您的应用安装在不安全的地方,验证其完整性,保护代码免受运行时可附加的调试器的影响,并防止其在虚拟机中运行等。

+0

多个配置存储不是一个选项。这个系统的全部目的是把所有东西都集中起来,所以我们不必管理400种不同的东西。 – 2009-08-14 11:43:28

+0

那么,如果你的数据库中有行级认证,你可以使用它。否则,请将用户名和密码保存在配置文件中,并且只返回用户名和(散列)密码匹配的行。 – 2009-08-14 13:45:01

+0

请注意,在一般情况下,安全!=舒适。如果你做了一些安全的事情,它很难使用,难以正确设置,等等。 – 2009-08-14 13:46:20

0

一种可能性是以加密形式保存数据库中的密码,并将加密密钥以安全连接的形式传递给允许的应用程序。然后,只有具有加密密钥的应用程序才能真正获取密码而不是其他密码。

+0

小细节:你的意思是“加密形式”和“加密密钥”。哈希是不可逆的,因此无法将哈希转换回用于生成哈希的文本。 – 2009-08-14 12:27:22

+0

感谢戴夫的纠正。哈希是单向函数。否则我应该说加密和解密。 – rayimag 2009-08-14 13:30:03

1

您是否试图保护自己免受恶意软件攻击,并且这是这些应用程序连接到的中央数据库?如果是这样,你应该考虑一下你的数据库和应用程序之间的中间层。

我不确定这适用于您的情况,具体取决于您对上述答案的回答是什么,但通过评论它听起来像是您的问题与此问题类似。

Securing your Data Layer in a C# Application

0

最简单/最直接的方法是将存储在加密格式的密码(存储密码以明文只是普通的坏无论如何,正如最近在PerlMonks证实比),并负责做好每一个应用程序的自己的密码加密/解密。因此,应用程序是否检索到另一个应用程序的密码并不重要,因为它仍然无法解密它们。