IKeyHolderPlugin
Интерфейс IKeyHolderPlugin
является основным интерфейсом для плагинахранения ключей шифрования.
-
keyCallback
int keyCallback(StatusType* status, ICryptKeyCallback* callback)
используется для передачи интерфейса
ICryptKeyCallback
вподключение (если он предоставляется пользователем с вызовомIProvider::setDbCryptCallback()
). Этот вызов всегда выполняется в моментподключения к базе данных, и некоторые держатели ключа могут отклонитьподключение, если не был предоставлен удовлетворительный ключ. -
keyHandle
ICryptKeyCallback* keyHandle(StatusType* status, const char* keyName)
предназначен для непосредственного вызова интерфейсом
IDbCryptPlugin
для полученияинтерфейса обратного вызова для именованного ключа из держателя ключа.Это позволяет использовать код Firebird с открытым исходным кодом так,чтобы никогда не касаться фактических ключей, избегая возможности кражиключа, изменяющим код Firebird. После получения интерфейсаICryptKeyCallback
плагиншифрования запускает обмен данными, используя его. Держатель ключа может(например) проверить цифровую подпись плагина шифрования перед отправкойему ключа, чтобы избежать использования модифицированного плагинашифрования, способного украсть секретный ключ. -
useOnlyOwnKeys
FB_BOOLEAN useOnlyOwnKeys(StatusType* status)
информирует Firebird о том, будет ли использоваться ключ,предоставленный другим держателем ключа, или нет. Имеет смысл только дляSuperServer — только он может делиться ключами шифрования базы данныхмежду подключениями. Возвращая
FB_TRUE
из этого метода, принудительнозаставляет Firebird убедиться, что этот конкретный держатель ключа (и,следовательно, связанное с ним подключение) предоставляет правильныйключ шифрования, прежде чем позволить ему работать с базой данных. -
chainHandle
ICryptKeyCallback* chainHandle(StatusType* status)
поддержка цепочки держателей ключей. В некоторых случаях ключ долженпроходить через более чем один держатель ключа, прежде чем он достигнетплагина шифрования базы данных. Это необходимо (например) для поддержки
EXECUTE STATEMENT
в зашифрованной базе данных. Это всего лишь пример —цепочки также используются в некоторых других случаях. Интерфейсобратного вызова, возвращенный этим методом, может отличаться отвозвращаемого функциейkeyHandle()
(см. выше). Как правило, он должениметь возможность дублировать ключи один в один, полученные изIKeyHolderPlugin
при вызове функцииkeyCallback()
.