2014-02-28 1 views
0

오랫동안 관련 답변을 찾으려고했으나 아직 확신이 없습니다.Rfc2898DeriveBytes - 암호 길이

나는 RijndaelManaged를 사용하여 암호화하려고합니다. Key를 만들려면 암호, 소금 및 반복을 Rfc2898DeriveBytes에 전달하고 있습니다.

사용자가 입력 한 암호가 Rfc2898DeriveBytes에 전달되기 전에 특정 길이 미만인 경우 상수를 추가하려고합니다.

지금까지 상수를 추가해도 보안에 어떤 이점도 추가되지 않는다는 것을 발견했습니다. 공격자가 소금과 함께 암호화 된 데이터를 포함하는 데이터베이스에 액세스 할 수 있지만 상수가 아니라면 그에게 조금 더 힘든 시간을 줄 것이라고 가정 해 봅시다. 결국 그는 그 사실을 발견 할 것이다.

또는 걱정하지 않고 Rfc2898DeriveBytes에 길이 암호를 전달하는 것이 "정말로 매우 안전합니다"?

더 짧거나 긴 암호를 전달하면 키 유도 프로세스에 영향을 미치지 만 어느 것이 더 좋고 가장 권장 되는가?

지금까지 내가 알고있는 것은 무작위적인 소금과 더 많은 반복이 중요합니다.

다음 코드는 암호에 상수를 추가하거나 제거해야합니까?

:

string constant = "AnyConstantToMakePasswordBigger"; 

if (password.Length < 8) 
{ 
password = password + constant; 
} 

RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 

byte[] salt = new byte[8]; 

rng.GetBytes(salt); 

Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(password, salt, 1000); 

using (RijndaelManaged aes = new RijndaelManaged()) 
{ 
    aes.Key = derivedKey.GetBytes(keyLength); 
    ..... 
} 

긍정적 또는 부정적인 의견과 응답을 환영 (주 사용자에게 암호 길이 제한은 GUI에 적용되지 않으며, 사용자는 1 자 또는 10 자 이하를 전달할 수 있습니다).

+0

유일한 해결책은 사용자가 적어도 특정 길이의 암호를 입력하도록 요구하는 것입니다. 상수 이상의 라운드를 추가하는 것은 1 문자 암호를 보충하지 않습니다. – mfanto

+0

예, 소금 및 기타 반복이 더 중요합니다. 사실 BCrypt가하는 일은 반복 작업의 반복입니다. 나는 더 긴 패스워드를 만들기 위해 지속적인 데이터를 추가하는 것이 많은 차이를 만들지는 않을 것이라고 생각한다. 패스워드의 유효 보안 깊이를 바꾸는 것은 아니다. –

+0

상수를 추가하는 것은 의미가 없습니다. 소금은 이미 당신이 성취하고자하는 목적을 성취합니다.사실, 상수를 추가하면 잠재적 인 보안 문제가 악화 될 수 있습니다 (하지만 'Rfc2898DeriveBytes'로는 안전 할 것입니다). 보안을 향상 시키려면 암호의 길이가 최소가되도록하십시오. – Jodrell

답변

0

공격자가 "상수"를 알지 못한다는 가정하에, 예, 무차별 공격을 더 어렵게 만들어 보안을 효과적으로 강화할 수 있습니다. 그러나 이것은 매우 나쁜 가정이며 침입자가 귀하의 소스 코드를 갖고 있다고 항상 가정해야합니다.

우리의 잘못된 가정에 계속 : 충분한 암호가 깨진 경우 공격자가 결국 상수를 알아낼 수도 있습니다.

비밀번호에 더 많은 문자를 추가하는 사람이 키 유도를 향상시키는 지 여부는 실제로는 아닙니다. 생성하는 키의 길이는 동일합니다. 그러나 공격자는 자신의 키를 추측하려고 시도하지 않으며 너무 길어서 무차별 적으로 힘을 실천하는 것이 사실상 불가능합니다. 모든 공격자가 암호를 추적합니다.

반복 암호와 긴 암호를 입력하는 것이 어려운 곳입니다. 반복은 각 추측을 수행하는 데 걸리는 시간을 증가시켜 어려움을 증가시킵니다. 합법적 인 사용자가 로그인 할 때 수천 번의 반복 작업을 수행 할 수있는 시간은 거의 없지만 무차별 대 공격자의 비용은 엄청납니다. 긴 암호는 추가적으로 무력의 어려움을 증가시킵니다. 소금은 동일한 암호를 동시에 해결하지 못하도록 보호합니다 (공격자는 각 암호가 동일해도 독립적으로 공격해야 함).

+0

"encryptedness"란 무엇입니까? 어느 누구도 아무 것도 모르는 새로운 용어를 만들면 반복이 "암호화 성"을 높이거나 증가시키지 않는다고 말하는 것은 어렵습니다. 반복을 반복하면 무차별 공격 (brute force attack)을 어렵게 만듭니다. 그래서, "암호화"가 보안과 관련이 있다면, 당신은 자신과 모순됩니다. –

+0

@PeterRitchie 당신은 단어의 권리 가난한 선택입니다. 나는 지금 편집 할 것이다. – MikeH

+1

암호에 상수를 추가하면 엔트로피가 감소하고, 'Rfc2898DeriveBytes'는 (소금의 도움으로) 증가하도록 설계되었습니다. – Jodrell

관련 문제