it-swarm-korea.com

C # 암호 해싱 및 확인의 참조 구현

누구든지 참조 구현 (이상적으로는 타사 인증 또는 정부 승인 ) C # 및/또는 Java에 대한 단방향 해시 암호를 가지고 있습니까?

이상적으로는 언급 한 바와 같이 "소금과 후추"기술이 포함 된 것을보고 싶습니다. 여기 뿐만 아니라 다른 현대적인 보안 기술 적용 가능할 수도 있습니다 .

내가 보호하고 싶은 콘텐츠는 비밀번호 나 도전 질문에 대한 답과 같이 사용자가 기억할 수있는 정보입니다.

완전한 코드 샘플이없는 경우 선택할 알고리즘에 대한 일반적인 설명과 솔팅 및 후추 방법 예제가 도움이 될 것입니다.

7
goodguys_activate

귀하의 새로운 "정부 승인"요구 사항을 감안할 때, 한 가지 좋은 솔루션은 RFC 2898 의 PBKDF2 일 것입니다. Rfc2898DeriveBytes 클래스 (System.Security.Cryptography) 에서 .NET 용으로 구현됩니다. 아마도 거기에서 SHA-1 대신 SHA-256을 사용하고 싶을 것입니다.

또한 Fairly Secure Hashed Password : fshp PBKDF1과 비슷하지만 기본적으로 SHA-256을 사용합니다. 가변 반복 횟수를 지원하며 기본값은 4096입니다. 64 비트 솔트를 사용합니다. .NET, Python, Ruby, Perl, PHP5, Java 및 JavaScript에 대한 구현이 있습니다.

. net impl of bcrypt-Stack Overflow 에서 설명하고 논의했듯이 .NET/CLR의 경우 또 다른 좋은 옵션 (NIST 승인은 아님)이 BCrypt.net 인 것 같습니다.

그리고 Java 좋은 옵션은

나는 "후추"개념이나 scrypt의 공간 복잡성을 가지고 있지 않은 것 같습니다.

5
nealmcb

기본

기본적인 접근 방식은 솔트와 함께 저장되는 Hash(secret | salt)입니다. 분명히 SHA2 변형 중 하나와 같은 최신 해시 알고리즘을 사용하는 것이 중요합니다 (현재 SHA1은 MD5처럼 완전히 손상되지는 않습니다). 이 방법으로 질문을 저장하는 경우 해싱하기 전에 비밀을 Trim()ToLower() 원할 수 있습니다. 이것은 복잡성을 다소 줄일 수 있지만 보안 질문은 어쨌든 암호처럼 높은 엔트로피를 갖도록 의도되지 않았습니다.

Rainbow 테이블과 같은 무차별 대입 공격은 어떻습니까?

무차별 대입 공격에 대한 우려는 다음 두 가지 방법으로 완화 할 수 있습니다.

  1. 비밀에 최소한의 엔트로피가 필요합니다 (길이, 복잡성 등).
  2. 해시를 수행하는 데 필요한 계산량을 늘립니다.

bcrypt 에서 사용되는 방법은 해시를 계산하는 시간을 몇 배나 증가시키기 때문에 표준 해싱에서 좋은 개선입니다. 기본적으로 비밀을 여러 번 반복해서 해시합니다. Hash(Hash(...Hash(secret | salt)...))

시간이 여전히 비교적 적기 때문에 (수백 밀리 초) 합법적 인 사용자에게 허용 할 수없는 지연을 추가하지 않습니다. 그러나 자동화 된 무차별 대입 공격을 망칠 수 있습니다.

충분하지 않습니다

bcrypt의 추가 난이도가 충분하지 않으면 scrypt 를 시도해보세요. bcrypt처럼 작동하지만 마지막 병합을 위해 각 반복 해시를 메모리에 저장해야합니다. 이렇게하면 bcrypt와 동일한 시간 복잡성이 추가되지만 공간 복잡성도 증가하여 하드웨어, 특히 병렬로 구현하기가 더 어려워집니다.

이행

솔직히 저는 이것을 구현할 C # 라이브러리를 알지 못합니다. 공식 기관에서 "인증 된"라이브러리는 말할 것도 없지만 그렇게 어렵지는 않습니다. 스레드로부터 안전한 코드를 작성하고 암호 확인이 서버와 같은 신뢰할 수있는 시스템에서 발생한다고 가정하면 부차 채널 공격 과 같은 구현 문제가 최소화됩니다.

추가 읽기 : 이 답변 to BCrypt는 C #에서 사용하기에 좋은 암호화 알고리즘입니까? 어디서 찾을 수 있나요?

2
Justin Morgan

. Net 답변 :
이 게시물 all -Cng -CryptoServiceProvider . Net Cryptography Namespace 의 후위 구현은 FIPS 인증을 받아야합니다. -Managed 버전.

단점 :

장점 :

  • FIPS 인증을 받았습니다.
  • 해싱 알고리즘은 bcrypt를 사용합니다.
1
Ioanna