Одна из возможностей, которую следует рассмотреть, отделяет ключ, используемый для шифрования данных, от ключа, используемого для получения доступа к данным. Если все сделано аккуратно, это позволяет пользователю изменять свой пароль так часто, как он пожелает, в то время как вы изменяете только одну запись в базе данных. Отдельно вы можете запланировать изменение ключа (ов) шифрования своих данных, когда вам это удобно.
Как это работает?
- Вы шифруете данные 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 sub> из этих данных и используйте это для дешифрования 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, ключа шифрования ключа. Вы также можете прочитать в книге о ключевых семействах, которые помогут в управлении зашифрованными данными.
person
Jonathan Leffler
schedule
24.01.2012