2017-09-03 2 views
0

기본적 편도 함수가 두 성질 :일방향 함수, 해시 알고리즘

IF (IM 잘못 날 수정 두 개의 동일한 단어가 동일한 해쉬 값이 없음을 의미) 1 비가역 2. 충돌 저항 반면 Salted Hash Passwords는 암호의 해시 값에 더 많은 보안을 제공하고 동일한 일반 값을 갖는 암호에 충돌 회피를 제공하는 데 사용됩니다.

왜 이런 일이 발생합니까? 충돌 저항이 있어야하는 해시 함수가 아닌데 왜 해시 함수에 이미 해당 속성이있는 경우 소금이 제공해야합니까?

미리 감사드립니다.

+1

당신이 'SHA256' 해시 함수를 사용한다고 알고 있다고 상상해보십시오. 일부 사용자는 매우 약한'123' 암호를 선택했습니다. * 소금 *을 넣지 않으면, 무작위로 * 깨뜨릴 수 있습니다 : 모든 짧은 문자열 ('123' 포함)에'SHA256'을 실행하고 암호. –

+2

암호 해시 암호 해싱은 충돌과 관련이 없습니다. 사용자 당 소금은 두 명 이상의 사용자가 동일한 암호를 갖는 경우 해당 암호 해시가 완전히 다름을 보장합니다.따라서 사용자 중 하나의 암호를 추측 한 공격자는 동일한 암호를 사용하는 다른 모든 사용자에게 자동으로 액세스하지 않습니다. –

답변

2

단방향 해시 함수가 실제로 단방향 일 경우 유용 할 것입니다.

두 명의 사용자가 동일한 암호를 선택하면 어떻게됩니까? 소금이 없으면 같은 해시를 얻습니다.

어째서? 사람들은 암호를 잘 선택하지 못합니다. 제한된 메모리와 자연스러운 내부 암호화 무작위성이 결여 된 이러한 생물은 짧고, 낮은 엔트로피와 무차별 적으로 강력한 암호를 선택합니다.

소금이 포함되지 않은 암호 해시를 해독하려면 Google it.

소금은 문제를 해결하는 데 도움이되지만 만병 통치약이 아닙니다. 소금을 사용하면 동일한 암호를 선택하는 두 사람이 같은 암호 해시를 얻지 못합니다. 소금은 두 사용자 모두 다른 것으로 가정합니다. 또한 소금은 rainbow table attacks을 예방하는데 도움이됩니다. 이는 암호를 해독하기위한 시간 메모리 절충입니다.

그래도 모든 문제가 해결되지는 않습니다. 데이터베이스가 공개되면 공격자가 여전히 brute force-passwords using low cost GPUs 일 수 있기 때문에 소금 + 암호화 해시로 충분하지 않습니다.

그래서 해결책은 무엇입니까? 당신은 소금을 필요로 할뿐만 아니라 천천히 진행되기 위해서는 무차별 적 강제가 필요합니다. 그래서 암호에 해시 함수를 사용하지 않고 대신 password hashing functions을 사용합니다. 어리석은 용어에 대해 나를 비난하지 마라, 나는 완전히 동의한다. 결론 : bcrypt, scrypt, argon2, pbkdf2 중에서 선택하십시오. 나는 개인적으로 bcrypt를 추천한다.

1

그냥 @TheGreatContini의 답변에 세부 정보를 추가하고 싶습니다.

  1. 소금없이 해시 된 암호의 경우 이미 미리 만들어진 무지개 표를 찾을 수 있습니다.
  2. 모든 암호에 단일 소금을 사용하는 경우 공격자는이 소금을 사용하여 1 개의 무지개 표 ( )를 만들어 모든 암호를 얻어야합니다.
  3. 각 암호가 고유 한 소금을 얻는 경우 공격자는 각 암호에 무지개 표를 만들어야합니다. 1 개의 암호 만 얻으려면 완전한 무지개 테이블을 만드는 것이 의미가 없습니다. 그래서 우리는 독특한 소금이 무지개 테이블 공격을 막을 수 있다고 말할 수 있습니다.