这个程序有多安全?

时间:2011-02-18 14:14:44

标签: security encryption passwords salt

我将使用这种方法来存储我的密码:

  1. 用户输入密码
  2. 应用程序盐密码及随机数
  3. 然后用盐渍密码加密一些加密算法随机选择的数据数组(由预定义的字符/字节表组成)
    • 为简单起见,它只能用于数字表,所以在数字的情况下,随机数组就足够长整数/ biginteger。
  4. 然后我存储在DB salt(修改后的值)和加密数组
  5. 检查密码有效性:

    1. 获取密码
    2. 从DB读取盐并计算解密密钥
    3. 尝试解密加密数组
    4. 如果成功(以数学方式)比较解密值逐字节
      • 它是否只包含来自已知表的字符/字节。例如是整数/大整数?如果是这样 - 密码计为有效
    5. 您对此程序有何看法?

      简而言之,它是使用哈希函数的一种替代方法......

      在这种方法中,加密算法即将用于计算非可逆值。

      修改

      # Encrypt/decrypt function that works like this:
      KEY=HASH(PASSWORD)
      CYPHERTEXT = ENCRYPT(PLAINTEXT, KEY)
      PLAINTEXT = DECRYPT(CYPHERTEXT, KEY)
      
      # Encrypting the password when entered
      KEY=HASH(PASSWORD)+SALT or HASH(PASSWORD+SALT)
      ARRAY={A1, A2,... AI}
      SOME_TABLE=RANDOM({ARRAY})
      ENCRYPTED_TABLE = ENCRYPT(SOME_TABLE, KEY + SALT)
      
      # Checking validity
      DECRYPT(ENCRYPTED_TABLE, PASSWORD + SALT) == SOME_TABLE
      if(SOME_TABLE contains only {ARRAY} elements) = VALID
      else INVALID
      

3 个答案:

答案 0 :(得分:2)

根据你所写的内容,我假设您要执行以下操作:

# You have some encryption function that works like this
CYPHERTEXT = ENCRYPT(PLAINTEXT, KEY)
PLAINTEXT = DECRYPT(CYPHERTEXT, KEY)

# Encrypting the password when entered
ENCRYPTED_TABLE = ENCRYPT(SOME_TABLE, PASSWORD + SALT)

# Checking validity
DECRYPT(ENCRYPTED_TABLE, PASSWORD + SALT) == SOME_TABLE

首先关闭:没有理智的人会在生产系统中使用这样的自制方案。因此,如果您正考虑在现实世界中实际实现这一点,请返回。甚至不要尝试自己编写代码,使用经过验证的软件库来实现广泛接受的算法。

现在,如果您想将其视为一项心理锻炼,您可以这样开始:

如果您认为攻击者会知道等式的所有部分,除了实际密码。因此,想要检索密码的攻击者已经知道加密文本,明文和密码的一部分。

成功的机会取决于实际的加密方案,也可能取决于链接模式。

我自己不是一个密码分析师,但是如果不考虑太多,我觉得可能存在多种攻击角度。

答案 1 :(得分:1)

建议的方案充其量只比简单地存储密码和盐的哈希值安全性稍差。

这是因为加密步骤只需添加一小段时间来检查每个哈希值是否正确;但与此同时,它还引入了等效哈希的类,因为ARRAY有多种可能的排列将被识别为有效。

答案 2 :(得分:0)

每次有人登录时,您都必须对每个密码强制加密。

  

从DB读取salt并计算解密密钥

除非您事先知道密码是什么,否则无法完成。

只需盐(和多个哈希)密码。