代码之家  ›  专栏  ›  技术社区  ›  TWA

存储服务器应用程序中不能散列的密码

  •  2
  • TWA  · 技术社区  · 15 年前

    我有一个.NET服务器应用程序,它必须存储不能散列的密码,因为我使用的某些API需要纯文本格式的密码。

    这些密码也可以作为系统配置的一部分导出并导入到应用程序的另一个服务器实例中,或者出于备份目的。

    除了从其他服务器导出的数据外,其他服务器上的应用程序实例绝对需要能够读取加密数据。

    在不给用户带来太多麻烦的情况下,以及由于加密密钥丢失/不可用而导致数据丢失的风险最小的情况下,最安全的方法是什么?


    编辑

    我正在寻找更多的细节,比如:

    • 如何/在哪里存放钥匙
    • 生成 每个安装和 存储它与应用程序范围 公共密钥

    …不能使用哪种加密算法。


    编辑二

    我应该补充一下,这个应用程序将被分发给客户,以便在他们自己的服务器上运行。它是一个客户机/服务器应用程序。存储的密码仅由应用程序用于传递到外部API方法。我们什么都不用。

    主要的问题是,当系统配置导出为XML进行备份或移动到其他计算机时。这是我们想要保护它们的地方,同时也让用户尽可能地轻松和灵活。

    6 回复  |  直到 13 年前
        1
  •  1
  •   Elitecoder    15 年前

    在您描述了要查找的内容的编辑之后,下面是更多的建议-

    如果继续使用用户密码作为密钥或种子,则可以将密钥存储在数据库中,甚至可以存储与用户相关的csv文件。 完成之后,下一个问题将是,什么更好-生成一个唯一的密钥,每次安装或拥有一个通用的应用程序密钥。 实际上,有一个通用的应用程序密钥是一个坏主意,原因有几个- 1。如果它被破解一次,你以前所有的交换也会被破解。 2。当加密的密码可以被重播时,它容易受到重播攻击。 三。你应该有意识地不时地改变这把钥匙。

    因此,在任何一天,生成一个唯一的密钥都是一个更好的主意。我认为你应该调查迪菲·赫尔曼的钥匙交换。我认为那会解决你的大部分问题。 D-H密钥交换的概念是,您使用自己的用户提供的密钥来建立一个用于通信的唯一(每个事务)密钥。这个方法的最佳部分是,实际的密钥永远不会被显示,并且每次都可以基于相同的旧种子/密钥生成新的密码。

    看看它。

        2
  •  2
  •   Oli    15 年前

    好吧,如果你只是在寻找一个强大的算法,你可能会做得比使用三元组更糟糕。它可能32岁,但它仍然很强壮。

    如果你想要一些更新的东西,aes(最初的rijndael)也可以。

    您可能需要比较每个的性能,看看最适合您的是什么。

        3
  •  2
  •   Dave Swersky    15 年前

    当涉及到加密时,密钥就像一个硬件加密狗。用你的生命保护它。

    您使用的服务器是什么?大多数现代RDMB都带有加密功能,可以在静止时为您加密数据,不需要外部密钥。这至少可以在服务器中保护数据…

        4
  •  2
  •   Elitecoder    15 年前

    实际上,一个好的方法是使用用户输入的密码作为种子/密钥来生成一个动态的更强大的密码。很多服务器总是这样做。这给了你很多好处。 1。不会给用户带来麻烦。 2。您可以将用户密码保存为文本文件。 三。机器生成的密码比人类提供的密码强得多。 4。您可以使用相同的种子生成新密码,这使您的协议对于重播攻击更强大。

    试试看。

        5
  •  0
  •   mog    15 年前

    您可以让您的程序pgp加密它们,这样您的客户pgp密钥就可以解密它们,您的客户也可以解密它们。在编程使用密码时,密码只能是纯文本。

        6
  •  0
  •   Mike Valenty    15 年前

    我们使用非对称公钥加密存储信用卡信息。许多服务器都有公共密钥,用于在进入时加密信用卡。只有CC网关应用程序具有用于解密和处理付款的私钥。私钥作为证书安装在生产服务器上。

    因为您存储的是密码,所以您可能仍然有一个哈希来快速进行用户身份验证。

    http://en.wikipedia.org/wiki/Public-key_cryptography