점점 더 많은 웹 사이트와 웹 응용 프로그램을 계속 구축함에 따라 사용자에게 문제가 발생했을 때 검색 할 수있는 방식으로 사용자 암호를 저장하라는 메시지가 자주 표시됩니다 (잊어 버린 암호 링크를 이메일로 보내거나 전화 등)) 내가이 관행에 맞서 싸울 수있을 때 실제 비밀번호를 저장하지 않고 비밀번호 재설정 및 관리 지원을 가능하게하는 ‘추가’프로그래밍을 많이합니다.
내가 싸울 수 없을 때 (또는 이길 수없는 경우) 비밀번호는 데이터베이스에 일반 텍스트로 저장되지 않도록 항상 어떤 방식 으로든 비밀번호를 인코딩합니다.하지만 DB가 해킹 될 경우 범인이 암호를 해독하는 데 많은 시간이 걸리지 않으므로 불편합니다.
완벽한 세계 사람들은 암호를 자주 업데이트하고 여러 사이트에 걸쳐 복제하지 않습니다. 불행히도 나는 같은 직장 / 가정 / 이메일 / 은행 암호를 가진 많은 사람들을 알고 있으며 도움이 필요할 때 자유롭게 암호를 제공합니다. DB 보안 절차가 어떤 이유로 실패하면 재정적 소멸을 책임지는 사람이되고 싶지 않습니다.
도덕적, 윤리적으로 저는 일부 사용자의 경우 생계를 훨씬 덜 존중하더라도 보호 할 책임이 있습니다. 솔트 해시 및 다른 인코딩 옵션에 대해 접근해야 할 방법과 인수가 많이 있다고 확신하지만, 저장해야 할 때 ‘최상의 사례’가 있습니까? 거의 모든 경우에 나는 PHP와 MySQL을 사용하고 있는데, 그것이 세부 사항을 처리 해야하는 방식에 차이가 있다면.
현상금에 대한 추가 정보
나는 이것이 당신이하고 싶은 것이 아니며 대부분의 경우 거부하는 것이 가장 좋다는 것을 알고 싶습니다. 그러나 나는이 접근법을 취하는 장점에 대한 강의를 찾고 있지 않습니다.이 접근법을 취하면 취할 수있는 최선의 조치를 찾고 있습니다.
아래의 메모에서 나는 노인들, 정신적으로 어려움을 겪고 있거나 매우 어린 사람들을 위해 마련된 웹 사이트가 안전한 암호 복구 루틴을 수행하도록 요청받을 때 사람들에게 혼란을 줄 수 있다고 지적했다. 이러한 경우에는 간단하고 평범한 것을 알 수 있지만 일부 사용자는 서비스 기술을 사용하여 시스템에 도움을 주거나 직접 전자 메일 / 표시하도록하는 추가 지원이 필요합니다.
이러한 시스템에서 사용자가 이러한 수준의 액세스 지원을 제공하지 않으면 이러한 인구 통계의 감소율이 응용 프로그램을 방해 할 수 있으므로 이러한 설정을 염두에두고 응답하십시오.
모두에게 감사 드려요
이것은 많은 토론과 함께 재미있는 질문이었고 나는 그것을 즐겼습니다. 결국 나는 암호 보안을 유지하는 대답 (일반 텍스트 또는 복구 가능한 암호를 유지할 필요는 없지만)에서 내가 찾은 주요 단점없이 시스템에 로그인 할 수 있도록 지정한 대답을 선택했습니다. 정상적인 비밀번호 복구.
언제나 그렇듯이 여러 가지 이유로 정답으로 표시하고 싶은 약 5 개의 답변이 있었지만 가장 좋은 답변을 선택해야했습니다. 나머지는 모두 +1이었습니다. 모두 감사합니다!
또한이 질문에 투표하고 / 또는 좋아하는 것으로 표시 한 스택 커뮤니티의 모든 사람들에게 감사드립니다. 저는 칭찬으로 100 표를 얻었으며이 토론이 다른 사람이 저와 같은 관심사를 갖는 데 도움이 되었기를 바랍니다.
답변
이 문제에 대해 다른 접근법이나 각도를 취하는 것은 어떻습니까? 비밀번호가 일반 텍스트 여야하는 이유를 묻습니다. 사용자가 비밀번호를 검색 할 수 있도록 설정 한 경우 엄격하게 말하면 설정 한 비밀번호를 실제로 검색 할 필요는 없습니다 (어쨌든 무엇인지 기억하지 못함). 그들이 사용할 수 있는 암호를 제공 할 수 있어야 합니다 .
생각해보십시오. 사용자가 비밀번호를 검색해야하는 경우 비밀번호를 잊어 버렸기 때문입니다. 이 경우 새 비밀번호는 이전 비밀번호와 동일합니다. 그러나 오늘날 사용되는 일반적인 비밀번호 재설정 메커니즘의 단점 중 하나는 재설정 작업에서 생성 된 생성 된 비밀번호가 일반적으로 임의의 문자이기 때문에 복사 -n-가 아닌 한 사용자가 정확하게 입력하기가 어렵다는 것입니다. 풀. 잘 모르는 컴퓨터 사용자에게는 문제가 될 수 있습니다.
이 문제를 해결하는 한 가지 방법은 다소 자연스러운 언어 텍스트 인 자동 생성 암호를 제공하는 것입니다. 자연어 문자열에는 길이가 같은 임의의 문자열이 갖는 엔트로피가 없을 수 있지만 자동 생성 암호에는 8 자 (또는 10 자 또는 12 자) 만 있으면됩니다. 여러 개의 임의의 단어를 함께 묶어 높은 엔트로피 자동 생성 암호 문구를 얻으십시오 (그 사이에 공백을 남기면 읽을 수있는 사람이 여전히 인식하고 입력 할 수 있습니다). 길이가 변하는 6 개의 임의 단어는 10 개의 임의 문자보다 정확하게 입력하기 쉽고 아마도 더 높은 엔트로피를 가질 수 있습니다. 예를 들어 대문자, 소문자, 숫자 및 10 문장 부호 (총 72 개의 유효 기호)는 61.7 비트의 엔트로피를 갖습니다. 6 개 단어 암호 구에 대해 무작위로 선택할 수있는 7776 개 단어 사전 (Diceware에서 사용)을 사용하면 암호 구의 엔트로피는 77.4 비트가됩니다. 참조자세한 내용은 Diceware FAQ 를 참조하십시오.
-
약 77 비트의 엔트로피를 가진 암호문 : “산문 플레어 테이블 급성 감각을 인정하십시오”
-
약 74 비트 엔트로피의 암호 : “K : & $ R ^ tt ~ qkD”
문구를 입력하는 것을 선호하며 copy-n-paste를 사용하면 문구도 암호를 사용하기가 쉽지 않으므로 손실이 없습니다. 물론 귀하의 웹 사이트 (또는 보호 된 자산이 무엇이든)가 자동 생성 암호 문구에 77 비트의 엔트로피가 필요하지 않은 경우 더 적은 단어를 생성하십시오 (사용자가 높이 평가할 것입니다).
본인은 실제로 가치가 높지 않은 비밀번호로 보호 된 자산이 있다는 주장을 이해하므로 비밀번호의 위반이 세상의 종말이 아닐 수도 있습니다. 예를 들어, 다양한 웹 사이트에서 사용하는 암호의 80 %가 위반 된 경우에는 신경 쓰지 않을 것입니다. 발생할 수있는 모든 사람은 스팸 또는 제 이름으로 게시 한 사람입니다. 그다지 좋지는 않지만 그들이 내 은행 계좌에 침입하는 것과는 다릅니다. 그러나 많은 사람들이 자신의 은행 계좌 (및 아마도 국가 보안 데이터베이스)와 같은 웹 포럼 사이트에 동일한 암호를 사용한다는 사실을 감안할 때, 저 가치의 암호조차도 그렇지 않은 것으로 취급하는 것이 가장 좋습니다 -회복 가능.
답변
누군가가 큰 건물을 건축하도록 의뢰했다고 상상해 봅시다. 다음과 같은 대화가 이루어집니다.
건축가 : 이 크기와 용량을 가진 건물의 경우 여기, 여기, 여기에 화재 출구가 필요합니다.
클라이언트 : 아니요, 유지 관리하기에는 너무 복잡하고 비용이 많이 듭니다. 사이드 도어 나 백도어를 원하지 않습니다.
건축가 : 각하, 화재 출구는 선택 사항이 아니며 도시의 화재 코드에 따라 필요합니다.
클라이언트 : 나는 당신에게 논쟁을 지불하지 않습니다. 내가 부탁 한대로하세요
그런 다음 건축가는 화재 출구 없이이 건물을 윤리적으로 건축하는 방법을 묻습니까?
건축 및 엔지니어링 산업에서 대화는 다음과 같이 끝날 가능성이 높습니다.
건축가 : 이 건물은 비상구가 없으면 지을 수 없습니다. 다른 면허가있는 전문가에게 갈 수 있으며 그는 같은 것을 말할 것입니다. 나는 지금 떠나고있다. 협조 할 준비가되면 다시 전화 해주세요.
컴퓨터 프로그래밍은 허가 된 직업 이 아닐 수도 있지만 사람들은 종종 우리 직업이 토목 엔지니어 나 기계 엔지니어와 같은 존경을받지 않는 이유를 궁금해하는 것 같습니다. 이러한 직업은 쓰레기 (또는 완전히 위험한) 요구 사항을 전달할 때 간단히 거부됩니다. 그들은 “내가 최선을 다했지만 그는 주장했다. 나는 그가 말한 것을해야한다”고 말하는 변명이 아니라는 것을 알고있다. 그들은 그 변명에 대한 면허를 잃을 수 있습니다.
귀하 또는 귀하의 고객이 공개적으로 거래되는 회사의 일부인지 여부는 알 수 없지만 복구 가능한 형태로 비밀번호를 저장하면 여러 유형의 보안 감사에 실패 할 수 있습니다. 데이터베이스에 액세스 한 일부 “해커”가 암호를 복구하는 것이 얼마나 어려운지는 문제가 아닙니다. 대부분의 보안 위협은 내부에 있습니다. 당신이 보호해야 할 것은 모든 비밀 번호로 걸어서 가장 높은 입찰자에게 판매하는 불만을 품은 직원입니다. 비대칭 암호화를 사용하고 개인 키를 별도의 데이터베이스에 저장하면이 시나리오를 막을 수있는 것은 없습니다. 개인 데이터베이스에 액세스 할 수있는 사람 이 항상있을 것이므로 심각한 보안 위험이 있습니다.
암호를 복구 가능한 형식으로 저장하는 윤리적이거나 책임있는 방법은 없습니다. 기간.
답변
공개 키로 암호와 소금을 암호화 할 수 있습니다. 로그인의 경우 저장된 값이 사용자 입력 + salt에서 계산 된 값과 같은지 확인하십시오. 암호를 일반 텍스트로 복원해야 할 때가 오면 개인 키를 사용하여 수동 또는 반자동으로 암호를 해독 할 수 있습니다. 개인 키는 다른 곳에 저장 될 수 있고 대칭 적으로 암호화 될 수있다 (비밀번호를 해독하기 위해서는 인간의 상호 작용이 필요할 것이다).
이것이 실제로 Windows 복구 에이전트의 작동 방식과 비슷하다고 생각 합니다.
- 비밀번호는 암호화되어 저장됩니다
- 일반 텍스트로 해독하지 않고도 로그인 할 수 있습니다
- 암호는 일반 텍스트로 복구 할 수 있지만 개인 키를 통해서만 시스템 외부에 저장할 수 있습니다 (원하는 경우 은행 금고에 저장).
답변
포기하지 마십시오. 고객을 확신시키는 데 사용할 수있는 무기는 부인할 수 없습니다. 당신이 어떤 메커니즘을 통해 사용자 암호를 재구성 할 수 있다면, 당신은 준 그들의 고객에게 법적 부인 방지 메커니즘을 그리고 그들은 방법이 없기 때문에 공급 업체들이 암호를 재구성하지 않았다는 것을 증명할 수, 해당 암호에 따라 트랜잭션을 부인할 수 거래 자체를 통해. 암호가 암호문이 아닌 다이제스트로 올바르게 저장되면 불가능합니다. 최종 클라이언트가 직접 트랜잭션을 실행했거나 암호로 관리 의무를 위반 한 것입니다. 두 경우 모두 그에 대한 책임을 그에게 맡깁니다. 나는 그것이 수억 달러에 달하는 사례를 연구했습니다. 잘못하고 싶은 것이 아닙니다.
답변
나중에 일반 텍스트 검색을 위해 암호를 윤리적으로 저장할 수 없습니다. 그렇게 간단합니다. Jon Skeet조차도 나중에 일반 텍스트 검색을 위해 암호를 윤리적으로 저장할 수 없습니다. 사용자가 어떤 식 으로든 일반 텍스트로 암호를 검색 할 수 있으면 해커도 코드에서 보안 취약점을 발견 할 수 있습니다. 그리고 그것은 단지 하나의 사용자 암호 만이 아니라 모든 암호 입니다.
고객에게 문제가있는 경우 암호를 복구 가능하게 저장하는 것은 법에 위배된다고 말합니다. 영국의 데이터 보호법 1998 (특히, Schedule 1, Part II, 9 항)은 데이터 컨트롤러가 개인 정보를 안전하게 유지하기 위해 적절한 기술적 수단을 사용해야합니다. 데이터가 손상된 경우 발생할 수있는 피해-사이트간에 비밀번호를 공유하는 사용자에게 상당한 영향을 줄 수 있습니다. 그래도 문제가 있다는 사실을 이해하는 데 어려움이 있다면 이 사례와 같은 실제 사례를 지적하십시오 .
사용자가 로그인을 복구 할 수있는 가장 간단한 방법은 사용자에게 자동으로 로그인하여 새 비밀번호를 선택할 수있는 페이지로 바로 연결되는 일회성 링크를 이메일로 보내는 것입니다. 프로토 타입을 만들어 실제로 보여줍니다.
다음은이 주제에 대해 쓴 몇 가지 블로그 게시물입니다.
- http://jamesmckay.net/2009/09/if-you-are-saving-passwords-in-clear-text-you-are-pro-ably-breaking-the-law/
- http://jamesmckay.net/2008/06/easy-login-recovery-without-compromising-security/
업데이트 : 이제 사용자 암호를 제대로 보호하지 못하는 회사에 대한 소송 및 기소가 시작되었습니다. 예 : 링크드 인은 5 백만 달러의 소송 소송으로 철회했습니다 . 소니는 PlayStation 데이터 핵보다 25 만 파운드의 벌금을 물었다 . 내가 올바르게 기억한다면 LinkedIn은 실제로 사용자의 암호를 암호화하고 있었지만 사용하는 암호화가 너무 약해서 효과적이지 않았습니다.
답변
이 부분을 읽은 후 :
아래의 메모에서 나는 보안 암호 복구 루틴을 수행하라는 요청을받을 때 웹 사이트가 노인들, 정신적으로 어려움을 겪고 있거나 매우 어린 사람들을 위해 웹 사이트를 혼란스럽게 만들 수 있다고 지적했다. 이러한 경우에는 단순하고 평범한 것을 알 수 있지만 일부 사용자는 서비스 기술을 사용하여 시스템에 도움을 주거나 직접 전자 메일 / 표시하도록하는 추가 지원이 필요합니다.
이러한 시스템에서 사용자가 이러한 수준의 액세스 지원을 제공받지 않으면 이러한 인구 통계의 감소율이 응용 프로그램을 방해 할 수 있으므로 이러한 설정을 염두에두고 답변하십시오.
이러한 요구 사항 중 하나라도 검색 가능한 암호 시스템을 요구하는지 궁금합니다. 예를 들면 : Aabel Mabel이 전화하여 “인터넷 프로그램이 작동하지 않습니다. 암호를 모르겠습니다”라고 말합니다. “확인”고객 서비스 드론 “몇 가지 세부 정보를 확인 하고 새 암호를 알려 드리겠습니다” . 다음에 로그인 할 때 해당 비밀번호를 유지할지 또는 기억할 수있는 것으로 변경할 것인지 묻습니다.” 더 쉽게.”
그런 다음 시스템은 암호 재설정이 언제 발생했는지 알고 “새 암호를 유지 하시겠습니까? 새 암호를 선택 하시겠습니까?”메시지를 표시합니다.
PC 암호가 적을 때 이전 암호를 듣는 것보다 어떻게 나쁜가요? 또한 고객 서비스 담당자는 장난에 빠질 수 있지만 데이터베이스 자체는 보안 침해를 당할 경우 훨씬 안전합니다.
내 제안에 나쁜 점이 있으면 처음에 원하는 것을 실제로 수행하는 솔루션을 제안합니다.
답변
Michael Brooks는 CWE-257에 대해 보컬을 해왔습니다. 어떤 방법을 사용하든 관리자 (관리자)는 여전히 암호를 복구 할 수 있습니다. 이러한 옵션은 어떻습니까?
- 다른 사람의 공개 키 ( 일부 외부 권한)로 비밀번호를 암호화하십시오 . 그렇게하면 개인적으로 재구성 할 수 없으며 사용자는 해당 외부 기관으로 이동하여 암호를 복구하도록 요청해야합니다.
- 두 번째 비밀번호 문구에서 생성 된 키를 사용하여 비밀번호를 암호화하십시오. 이 암호화를 클라이언트 측에서 수행하고 절대로 서버로 전송하지 마십시오. 그런 다음 복구하려면 입력에서 키를 다시 생성하여 해독 클라이언트 측을 다시 수행하십시오. 물론이 방법은 기본적으로 두 번째 암호를 사용하지만 항상 암호를 적어 두거나 이전 보안 질문 방법을 사용하도록 지시 할 수 있습니다.
고객 회사 내에서 개인 키를 보유 할 사람을 지정할 수 있기 때문에 1.이 더 나은 선택이라고 생각합니다. 키 자체를 생성하고 안전한 곳에 지시 사항과 함께 키를 저장하도록하십시오. 암호에서 특정 문자를 내부 제 3 자에게만 암호화하여 제공하도록 선택하여 보안을 추가 할 수 있으므로 추측하기 위해 암호를 해독해야합니다. 그것. 이 문자를 사용자에게 제공하면 아마도 그것이 무엇인지 기억할 것입니다!