2013-03-24 2 views
1

최근 프로젝트에 보안을 추가하려고했습니다. 나는 상황에 대한 많은 연구를 해왔고 분명히 암호 해싱이 필요하다는 것을 발견했다. 또한 나는 bcrypt, PBKDF2 또는 scrypt를 사용하는 것이 최선의 선택이라고 결론을 내렸다.해싱, 암호화 또는 둘 다

또한 해싱과 암호화에 대한 많은 토론을 보았으며 해싱이 더 중요하다는 사실을 발견했습니다. 즉, Google 검색을 통해 많은 정보를 찾은 후에 이미 해시 된 비밀번호를 암호화하는 것이 유익하고 해를 입히거나 상대적으로 중립적인지 여부에 대한 정보를 아직 찾지 못한 것입니다.

두 가지 가치가있는 CPU 비용이 있습니까? 함정이 있습니까?

답변

2

무언가를 암호화하면 암호 해독이 필요하며, 이는 이미 가지고있는 문제, 즉 보안 비밀 유지로 이어집니다. 당신이 기본적으로이 일을하는 대신에 일반 텍스트의 해시 당신이 암호를 저장하려는 가정

:

hashpw := hash(salt + password) 

그런 다음 파일에 salthashpw을 저장하고 일반 텍스트 암호 대신이 데이터를 사용합니다. (소금과 패스워드의 연결 순서는 많은 경우에 중요하며 이는 프로세스의 시각화 일 뿐이며 소금에 절인 해시를 생성하는 도구 사용).

가능한 공격자는 와 일치하는 것을 확인하기 위해 소금과 일반 텍스트 암호를 추측해야합니다. 이는 사용중인 해시 알고리즘 (충돌 비율)만큼 안전합니다 (hashpw).

일부 암호를 사용하여 무언가를 암호화하는 것은 해싱 방법이 제공하지 않는 일반 텍스트를 복원 할 수있는 이점이 있습니다 ( ). 또한 암호 텍스트의 암호를 해독하여 키를 사용할 수있는 시스템이 필요합니다. 문자열 foo을 일부 키 bar과 함께 암호화한다고 가정 해보십시오. 결과 암호문을 암호 해독하려면 brnbar이 다시 필요합니다. 이 키는 시스템에 보안 스토리지가 필요하며 키가 공격자에게 노출되면 모든 보안이 사라집니다.

엄지 손가락의 일반적으로 그 해시가 그의 보안이 해시 알고리즘의 충돌 속도에 의해 결정되는대로 (예를 들어, 암호)에 대해 체크 텍스트를 저장하는 좋은 방법을 제공 말할 것입니다. 반면에 암호화는 나머지 데이터를 안전하게 저장하는 데 사용하는 기술입니다.

+2

+1 귀하의 마지막 단락은 중요한 부분입니다 - 통과 구문을 확인 * 할 수는 없지만 * 검색하지 않아야 함을 이해하십시오. –

+0

Duncan에 동의합니다. 마지막 절은 실제로이 문제를 해결합니다. 암호 해시 만 검색하는 것과는 대조적 인 확인 문제이므로 암호를 사용하는 것이 좋습니다. – foochow

+1

@Foo_Chow - 실제로 해시 값을 암호화 할 때 이점이 있습니다. 해시에 서버 쪽 비밀 (후추)을 추가하는 것이 가장 좋은 방법 일 수 있습니다.이 [답변] (http://stackoverflow.com/a/16893270/575765)에서 문제를 설명했습니다. – martinstoeckli

-4

나는 단순히 암호를 암호화합니다. 해싱은 빠르지 만 비밀번호는 안전하지 않습니다. 보안을 위해 해싱을 사용하면 대개 메시지 서명과 같은 작업이 필요합니다. 메시지 + 해시 (메시지 + 비밀번호)를 사용하여 메시지를 확인할 수 있지만 전문가는 아닙니다. 나는 둘 다 할 시점이 보이지 않는다.

+0

암호화는 되돌릴 수 있습니다. 절대 독립형 솔루션이 아닙니다. – foochow

+1

암호 암호화는 일반적으로 싫은 일입니다. 해싱은 매우 안전하며 소금과 결합하면 모범 사례로 간주됩니다. –

2

당신은 올바른 길을 가고 있습니다. 언급 한 것과 같은 키 파생/암호 해시 함수를 사용하십시오.

해시 또는 소금에 절인 해시를 사용하지 마십시오. 주요 문제는 전통적인 해싱 알고리즘 (MD5, SHA- * 등)이 빠르다는 것입니다. 이는 암호 저장에 유리하지 않으며 소금을 추가하더라도 많은 구현이 깨질 수 있습니다.

암호화에는 항상 키 관리 관련 문제가 있습니다.암호 저장에는 피해야합니다.

KDF의 장점은 작업 요소입니다. 느리고 계산 비용이 많이 들도록 설계 되었기 때문에 이러한 상황에 대한 아이디어입니다. Scrypt는 실행에 설정된 메모리 양을 필요로하기 때문에 사용자가보고있는 옵션 중에서 가장 탄력적입니다. 이것은 GPU 공격 벡터를 죽입니다. 어느 쪽을 선택하든간에 절충안이 있지만 구성 가능한 곳에서 적절한 작업 요소를 사용하는 한 모든 선택 사항은 훌륭합니다.

+0

나는 암호화와 관련한 핵심 관리에 대해 강조하는 점을 좋아한다. 암호 해싱 만이 암호에 가장 적합하다는 공감대와 일치하는 것처럼 보인다. – foochow

관련 문제