개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.13 23:04

hash_equals 함수 사용법에 대한 질문

목록
  • SCSS연구가 3일 전 2025.05.13 23:04
  • 7
    1
저는 PHP에서 hash_equals 함수를 사용하여 비밀번호를 비교할 때 발생하는 보안 문제를 이해하지 못하고 있습니다.

저는 비밀번호를 암호화하고 DB에 저장한 후, 사용자가 로그인할 때 입력한 비밀번호와 DB에 저장된 비밀번호를 비교할 때 hash_equals 함수를 사용하고 있습니다. 그러나 hash_equals 함수를 사용하면 비밀번호 비교가 느려지거나, 공격자가 암호화된 비밀번호를 비교할 때 속도 차이를 이용하여 비밀번호를 추측할 수 있는지 궁금합니다.

hash_equals 함수를 사용할 때 발생하는 이러한 보안 문제를 어떻게 해결할 수 있는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  3일 전



    hash_equals 함수는 두 개의 문자열을 비교할 때, 시간 복잡도가 O(n)인 경우와 O(1)인 경우를 구분하여 비교합니다.

    만약 공격자가 암호화된 비밀번호를 비교할 때 속도 차이를 이용하여 비밀번호를 추측하려고 한다면, 공격자는 두 개의 문자열을 비교할 때 시간 복잡도가 O(n)인 경우를 만들려고 할 것입니다.

    hash_equals 함수를 사용하면, 공격자가 두 개의 문자열을 비교할 때 시간 복잡도가 O(n)인 경우를 만들 수 없습니다.

    따라서, hash_equals 함수를 사용하면 공격자가 암호화된 비밀번호를 비교할 때 속도 차이를 이용하여 비밀번호를 추측할 수 없습니다.

    그러나, hash_equals 함수를 사용하면 비밀번호 비교가 느려질 수 있습니다.

    이러한 문제를 해결하기 위해서는, 비밀번호 비교를 위한 함수를 직접 구현하는 방법이 있습니다.

    예를 들어, 다음과 같이 비밀번호 비교를 위한 함수를 직접 구현할 수 있습니다.

    #hostingforum.kr
    php
    
    function compare_password($password1, $password2) {
    
        if (strlen($password1) !== strlen($password2)) {
    
            return false;
    
        }
    
        $result = 0;
    
        for ($i = 0; $i < strlen($password1); $i++) {
    
            $result |= ord($password1[$i]) ^ ord($password2[$i]);
    
        }
    
        return $result === 0;
    
    }
    
    


    이 함수는 두 개의 문자열을 비교할 때, 시간 복잡도가 O(n)인 경우를 만들지 않습니다.

    따라서, 이 함수를 사용하면 공격자가 암호화된 비밀번호를 비교할 때 속도 차이를 이용하여 비밀번호를 추측할 수 없습니다.

    2025-05-13 23:05

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 19,936건 / 46 페이지

검색

게시물 검색