2009-11-18 2 views
12

안녕하세요, 저는 암호 해독에 대해 읽었습니다.하지만 조금 이상하게 들릴 수 있습니다. 그러나 어떻게 소금을 저장하고 안전하게 보관해야합니까? 예를 들어 다중 타이어 아키텍처에서 클라이언트 컴퓨터의 GUID를 사용하여 소금을 생성한다고 가정하면 사용자는 단일 기계로 제한되지만 무작위 소금을 사용하면 어딘가에 저장해야합니다. 며칠 전 새 사용자가 만들어 질 때마다 해시와 소금이 클라이언트 시스템에서 생성 된 다음 해시가 SQL 서버에 저장된 서버로 전송되는 샘플 응용 프로그램을 보았습니다. 그러나이 방법을 따르고 데이터베이스가 손상되면 각 암호의 암호와 소금 값을 X 사용자가 사용할 수있게됩니다. 그래서, 다시 암호를 암호화/암호화하고 서버 측에서 소금을 받아야합니까? 소금에 절이는 가장 좋은 방법은 무엇입니까?소금을 소금에 담그고 저장할 때 가능한 최선의 방법은 무엇입니까?

답변

22

해시 된 암호 옆에 데이터베이스에 암호화되지 않은 소금을 저장하는 것은 문제가되지 않습니다.

소금의 목적은 비밀이 아닙니다. 목적은 해시마다 (즉, 무작위로) 다르며 공격자가 데이터베이스를 손에 넣을 때 rainbow tables의 사용을 이기기에 충분히 길다는 것입니다.

이 부분은 Thomas Ptacek의 excellent post을 참조하십시오.

편집 @ZJR : 소금이 완전히 공개 된 경우에도 여전히 무지개 표의 이점을 잃을 것입니다. 당신이 소금을 가지고 데이터를 해시 할 때, 당신이 할 수있는 최선은 (해쉬 함수는 암호 안전하다고 제공) 무력

편집 @의 n10i입니다 반전하기 : secure hash function에 대한 위키 피 디아 문서를 참조하십시오. 소금의 크기는 인기있는 bcrypt .gensalt() 구현은 128 비트를 사용합니다.

+0

가 나도, 소금의 목적은 ** 대중 **이어야한다라고 말하고 싶지만 해싱을 읽어 보시기 바랍니다. – ZJR

+0

"해시 함수는 암호로 안전합니다"라고 설명해주십시오. 죄송합니다. 암호화가 처음입니다. 또한 귀하의 회신 u에서 "무지개 테이블의 사용을 물리 칠 수있을만큼 충분히 길다"소금이 얼마나 오랫동안 있어야 하는가? – Neel

관련 문제