2012-10-05 2 views
1

암호를 해싱하기 전에 소금을 사용하면 해시가 더욱 안전 해집니다. 무지개 테이블 공격이 훨씬 더 어려워지기 때문에 불가능합니다 (불가능합니까?).암호를 보호하기위한 복수의 소금

여러 개의 소금을 사용하면 어떻습니까? 예를 들어, 요일이 월요일인지, 월, 시간 등 (또는 어떤 조합인지)을 확인합니다. 그런 다음 (userid, hash1, hash2, hash3 ...) 필드를 저장하는 데이터베이스가 있습니다.

정보가 더 이상 (또는 덜) 안전합니까?

예 :

1) 사용자가 암호 'PASS'로 등록합니다. 2) 시스템 (이 예제에서는 php)은 매일 (7 개의 암호) 값 (md5 ($ password. $ this_day))을 저장합니다. 테이블 암호, 열 hash_monday, hash_tuesday 등. 3) 사용자가 로그인하고 스크립트가 'hash_'인 암호를 확인합니다. $ this_day는 입력 한 내용과 일치합니다.

+0

레인보우 테이블 공격이 더욱 어려워지고, 해시가 사전 공격으로부터 사용자를 보호하지 않습니다. – Woot4Moo

답변

6

당신의 시스템은 더 이상 안전하지 않을 것입니다 - 당신은 하나가 아닌 여러 개의 단일 소금 데이터베이스로 끝납니다. 원칙적으로 공격자에게 유용 할 것이기 때문에 같은 문자열에 7 개의 해시를 제공하고 하나만 추측하면되므로 안전성이 떨어질 수 있습니다. 동일한 일반 텍스트의 이러한 여러 해시는 암호에 사용되는 암호화의 암호화 강도에 영향을 줄 수 있습니다 (암호 알고리즘에는 사용 된 알고리즘에 따라 다름).

4

어쩌면 당신은이 작은 article을 봐야 할 것입니다. 당신의 접근 방식에는 몇 가지 잘못된 점이 있습니다.

  1. 소금은 사전 공격으로부터 보호하지 못합니다. 올바르게 사용하면 레인보우 테이블을 보호합니다.
  2. 각 암호마다 고유 한 소금을 사용하십시오. 소금은 알려진 정보에서 파생되지 않은 임의의 값이어야합니다. 비밀번호와 함께 저장해야합니다.
  3. Do 은 해싱 암호에 MD5을 사용하지 않습니다. Md5는 깨진 것으로 간주되며 암호 해시가 너무 빠릅니다. 기성품 GPU를 사용하면 초당 8 기가 MD5 해시 (in 2012)를 계산할 수 있습니다. 이렇게하면 0.1 밀리 세컨드 이내에 약 500000 단어로 전체 영어 사전을 무차별 적으로 사용할 수 있습니다!
  4. 암호 해시에는 Bcrypt을 사용하십시오. phpass과 같이 잘 설정된 라이브러리를 사용하는 것이 좋습니다. 구현 방법을 이해하려면 위의 기사를 읽으십시오. 당신이 당신의 해시 함수에 비밀을 추가하려면

은 (숨겨진 키 또는 숨겨진 기능처럼), 암호에 고추를 추가 할 수 있습니다. 후추는 이 아니고이 데이터베이스에 저장되어야하며 비밀로 남아 있어야합니다. 후추는 공격자가 암호 해시 (SQL 인젝션)에만 액세스 할 수있는 한 사전 공격으로부터 보호 할 수 있지만 비밀이있는 서버는 보호 할 수 없습니다.

+0

아주 좋은 정보 ... – Shurmajee

+0

나는 사전 공격으로부터 당신을 구해주는 고추에 아직도 팔리지 않고있다. – Woot4Moo

+0

@ Woot4Moo - 너는 지금까지와 마찬가지로 특정 종류의 공격으로부터 만 보호한다. – martinstoeckli

0

나는 많은 해시가이 시나리오에서 당신을 도울 것이라고 믿지 않습니다. 주로 누군가가 데이터베이스를 손상 시켰을 때 7 가지 서로 다른 염분이 있음을 알게 될 것이고, 그들이 일에 기반을 둔 것으로 추측 할 수 있기 때문입니다 금주의. 많은 사람들이 그 악 대차에 뛰어 드는 것을 좋아하기 때문에 MD5에 근본적으로 잘못된 것은 없습니다. MD5가 손상된 해시라고 말하는 사람들은 해시 함수와 암호화 해시 함수 사이에 근본적인 오해가 있습니다.이를 무시하는 것이 좋습니다.암호화 해시 함수가 필요한 경우 SHA-2 (또는 그 가족 이상의 항목)를 사용하십시오.

사용자 입력에 소금을 뿌려야합니다. 알다시피 일반적으로 무작위 값을 권장하지만 데이터베이스 외부의 별도 응용 프로그램 공간에 저장하는 값일 수도 있습니다. 그 정보도. 암호 해싱 함수를 모든 입력에 대해 수천 번의 반복 작업을 수행하는 것이 좋습니다. 이로 인해 데이터베이스에서 일치하는 해시의 자동화 된 프로세스가 느려집니다.

사용자가 추측하기 쉬운 암호를 사용하면 사전 공격이 매일 당신을 때리고 어리 석음을 막을 수 있습니다.

+0

암호 해시가 필요한 암호를 저장하기 위해 해시 대 암호 해시의 의미를 잘 모릅니다. 해시는 충돌을 얻는 알려진 방법이 있으면 무차별 공격보다 더 빠르다고 생각됩니다. 그리고 물론 MD5는 너무 빠르다. 정확하게 지적했다. 소금은 비밀이 아니며, 숨길 필요가 없습니다. 비밀을 추가하려면 고추를 넣으십시오. 나는 다른 목적을 가지고 있기 때문에 소금과 후추를 섞지 않을 것입니다. 후추 **는 약한 암호 (일부 경우 SQL 인젝션)를 막을 수 있습니다 **. – martinstoeckli

+0

@martinstoeckli 후추가 취약한 암호를 보호한다는 연구 논문이 있습니까? 제로 센스를 만드는 후추에 대한 이해를 바탕으로합니다. 해시에는 일반 해시 (MD5)와 암호화 해시 (SHA)라는 두 가지 범주가 있습니다. MD5에는 아무런 문제가 없으며, 충돌의 "용이함"은 공언자가 말하는 것처럼 높지 않습니다. 암호를 저장하는 중이라면 암호 해시를 권장하지만 근본적으로 MD5는 괜찮습니다. 전 세계의 모든 해싱이 암호를 잘못 저장하지는 않습니다. – Woot4Moo

+0

후추는 공격자가 서버 (따라서 비밀 코드 포함)를 제어하지 않는 경우에만 사전 공격으로부터 보호합니다. 공격자가 SQLInjection에 성공한 경우 일반적으로 발생합니다. "(약한) 암호에 후추를 추가하면"12345 "대신 실제로"12345ai8-9? uz3dWe "가 해싱되고 사전에 찾을 수 없습니다. – martinstoeckli