Python의 해시 함수가 세션 간에 가변 결과를 생성하는 이유
Python 3.3 이상에서는 내장된 hash() 함수가 고유한 해시를 생성합니다. 다른 세션의 동일한 문자열에 대해. 이 동작은 충돌 취약성을 악용하는 악의적인 입력으로부터 보호하기 위한 설계 선택에서 비롯됩니다.
공격자가 충돌하는 키로 인해 애플리케이션에 과부하가 걸리는 것을 방지하기 위해 Python은 세션에 따라 달라지는 무작위 시드를 활용합니다. 이 오프셋은 예측 불가능성을 보장하여 공격자의 충돌 생성 능력을 방해합니다.
개발자는 PYTHONHASHSEED 환경 변수를 설정하여 이 기본 동작을 재정의할 수 있습니다. 고정된 양의 정수 값은 특정 시드를 설정하고, 값을 0으로 설정하면 오프셋이 완전히 비활성화됩니다.
Python 2.7 및 3.2는 기본적으로 이 기능을 활성화하지 않습니다. 그러나 Python 3.3 이후에는 보안을 강화하기 위해 이를 통합했습니다.
이 변수 해시 동작의 의미는 Bloom Filters 이상으로 확장됩니다. 이는 세트, 사전(Python 3.5 및 이전 버전) 및 기타 매핑 구조의 요소 순서에 영향을 미칩니다. Python은 삽입, 삭제 및 무작위 해시 시드에 따라 달라질 수 있는 이 순서에 대해 보장하지 않습니다.
안정적인 해시 구현을 위해서는 암호화 해시 기능을 제공하는 hashlib 모듈 사용을 고려하세요. pybloom 프로젝트는 안정적인 해싱을 위해 이 접근 방식을 사용합니다.
복잡한 구조로 인해 해시 오프셋을 저장하는 것이 비현실적이라는 점은 주목할 가치가 있습니다. 그러나 이렇게 추가된 복잡성으로 인해 공격자가 오프셋을 결정하기 위해 타이밍 공격을 악용하는 것도 방해가 됩니다.
위 내용은 Python\의 `hash()` 함수가 세션 간에 다른 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!