업데이트 : 나는 최근 이 질문 에서 아래의 전체 토론에서 나 (그리고 다른 사람들도 그렇게했다고 확신합니다) 조금 혼란 스러웠다는 것을 알게되었습니다 . 내가 계속 무지개 테이블이라고 부르는 것은 실제로 해시 테이블이라고합니다. 무지개 테이블은 더 복잡한 생물이며 실제로 Hellman Hash Chains의 변형입니다. 대답은 여전히 똑같다고 생각하지만 (암호 분석으로 내려 가지 않기 때문에) 일부 논의는 약간 왜곡 될 수 있습니다.
질문 : " 무지개 테이블은 무엇이며 어떻게 사용합니까? "
일반적으로 레인보우 테이블 공격으로부터 보호하기 위해 해시 기능 (예 : 암호)과 함께 사용하기 위해 항상 암호화 된 강력한 임의 값을 솔트로 사용하는 것이 좋습니다.
그러나 실제로 소금이 무작위로 암호로 필요합니까? 이와 관련하여 고유 한 값 (사용자 별 고유, 예 : userId)이면 충분합니까? 실제로 단일 Rainbow Table을 사용하여 시스템의 모든 (또는 대부분) 암호를 해독하는 것을 방지합니다.
하지만 엔트로피가 부족하면 해시 함수의 암호화 강도가 실제로 약화됩니까?
참고로 소금을 사용해야하는 이유, 보호하는 방법 (필요하지 않음), 단일 상수 해시 사용 (사용하지 않음) 또는 사용할 해시 함수의 종류에 대해 묻지 않습니다.
소금에 엔트로피가 필요한지 여부.
지금까지 답변 해 주신 모든 분들께 감사 드리지만, 제가 (조금) 덜 익숙한 영역에 집중하고 싶습니다. 주로 암호화 분석에 대한 의미-누군가 암호화 수학 PoV에서 입력 한 내용이 있다면 가장 감사하겠습니다.
또한 고려되지 않은 추가 벡터가있는 경우에도 훌륭한 입력입니다 (여러 시스템의 @Dave Sherohman 포인트 참조).
그 외에도 이론, 아이디어 또는 모범 사례가 있다면 증거, 공격 시나리오 또는 경험적 증거로이를 뒷받침하십시오. 또는 수용 가능한 트레이드 오프에 대한 유효한 고려 사항 ... 주제에 대한 모범 사례 (자본 B 자본 P)에 익숙합니다. 이것이 실제로 어떤 가치를 제공하는지 증명하고 싶습니다.
편집 : 여기에 정말 좋은 대답이 있지만 @Dave가 말했듯이 일반적인 사용자 이름에 대한 Rainbow Tables ... 그리고 가능한 덜 일반적인 이름도 있습니다. 하지만 내 사용자 이름이 전역 적으로 고유하면 어떻게됩니까? 내 시스템에 대해 반드시 고유 한 것은 아니지만 각 사용자마다 (예 : 이메일 주소).
단일 사용자를위한 RT를 구축 할 인센티브가 없으며 (@Dave가 강조했듯이 솔트는 비밀로 유지되지 않음) 여전히 클러스터링을 방지합니다. 유일한 문제는 내가 다른 사이트에서 동일한 이메일과 비밀번호를 가질 수 있다는 것입니다.하지만 소금은 어쨌든 그것을 막을 수 없습니다.
그래서 그것은 다시 암호화 분석으로 귀결됩니다-엔트로피가 필요합니까? (내 현재 생각은 암호 분석의 관점에서 필요하지 않지만 다른 실제적인 이유에서 나온 것입니다.)