내가 질문에 대한 의견에 따라 :
하나의 중요한 요점은 거의 모든 사람들에 의해 매우 반가워졌습니다 ... 나의 첫 반응은 @stefanw와 같은 문제가 깨진 요구 사항이라는 것을 깨달을 때까지 @Michael Brooks와 매우 유사했습니다. 그러나 이것들은 그들이있는 것입니다.
그러나 그때조차도 그렇지 않을 수도 있습니다! 여기서 누락 된 점 은 응용 프로그램 자산 의 무언의 가치 입니다. 간단히 말해, 가치가 낮은 시스템의 경우 모든 프로세스가 포함 된 완전히 안전한 인증 메커니즘은 과도하게 사용되며 잘못된 보안 선택이 될 것입니다.
분명히 은행의 경우 "모범 사례"는 필수이며 CWE-257을 윤리적으로 위반할 방법이 없습니다. 그러나 가치가없는 저비용 시스템을 쉽게 생각할 수 있습니다 (단순한 암호는 여전히 필요합니다).
진정한 보안 전문 지식은 누구나 온라인에서 읽을 수있는 "모범 사례"를 독단적으로 내뱉는 것이 아니라 적절한 상충 관계를 찾는 데 있다는 점을 명심해야합니다.
: 따라서, 나는 다른 해결책을 제안
시스템의 값에 따라, 그리고 하는 경우에만 시스템이 적절하게 아니오 "비싼"자산 (신원 자체 포함)와 낮은 값, 및 적절한 과정을 유효한 비즈니스 요구 사항이 있습니다 불가능 (또는 비용 / 충분히 어려운), 및 클라이언트가 ... 모든주의 사항을 알고 만든
그 다음은 특별한 농구를 통해 뛰어 없습니다로 간단하게 해독 가능한 암호화를 허용하는 것이 적합 할 수있다.
구현하기가 매우 간단하고 저렴하기 때문에 (암호화 키 관리를 고려하더라도) 암호화를 전혀 사용하지 않으며, 일부 보호 기능을 제공합니다 (구현 비용 이상). 또한 전자 메일을 통해, 화면에 표시하는 등의 방법으로 사용자에게 원래 암호를 제공하는 방법을 살펴볼 가치가 있습니다.
여기에서의 가정은 도난당한 암호의 값 (집합 적으로도)이 매우 낮다는 것이므로 이러한 솔루션 중 하나라도 유효 할 수 있습니다.
다른 게시물과 별도의 댓글 스레드에서 실제로 활발한 토론이 진행되고 있기 때문에 몇 가지 설명을 추가하고 여기 다른 곳에서 제기 된 매우 좋은 요점에 응답합니다.
우선, 여기에 모든 사람이 사용자의 원래 암호를 검색하고 나쁜 습관이며 일반적으로 좋은 생각이 아니라는 것이 분명하다고 생각합니다. 그것은 전혀 논쟁의 여지가 없습니다 ...
또한, 나는 대부분의 상황에서 실제로 잘못되고, 심지어 파울, 불쾌하고, 추악 하다고 강조합니다 .
그러나 문제의 핵심은 원칙을 중심으로 하며 , 이것을 금지 할 필요가없는 상황 이 있는가? 그렇다면 그 상황에 가장 적합한 방법으로 그렇게하는 방법이있다 .
이제 @Thomas, @sfussenegger 및 다른 사람들이 언급 한 것처럼, 그 질문에 대답하는 유일한 올바른 방법은 주어진 (또는 가상의) 상황에 대한 철저한 위험 분석 을 수행하여 위험에 처한 것을 이해하고 보호해야 할 가치를 이해하는 것입니다 보호 기능을 제공하기 위해 수행중인 다른 완화 조치
아닙니다.이 용어는 유행어가 아니며 실제 보안 전문가에게 가장 중요한 기본 도구 중 하나입니다. 모범 사례는 신중한 위험 분석이 수행 된 후 (보통 경험이없는 사람과 해킹에 대한 지침으로) 어느 정도까지 좋습니다.
알다시피, 재밌습니다. 저는 항상 나 자신을 보안 광신자 중 한 사람으로 여겼으며, 어떻게 든 소위 "보안 전문가"의 반대편에 있습니다. 글쎄, 진실은-광신자이기 때문입니다. 그리고 실제 실제 보안 전문가-나는 그 중요한 위험 분석 없이 "최상의 관행"교리 (또는 CWE)를 내뿜는 것을 믿지 않습니다 .
"실제로 어떤 문제를 방어하고 있는지 모른 채 툴 벨트에 모든 것을 신속하게 적용 할 수있는 보안 열광자를 조심하십시오. 더 많은 보안이 반드시 좋은 보안과 동일하지는 않습니다."
위험 분석 및 진정한 보안 광신자는 위험, 잠재적 손실, 가능한 위협, 보완 완화 등을 기반으로 더 현명하고 가치 / 위험 기반의 트레이드 오프를 가리킬 것입니다. 위험 분석을 소리로 지적 할 수없는 "보안 전문가" 권장 사항에 대한 근거 또는 논리적 균형을 지원하지만 위험 분석을 수행하는 방법을 이해하지 못하고 도그마와 CWE를 추출하는 것을 선호하지만 보안 해킹은 아니지만 Nack은 전문 지식이 인쇄 된 화장지 가치가 없습니다.
실제로, 이것이 우리가 공항 보안 인 어리 석음을 얻는 방법입니다.
그러나이 상황에서해야 할 적절한 절충에 대해 이야기하기 전에 명백한 위험을 살펴 보겠습니다 (이 상황에 대한 배경 지식이 모두 없기 때문에 우리는 모두 가설을 세웁니다. 상황이있을 수 있습니다 ...)
저가형 시스템을 가정 해 보자. 그러나 대중이 접근하기에는 부족하지 않습니다. 시스템 소유자는 일반적인 명의 도용을 방지하려고하지만 "높은"보안은 사용 편의성만큼 중요하지 않습니다. (예, 능숙한 스크립트 사용자가 사이트를 해킹 할 수있는 위험을 받아들이는 것은 합법적 인 트레이드 오프입니다. 잠깐, APT는 유행하지 않습니다 ...?)
예를 들어, 대가족 모임을위한 간단한 장소를 마련하여 올해 캠핑 여행을 가고 싶은 곳을 모두가 브레인 스토밍 할 수 있다고 가정 해 보겠습니다. Erma가 필요로 할 때 로그온 할 수 없기 때문에 익명의 해커 또는 심지어 Cousin Fred가 Wantanamanabikiliki 호수로 돌아가라는 제안을 반복해서 걱정하지 않아도됩니다. 핵 물리학자인 에르 마 이모는 암호를 기억하거나 컴퓨터를 전혀 사용하는 데 능숙하지 않습니다. 그래서 나는 그녀에게 가능한 모든 마찰을 제거하고 싶습니다. 다시 말하지만, 나는 해킹에 대해 걱정하지 않고 잘못된 로그인의 바보 같은 실수를 원하지 않습니다. 누가 오는지, 그들이 원하는 것을 알고 싶습니다.
어쨌든.
따라서 단방향 해시를 사용하는 대신 암호를 대칭 적으로 암호화하는 경우 주요 위험은 무엇입니까?
- 사용자를 가장합니까? 아니요, 나는 이미 그 위험을 받아 들였습니다. 흥미롭지는 않습니다.
- 사악한 관리자? 글쎄, 어쩌면 ... 그러나 다시 한 번, 누군가가 다른 사용자를 사칭 할 수 있는지 여부는 신경 쓰지 않습니다. 내부 또는 아니요. 어쨌든 악의적 인 관리자가 어떻게 든 상관없이 암호를 얻을 것 입니다. 관리자가 잘못되면 게임은 끝났습니다.
- 제기 된 또 다른 문제는 ID가 실제로 여러 시스템간에 공유된다는 것입니다. 아! 이것은 매우 흥미로운 위험이며 면밀한 검토가 필요합니다. 공유
한 실제 신원이 아니라 증명 또는 인증 자격 증명 이 아니라고 가정 해 보겠습니다 . 이 경우를 제외하고는 ... 그냥 의미 그래서 좋아요, 공유 암호 때문에 효율적으로 저에게 다른 시스템에 입학을 허용합니다 (예를 들어, 내 은행 계좌, 또는 Gmail)는이 효과적으로 동일한 ID입니다 그렇지 않은 . 이 시나리오에서는 각 시스템에서 ID를 별도로 관리합니다 (OAuth와 같은 타사 ID 시스템이있을 수는 있지만이 시스템의 ID와는 별도 임).
따라서 여기서 위험의 핵심 포인트는 사용자가 여러 다른 시스템에 자신의 (같은) 암호를 기꺼이 입력한다는 것입니다. 이제 I (관리자) 또는 내 사이트의 다른 해커는 Aerma Erma의 암호에 액세스 할 수 있습니다. 핵 미사일 사이트.
흠.
여기에 당신에게 아무것도 보이지 않습니까?
그렇습니다.
핵 미사일 시스템을 보호하는 것이 나의 책임 이 아니라는 사실부터 시작 하겠습니다. 저는 단지 (가족을위한) 가족 가족 외출 장소를 짓고 있습니다. 누구의 책임입니까? 음 ... 핵 미사일 시스템은 어때요? 어.
둘째, 누군가의 암호 (보안 사이트와 보안되지 않은 사이트간에 동일한 암호를 반복적으로 사용하는 것으로 알려진 사람)를 훔치려는 경우 왜 사이트를 해킹하는 것이 귀찮습니까? 아니면 대칭 암호화로 어려움을 겪고 있습니까? Goshdarnitall, 난 그냥 내 자신의 간단한 웹 사이트를 올릴 수 있습니다 , 사용자가 원하는 무엇이든에 대해 아주 중요한 뉴스를 받도록 가입하게 ... Puffo Presto, 나는 그들의 "비밀을 훔쳤다".
그렇습니다. 사용자 교육은 항상 hienie에서 우리를 물기 위해 돌아옵니다.
그리고 당신이 할 수있는 일은 없습니다 ... 당신이 당신의 사이트에서 자신의 암호를 해시하고 TSA가 생각할 수있는 다른 모든 것을하더라도, 당신 은 그들이 지키려고한다면 , 당신의 암호를 보호 하지 못합니다. 실수로 모든 사이트에 암호를 입력하십시오. 귀찮게 노력하지 마십시오.
달리 말하면, 당신은 그들의 암호를 소유하지 않기 때문에 , 당신 처럼 행동하려고하지 마십시오.
그래서, 친애하는 보안 전문가들은 노파가 웬디에게 "위험은 어디에 있습니까?"
위에서 제기 한 일부 문제에 대한 또 다른 몇 가지 사항 :
- CWE는 법률이나 규정 또는 표준이 아닙니다. 일반적인 약점 의 모음입니다 . 즉 "모범 사례"의 반대입니다.
- 공유 된 정체성의 문제는 실제 문제이지만, 여기의 해설자들에 의해 오해 (또는 오해)됩니다. 가치가 낮은 시스템에서 암호를 해독하는 것이 아니라 ID 자체를 공유하는 문제 (!)입니다. 값이 낮은 시스템과 값이 큰 시스템간에 암호를 공유하는 경우 문제가 이미 있습니다!
- 결국, 이전의 요점은 실제로 이러한 저 가치 시스템과 고 가치 뱅킹 시스템 모두에 대해 OAuth 등을 사용하여 AGAINST 를 가리킬 것 입니다.
- 나는 그것이 단지 예일 뿐이라는 것을 알고 있지만 (슬프게도) FBI 시스템은 실제로 가장 안전하지는 않습니다. 고양이의 블로그 서버는 아니지만 더 안전한 은행을 능가하지는 않습니다.
- 암호화 키에 대한 분할 지식 또는 이중 제어는 군대에서만 발생하지 않습니다. 사실 PCI-DSS 는 기본적으로 모든 판매자로부터 이것을 요구 하므로 더 이상 실제로는 더 이상 멀지 않습니다 (값이 정당한 경우).
- 이와 같은 질문을하는 모든 사람들에게 개발자 직업이 그렇게 나쁘게 보이는 것입니다. 보안 직업이 더 나빠 보이게하는 것은 그와 같은 답변입니다. 다시 한 번, 비즈니스 중심 위험 분석이 필요합니다. 그렇지 않으면 자신을 쓸모 없게 만듭니다. 틀린 것 외에도.
- 나는 이것이 다르게 생각하고 올바른 절충점을 찾는 훈련없이 일반 개발자를 고용하고 더 많은 보안 책임을지는 것이 좋은 생각이 아닌 이유라고 생각합니다. 여기에있는 모든 사람들에게 불쾌감은 없습니다.하지만 더 많은 훈련이 필요합니다.
아휴. 얼마나 긴 글 ...
그러나 원래의 질문에 대답하기 위해 @Shane :
- 올바른 방법으로 고객에게 설명하십시오.
- 그가 여전히 주장한다면 좀 더 설명 해줘야한다고 주장한다. 필요하다면 울화통을 던져라.
- 그에게 사업 위험을 설명하십시오. 세부 사항은 양호하고 수치는 우수하며 라이브 데모가 가장 좋습니다.
- 그가 여전히 주장하고, 유효한 사업상의 이유를 제시한다면-당신이 판단 요청을 할 시간입니다 :
이 사이트는 가치가 낮습니까? 실제로 유효한 비즈니스 사례입니까? 당신에게 충분합니까? 유효한 비즈니스 이유보다 더 큰 다른 위험은 없습니까? (물론 클라이언트는 악의적 인 사이트가 아니지만 그로 인한 것입니다).
그렇다면 바로 진행하십시오. 필요한 프로세스를 제자리에 두는 노력, 마찰 및 사용 상실 (가설 상 상황)의 가치는 없습니다. 다른 모든 결정 (이 상황에서)은 나쁜 트레이드 오프입니다.
따라서 결론과 실제 답변-간단한 대칭 알고리즘으로 암호화하고 강력한 ACL, 바람직하게 DPAPI 등으로 암호화 키를 보호하고 문서화하고 클라이언트 (그러한 결정을 내릴 수있는 선임자)가 사인 오프하도록합니다. 그것.