2014-01-23 1 views
4

동료는 그 결과 암호 해시가 예상되는 소금 (포함 https://crackstation.net/hashing-security.htm는 안전

에서 촬영 조언을 포함하여, 연구의 공정한 금액 후 우리의 암호 해시 코드를 구현 한 암호 해시의 반복 ​​수를 포함하는 것입니다 키 확인을 위해 필요하며 암호를 확인하는 데 필요합니다.) 또한 키 스트레칭에 대한 반복 계수가 포함됩니다.

단위 테스트에서 더 낮은 개수를 사용할 수 있기 때문에 반복 횟수가 데이터베이스에 저장되는 것이 좋으며 카운트를 변경하면 기존 저장된 암호 해시의 유효성을 계속 검사 할 수 있습니다. 그러나 반복 횟수가 알려졌다면 쉽게 무차별 공격을 할 수 없기 때문에 숫자를 포함하는 것이 안전 할까? 점차적으로 테스트 된 각 반복 횟수에 대해 추가 검사를 많이하지 않게됩니다.

+0

반복 횟수가 너무 적지 않으면 어쨌든 공격자에게 도움이되지 않습니다. – SLaks

+0

반복 횟수를 직접 저장하지 않으려면 해시 체계 및 설정을 나타내는 숫자 만 저장하고이를 사용하여 PBKDF, 염분 크기 및 반복 횟수를 결정할 수 있습니다. 그러나 일반적으로 반복 횟수는 공개 지식 일 수 있습니다. –

답변

3

결과 해시에 반복 횟수를 포함하는 것이 좋습니다.

가장 중요한 점은 향후 하드웨어가 더 빨라질 때 반복 횟수를 늘릴 수 있다는 것입니다. 오래된 해시 값을 잃어 버리지 않고보다 빠른 하드웨어에 적응할 수 있어야합니다.

이 숫자를 숨기는 것이 도움이되지 않습니다. 그것이 알려지지 않은 경우, 공격자는 합리적인 숫자, 아마도 약간 더 높을 것이라고 가정합니다. 그는 마지막 반복과 해시 값을 비교할 수있을뿐만 아니라 그 사이의 모든 단계도 비교할 수있었습니다. 대수 비용 매개 변수가있는 BCrypt의 경우 약 3-5 개의 연산을 더 많이 비교할 수 있습니다 (너무 작은 수는 합리적이지 않음). 큰 문제는 아닙니다.

PHP의 password_hash()과 같이 잘 알려진 API에는 비용 매개 변수도 포함됩니다.

편집 : 반복 횟수를 숨기면 해싱 프로세스에 일종의 비밀이 추가되며 공격자는이 수치를 추측해야합니다. 서버 쪽 비밀을 추가하는 것이 훨씬 더 좋은 가능성이 있습니다. 내 튜토리얼의 safely storing passwords (해시 값을 암호화하고 해시 값에 대해 살펴보십시오)에 대해 설명하려고했습니다.

+0

나는 이해하지 못한다. 만약 당신이 1000의 반복 카운트를 가지고 있다면, 해시를 깨뜨리는 데 1000 초가 걸리지 않을까? 나는 당신이 3-5에서 그것을 어떻게 할 수 있는지 보지 못했다. – orbfish

+0

@orbfish - 그것은 PBKDF2 알고리즘에 따라 실제 반복 횟수를 정의합니다. 1000 회 반복 한 후에 결과를 비교할 수 있으므로 해시를 한 번만 계산하고 1000 번 비교합니다. 물론 단 10 번의 반복 (아무도 단 10 번의 반복 만 수행)을 비교 한 후에는 비교할 수 없습니다. 1000 번 반복의 합리적인 부분 만 비교하십시오. BCrypt를 사용하면 실제 반복 횟수를 정의하지 않고 'iterations = 2^costfactor'의 비용 요소를 전달하므로 16, 32, 64, 128, ... 반복 만 가능하며 2^9, 2^10 , 2^11, 2^12는 비교할 의미가 있습니다. – martinstoeckli

+0

@orbfish - 더 많은 정보를 얻기 위해 내 답변을 수정했습니다. – martinstoeckli