2009-05-18 8 views
39

SQL Server 2008에 사용자 암호를 저장하는 권장 방법은 무엇입니까?SQL Server에 암호 저장

인트라넷에 대한 사용자 정보를 저장하고 있으며 이름, 암호 및 사용자 액세스 privillages 등과 같은 사용자 세부 정보를 저장하는 가장 좋은 방법에 대한 조언을 얻고 싶습니다. nvarchar 열을 만든 다음이를 암호화하려고합니다. 텍스트를 테이블에 삽입하기 전에.

+2

AD 도메인 인 경우 AD에서 인증을 처리 할 수 ​​없습니까? – Rytmis

+0

제안에 감사드립니다. 리처드 – Richard

답변

2

일반적으로이를 수행하는 방법입니다.

응용 프로그램에서 암호화를 처리하고 선택적으로 암호를 해독합니다. 데이터베이스는 암호 만 저장합니다. 나는 날짜가 사실상보다 더 강한 것을 사용하는 것이 좋습니다

- MD5

대부분의 .NET 개발자는 TDES

를 사용하여 좋아하는 것
+0

나는 당신이 할 수 –

+3

MD5는 암호화 알고리즘이 아닌 경우는 MD5보다 더 강한 무언가에 가고 싶은 것을 동의 것이다, 그것은 해시 알고리즘입니다. http://en.wikipedia.org/wiki/MD5 –

+0

동의 함. 나는 당신이 위로 얻는다 그래서 나는 명백하지 않았다는 것을 짐작한다 : –

2

T-SQL은 암호화 기능을 포함 - 4Guys는 동안 다시 good article on it for SQL Server 2005 AA했다하지만 난 그것을 생각 모두 2008 년까지 적용됩니다.

+0

그 기사는 대칭 열쇠 부호 매김에있다. 암호는 해쉬되어야합니다. – Swoogan

+0

동의합니다 - 내가 링크 된 기사의 기일이 오래되었습니다. 그래서 나는 개인적으로 위의 elazar-leibovich에 의해 대답을 upvoted. –

7

민감한 데이터를위한 암호화가 좋습니다. 그러나 암호를 사용하면 원래 값을 알 필요가 없으며 암호화 된 항목도 암호 해독 될 수 있기 때문에 해당 정보를 발견 할 위험에 처하게됩니다.

대신 암호 해시를 유지해야합니다. 이 프로세스는 값을 사용하여 매우 복잡한 체크섬에 해당하는 값을 생성합니다. 번호가 주어지면 원래 암호로 돌아갈 방법이 없으므로 이러한 정보의 보안이 강화됩니다. 누군가가 올바른 암호를 제공했는지 여부를 알고 싶을 때 해시 값을 해시하고 해시를 비교합니다.

보안은 복잡한 주제입니다. 해시가 있더라도 중요한 보안 결함이있는 시스템이 될 수 있습니다. 보안 컨설턴트의 도움을 얻는 것은 팀의 다른 사람이 이미 그러한 지식을 가진 사람이 없다면 나쁜 생각이 아닙니다.

+1

대부분의 경우 매우 그렇습니다. OP가 인트라넷에서 사용되는 경우, 패스워드를 검색 할 수있는 것이 유용한 상황 (로그인이 필요한 인트라넷의 다른 응용 프로그램과 통합)이있을 수 있습니다. –

53

암호를 저장하는 일반적인 방법은 암호에 해시 함수를 사용하는 것이지만 salt에 미리 입력해야합니다. rainbow table 공격으로부터 자신을 방어하기 위해 암호를 "암호화"하는 것이 중요합니다.

그래서 테이블은 주어진 암호가 사용자와 일치하는지 확인하면 지정된 패스워드로 소금을 연결하고 결과 문자열의 해시 함수를 계산해야하는

._______._________________.______________. 
|user_id|hash    |salt   | 
|-------|-----------------|--------------| 
|12  |[email protected]|13%!#tQ!#3t...| 
|  |...    |...   | 

처럼 보일 것이다. 해시 함수 출력이 hash 열과 일치하면 올바른 암호입니다.

소금 해시 아이디어에는 데이터베이스에 액세스 할 수있는 사람이 누구나 암호를 알지 못하게하는 특정 이유가 있습니다 (해시 함수 출력을 역전시키는 것이 어려운 문제로 간주 됨). 예를 들어, 은행의 DBA는 은행 계좌에 로그인 할 수 없지만 모든 열에 액세스 할 수는 있습니다.

사용자가 민감한 비밀번호 (예 : Gmail 계정의 비밀번호)를 웹 사이트의 비밀번호로 사용한다고 생각하는 경우 사용하는 것도 고려해야합니다.

IMHO 항상 필요한 보안 기능이 아닙니다. 그래서 당신은 당신이 그것을 원하는지 아닌지 생각해야합니다.

이 메커니즘에 대한 좋은 요약은 this article을 참조하십시오.

업데이트 : 그것은 개인 암호의 해시를 반전 대상 공격에 대한 보안을 강화하기 위해, 당신이 계산하는 임의 어려울 수 있습니다, use bcrypt해야하는 것으로, 언급 할 가치가있다. (그러나 특정 데이터베이스를 대상으로하는 신비한 남자가 정말로 두려워하지 않는 한, sha1은 충분하다고 생각합니다.이 추가 보안을 위해 내 프로젝트에 다른 의존성을 도입하지 않을 것입니다. 즉, sha1을 사용하지 않을 이유가 없습니다. 100 번, 비슷한 효과가 있음).

+4

위 링크가 작동하지 않지만 [this] (http://msdn.microsoft.com/en-us/library/ff649202.aspx) 하나 있습니다. – JumpingJezza

+1

@ JumpingJezza, 고마워, 일하는 데 사용, 링크를 업데이트하고있다. –