무언가를 암호화하면 암호 해독이 필요하며, 이는 이미 가지고있는 문제, 즉 보안 비밀 유지로 이어집니다. 당신이 기본적으로이 일을하는 대신에 일반 텍스트의 해시 당신이 암호를 저장하려는 가정
:
hashpw := hash(salt + password)
그런 다음 파일에 salt
및 hashpw
을 저장하고 일반 텍스트 암호 대신이 데이터를 사용합니다. (소금과 패스워드의 연결 순서는 많은 경우에 중요하며 이는 프로세스의 시각화 일 뿐이며 소금에 절인 해시를 생성하는 도구 사용).
가능한 공격자는 와 일치하는 것을 확인하기 위해 소금과 일반 텍스트 암호를 추측해야합니다. 이는 사용중인 해시 알고리즘 (충돌 비율)만큼 안전합니다 (hashpw
).
일부 암호를 사용하여 무언가를 암호화하는 것은 해싱 방법이 제공하지 않는 일반 텍스트를 복원 할 수있는 이점이 있습니다 ( ). 또한 암호 텍스트의 암호를 해독하여 키를 사용할 수있는 시스템이 필요합니다. 문자열 foo
을 일부 키 bar
과 함께 암호화한다고 가정 해보십시오. 결과 암호문을 암호 해독하려면 brn
키 bar
이 다시 필요합니다. 이 키는 시스템에 보안 스토리지가 필요하며 키가 공격자에게 노출되면 모든 보안이 사라집니다.
엄지 손가락의 일반적으로 그 해시가 그의 보안이 해시 알고리즘의 충돌 속도에 의해 결정되는대로 (예를 들어, 암호)에 대해 체크 텍스트를 저장하는 좋은 방법을 제공 말할 것입니다. 반면에 암호화는 나머지 데이터를 안전하게 저장하는 데 사용하는 기술입니다.
+1 귀하의 마지막 단락은 중요한 부분입니다 - 통과 구문을 확인 * 할 수는 없지만 * 검색하지 않아야 함을 이해하십시오. –
Duncan에 동의합니다. 마지막 절은 실제로이 문제를 해결합니다. 암호 해시 만 검색하는 것과는 대조적 인 확인 문제이므로 암호를 사용하는 것이 좋습니다. – foochow
@Foo_Chow - 실제로 해시 값을 암호화 할 때 이점이 있습니다. 해시에 서버 쪽 비밀 (후추)을 추가하는 것이 가장 좋은 방법 일 수 있습니다.이 [답변] (http://stackoverflow.com/a/16893270/575765)에서 문제를 설명했습니다. – martinstoeckli