2012-07-04 3 views
0

모든 암호에 다른 소금으로 암호를 저장하는 것이 더 안전한 이유는 무엇입니까? 암호가 해시 된 후 암호가 해시되므로 다른 소금을 사용할 이유가 없습니다.소금에 절인 암호 보안

알려진 소금이나 무언가로 암호를 쉽게 입력 할 수 있습니까? 아니면 해커들이 소금을 알면 무지개 테이블을 만들까요? 당신은 모든 암호의 모든 소금 사이에 공통의 유대가없는 한 각 암호를 자신의 개인 소금을 줄 때

종류는

+1

[PHP 암호 용 보안 해시 및 소금] 가능한 복제본 (http : // stackoverflow.com/questions/401656/secure-hash-and-salt-for-ph-passwords) –

+0

@JohnConde 사실 복제본이 아닙니다. 이 질문은 각 암호마다 다른 소금을 갖는 이점에 관한 것입니다. – Styxxy

+1

요즘 인기있는 주제가되고 있지만 일반적으로 암호 해독 암호 및 암호화 해시 사용은 충분하지 않습니다 **. 대신 키 유도 함수를 사용하여 조사하십시오. – Leigh

답변

2

소금을 하나만 사용하는 경우 해커는 무지개 표를 한 번만 다시 만들어야하며 전체 데이터베이스에 사용할 수 있습니다. 중복 된 비밀번호도 쉽게 찾을 수 있습니다.

개별 해시와 값 비싼 알고리즘 (bcrypt, scrypt)을 사용하십시오.

3

간주한다. 따라서 "해커"가 하나의 암호를 해독하더라도 다른 암호에는 소금이 없습니다.

PHP를 사용하고 비밀번호를 소금물로 만들 때, 암호와 같은 느린 암호화를 사용해야합니다. 더 빠르게 암호화 할수록 "해커"가 해독 방법을 찾을 수 있습니다.

사용자의 사용자 이름, 전자 메일 또는 몇 가지 항목의 조합을 기반으로 새로운 소금을 생성하는 함수 일 수 있습니다.

+0

첫 번째 단락에 대한 답장 : 그는 소금을 알고 있더라도 해싱이 되돌릴 수 없으므로 여전히 불가능한 '해시'암호를 해시로 처리해야합니다. –

+0

그는 당신이 사용했던 암호화 방법을 사용하여 무작위의 salt + 암호를 사용하여 무차별 적으로 강요 할 수 있습니다. 그래서 Creshal과 나는 느린 암호화 방법을 사용하는 것이 좋습니다. –

+0

@TomBroucke 해시가 하나 뿐인 경우 Brute forcing은 몇 배 더 빠릅니다. 당신은 오직 "소금"으로 각 해시를 계산해야합니다. 각 사용자에 대한 개별 소금으로 모든 사용자에 대해 전체 프로세스를 반복해야합니다. 나는 복잡성을 증가시키는 더 쉬운 방법을 생각할 수 없다. – Creshal

1

좋아, 한 가지를 바로 잡자. 소금물이 무지개 테이블과 아무 관련이 없다. 예. 다시 말해봐. 소금은 무지개 테이블과 아무 관련이 없습니다.

글쎄, 그건 완전히 사실이 아닙니다. 소금은 다른 해시의 비용과 비교하여 한 해시 공격 비용을 상각하여 시간과 메모리 절충을 방지하는 데 사용됩니다.

무지개 테이블의 경우 소금을 사용한다는 것은 테이블 전체가 무효화된다는 것을 의미합니다.

그러나 전체 테이블을 무효화하는 다른 방법이 있습니다. 각 암호에 고정 문자열을 추가 할 수 있습니다 (이 아님,은 소금 임). 즉

... 진짜 적

여기 진짜 적 무지개 테이블되지 않습니다 무지개 테이블을 물리 칠 것입니다. 진짜 적은 무차별 적 강제입니다. 현대의 머신은 거대한 GPU 클러스터를 구축하는 것이 더 저렴하고, 무지개 테이블을 저장하여 느린 디스크 접근에 가치가있게하는 것보다 더 강력한 brute-forcing을 수행하는 것은 매우 빠릅니다.

소금은 고유하기 때문에 무차별 공격을 막아줍니다. 비밀 번호 당 아닙니다. 사용자별로 다르지 않지만 우주에서 유일합니다 (통계적으로는 최소한). 그래서 난수를 사용하고 사용자 이름, 전자 메일 또는 기타 항목을 예측할 수 없습니다.

다시 말해서 예측 가능성을 원하지 않기 때문이 아닙니다. 그러나 우리는 통계적 유일성을 원하기 때문입니다. 공격자가 사용자 이름을 소금으로 사용하는 두 사이트를 공격하면 두 암호가 다른 암호를 사용하고있을지라도 두 해시에 대한 공격을 동시에 상환 할 수 있습니다.

소금은 사용자 당 무작위이어야합니다.