문제

첫 번째 질문은 문자열을 2번 해싱한다는 것입니다(예:sha1(sha1(password)) ), 두 번째 해시의 길이가 고정되어 있기 때문에 사실입니까??

두 번째 질문은 어느 것이 더 안전한가요?입니다.(var1과 var2는 2개의 문자열입니다):

  1. sha1(var1 + sha1(var2))
  2. sha1(var1 + var2)

1번이라면 성능비 만큼의 가치가 있나요?

도움이 되었습니까?

해결책

문자열을 두 번 해싱함으로써 충돌 위험이 높아지는데, 이는 보안이 좋지 않습니다.

2로 이어지는 무한 양의 입력을 갖는 대신128 가능한 출력, 2가 있습니다128 가능한 입력은 아마도 2 미만으로 이어질 수 있습니다128 출력.

해싱 전에 소금과 후추를 사용하면 적어도 무한한 가능성에 대한 입력을 유지합니다. 해싱은 스크립트의 실행 시간을 두 번 증가시키고 무한 입력의 원천을 유지하지 않는 한 충돌의 위험을 증가시킵니다.

다른 팁

  • sha1(var1 + sha1(var2))
  • sha1(var1 + var2)

둘 다 매우 안전하지 않습니다.바퀴를 재발명하지 마세요. HMAC 이를 위해 설계되었습니다.특히, 위의 '간단한' 구현과 나쁘게 상호 작용하는 특정 해시 알고리즘의 특정 약점 문제를 피하기 위해 조치(패딩 등)가 필요합니다.

또한 이중 해싱은 보안을 향상시키는 데 유용하지 않습니다.고려하다:기껏해야 임의의 값을 다른 임의의 값으로 매핑할 것입니다.그러나 충돌이 있는 경우 두 번째 해시의 두 결과 값이 동일합니다. 잃어버린 충돌로 끝나서 보안이 유지됩니다.즉, 이런 식으로 충돌을 없앨 수는 없지만 충돌을 얻을 수는 있습니다.

그렇긴 하지만, 기존의 사전 이미지 공격은 ~할 것 같다 이중 해싱에 대해 작동하지 않습니다 ...하지만!여전히 작동할 수도 있습니다.나는 어느 쪽인지 말할 자격이 없습니다. 그리고 당신이 여기서 이것을 묻는다면 아마 당신도 그렇지 않을 것입니다.확실히 오늘날 MD5에서 실용적인 충돌 공격은 이중 해싱으로 인해 방해를 받지 않습니다.

수십 년의 분석을 견뎌낸 입증된 알고리즘을 고수하는 것이 가장 좋습니다. 왜냐하면 암호화를 사용하면 다음과 같은 것을 만드는 것이 너무 쉽기 때문입니다. 외모 안전하지만 그렇지 않습니다.

나는 이것이 보안을 추가 할 것이라고 의심합니다. 스크립트의 런타임이 증가하지만 해시에 많은 보안을 추가하지는 않습니다. 누군가가 해시를 끊으려고 할 때 VAR1과 VAR2의 정확한 값을 찾을 필요가 없으며 동일한 해시를 찾는 것만 찾아야합니다.

나는 암호화에 대한 전문가는 아니지만, 내가 아는 한, 당신은 프로세스 속도를 늦추는 것 외에도 여러 번 값을 해싱함으로써 보안을 얻지 못할 것입니다. 따라서 1000 번 해시를 해시하면 공격 (예 : 사전 공격)이 1000 배 느려지지만 해싱의 경우 한두 번의 해싱이 발생하지 않습니다.

소금이 하나만 사용되면 쉽게 해결할 수 있습니다.

이 해시 톤을 포함하는 많은 큰 테이블이 있으므로 소금이없는 단일 해시는 아무것도 옆에서 해결할 수 있습니다.

두 번째 해시를 추가 해도이 테이블이 이미 저장된 값으로 이미 존재하기 때문에 큰 도움이되지 않습니다.

암호에 추가되는 동적 소금은 여러 해시보다 훨씬 더 도움이됩니다. 여러 해시가 실제로 많이 추가되지 않습니다.

이것에 대한 나의 느낌은 당신이 강철 도어가있는 벽돌 벽을 건설한다는 것입니다. 그러나 다른 벽은 합판으로 만들어졌습니다. 다시 말해, 해싱 비밀번호에 원하는만큼 많은 보안을 주입 할 수 있지만 시스템을 크래킹하는 방법이 훨씬 쉬울 것입니다. 나는 이와 같은 것에 대해 너무 걱정하는 대신 보안에 대한 광범위한 접근 방식을 취하는 것이 훨씬 낫다고 생각합니다.

VAR1 + VAR2가 예상되는 상황에서 동일할까요? 이 경우 첫 번째 제안은 괜찮을 것입니다. 해싱 충돌을 피할 수 있기 때문입니다. 비용의 가치가있는 것에 대해, 그것은 당신이 대답 해야하는 질문입니다. 비용의 가치가있는 충돌을 피하고 있습니다.

SHA 알고리즘에 대해서는 결과를 실제로 스크램블해야합니다. 따라서 여러 번 적용하면 더 나은 결과가 없거나 "더 임의의"입력에 적용하면 더 나은 결과를 초래해야합니다.

문자열을 여러 번 해시하면 사전 공격의 경우 공격자의 작업이 복잡 해져서 무차별 한 힘을 가질 수 있습니다. 첫 번째 질문은 명확하지 않지만 두 번째 해시의 길이가 고정되어 있기 때문에 여러 해시가 안전하지 않습니다.

그러나 여러 해시보다 더 중요합니다. 소금 더 나은 보안을 위해서는 필수적입니다.

두 번째 질문과 관련하여, 나는 2 중 어느 쪽이 가장 안전한 지 말하는 것이 매우 간단하지 않다고 말하고 싶습니다. 옵션 2와 함께가는 것이 실제로 충분하다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top