使用PBKDF2WithHmacSHA512进行密码保护会在生产设置(AWS)上花费大量处理时间

时间:2015-07-18 12:37:36

标签: java password-encryption aws-sdk

我正在尝试使用以下步骤安全地存储我的用户密码

  1. 使用PBKDF2WithHmacSHA512进行盐渍+散热+拉伸
  2. 20,000次迭代
  3. 我的代码粘贴在

    下面
    public class EncrypterClass
    {
        private static final int iterations = 20000;
        private static final int saltLen = 64;
        private static final int desiredKeyLen = 512;
    
        private static String hash(String value, byte[] salt) throws Exception 
        {
            if (value == null || value.length() == 0)
                throw new IllegalArgumentException("Empty passwords are not supported.");
            SecretKeyFactory f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
            SecretKey key = f.generateSecret(new PBEKeySpec(value.toCharArray(), salt, iterations, desiredKeyLen));
            return Base64.encodeBase64String(key.getEncoded());
        }
    
        public static class Password
        {
            public static String getSaltedPassword( String password ) throws Exception 
            {
                byte[] salt = SecureRandom.getInstance("SHA1PRNG").generateSeed(saltLen);        
                return Base64.encodeBase64String(salt) + "$" + hash(password, salt);
            }
    
            public static boolean match(String password, String saltedPassword) throws Exception
            {
                String[] saltAndPass = saltedPassword.split("\\$");
                if (saltAndPass.length != 2) 
                {
                    return false;
                }
                String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0]));
                return hashOfInput.equals(saltAndPass[1]);
            }
        } 
    }
    

    我在本地计算机上测试时工作正常。但是在我的AWS设置流程中进入某种耗时的处理(几分钟来散列密码)。目前,我的AWS设置是一个免费的测试设置,包含以下资源: EC2 t2.micro,1个vCPU和1GiB

    有人可以指导可能出现的问题吗?

    感谢 阿米特

1 个答案:

答案 0 :(得分:1)

这种盐+哈希算法,特别是在如此多的迭代中,在设计上是缓慢的,并且是故意的:目标正是使攻击者通过进行暴力攻击来查找密码非常难以计算。在资源有限的VM上,它显然会更慢。