2014-09-20 5 views
0

나는 암호화 된 일부 데이터를 저장하고 키는 PBKDF2를 사용하여 사용자의 암호 (해싱 및 소금 처리 후)를 기반으로 생성됩니다.PBKDF2의 비밀번호 재설정

이전 비밀번호로 데이터를 해독 한 다음 새 비밀번호로 데이터를 다시 암호화하기 만하면 비밀번호 변경 요청을 구현할 수 있습니다.

그러나 사용자가 비밀번호를 잊어 버렸을 때 비밀번호 재설정을 구현하려면 어떻게해야합니까? 이 유스 케이스를 지원하기 위해 사물을 다르게 저장해야합니까? 그렇다면 어떻게?

+0

Uhhhhmmmmm. 암호를 해시하는 대신 암호를 암호화하는 이유는 무엇입니까? – PeeHaa

+0

죄송합니다, 내가 암호를 암호화하고 있지 않다는 사실을 분명히하자. 사실 해싱 + 해시를하고있다. 하지만 PBKDF2의 입력으로 사용하고 거기에서 데이터의 일부를 암호화합니다. – gzak

답변

1

단순히 다음 새 암호로 데이터를 reencrypting, 이전 암호와 데이터를 를 해독하여 암호 변경 요청을 구현할 수 있습니다.

그러나 비밀번호 재설정을 구현하려면 어떻게해야합니까? 은 비밀번호를 잊어 버렸습니까? 이 사례를 과 다르게 저장해야합니까? 그렇다면 어떻게?

일반적으로 콘텐츠 암호화 키 또는 CEK를 사용합니다. CEK는 무작위 키이며 파일을 보호하는 암호화 및 MAC를 차단하는 데 사용합니다. 각 파일은 고유 한 CEK 및 기타 암호화 매개 변수 (예 : IV 또는 NONCE)를 가져옵니다.

그런 다음 키 암호화 키 또는 KEK를 사용합니다. 당신의 경우, KEK는 PBKDF의 결과물입니다. KEK는 CEK를 암호화합니다.

복구의 경우 복구 키를 만듭니다. 그런 다음 복구 키 아래에서 CEK를 다시 암호화하고 암호화 된 CEK를 안전한 곳에 옮깁니다.

암호를 변경해야하는 경우 새로운 PBKDF 파생에 따라 CEK를 다시 암호화하면됩니다. 안전한 곳에서 복구 키를 뒤죽박죽 할 필요가 없습니다. (또는 정부가 아무런 감독도하지 않고 NSLs을 발급하는 정부와 마찬가지로 안전 할 수 있음).