2009-04-06 4 views
2

저는 응용 프로그램에서 작업 중이므로 사용자 암호를 저장해야하므로 레지스트리의 현재 사용자 클래스에 저장 하겠지만 암호 해시를 원합니다 뚜렷한 이유 때문에 SHA1에 금이 간다고하는 뉴스 항목을 보았을 때 "표준"시스템 또는 .net에서 사용할 수있는 (해킹되지 않은) 해싱 알고리즘이 더 좋았습니까?SHA1보다 해시가 더 좋습니다

+0

예, 저는 SHA1이 기술적으로 해시 기능이지만 암호화 기능이 아니라는 것을 알고 있습니다. – UnkwnTech

+2

차이점을 이해한다면 왜 두 질문을 혼동스럽게합니까? – Blorgbeard

+0

암호화가 아닌 해싱을 나타내는 질문과 제목을 업데이트했습니다. –

답변

11

SHA1은 encryption이 아니며, cryptographic hash function입니다. 그리고 예, 그것은 깨졌습니다. 즉, 무차별 방식보다 빠르게 충돌을 생성 할 수 있습니다. SHA2 제품군이 손상되지 않았습니다.

하지만 항목 당 사용자 지정 시드를 사용하여 암호를 시도하는 데 rainbow table을 사용할 수 없도록 조언합니다. SQL 멤버십 공급자를 사용하는 경우 password format "Hashed"은 이미 각 사용자마다 다른 시드를 사용합니다.

해시를 시드하는 방법에 대한 자세한 내용은 What You Need To Know About Secure Password Schemes Thomas Ptacek의 기사를 참조하십시오.

2

귀하의 의견에서 말씀 드린 것처럼 SHA1은 암호화가 아닌 해시 알고리즘입니다. 깨진 경우에도 암호를 검색 할 수 없도록하는 단방향 기능입니다.

이미 .NET에있는 더 강력한 해시 함수를 원하면 SHA2 제품군 (SHA256, SHA384, SHA512)을 살펴보십시오. (SHA224도 존재하지만 System.Security.Cryptography 네임 스페이스에는 구현되어 있지 않습니다.)

SHA1에 대한 충돌 공격은 실제적으로 아직 악용 가능하지 않지만 앞으로 나아갈 수 있습니다. NIST는 현재 이러한 공격에 비추어 SHA3에 대한 선택 프로세스를 실행하고 있지만 이것은 완료 및 상업적 승인으로부터 수년입니다. 반면에 SHA2는 NIST에서 표준화 된 MD5 및 SHA1에 대해 성공적이었던 공격의 영향을받지 않는 기존 알고리즘 계열입니다.

+0

더 좋은 해시를 사용하더라도 무지개 공격을 피하기 위해 소금을 사용해야합니다. – Richard

+1

네, 동의합니다, 나는 그것을 부인하지 않을 것입니다. 하지만 문제는 더 나은 해시 알고리즘에 관한 것이 었습니다. 해시 알고리즘을 사용하는 것이 가장 좋습니다. –

1

비밀번호는 salt입니다. 다음은 SHA1과 소금을 사용하는 C#의 실제 sample code입니다.

SHA1의 "cracked"문제는 모든 기본 가능한 조합이 사전 계산되어 있지만 소금으로 처리하면 암호가 기본이 아닙니다. (약하거나 쉽게 추측 할 수 있지만 무지개 표를 죽이면 여전히 무차별 한 공격에 취약합니다.)

+1

네, 확실히 소금을주세요. 그러나 SHA1이 적어도 암호화 용어로 "깨졌습니다"는 사실을 알 수는 없습니다. –

0

예 SHA512를 사용할 수 있습니다. 실제 해시의 길이를 기억하십시오. 해시 결과를 소금으로 처리하여 언제든지 추가 보안을 추가 할 수 있습니다.

