선형 프로빙으로 충돌을 해결하는 해시 테이블에서 예상 성능 을 보장 하려면 해시 함수가 5 독립적 인 제품군의 것이 필요하고 충분합니다. (자족 : , Pagh 외 "선형 일정한 독립성 프로빙." , 필요성 : "K 개의 독립 필수에서 선형 프로빙 Minwise 독립하여"Pătraşcu 및 Thorup )
가장 빨리 알려진 5 독립 가족이 표를 사용한다는 것을 이해합니다. 이러한 제품군에서 기능을 선택하는 것은 비용이 많이들 수 있으므로 Crosby와 Wallach의 "알고리즘 복잡도 공격을 통한 서비스 거부"에 설명 된대로 알고리즘 복잡성 공격을 방지하면서 수행 횟수를 최소화하고 싶습니다 . 나는 타이밍 공격 (즉, 스톱워치가있는 적)에 대해 덜 걱정합니다. 동일한 기능을 재사용하면 어떤 결과가 발생합니까?
- 너무 가득 찬 해시 테이블을 성장시킬 때?
- 충분하지 않은 해시 테이블을 축소 할 때?
- "삭제 된"비트가 너무 많은 해시 테이블을 재 구축 할 때?
- 에서 다른 해시 테이블이 공통의 일부 키를 포함 할 수있다?
- 에서 공통의 키를 포함하지 않는 다른 해시 테이블?
이것이 실습에 대한 질문이라면 ... 그럴듯한 실용적인 접근 방식은 테이블 기반의 체계를 사용하는 대신 입력에 임의의 비밀이 포함 된 암호화 해시 함수를 사용하는 것입니다. 그런 다음 동일한 해시 함수를 재사용해야하는 부담이 줄어 듭니다. 각 해시 테이블마다 다른 비밀을 사용할 수 있습니다 (해시 테이블을 축소 / 증가 / 재 구축 할 때 비밀을 변경하고 모든 것을 다시 해시).
—
DW
SipHash-2-4와 같은 짧은 입력에서 빠른 암호화 해시 함수조차도 다항식을 사용하는 5 독립적 가족에 비해 상당히 느리다고 생각합니다.
—
jbapple