ONE QUESTION AT A TIME.

천천히 생각하고, 분명하게.

TODAY’S QUESTION92 / 1500

두 개의 서로 다른 모듈러 해시를 쓰면 문자열 동일성을 증명할 수 있나요?

잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?

답변과 점검 포인트 펼치기답변 접기
01

구두 답변

정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.

아니요. double hash는 두 개의 fingerprint가 동시에 일치해야 통과시키는 확률적 필터이지, 서로 다른 문자열을 반드시 분리한다는 증명이 아닙니다. 한 modulus에서 충돌한 두 문자열이 두 번째 modulus에서도 충돌할 가능성을 낮출 수는 있지만, 위험은 modulus·base 선택, 비교 횟수, 입력 분포, 공격자가 파라미터를 아는지에 따라 달라집니다. 두 함수가 수학적으로 독립이라고 자동 보장되는 것도 아니므로 “두 개이니 0”이라고 기록하면 안 됩니다.

예를 들어 동일성 비교 함수가 두 hash를 계산해 (h1,h2)가 같으면 후보로 표시한다고 하겠습니다. 후보가 length=3인 동일한 canonical byte sequence인지 다시 비교하면 exact equality를 결정할 수 있지만, 원문 확인을 생략하면 여전히 false positive 경로가 남습니다. 정규화 정책이 다른 두 입력을 같은 hash로 만들었다고 해서 의미상 동일하다고 볼 수도 없습니다. 먼저 비교 단위와 길이를 고정하고, hash는 그 정책 아래 후보를 줄이는 역할만 맡깁니다.

선택은 오류 비용으로 결정합니다. 일반적인 검색에서 후보 수를 줄이거나 비적대적 캐시 비교를 빠르게 하려면 double hash와 최종 검증의 조합이 실용적입니다. 권한 부여, 파일 무결성, 금액 정산처럼 오탐이 허용되지 않는 경로에서는 원문 비교나 목적에 맞는 암호학적 MAC·서명을 사용해야 합니다. rolling hash는 계산 구조이고 인증 증거가 아니므로, 충돌 확률을 문서에 쓸 때도 확인한 입력 모델의 범위를 넘지 않게 제한합니다.

문서에는 따라서 hashPairEqual -> candidate -> exactCompare라는 상태를 남기는 것이 좋습니다. 확률적 계약을 채택하더라도 비교 횟수와 허용 오탐 수준을 관찰할 수 있어야 하며, 파라미터를 바꿨다고 과거에 발생하지 않았던 충돌이 수학적으로 불가능해지는 것은 아닙니다. 특히 두 문자열의 길이가 다르면 hash pair를 비교하기 전에 길이부터 비교해 불필요한 후보를 줄일 수 있지만, 같은 길이인 경우에도 원문 검증을 생략할 근거는 되지 않습니다.

02

득점 포인트

이해가 드러나는 지점을 확인해 보세요.

  • 결론을 “위험 감소”로 말하고 “동일성 증명”과 분리합니다.
  • base·modulus·비교 횟수·입력/공격 모델을 확률 계약의 변수로 제시합니다.
  • (h1,h2) 일치 후 exact verification이 남는 상태를 설명합니다.
  • 검색 필터와 권한·무결성 판정의 오류 비용을 비교합니다.
  • 확인하지 않은 충돌 확률을 0이나 보편 상수로 단정하지 않습니다.
03

감점 포인트

놓치기 쉬운 조건과 오해를 짚어 보세요.

  • 서로 다른 modulus 두 개면 충돌이 수학적으로 불가능하다고 말합니다.
  • double hash를 MAC이나 전자서명과 같은 보안 수단으로 설명합니다.
  • hash 입력의 정규화·길이 정책을 생략합니다.
  • adversarial 입력에서 공개 파라미터가 주는 영향을 무시합니다.
  • exact 결과에서도 최종 원문 검증을 삭제합니다.
04

더 파고들 거리

하나 더 질문하며 이해의 범위를 넓혀 보세요.

  • 후보를 원문 비교 없이 허용할 수 있는 서비스라면 허용 오탐률과 재현 조건을 어떻게 명시하나요?
  • prefix hash, 암호학적 digest, MAC이 각각 보장하는 대상과 보장하지 않는 대상을 어떻게 나누나요?

득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.

← 전체 질문 보기