2012-06-20 2 views
2

PHP에서 bcrypt를 사용하여 해시 및 소금 암호를 조사하고 있습니다. 누군가가 내게 설명 할 수 있습니까 brcypt의 "작업"/ "라운드"사용은 공격을 막아 줍니까?bcrypt의 기능에 대한 설명

나는 이미 "How do you use bcrypt for hashing passwords in PHP?"을 읽었지 만, 누군가가 데이터베이스를 갖고있어 오프라인으로 깨뜨릴 수있는 이유를 이해하는 데 어려움을 겪고 있습니까?

레인보우 테이블에 대해 데이터베이스를 보호하기 위해 잠재적으로 소금과 해시가 될 수 있습니까? 아니면 bcrypt가 이런 공격을 막기 위해 특별한 조치를 취하고 있습니까?

답변

4

간단히 말해 bcrypt은 의도적으로 느리며 높은 반복 횟수를 사용하여 의도적으로 느리게 만들 수 있기 때문에 sha 패밀리와 같은 다른 해시 알고리즘보다 "더 뛰어납니다". 또한 미리 계산 된 해시 값 (레인보우 테이블)을 사용하지 못하게하는 소금 사용이 필요합니다. 소금 값은 bcrypt의 각 출력과 함께 생성/저장되어 다른 사용자의 값 (동일한 암호를 사용하는 경우) 사이의 값을 비교하지 못하게해야합니다.

해커가 암호 해시 및 소금을 가져 오더라도 bcrypt을 반복적으로 많이 사용하는 경우 일치하는 암호를 빠르게 찾을 수 없습니다. 일방향 함수이기 때문에 시도한 각 암호마다 bcrypt 계산을 한 번 수행해야합니다. 물론 나쁜 암호에 대한 보호는 거의 없습니다.

+0

이 대답에 대한 몇 가지 중요한 변경 사항을 만들었습니다. 알고리즘은 알려진/정적입니다. 사용 된 하드웨어는 bcrypt의 결과를 변경하지 않습니다. bcrypt는 속도에 대한 반복 횟수에만 의존합니다. bcrypt 계산은 전문화 된 하드웨어/소프트웨어 플랫폼에서 훨씬 빠를 것입니다. 대답의 요지는 정확했지만, 더 자세한 정보는 확실하지 않았 음을 명심하십시오. –

1

요약하면 bcrypt 및 기타 암호 확장 알고리즘은 모두 작업 증폭에 관한 것입니다. 공격자는 (일반적으로 유효한 로그인 요청이나 잘못된 암호를 훨씬 낮은 속도로 받기 때문에) 암호를 해독하기 위해 더 많은 작업을 수행해야합니다. 따라서 공격자가 백만 시간 또는 수십억 번 이상을 지불해야하는 암호 해싱 시간에 추가하는 모든 밀리 초. Bcrypt 및 기타 알고리즘은 의도적으로 일을 느리게하기 때문에 공격자가 암호를 해독하는 데 더 많은 시간을 소비하게 만듭니다.