隐藏算法有必要吗?
Is hiding an algorithm necessary?
我只是想在数据安全方面澄清一下,我正在使用 SecreteKeyFactory 对象来生成密钥。这将在encrypting/decrypting一个数据中使用。
这是我的代码
private SecretKey getKey(String user_id, String salt) throws NoSuchAlgorithmException,
InvalidKeySpecException, UnsupportedEncodingException {
SecretKey secretKey = null;
String PBE_SHA256_256BitAES_CBC_BC = "PBEWithSHA256And256BitAES-CBC-BC";
String AES_ENCRYPTION = "AES";
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(PBE_SHA256_256BitAES_CBC_BC);
KeySpec keySpec = new PBEKeySpec(user_id.toCharArray(), salt.getBytes(), Constants.ITERATION_COUNT, Constants.KEY_LENGTH);
secretKey = secretKeyFactory.generateSecret(keySpec);
secretKey = new SecretKeySpec(secretKey.getEncoded(), AES_ENCRYPTION );
return secretKey;
}
我的问题是。是否需要隐藏获取secretkey的算法?如果不是,我们应该将算法存储在哪里以增加安全性?
不,不需要隐藏算法。这样做是 security through obscurity,只会造成一种虚假的安全感。在任何设计良好的密码系统中,密钥是唯一需要保密的东西。
我只是想在数据安全方面澄清一下,我正在使用 SecreteKeyFactory 对象来生成密钥。这将在encrypting/decrypting一个数据中使用。
这是我的代码
private SecretKey getKey(String user_id, String salt) throws NoSuchAlgorithmException,
InvalidKeySpecException, UnsupportedEncodingException {
SecretKey secretKey = null;
String PBE_SHA256_256BitAES_CBC_BC = "PBEWithSHA256And256BitAES-CBC-BC";
String AES_ENCRYPTION = "AES";
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(PBE_SHA256_256BitAES_CBC_BC);
KeySpec keySpec = new PBEKeySpec(user_id.toCharArray(), salt.getBytes(), Constants.ITERATION_COUNT, Constants.KEY_LENGTH);
secretKey = secretKeyFactory.generateSecret(keySpec);
secretKey = new SecretKeySpec(secretKey.getEncoded(), AES_ENCRYPTION );
return secretKey;
}
我的问题是。是否需要隐藏获取secretkey的算法?如果不是,我们应该将算法存储在哪里以增加安全性?
不,不需要隐藏算法。这样做是 security through obscurity,只会造成一种虚假的安全感。在任何设计良好的密码系统中,密钥是唯一需要保密的东西。