문제

Twitter 클라이언트를 만들고 있으며 사용자의 로그인 정보를 보호하는 다양한 방법을 평가하고 있습니다.

중요 : 다른 응용 프로그램으로부터 사용자의 데이터를 보호해야합니다. 예를 들어, 봇이 사용자의 데스크탑에서 실행되는 응용 프로그램에서 Twhirl 암호 또는 Hotmail/Gmail/Yahoo/PayPal을 훔치기 시작하면 어떻게되는지 상상해보십시오.

설명 : 나는 '중요한'부분없이 전에 이것을 물었지만 stackoverflow의 UI는 Q/A 대화 내부에서 나중에 세부 사항을 추가하는 데 도움이되지 않습니다.

  • 해싱은 분명히 그것을하지 않습니다
  • 뒤집을 수있는 방식으로 난독 화하는 것은 내 손가락 뒤에 숨기려고하는 것과 같습니다.
  • 평범한 텍스트 소리는 무차별 적입니다
  • 사용자가 매번 자신의 비밀번호를 입력하도록 요구하면 응용 프로그램이 피곤해집니다.

어떤 아이디어?

도움이 되었습니까?

해결책

이것은 캐치 -22입니다. 사용자가 매번 그의 비밀번호로 사용자 유형을 만들거나 불안하게 저장하십시오 (난독 화, 암호화, 무엇이든).

이를 해결하는 방법은 더 많은 운영 체제가 OS X의 키 체인과 같은 내장 암호 관리자를 통합하는 것입니다. 이렇게하면 비밀번호를 키 체인에 저장하면 OS는 보안을 유지하며 사용자는 1 마스터 비밀번호 만 입력해야합니다. OS X의 많은 응용 프로그램 (Skype와 같은)은 Keychain을 사용하여 설명하는 것을 정확하게 수행합니다.

그러나 당신은 아마도 Windows를 사용하고 있기 때문에 난독 화와 암호화를 가지고 갈 것입니다. 나는 당신이 암호 스테이블 봇에 대해 약간 편집증 일 수 있다고 생각합니다. 응용 프로그램에 사용자 기반이 크지 않으면 누군가가 대상을 목표로하고 구체적으로 암호를 훔치려 고 할 확률이 매우 낮습니다. 그 외에도 피해자의 파일 시스템에 액세스해야합니다. 이 경우 바이러스/웜이 있고 더 큰 문제가있을 수 있습니다.

다른 팁

나는 당신이 여기서 더 큰 그림을 놓치고 있다고 생각합니다.

데스크탑이 손상되면 F#*%ed!

프로그램에서 암호를 훔치려면 바이러스가 관리자로 시스템에서 실행되어야합니다. 바이러스가 달성 한 경우, 프로그램에서 암호를 훔치는 것은 악의적 인 일의 목록에 있습니다.

일반 텍스트로 저장하십시오 사용자에게 알리십시오.

그렇게하면 어떤 수준의 보안을 달성했는지에 대한 오해가 없습니다. 사용자가 불만을 시작하면 고려하다 xor'ing on on-your-website 상수에 일정합니다. 사용자가 계속 불만을 제기하면 코드의 상수를 "숨기고"보안이 좋지 않다고 말합니다.

사용자가 나쁜 사람을 상자 밖으로 유지할 수 없다면 사실상 그들이 가진 모든 비밀 데이터는 Dr. Evil에게 알려져 있습니다. 암호화 여부는 중요하지 않습니다. 그리고 그들이 사악한 사람들을 막을 수 있다면, 왜 비밀번호를 평범한 텍스트로 저장하는 것에 대해 걱정합니까?

물론 여기서 내 엉덩이를 말할 수있었습니다. 비밀번호를 평범한 텍스트로 저장하면 난독 화 된 저장보다 보안이 악화된다는 연구가 있습니까?

트위터 클라이언트를 만드는 경우 API를 사용하십시오.

트위터는 아주 좋습니다 선적 서류 비치, 그래서 나는 당신이 고객을 만들기 전에 모든 것을 읽는 것이 좋습니다. 이 질문과 관련하여 가장 중요한 부분은 비밀번호를 저장할 필요가 없다는 것입니다. OAUTH 대신 토큰. 당신은 그것을 사용해야합니다 Xauth 무대 Oauth 토큰을 얻은 다음 필요한 경우이 Oauth 토큰과 함께 다른 Twitter API를 사용하십시오.

Xauth는 데스크탑 및 모바일 애플리케이션이 OAUTH 액세스 토큰의 사용자 이름과 비밀번호를 교환 할 수있는 방법을 제공합니다. 액세스 토큰이 검색되면 Xauth 지원 개발자는 사용자에 해당하는 로그인 및 비밀번호를 처리해야합니다.

