2009-11-03 6 views
1

"일반 텍스트 사용자의 비밀번호를 저장하는 것이 안전한가요?"라는 일반적인 질문이 아닙니다. 아니요, 안전하지 않습니다. 우리 모두 알고 있습니다.다른 시스템에 대한 인증을위한 비밀번호 저장

일부 작업을 수행하기 위해 외부 시스템에 대해 인증해야하는 작은 응용 프로그램을 작성하고 있으며 사용 가능한 유일한 인증 방법은 사용자 이름과 암호를 사용하는 것입니다. 그것은 인간을위한 것이며, 변경할 수 없습니다.

내 응용 프로그램에 액세스 할 수있는 사용자가 여러 명 있으며 개별적으로 인증되어 있지만 모두 외부 시스템과 동일한 인증 데이터를 "공유"합니다. 이상적으로는 응용 프로그램이 투명하게 관리합니다.

"멍청한"해결책은 일반 텍스트로 사용자 이름/암호를 저장하고 인증을 위해 사용하는 것이지만 분명히 안전하지는 않습니다. 암호는 암호화 될 수 있지만 누군가가 시스템에 침입하면 어떨까요?

가능한 해결책 : DPAPI를 사용하여 암호 (심지어 사용자 이름)를 투명하게 암호화/암호 해독하십시오. 이것은 좋은 생각입니까? 이거 안전한가요? 여러 대의 컴퓨터가있는 설정은 어떻습니까? (컴퓨터간에 암호화가 호환됩니까?)

추가 제안 사항이 있으십니까?

+0

DPAPI 아마도 당신의 가장 좋은 가능성 일 것입니다. 그래도 웹 팜에 대해 무슨 뜻인지 이해하지 못합니다. –

+0

이것이 정확히 찾고자하는 것이 확실하지 않지만 DBM과 같은 해싱 솔루션은 무엇입니까? 저장을 위해 사용자의 암호를 해시하고 인증 할 때 암호를 해시하고 기존 해시와 비교합니다. 이것은 암호를 저장하는 데 일반적으로 사용되는 방법입니다. P. - 원하는 보안 수준에 따라 무지개 식 공격을 피하기 위해 해시 염색을 권장합니다. 오랫동안 무염 해시로 사용자 암호를 저장하는 방법에 대한 기사는 "2600"의 최신 문제를 참조하십시오. –

+0

@Bob : 요청한 것이 아닙니다! 그는 외부 시스템으로 암호를 전송하기 때문에 암호를 사용할 수 있어야합니다. 그는 다른 사람을 인증하고 자신의 시스템에 인증하지 않습니다. –

답변

2

DPAPI는 일반적으로 웹 팜에서 사용할 수 없습니다. 키 저장소는 시스템에 따라 다릅니다. 다른 사용자가 다른 자격 증명 세트를 공유하는 동안 특정 사용자가 하나의 자격 증명 세트를 공유하는지 여부는 지정하지 않았습니다. 모든 사용자가 동일한 자격 증명 집합을 공유하는 경우 web.config에 저장하고 함께 완료합니다. web.config 파일에서 구성 암호화 API 또는 간단한 ACL을 사용하여 자격 증명을 보호합니다.

다른 사용자가 제 3 자 시스템 자격 증명이 다른 경우 사용자의 암호 해시와 소금을 암호화 키로 사용하여 자격 증명을 사용자에게 저장합니다. 그런 다음 악의적 인 사용자가 데이터베이스를 가져 오더라도 타사 암호를 해킹하기 전에 먼저 사용자의 암호를 해독 할 수 있어야합니다. 소금은 추가로 어려움을 겪습니다.

+0

add-user 스크립트는 물론 신임 정보를 알아야합니다. – Will

+0

사용자 암호 해시 (소금 포함)로 암호화 할 때의 문제점은 다른 사용자의 암호가 필요하므로 설정 한 후 새 사용자를 추가하기 어렵다는 것입니다 (예 : 사용자를 추가하는 관리자). 또한 사용자가 자신의 암호를 변경하면 외부 시스템 자격 증명의 "사본"을 다시 암호화해야합니다. 비록 약간 뒤죽박죽이긴하지만 실용적인 해결책이 될 수 있습니다. –

+0

@Dario 복잡한 점을 잘 모르겠습니다. OP를 감안할 때, 나는 초기 계정을 설정 한 후 (또는 처음 액세스 한 후) 사용자가 제 3의 자격 증명을 제공했다고 생각했습니다. 그 시점에서 이미 사용자의 암호가 해시 형태로 제공 될 수 있다고 가정하면 해시 + 소금을 사용하여 사용자가 제공 한 자격 증명을 암호화하는 것은 간단합니다. 예, 사용자가 기본 암호를 변경할 때마다 자격 증명을 다시 암호화해야하지만 이는 거의 드문 일이 아닙니다. – Chris

1

DPAPI 키는 사용자 수준입니다. 각 사용자에 대해 자격 증명 집합의 별도 복사본을 설정하고 저장하지 않는 한 DPAPI는 사용자에게 도움이되지 않습니다. 이 작업을 수행하는 유일한 방법은 DPAPI 키로 암호화 된 해당 사용자의 HKCU 하이브에 저장된 보호 된 데이터로 Windows 서비스를 일부 사용자로 실행하는 "신뢰할 수있는 하위 시스템"모델을 사용하는 것입니다. 사용자를 대신하여 인증을 요구하는 시스템에 대한 모든 작업을 수행하며 사용자 이름/암호는 사용자 프로세스에로드되지 않습니다. 심지어 사용자가 관리자 인 경우에도 서비스 프로세스를 디버깅하여 기술적으로 여전히 사용자 이름/암호를 확인할 수 있습니다.

정말 안전한 방법은 동일한 일을하는 것이지만 원격 사용자는 Windows 자격 증명을 사용하여 사용자를 대신하여 사용자를 대신하여 작업을 수행하는 원격 서버에 사용자를 인증합니다. 실제로 사용자 이름/비밀번호가 얼마나 안전해야하는지에 달려 있습니다.

1

외부 시스템에 로그인 할 때 일반 텍스트 사용자 이름과 암호를 사용할 수 있어야합니다. 이 파일을 직접 해독하고 암호화 한 다음 응용 프로그램에서 키를 어둡게 할 수 있습니다.

운영체제 (예 : Windows)는 파일을 보호하는 방법을 제공하며 경험이 풍부한 전문가가 구현할 가능성이 높습니다. 시간을 투자하여 시간을 투자하는 것이 좋습니다.

최상의 방법은 일반 텍스트로 자격 증명을 저장하고 운영 체제를 사용하여 파일을 보호하는 것입니다.

    웹 서버 그래서 단지 그것을에서 어떻게 기계/서비스 '에 로그온'에
  • 전체 디스크 암호화를 데이터에

고려를 얻을 수 있습니다 자신의 사용자로 실행

  • 암호화 된 홈 디렉토리 이것이 무인을위한 것이라면 시작을해야합니다.

    질문 자체는 보안 책임의 한계가 있으므로이 점에 대해 고심 할 필요가 없습니다.

    • 그것은 그것은 실행중인 머신과 물리적 장비에 액세스 할 수있는 전용 공격자를 유지하지 않습니다
    • (모든 FireWire와 USB 장치에서 냉각수 공격에 서버에 터미널에 도착 유휴 동료를 유지합니다 기본적으로 방어가 불가능합니다.
    • 서버와 로그인하는 다른 시스템 사이에서 기밀로 공격되는 이러한 자격 증명을 중지하지 않습니다. http- 다이제스트 인증 ...