【问题标题】:How safe is this procedure?这个过程有多安全?
【发布时间】:2011-06-29 20:44:05
【问题描述】:

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

  1. 用户输入密码
  2. 应用随机数加盐密码
  3. 然后使用加盐密码加密,使用某种加密算法随机选择数据数组(由预定义的字符/字节表组成)
    • 为简单起见,它可以仅用于数字表,因此在数字的情况下,随机数组将只是足够长的整数/大整数。
  4. 然后我存储在 DB salt(修改值)和加密数组中

检查密码有效性:

  1. 获取密码
  2. 从 DB 中读取 salt 并计算解密密钥
  3. 尝试解密加密数组
  4. 如果成功(数学平均值)逐字节比较解密值
    • 它是否只包含已知表中的字符/字节。例如它是整数/大整数吗?如果是这样 - 密码算作有效

你觉得这个过程怎么样?

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

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

编辑

# 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

【问题讨论】:

  • 为什么?使用哈希函数+盐有什么问题?
  • 没什么错...只是想发明轮子:)

标签: security encryption passwords salt


【解决方案1】:

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

# 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

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

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

如果您应该假设攻击者将知道方程式的所有部分,但实际密码除外。因此,想要找回密码的攻击者已经知道密码的加密文本、明文和部分密码。

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

我自己不是密码分析员,但不用多想,我就觉得可能有多种攻击角度。

【讨论】:

  • 现在这只是心理锻炼...无论如何我已经扩展了您的程序...攻击者肯定知道 ENCRYPTED_TABLE 一些关于 SALT 的想法并且也知道 {ARRAY}
【解决方案2】:

建议的方案充其量只是比简单地存储密码和盐的哈希值略低。

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

【讨论】:

    【解决方案3】:

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

    从数据库中读取盐并计算解密密钥

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

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

    【讨论】:

    • 不正确。我猜他想从盐和需要检查的密码中计算出解密密钥。即如果用户输入的密码能够正确解密“表”,则授予访问权限。
    • > 然后用加盐密码用一些加密算法随机选择的数据数组(由预定义的字符/字节表组成)
    猜你喜欢
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2011-06-11
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多