2010-03-03 2 views
2

소금의 유일한 목적은 무지개 식 공격을 막는 것이라고 들었다. 그러나 분명히 이것보다 더 많은 가치가 있어야한다고 나는 들었다. 사전 기반 공격도 막지 않을까요? 그리고 무차별 한 약은 소금을 거기에서 사용할 수 있습니까? 왜 그런지 설명해 주시겠습니까?무지개 표 공격을 방지하기 위해 해시 소금을 사용합니까?

둘째, 마이크로 시간, 128 자의 소금 및 10 억에서 100 억 사이의 난수를 취한 알고리즘이 있다고 가정합니다. 이것은 큰 수준의 보안을 제공합니까? 침입자가 이러한 세부 사항 중 하나를 알고 있더라도, 나머지는 계산하기가 여전히 계산 불가능할 것입니다. 그래, 그래?

감사합니다,

편집 :은 공격자가 해시 알고리즘에 액세스 할 수 없습니다 명확히하기 위해, 그래서 그들은 시스템에 대한 정보를 스팸 수 없습니다. 그들이 가지고있는 것은 모두 해시이며 컴파일 된 방법을 찾아야합니다. 확실하게 해시가 어떻게 생성되었는지 알았더라도 모든 조합을 긴 소금으로 무차별 적으로 시도하면 비현실적이 될 수 있습니다.

또한 해시는 사용자의 비밀번호 또는 사용자 이름이 아니며 인증에 사용되는 임의의 문자 집합입니다. 따라서 소금과 난수는 저장 될 필요가 없으며 결과물 인 해쉬 만 저장하면됩니다. 그런 경우 아래 코드와 같은 위의 시스템이 공격자가 사용자의 해시가 무엇인지 현실적으로 추측 할 수 없도록하는 좋은 시스템입니까?

$salt = "some random characters I made up"; 
hash('sha256', microtime(true).$salt.mt_rand(1000,9999)); 

위의 수십억 개 대신 1000-9999 개만 있습니다.

다시 한번 감사드립니다.

+0

다음 번에 로그인 할 때 비밀번호가 생성되었을 때의 시스템 시간을 시스템에서 어떻게 알 수 있습니까? 저장하지 않으면 로그온을 인증 할 수 없습니다. 저장하면 소금의 일부가됩니다. 그러면 소금을 데이터베이스에 보관할 것입니다. –

답변

5

아니요 - 무지개 공격 만 차단합니다. 공격자는 각 암호 입력에 대해 무지개 테이블을 작성해야합니다. 왜냐하면 소금은 암호 해시를 다른 모든 암호와 구별하는 릴 향신료를 추가하기 때문입니다.

사전 기반 공격과 Brute-forcing 공격은 본질적으로 같은 의미입니다. 소금에 절인는 유효성 검사 알고리즘으로 이러한

사전 기반 및 브 루트 - 강제 공격으로
plain-text-passwd = 'secret provided by user' 
salt = getSalt(username) //looks the salt value up in database based on the users username 
hash-password-in-db = getPassword(username) // looks up hashed password bassed on users username 
if(hash(plain-text-passwd + salt) == hash-password-in-db) //if true, password is correct 

일반 텍스트-passwd를위한 값이 차례로 소금 해시됩니다 사용자가 스팸처럼 뭔가가 멈추지 않는다 . 그래서 소금에 절인 아무것도

둘째를 수행,이 무의미

... 내가 알고리즘을 가지고 가정, 사용자 정보 테이블, 5 문자 소금 가치가 게재에 대한 모든 정보를 저장해야 같은 목적.

3

무지개 표는 사전 공격과 무차별 공격 모두에 사용할 수있는 최적화 방법입니다.

올바르게 사용 된 소금은 사전 및 무차별 공격에 대한 사전 계산을 실행 불가능하게 만듭니다. 무지개 테이블은 일종의 사전 계산 최적화이기 때문에 염석에 의해 중성화되는 최적화 중 하나입니다.

두 번째 예제는 실제로 더 긴 엔트로피 부분이있는 더 긴 소금입니다.소금은 임의의 넌스 (nonce)이어야하기 때문에 "임의의 숫자"와 "소금"을 구별하는 것이 걱정됩니다.