SHA512("The quick brown fox jumps over the lazy dog") = 
    07e547d9 586f6a73 f73fbac0 435ed769 51218fb7 d0c8d788 a309d785 436bbb64 
    2e93a252 a954f239 12547d1e 8a3b5ed6 e1bfd709 7821233f a0538f3d b854fee6 

다른 해싱 algorythms 보길 원하는 경우

, here's a short list.

-5

오일 너무 늦게하지만이 매우 안전한 암호화 기능을 시도해 볼 수도 있습니다 :

uint64_t highly_secure_encrypt(char* password) { 
    sleep(1); 
    return 0; 
} 

방법이 없습니다 당신이를 얻고을 그것으로부터 암호가 다시.

이제 심각한 문제에 대해 알아보십시오. 질문에 대한 답을 아직 모르는 경우에는 보안 시스템을 설계하면 안됩니다.

레지스트리의 현재 사용자 섹션에 암호를 저장하면 정상적인 상황에서 암호를 액세스 할 수있는 사람은 사용자와 관리자뿐입니다. 나는 (다소) 레지스트리의 현재 사용자 섹션을 신뢰하고 OS가 제공하는 표준 암호 해시 메커니즘을 사용한다.

Jeff Atwood의 "Rainbow Hash Cracking"은 초보자 용으로 해시 및 암호 저장에 대해 설명하고 Thomas Ptacek의 "Enough With the Rainbow Tables: What You Need to Know About Secure Password Schemes"은 계속해서 자신이 일반적으로 시도해서는 안되는 이유를 설명합니다.

좋은 해시 함수를 선택하는 것이 전투의 1 % 미만입니다. 공격자가 해시 함수를 수백만 회 실행할 수있는 경우 초당 수백만 개의 조합을 테스트 할 수 있습니다. 느리고 조정 가능한 보안 해시가 필요합니다. 그것은 쉽지 않은 일이며 SHA *, MD5 등은 속도가 왕성한 파일과 파일 덩어리에 일반적으로 사용되기 때문에 피가 빨라졌습니다.

답변이 나와 있고 찾기가 쉽기 때문에 더 많이 읽으시기 바랍니다.

+0

귀하의 액세스 가정은 시스템이 손상되지 않았다고 가정합니다. 일반 사용자가 자신의 시스템을 교육 받고 "관리"할 때 매우 중요한 문제입니다. – UnkwnTech

1

해시 알고리즘은 새로운 AESRijndael을 선정 암호화 대회가 있었다처럼 NIST는 hashing contest 훨씬까지 제공하고있다 이유입니다, 후반의로 weakness의 몇 가지 조짐을 보이고있다.

저는 개인적으로 MD6이 제공하는 것을 좋아합니다. 30 년 넘게 암호 공간에 있었던 Ron Rivest가 선두를 달리고 있습니다. MD6이 철회되었으므로 제 2 차 예선에서 Keccak, Blue Midnight Wish 및 Fugue와 같은 저의 겸허 한 의견에서 강력한 후보자를 추천합니다.

거기에서 소금 내기와 같은 우수 사례를 사용하십시오.

+0

SHA3 경연 대회에서 [최근 개발] (http://groups.csail.mit.edu/cis/md6/OFFICIAL_COMMENT_MD6_2009-07-01.txt)은 검토되지 않은 암호화 기술을 사용하는 것이 부당하다는 것을 보여줍니다 알고리즘, 심지어 Rivest와 같은 마스터에 의해 설계된 알고리즘도 포함됩니다. "..이 시점에서 MD6은 SHA-3 후보자에게 요구되어야한다고 생각하는 것에 대한 우리 자신의 기준을 충족하지 못합니다."(물론 우리 모두 'MD6가 제공하는 것과 마찬가지입니다.') - – ladenedge

+0

"최근 개발"이라고하면 13 개월 전을 의미합니다. –

+0

현재 작물 (2 라운드)은 다음에서 찾을 수 있습니다. http : //csrc.nist.gov/groups/ST/hash/sha-3/Round2/submissions_rnd2.html –

관련 문제