2010-08-18 2 views
0

다른 서비스의 자격 증명을 가져와 사용자를 대신하여이를 폴링하는 웹 서비스를 구축하고 있습니다. 즉, 전자 메일 집계 서비스는 여러 전자 메일 공급자에서 계정을 폴링 한 후 단일 목록으로 대조합니다.디코딩 할 수있는 암호를 저장하기위한 인코딩은 무엇입니까?

이 시나리오에서 사용자가 제공 한 암호는 webapp에서 암호를 해독 할 수 있어야하므로 인증을 위해 다양한 서비스로 전달 될 수 있습니다.

이 암호는 어떻게 저장해야합니까?

저는 DB에 암호를 저장하는 것과 관련하여 다양한 게시물을 읽었습니다 (대답은 항상 '하지 않습니다'). 그러나이 경우에는 대안을 볼 수 없습니다. (비록 환영하지만 제안)

답변

0

여기서 분명히하자 : 서버가 일반 텍스트 비밀번호를 복구 할 수 있어야합니다. 키로

  • 암호화는 암호 :

    당신이 할 수있는 몇 가지를 생각해 보자. 구성 파일에 키를 저장하십시오.

  • 스마트 카드/블랙 박스로 암호를 암호화하십시오.
  • HTTPS 요청을 보내 다른 서버의 도움을 받아 암호를 암호화/암호 해독하십시오.
  • RAM의 키를 사용하여 키를 암호화하십시오. mlock()을 사용하여 디스크로 스왑되지 않도록합니다. 다시 시작하지 않아도되기를 바랍니다.

공격자가 루트를 가지고 있으면 (아무 것도 없음) 도움을 줄 수있는 것은 없습니다. 공격자가 전원을 차단하고 상자를 훔치는 경우 (RAM은 사용자가 원하는대로 비 휘발성이 아닌 경우) 대부분의 사용자가 도움을주지 않습니다.

방어하려는 공격은 무엇입니까? 어떤 공격을 무시하고 있습니까?

하나의 가능성은 사용자의 암호에서 파생 된 키 (예 : OSX의 키 체인 및 아무도 사용하지 않는 Windows의 동일한 암호 저장소)를 사용하여 암호를 암호화하는 것입니다. 사용자가 웹 서비스에 로그온하면 세션에서 키를 유지하거나 일회용 패드와 XOR하여 쿠키에 저장하고 사용자가 요청을 보낼 때만 키를 복구 할 수 있습니다. 이로 인해 최소한 데이터베이스 백업에서 사용자의 암호를 해독하는 것만큼이나 어려운 외부 암호를 훔칩니다. 하지만 다른 사람들에게 도움이되지는 않습니다.

관련 문제