문제

데이터베이스에서 비밀번호를 보호하기위한 좋고 간단한 암호화 체계는 무엇입니까?나는 반드시 초고속 보안이 필요하지도 않고 번개처럼 빠른 것도 필요하지 않지만 그런 것들은 좋을 것입니다.주로 저는 매우 느리거나 안전하지 않고 구현하기 쉬운 것을 원합니다.

도움이 되었습니까?

해결책

mk가 말했듯이 SHA1 또는 MD5는 SHA2와 함께 표준입니다 . <시간>

업데이트 : 프로세서가 수년에 걸쳐 더 빨라짐에 따라 해시는 더 무차별 대입이 가능해졌습니다. 이제 bcrypt 를 사용하는 것이 좋습니다. <시간>

원하는 것은 일반적으로 암호화 해시 함수라고합니다. 암호화 해시는 단방향으로 설계되었습니다 (결과 해시를 감안할 때 원래 입력을 유도 할 수 없어야 함). 또한 동일한 해시 (해시 충돌이라고 함)를 갖는 두 개의 임의 문자열의 가능성은 낮아야합니다 (이상적으로는 1 / 해시 값 수).

안타깝게도 비밀번호가 해싱되었다고해서 해시 된 버전을 안전하게 유지하기 위해 열심히 노력할 필요가 없습니다. 너무 많은 사람들이 오프라인 무차별 대입 공격에 취약한 취약한 암호를 사용합니다.

편집-여러 사람이 이미 소금 사용의 중요성을 지적했습니다. 솔트는 해시 함수를 사용하기 전에 입력과 혼합하는 상수 값입니다. 고유 한 솔트를 사용하면 오프라인 공격자가 미리 계산 된 공통 암호 테이블 (레인보우 테이블)을 사용하여 암호를 더 빠르게 무차별 공격하는 것을 방지 할 수 있습니다.

다른 팁

MD5 또는 SHA1 + 솔트.

MD5 또는 SHA1을 사용하는 경우 솔트를 사용하여 레인보우 테이블 해킹을 방지하세요.

C #에서는 간단합니다. 라코 디스

쉬움 : BCrypt .

Jeff의 비밀번호를 잘못 저장하고있을 수 있습니다 기사는 이에 대한 훌륭한 읽기입니다.주제.

몇 주 전 제 문제였습니다. 대규모 MIS 프로젝트를 975 개의 서로 다른 지리적 위치에 배포하여 자체 사용자 자격 증명 저장소가 이미 구현되고 사용중인 여러 응용 프로그램 집합에 대한 인증 자로 사용될 것입니다. 이미 REST 및 SOAP 기반 인증 서비스를 모두 제공했지만 고객은 관련 테이블 또는보기의 읽기 전용보기에 대한 DB 연결만으로 다른 애플리케이션에서 사용자 자격 증명 저장소에 연결할 수 있다고 주장했습니다. 한숨 ... (고 결합 된 잘못된 설계 결정은 또 다른 질문의 주제입니다.)

그 때문에 우리는 솔트 처리되고 반복적으로 해시 된 암호 저장 체계를 사양으로 변환하고 쉽게 통합 할 수 있도록 몇 가지 다른 언어 구현을 제공해야했습니다.

우리는 이것을 Fairly Secure Hashed Passwords 또는 간단히 FSHP 라고 불렀습니다. Python, Ruby, PHP5로 구현하여 Public Domain에 배포했습니다. GitHub의 http://github.com/bdd/fshp

FSHP는 솔트 처리되고 반복적으로 해시 된 암호 해싱 구현입니다.

설계 원칙은 RFC 2898의 PBKDF1 사양과 유사합니다. (a.k.a : PKCS # 5 : 비밀번호 기반 암호화 사양 버전 2.0.) FSHP는 솔트 길이, 반복 횟수 및 SHA-1 및 SHA-2 (256, 384, 512) 간의 기본 암호화 해시 기능. 모든 출력의 시작 부분에 자체 정의 메타 접두사를 사용하면 휴대 가능하고 소비자가 자신의 암호 저장 보안 기준을 선택할 수 있습니다.

보안 :

기본 FSHP1은 SHA-256 해싱의 4096 반복과 함께 8 바이트 솔트를 사용합니다. -8 바이트 솔트는 다음을 곱하여 레인보우 테이블 공격을 비현실적으로 만듭니다. 2 ^ 64로 필요한 공간. -4096 번의 반복으로 인해 무차별 대입 공격이 상당히 비쌉니다. -충돌을 찾기 위해 SHA-256에 대한 알려진 공격이 없습니다. 2 ^ 128 회 미만의 연산 노력 이 릴리스.

구현 :

  • Python : 2.3.5 (w / hashlib), 2.5.1, 2.6.1로 테스트 됨
  • Ruby : 1.8.6으로 테스트
  • PHP5 : 5.2.6으로 테스트

    누구나 누락 된 언어 구현을 만들거나 현재의 것들을 다듬습니다.

    기본 작업 (Python 사용) : 라코 디스

    암호화 맞춤 설정 :

    비밀번호 해싱 체계를 약화합시다. -소금 길이를 기본값 8에서 2로 줄입니다. -반복 라운드를 기본값 4096에서 10으로 줄입니다. -기본 해시 알고리즘으로 SHA-1이있는 FSHP0을 선택합니다. 라코 디스

고유 솔트와 함께 SHA 단방향 해싱 알고리즘을 사용합니다.데이터베이스에 암호를 저장하는 데 사용하는 주요 알고리즘입니다.

SQL Server를 사용하는 경우 HashBytes 함수가 있습니다.

http://msdn.microsoft.com/en-us/library/ms174415.aspx

나는 솔트로 MD5 또는 SHA에 대한 두 번째 투표를합니다.모든 주요 웹 개발 언어에는 해시 계산을위한 함수가 내장되어 있습니다 (예 : PHP에서 mcrypt 패키지에는 필요한 함수가 포함되어 있음).

Salt와 함께 위에서 제안한 SHA-1과 같은 단방향 해시 알고리즘을 사용해야합니다.자세한 내용은이 사이트를 추천합니다.여기에는 몇 가지 샘플 코드 / 구현이 포함되어 있습니다. http://www.obviex.com/samples/hash.aspx

더 나은 보안의 핵심은 동적 솔트를 사용하는 것입니다.즉, 각 새 사용자에 대해 임의의 문자열을 생성하고 해당 문자열을 사용하여 해시를 솔트합니다.물론 나중에 암호를 확인할 수 있도록이 솔트를 데이터베이스에 저장해야합니다 (어떤 방식 으로든 암호화하지 않습니다).

For a non-reversible encryption I would most definitely go with SHA256 or SHA1. MD5 has quite a lot of collisions now and a lot of effort has been put into breaking it, so not a good one to use.

If you want to future-proof your solution, I'd recommend SHA256 or SHA512. Cryptographic geekworld is getting the jitters about MD5 and, to a slightly lesser extent, SHA1.

Or, if you can, wait for SHA-3

I've noticed a lot of confusion about how to do password hashing properly, especially on stackoverflow. So I've written a page that should clear everything up. There's a bit more to it than using a simple hash.

More info: How to do password hashing properly

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top