[hash] 비밀번호 소금에 절인 : 모범 사례?

나는 항상 궁금해했다 … 해싱 암호를 소금에 절일 때 더 나은 것이 무엇입니까? 왜? 아니면 소금을 바르는 한 그것은 중요합니까?

설명하기 : 우리는 모든 (희망) 이제 우리가해야으로 알고 소금 [우리가 데이터베이스에 저장을 위해 해시하기 전에 암호를 편집 : 당신이 좋아하는 일을 피할 수 있도록 최근 제프 앳 우드에게 무슨 일이 일어 났는지 ]. 일반적으로 이것은 해싱 알고리즘을 통과하기 전에 소금과 암호를 연결하여 수행됩니다. 그러나 예는 다양합니다 … 일부 예는 암호 앞에 소금을 추가합니다. 일부 예 는 암호 뒤에 소금 추가 합니다. 나는 소금을 중간에 넣는 것을 보았습니다.

그렇다면 어느 쪽이 더 나은 방법이며 왜 그렇습니까? 해시 충돌 가능성을 줄이는 방법이 있습니까? 내 인터넷 검색에서 주제에 대한 적절한 분석을 설정하지 않았습니다.

편집 : 좋은 답변 사람들! 답변을 하나만 선택할 수있어서 죄송합니다. 🙂



답변

접두사 또는 접미사는 관련이 없으며 암호에 엔트로피와 길이를 추가하는 것입니다.

이 세 가지를 고려해야합니다.

  1. 소금은 저장하는 모든 비밀번호마다 달라야합니다. (이것은 일반적인 오해입니다.)
  2. 암호로 안전한 난수 생성기를 사용하십시오.
  3. 충분히 긴 소금을 선택하십시오. 생일 문제에 대해 생각하십시오.

Dave Sherohman 은 사용자 이름 (또는 다른 개인 데이터) 대신 무작위로 생성 된 소금을 사용해야하는 또 다른 질문 대한 훌륭한 답변 을 제공합니다. 이러한 제안을 따르면 소금을 어디에 넣든 상관 없습니다.


답변

나는 그것이 의미론이라고 생각합니다. 매우 구체적인 위협 모델을 제외하고 전후에 넣는 것은 중요하지 않습니다.

그것이 있다는 사실은 무지개 테이블을 물리 칠 것이라고 생각됩니다.

필자가 주장한 위협 모델은 공격자 암호에 추가 / 미리 추가 된 일반 소금의 레인보우 테이블을 가질 수있는 시나리오라고 주장했다 . (NSA에게 말하십시오) 당신은 그들이 추가하거나 앞에 붙은 것으로 추측하지만 둘다는 아닙니다. 어리석은 추측이다.

레인보우 테이블을 저장할 수 있지만 암호 중간에 이상한 소금이있는 테이블은 저장할 수 없다고 가정하는 것이 좋습니다. 에서 좁은 경우, 나는 최선을 다 할 것 산재 것을 추측한다.

내가 말했듯이 의미론입니다. 비밀번호마다 다른 소금, 긴 소금을 선택하고 기호 및 ASCII 코드와 같이 이상한 문자를 포함하십시오. © ¤¡


답변

아무도 손대지 않은 것처럼 보이는 실제 답변은 둘 다 잘못되었다는 것 입니다. 당신이 당신의 자신의 암호화를 구현하는 경우, 아무리 사소한 부분 당신은 당신이, 당신이하고있는 생각하지 가는 실수를 할 수 있습니다.

HMAC 가 더 나은 접근 방법이지만 SHA-1과 같은 것을 사용하는 경우에도 속도 설계로 인해 비밀번호 해싱에 적합하지 않은 알고리즘을 이미 선택했습니다. bcrypt 또는 아마도 scrypt 와 같은 것을 사용하고 손에서 문제를 완전히 제거하십시오.

아, 그리고 결과 해시를 프로그래밍 언어 또는 데이터베이스 문자열 비교 유틸리티와 동등하게 비교하는 것에 대해 생각조차하지 않습니다. false문자가 다른 것처럼 문자와 단락을 비교합니다 . 따라서 공격자는 통계적 방법을 사용하여 한 번에 한 문자 씩 해시가 무엇인지 시도하고 해결할 수 있습니다.


답변

차이가 없어야합니다. 소금을 넣을 때마다 해시는 더 이상 쉽게 추측 할 수 없습니다. 의도적으로 비선형이기 때문에 해시 충돌은 드물고 예측할 수 없습니다. 보안에 차이가 있다면, 이는 소금이 아닌 해싱에 문제가 있음을 시사합니다.


답변

암호로 안전한 해시를 사용하는 경우 접두사 또는 접미사 여부는 중요하지 않습니다. 해싱의 요점은 소스 데이터의 단일 비트 변경 (어디에 상관없이)이 다른 해시를 생성해야한다는 것입니다.

무엇 이고 중요하지만, 적절한 암호 PRNG로 발생, 장기 염을 사용하고, 사용자 별 염을 구비한다. 데이터베이스에서 사용자 별 염을 저장하는 것은 없는 사이트 전체 해시 사용, 보안 문제 입니다 .


답변

우선, “무지개 테이블”이라는 용어는 일관되게 오용됩니다. “무지개”테이블은 특정 종류 의 조회 테이블이며 키에서 특정 종류의 데이터 압축을 허용합니다. 공간에 대한 계산을 교환함으로써 1000TB를 차지하는 룩업 테이블을 수천 번 압축하여 더 작은 드라이브 드라이브에 저장할 수 있습니다.

비밀번호 조회 테이블, 무지개 등의 해시에 대해 걱정해야합니다.

@ onebyone.livejournal.com :

공격자는 사전 단어의 해시가 아니라 해시 계산을 마치기 직전에 해시 계산 상태로 구성된 ‘무지개 테이블’을 가지고 있습니다.

그런 다음 접두사 salt보다 postfix salt를 사용하여 암호 파일 항목을 무차별 처리하는 것이 더 저렴할 수 있습니다. 각 사전 단어마다 차례로 상태를로드하고 salt 바이트를 해시에 추가 한 다음 마무리합니다. 접두사로 소금을 사용하면 각 사전 단어의 계산 사이에 공통점이 없습니다.

간단한 선형 합동 생성기와 같은 입력 문자열을 통해 선형으로 스캔하는 간단한 해시 함수의 경우 실제 공격입니다. 그러나 암호로 안전한 해시 함수는 의도적으로 여러 라운드를 갖도록 설계되었으며 각 라운드는 입력 문자열의 모든 비트를 사용하므로 솔트를 추가 하기 직전에 내부 상태를 계산하는 것은 첫 번째 라운드 이후에는 의미가 없습니다. 예를 들어 SHA-1에는 80 라운드가 있습니다.

또한 PBKDF와 같은 암호 해싱 알고리즘은 해시 함수를 여러 번 작성합니다 (PBKDF-2를 최소 1000 회 반복하고 각 반복은 SHA-1을 두 번 적용하는 것이 좋습니다).이 공격은 이중 비실용적입니다.


답변

플랫폼에 제공자가있는 경우 BCrypt 해시 . 나는 당신이 소금을 만드는 것에 대해 걱정하지 않는 방법을 좋아하며 원하는 경우 더 강하게 만들 수 있습니다.