비밀번호를 저장할 수 있다면 절대 저장하지 않습니다.

Oauth를 사용하면 최악의 상황이 발생할 수 있습니다. 입장 그 트위터 계정에는 그렇지 않습니다 비밀번호. 이렇게하면 여러 온라인 서비스에 동일한 비밀번호를 순진하게 사용하는 사용자를 보호합니다.

어떤 종류의 키 체인을 사용하십시오

마지막으로 OSX 키 체인과 같은 사전 제작 된 솔루션을 사용하여 민감한 OAUTH 정보를 저장해야한다는 데 동의하며, 손상된 기계는 현재 잠금 해제 된 키 체인의 정보 만 드러납니다. 이는 다중 사용자 시스템에서 로그인 한 사용자 만 키 체인이 취약해진다는 것을 의미합니다.

다른 손상 제한

내가 놓친 것들이 "최고의 보안 관행"을 위해 Google을 가져 와서 관련된 것을 읽기 시작할 수 있습니다.

편집하다 (FINNW가 원하는 일반 사례 솔루션에 대한 응답으로)

사용자 입력이 없으면 온라인 서비스에 대한 액세스를 원합니다. 이는 일반적으로 Keychain과 같은 것을 통해 인증 자격 증명에 대한 사용자 수준 액세스 제어를 갖는 것을 의미합니다.

나는 OSX Keychain을 사용한 적이 없으므로 이제 Selinux에 대해 이야기하겠습니다. Selinux에서는 이러한 인증 자격 증명이 프로그램에만 제공 될 수 있습니다. 또한 OS 레벨 작업을 계속하면 부팅에서 암호화 적으로 모든 프로세스에 서명 할 수 있습니다. 다른 프로그램이 프로그램을 모방 할 수는 없습니다. 이것은 모두 일반적인 사용자 시스템을 넘어서서이 수준의 설정을 주어 주면 사용자가 타협 할만 큼 순진하지 않거나 Sysadmin이 충분히 구성되어 있음을 확신 할 수 있습니다. 이 수준에서 우리는 해당 자격 증명을 보호 할 수 있습니다.

우리가 그러한 자격 증명을 보호하기 위해 그렇게 멀지 않다고 가정하면 시스템이 손상되었다고 가정 할 수 있습니다. 이 시점에서 인증 자격 증명이 손상되어 지역 측에서 이러한 자격 증명의 난독 화/암호화는 실제 보안을 추가하지 않으며 제 3 자 서버에 일부 또는 전부를 저장하지 않습니다. 사용자 입력이 주어지면 프로그램이 해당 자격 증명을 얻기 위해 스스로 부트 스트랩을해야하기 때문에 쉽게 볼 수 있습니다. 프로그램이 입력없이 수행 할 수있는 경우, 난독 화/암호화/서버 프로토콜을 반전시킨 사람은 누구나 도입 할 수 있습니다.

이 시점에서 손상 제한이므로 암호를 인증 자격 증명으로 저장하지 마십시오. Oauth, 쿠키 세션, 소금에 절인 해시 등을 사용하십시오. 과거의 어느 시점에서 당신이 비밀번호를 알고 있음을 증명했음을 나타내는 토큰 일뿐입니다. 모든 좋은 시스템에서 이러한 토큰은 활성 세션 동안 새로운 토큰으로 시간 만료 및/또는 정기적으로 교환 될 수 있습니다.

토큰 (어떤 형태 가든)에는 다른 곳에서 사용할 수있는 능력을 제한하는 추가 비 사용자 입력 인증 정보가 포함될 수 있습니다. 예를 들어 호스트 이름 및/또는 IP 주소를 캡슐화 할 수 있습니다. 이를 통해 이러한 형태의 자격 증명을 모방하려면 적절한 수준의 네트워크 인프라에 액세스해야하기 때문에 다른 시스템의 자격 증명을 사용하기가 어렵습니다.

더 많은 묵상에 나는 길을 찾았다 고 생각합니다. 응용 프로그램 데스크톱 응용 프로그램에 ASP.NET 인증을 사용하고 온라인으로 자격 증명을 저장하고 Internet Explorer의 암호 관리자 가이 보조 쌍 또는 자격 증명의 로컬 캐싱을 처리하도록합니다.

첫 번째 로그인 중에 Facebook-Api와 같은 양식을 통해 인증해야합니다.

나는 그것을 얻지 못합니다 ... 왜 암호화가 좋지 않습니까? 큰 키를 사용하고 키를 Machine Key Store (Windows를 가정)에 저장하십시오. 완료되고 완료되었습니다.

OSX : 키 체인을 사용하십시오

Windows : CryptProtectData 및 CryptunProtectData를 사용합니다

Linux : Gnome Keyring과 Kde Kwallet을 사용하십시오

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