PHP에서 HASH_PBKDF2 기능은 일반적으로 사용되는 암호화 도구로, 암호를 암호화하고 저장하는 데 종종 사용됩니다. 이 기능은 PBKDF2 (비밀번호 기반 키 파생 함수 2) 알고리즘을 기반으로합니다. 반복 해싱을 통해 암호화 계산이 더 복잡하여 비밀번호의 보안을 향상시킵니다. HASH_PBKDF2 함수의 주요 매개 변수는 반복 , 즉 반복 수입니다. 이 매개 변수는 암호 해싱의 계산 복잡성과 시스템의 전반적인 보안에 직접적인 영향을 미칩니다.
반복 횟수는 동일한 데이터에서 해시 함수가 수행하는 횟수를 나타냅니다. PBKDF2 알고리즘에서 각 추가 반복에서는 암호와 소금 값에 대한 새로운 해싱이 수행되어 공격자가 암호를 무차별하는 데 필요한 계산 비용을 증가시킵니다.
기능 프로토 타입은 다음과 같습니다.
<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">hash_pbkdf2</span></span><span>(
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$algo</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$password</span></span><span>,
</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$salt</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$iterations</span></span><span>,
</span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$length</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>,
</span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-variable">$binary</span></span><span> = </span><span><span class="hljs-literal">false</span></span><span>
)
</span></span>
그중 $ 반복은 해시 반복 수를 제어하는 매개 변수입니다.
반복 수를 늘리는 직접적인 효과는 계산 비용을 늘리는 것입니다. 합법적 인 사용자의 경우 로그인은 몇 밀리 초만 더 많이 걸릴 수 있지만 공격자에 대한 대규모 중박수 공격을 수행 할 때 각 추가 반복은 계산량이 여러 번 증가 함을 의미합니다. 예를 들어, 1000 개의 반복을 사용하는 경우 초당 1000 개의 암호를 시도 할 수 있습니다. 100,000으로 증가하면 초당 10 개의 암호 만 시도하여 공격 효율을 크게 줄일 수 있습니다.
현대의 공격자는 종종 GPU, FPGA 또는 ASIC 장치를 사용하여 병렬로 갈라집니다. 직렬 구조로 인해 PBKDF2는 이러한 하드웨어로 인한 공격을 어느 정도 억제 할 수 있습니다. 반복의 수를 늘리면 이러한 장치의 장점을 더욱 줄일 수 있으므로 공격자가 강력한 하드웨어를 가지고 있더라도 크래킹의 어려움이 크게 증가합니다.
사전 공격은 미리 계산 된 비밀번호 해시 목록에 의존합니다. PBKDF2의 반복 메커니즘은 소금 값 ( $ 소금 )의 사용과 결합되므로 동일한 암호가 다른 소금 값을 사용하더라도 다른 해시 결과를 얻을 수 있습니다. 많은 반복은 사전 생성 프로세스를 극도로 느리게 만들어 그러한 공격의 타당성을 더욱 약화시킵니다.
반복이 높을수록 보안이 높아지지만 제한없이 개선 할 수 없습니다. 서버가 로그인 요청을 처리 할 때마다 해당 해싱 작업을 수행해야합니다. 너무 많은 수의 반복은 명백한 성능 병목 현상을 일으키고 심지어 서비스 거부 공격의 공격 표면이됩니다. 따라서 적절한 수의 반복을 선택하는 것이 중요합니다.
OWASP (Open Web Application Security Project)의 권장 사항에 따르면 권장되는 반복의 권장 수는 2025 년까지 최소 310,000 입니다.이 값은 공격자의 컴퓨팅 성능과 상대적으로 균형을 유지하기 위해 컴퓨터 하드웨어의 발전으로 해마다 조정해야합니다.
310,000 이상과 같이 업계에서 현재 권장하는 최소 반복 수를 사용하십시오.
시스템의 성능 공차를 정기적으로 평가하고 실제 하드웨어에 따라 미세 조정;
비밀번호 정책은 강력한 비밀번호 요구 사항, 다중 요소 인증 등과 같은 해싱 정책과 함께 사용해야합니다.
무지개 테이블 공격을 방지하기 위해 독특하고 충분히 무작위로 소금 값을 사용해야합니다.
HASH_PBKDF2 함수의 반복 횟수는 암호 보안을 보호하는 데 중요한 요소 중 하나입니다. 이 매개 변수를 합리적으로 설정하면 시스템이 무차별 대입에 저항하는 능력을 크게 향상시킬뿐만 아니라 다양한 형태의 암호화 공격을 방지합니다. 인증 시스템을 설계 할 때는 더 강력한 안전 라인을 구축하기 위해이 매개 변수를 완전히 이해하고 합리적으로 사용해야합니다.