Одна возможность рассмотреть возможность разъединения ключа, используемого для шифрования данных, с ключом, используемым для получения доступа к данным. Сделано аккуратно, это позволяет пользователю менять свой пароль так часто, как он пожелает, а вы можете изменить только одну запись в базе данных. Отдельно вы можете запланировать изменения ключей (ключей), шифрующих их данные, когда вам это удобно.
Как это работает?
- Вы шифруете данные D для пользователя U с помощью случайно сгенерированного ключа, K U, D .
- Вы шифруете ключ K U, D отдельным ключом K1 U, K , сгенерированным из случайной соли, S1 U (которую вы сохраняете запись) и пароль пользователя P1 U (который вы можете или не можете отслеживать). Зашифрованный ключ E1 U .
- Вы храните S1 U и K1 U, K , готовые к тому времени, когда пользователь захочет получить доступ к своим данным.
- Когда пользователь U хочет получить доступ к своим данным, он предоставляет вам свой пароль P1 U , и вы ищите S1 U и регенерируете K1 U, K из этих данных и используйте их для расшифровки E1 U , что даст вам K U, D еще раз, с помощью которого вы расшифруете их фактические данные.
- Вы гарантируете, что можете определить, когда введен правильный пароль, поэтому вы не выкидываете бинарный трюк, если пользователь вводит неправильный пароль.
Преимущество такого уровня косвенности наступает, когда пользователь хочет изменить свой пароль. Если вы не используете какой-либо метод, аналогичный этому, вам придется получить и проверить старый пароль и новый пароль, расшифровать все данные с помощью старого пароля и заново зашифровать все с новым паролем.
При уровне косвенности вы по-прежнему запрашиваете у пользователя старый пароль (P1 U ) и новый пароль (P2 U ) и подтверждаете его, но у вас есть только расшифровать E1 U , а затем повторно зашифровать его с помощью нового ключа K2 U, K , сгенерированного из новой соли S2 U и нового пароля P2 U . Вам вообще не нужно трогать зашифрованные данные.
При уровне косвенности система S также может хранить вторую зашифрованную копию ключа данных K U, D , зашифрованную с помощью пароля системы. Если становится необходимым или желательным изменить ключ, используемый для шифрования данных, система может использовать для этого свою зашифрованную копию ключа. Он может хранить запись о том, какой ключ был последний раз записан пользователем в его ключе, поэтому, когда пользователь возвращается, чтобы посмотреть на данные, он может организовать изменение сохраненного ключа K2 U, D , потому что при в этот раз у него есть пароль (в остальное время его нет).
Это мягкая вариация некоторых идей из " Криптография в базе данных: последняя линия защиты " Кевина Кенана. Ключи Kn U, K являются примерами ключа шифрования ключа KEK. Вы также можете прочитать о ключевых семействах в книге, которые помогут в управлении зашифрованными данными.