2017-09-05 11 views
0

Google 인증 웹 사이트에서 2FA를 구현하려고합니다. 내가 올바르게 이해한다면 모든 사용자는 자신의 비밀 코드를 갖게 될 것입니다. 로그인시 6 자리 코드를 검증해야합니다.저장을 위해 2FA 비밀 코드를 해시해야합니까?

사용자 암호와 동일한 데이터베이스에 이러한 비밀 코드를 저장하는 것은 좋지 않은 생각입니다 (누군가가 데이터베이스를 보유하고 있지만 더 큰 문제가 있음에도 불구하고). 아니면 그들은 단지 암호처럼 취급되고 암호화되어야합니까?

답변

2

Google Authenticator의 TOTP 코드를 생성하는 데 사용 된 비밀번호를 해시 할 수 없으므로 코드를 실제로 생성하려면 원래 비밀번호가 필요합니다.

누군가가 당신의 데이터베이스를 가지고 있다면 당신은 어쨌든 더 큰 문제에 처하게됩니다. 그러나 이것이 2 팩터 인증이 작동하는 방법입니다. 암호가 실제로 해시되고 공격자가 TOTP 암호 만 가지고 있으면 로그인에 필요한 2 가지 요소 중 1 가지를 생성하고 암호를 깨거나 훔치기 위해 더 많은 작업을 수행 할 수 있습니다.

사용자에게 이러한 비밀 정보를 저장하는 것에 대해 걱정하지 않고 제 3자가 처리하도록하면 Twilio's Two Factor Authentication API을 살펴볼 수 있습니다. 전체 공개, 나는 Twilio에서 일하지만, 당신이 해쉬 할 수없는 비밀을 돌보는 것에 대해 걱정하지 않으려는 경우뿐만 아니라 Authy app (QR 코드없이 비밀 전송 포함)과 extra device data that is now available with authentications 그 때 그것은 관심사일지도 모르다.

0

필자는 이러한 두 가지 요소 코드가 긴밀히 제한되어 있기를 바랍니다 (예 : 5 분). 제 생각에는 충분한 완화입니다. 예를 들어, 데이터베이스를 가져 오는 해커는 액세스 한 후 매우 짧은 시간 동안 만 코드를 사용할 수 있습니다. 솔직히, 그가 암호 해시를하지 않는다고 가정 할 때 (암호 해시 the wrong way을 가정 할 때) 그가 어떤 사용자의 첫 번째 요소 (암호)를 얻지는 않을 것입니다. 따라서 두 번째 요소는이 시나리오에서 작동하지 않습니다. 그들은 시간 제한하지 않은 경우

, 당신은 당신의 자신의 타임 아웃을 구현하는 것을 고려해야보다는한다

(이 인수는 6 자리 코드에 대한 무력 검색 공간이 매우 작은 점과 무관) 값을 해싱합니다. 해싱은 수명이 긴 데이터에 더 좋습니다.