IKeyHolderPlugin
Интерфейс IKeyHolderPlugin является основным интерфейсом для плагинахранения ключей шифрования.
-
keyCallback
int keyCallback(StatusType* status, ICryptKeyCallback* callback)используется для передачи интерфейса
ICryptKeyCallbackвподключение (если он предоставляется пользователем с вызовомIProvider::setDbCryptCallback()). Этот вызов всегда выполняется в моментподключения к базе данных, и некоторые держатели ключа могут отклонитьподключение, если не был предоставлен удовлетворительный ключ. -
keyHandleICryptKeyCallback* 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().