2011-01-08 2 views
1

고객 암호를 소금에 절인 MD5 해시로 저장 한 기존 레거시 ASP 응용 프로그램이 있습니다. 우리는 이것을 대체하기 위해 ASP.NET MVC에 새로운 응용 프로그램을 작성했습니다.레거시 데이터베이스를 기반으로 구축 된 새로운 시스템의 보안 강화

암호 필드의 보호를 한 단계 높이기 위해 SHA1 해시를 사용하고 싶습니다. 분명히 고객은 새로운 SHA1 해시를 만들기 위해 암호를 갱신하지 않고이 작업을 수행해야합니다.

내 생각은 SHA1을 사용하여 기존 MD5 해시를 해시하는 것이 었습니다. 즉, MD5로 해시 한 다음 SHA1을 사용하여 다시 해시해야 할 필요가 있음을 의미합니다. 고객이 로그온 할 때 암호를 다시 설정할 때도 함께 살 수 있습니다.

누구나이 방법의 결함을 발견 할 수 있습니까? 나에게

  • 해시 전략을 결정하는 두 번째 열을 소개 해시를 지원 (이하 참조) 열을 넓혀

  • 답변

    1

    SHA1을 사용하는 대신 Bcrypt 또는 이와 비슷한 것을 사용해야합니다.

    그러나 그렇지 않으면 당신의 계획은 합리적인 것 같습니다. 다행스럽게도 기존 해시는 식별하기 쉬운 형식이므로 데이터베이스에 새 열을 추가하지 않으려는 경우 식별자 접두사를 추가 할 수 있습니다.

    md5, md5 + bcrypt 또는 bcrypt를 처리 할 수 ​​있도록 코드를 변경하고 온라인 로그인 코드가 bcrypt로 업그레이드되는 동안 md5에서 md5 + bcrypt로 암호를 업그레이드하는 백그라운드 프로세스를 실행할 수 있습니까?

    +0

    감사합니다. Douglas. BCrypt는 분명 내 식욕을 자극합니다. – Kev

    1
    1. 것 같다;
    2. 로그인 (및 유사한) 및 암호 변경/재설정 루틴을 변경하여이 값을 기반으로 사용중인 해시 전략을 감지 한 다음 적용합니다. 값이 "권장되지 않는"해시로 해시 된 경우 자동 업그레이드 (사용자가 확인한 후에 사용자의 일반 텍스트로 비밀번호를 지정하므로)
    3. 적절한 시간이 지난 후에는 사용자를 잠그는 것이 좋습니다 업그레이드하지 않은 이전 암호는 일부 해싱 전략 등을 자동으로 감지 할 수

    당신 해시 스트레이트 MD5와 SHA1은 인코딩 된 출력의 길이에 따라 16 진수로 인코딩 된 MD5는 32 바이트를 차지하지만 SHA1에는 40이 필요합니다. 그러나 "해시 전략"은 정보를 통합 할 수도 있습니다 (응용 프로그램에 의미가 있으므로 철저하게 문서화하십시오!) 해싱 매커니즘과 같은 해시에서 수행 된 다른 작업이나 해시 반복 횟수에 대해 일반적으로 약간 더 강력합니다. 앞으로는 세 번째 해시 (Tiger-192)를 도입하고 업그레이드 프로세스를 반복 할 수도 있습니다.

    다른 열을 사용할 수 없으면 기존 해시를 확장하여 접두사에 해시 표시기 (예 : {SHA1}xxxxxxxxxxxxx - 이전 해시는 접두사가 없으며 MD5로 가정 할 수 있습니다.

    +0

    최소한의 추가 코드 (SHA1을 사용하여 다시 해시하는 것 외)로이 작업을 수행하려고합니다. 열은 이미 상당히 큽니다 ('varchar (1024)'). 또한 모든 사람들을 위해이 업그레이드를 즉시 구현하고 싶습니다. 고객이 자동으로 업그레이드하기 위해 다시 로그인 할 때까지 기다릴 필요가 없습니다. (이것은 제가 생각한 전략이었습니다). 그러나 조언은 매우 유용합니다. – Kev

    관련 문제