Python 3.3 해시 함수 불일치: 보안 메커니즘 공개
Python 3.3에서 hash() 함수는 다양한 결과를 반환하는 것으로 관찰되었습니다. 여러 세션에서 동일한 문자열에 대해. 이 수수께끼처럼 보이는 동작은 서비스 거부 공격을 막기 위해 구현된 의도적인 보안 메커니즘에 뿌리를 두고 있습니다.
이 메커니즘을 이해하려면 Python이 시작 시 설정된 무작위 해시 시드를 활용한다는 점을 인식하는 것이 중요합니다. 이 오프셋을 해시 계산에 통합함으로써 공격자는 특별히 충돌을 일으키도록 의도된 키를 설계할 수 있는 능력을 박탈당합니다.
설명하기 위해 문자열 "235"의 해시 값을 고려하십시오:
>>> hash("235") -310569535015251310
새 Python 콘솔을 시작하면 해시 값이 변경됩니다.
>>> hash("235") -1900164331622581997
이 가변성은 최악의 사전 삽입 성능을 악용하여 O(n^ 2) 복잡성. 결과적으로 공격자는 어떤 키가 충돌하여 서비스 거부를 유발할지 예측할 수 없습니다.
그러나 오프셋이 단순히 단순한 덧셈이나 뺄셈을 수반하지 않는다는 점에 주목할 필요가 있습니다. 이는 접두사와 접미사로 구성되며 둘 다 예측할 수 없고 지속적으로 변경됩니다. 이로 인해 오프셋 저장 및 활용이 복잡해집니다.
또는 보다 안정적인 해싱 메커니즘이 필요한 애플리케이션의 경우 강력한 암호화 해시 기능을 제공하는 hashlib 모듈을 탐색할 수 있습니다. 신뢰성 때문에 pybloom 프로젝트에서 선호되는 선택입니다.
위 내용은 Python 3.3 `hash()` 함수가 동일한 문자열에 대해 다른 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!