문제

현재 내 비밀번호의 대부분은 md5와 sha1의 혼합으로 저장되어 있지만 솔팅에 대해 방금 소개받았고 가장 안전한 비밀번호가 무엇인지 알고 싶었습니다.

나는 간단한 md5()가 쉽게 취소될 수 있다고 확신합니다. 그러나 md5(sha1(md5($var)))는 어떻습니까?이 콤보가 더 많은 어려움을 제공합니까, 아니면 반드시 더 나은 것은 아닙니다.

또한 하고있다

$var = $var.'t00lup';
md5($var);

t00lup이 개인 키라고 가정하면 위보다 더 안전합니까?

md5를 사용하거나 sha1을 사용하는 대신 이 작업을 수행하는 더 좋은 방법이 있습니까?

감사해요

도움이 되었습니까?

해결책

더 많은 것이 반드시 더 나은 것은 아닙니다. SHA256을 사용하고 완료하십시오.

$var = $var.'t00lup';
$hashedPass=hash('sha256', $var);

해시 ()에 대해 자세히 알아보십시오. 여기.

다른 팁

몇 가지 :

  1. SHA256을 사용하십시오 - 재 경적을 귀찮게하지 마십시오.

  2. 모든 계정에 대해 단일 소금을 하드 코드하지 마십시오. 각 사용자에 대해 임의의 소금을 생성하고 데이터베이스에서 사용자 레코드에 넣습니다. 그렇게하면 누군가가 그 소금에 대한 무지개 테이블을 생성한다면, 적어도 그들은 모두가 아닌 하나의 사용자 계정에만 액세스 할 수 있습니다.

공격자는 기존의 사전 계산 테이블을 사용하여 사용자가 사용한 모든 짧거나 사전 암호를 단순히 찾아 보는 데 필요한 소금을 사용하는 것이 절대적으로 필요합니다. 당신은 이것을 직접 시도 할 수 있습니다 : 매우 나쁜 (짧거나 사전) 비밀번호의 MD5를 가져 와서 결과를 Google 검색하십시오.

소금을 사용하면 기존 테이블이 쓸모 없게되고 가장 풍성하고 동기가 부여 된 공격자를 제외한 모든 사람에게는 너무 오래 걸립니다. 각 사용자의 개별 소금은 더 좋습니다 (그렇지 않으면 소금이 한 번에 모든 사용자를 공격 할 수 있다는 것을 알고있는 공격자).

해시를 결합하면 비슷한 효과가있을 수 있지만, 그 조합에 대해 미리 계산 된 테이블이 여전히 존재할 수 있기 때문에 해당 목적 (소금없이)에 사용해서는 안됩니다.

그러나 해시의 조합과 반복은 공격자가 사전 공격을 수행하는 데 걸리는 시간을 증가시켜 자체 가치를 갖습니다. 프로세스. 그러나 사전 공격의 경우 10,000 배의 길이가 ~이다 문제.

이 기술은 다음으로 알려져 있습니다 주요 강화.

Vbulletin은 MD5 (MD5 ($ password). $ salt)와 같은 것을 사용합니다. 괜찮은 것 같습니다.

솔팅을 하면 사전 공격이 더 어려워지기 때문에 보안이 향상되고 비밀번호가 짧더라도 전체 보안 수준은 여전히 ​​괜찮다고 생각합니다.

가장 중요한 것은 실제로 해싱 알고리즘과 결과 해시의 길이이므로 sha256 이상을 살펴보는 것이 좋습니다.

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