2012-09-18 1 views
10

데이터베이스가 손상되어 수명이 긴 액세스 토큰을 도난 당하지 않도록하기 위해 어떤 보안 대책을 마련해야합니까?액세스 토큰 안전하게 저장

긴 수명 액세스 토큰은 특정 서비스의 사용자 이름과 암호만큼 좋지만 다른 사람과 이야기하는 것에서는 액세스 토큰을 일반 텍스트로 저장하는 것처럼 보입니다. 이것은 일반 텍스트로 암호를 저장하는 것만 큼 나쁠 것 같습니다. 분명히 사람은 & 토큰을 해시 할 수 없습니다.

이상적으로는 암호화하고 싶지만, 특히 오픈 소스 프로젝트에서이를 수행하는 가장 좋은 방법은 확실하지 않습니다.

이 질문에 대한 답변이 지불 정보 및 PCI 준수를 저장하는 것과 비슷하다고 생각합니다. 그러나 이에 대한 더 이상의 토론이없는 이유를 묻습니다. 아마 나는 뭔가를 놓치고있다.

+0

"특히 오픈 소스 프로젝트에서"라는 의미는 무엇입니까? 프로젝트가 폐쇄 된 소스가 아니기 때문에 특정 유형의 암호화 체계와 함께 갈 결심을하게 된 것은 무엇입니까? –

답변

7

타인이 제공 한 토큰 만 확인 하시겠습니까? 그렇다면 암호로 취급하십시오. 10,000 회 반복으로 Password Based Key Derivation Function 2 (PBKDF2) (RFC 2898에 설명되어 있음)과 같은 바이트 유도 알고리즘을 사용하고 처음 20 바이트 정도를 저장하십시오. 토큰이 수신되면. 그것은 사실상 되돌릴 수 없습니다.

인증을 위해 다른 사용자에게 토큰을 제공 하시겠습니까? 그렇다면 응용 프로그램이 토큰을 해독하거나 액세스 할 수있는 경우 토큰에 액세스 할 수 있으므로 공격자가이를 수행 할 수 있으므로 문제가됩니다. Shannon의 Maxim을 생각해보십시오. 공격자는 특히 오픈 소스 프로젝트에서이 시스템을 알고 있습니다.

이 경우 가장 좋은 방법은 강력한 알고리즘 (예 : AES256)을 사용하여 토큰을 암호화하고 강력한 암호화 표준 난수 생성기를 사용하여 키를 생성 한 다음 키를 데이터의 다른 위치에 안전하게 저장하는 것입니다 위의 예에서 데이터베이스 외부의 권한이 보호 된 파일에서와 같이. 후자는 SQL 주입 공격이 키를 노출하지 않는다는 것을 의미합니다.

+0

감사합니다. 나중에 사용자가 없을 때 토큰을 사용할 수 있어야하는 후자의 사례를 더 자세히 설명합니다. –

+0

@akton 그러나 토큰을 암호처럼 취급하는 이유는 무엇입니까? (일반 텍스트) 암호는 공격자가 동일한 암호로 다른 서비스에 로그인하려고 시도 할 수있는 정보를 얻지 못하도록하려는 정보입니다. 하지만 토큰은 자신의 서비스에만 유효합니다. 따라서 공격자가 토큰/db에 손을 대면 토큰을 사용하여 계정에 로그인하는 것보다 더 많은 해를 끼칠 수 있습니다 ... 내가 볼 수없는 것은 무엇입니까? ? – pkyeck

+0

질문이 정확하다고 가정하면 토큰은 사용자를 인증 할 수있는 사용자 별, 수명이 긴 증거입니다. 즉, 그것은 암호입니다. – akton