Содержание


Я зашифровал свою базу данных! Как мне теперь управлять мастер-ключами?

Учебное пособие по управлению хранилищами ключей PKCS12

Comments

Что такое нативное шифрование DB2

Нативное шифрование DB2 позволяет шифровать пользовательские данные, находящиеся в состоянии покоя на сервере баз данных DB2. Это простое в реализации усовершенствование не оказывает влияния на существующие приложения и на схему базы данных. На следующем рисунке показан сервер DB2, использующий нативное шифрование DB2 для шифрования данных и резервных копий.

Рисунок 1. Двухуровневая модель шифрования
Image shows DB2 server that uses DB2 native encryption
Image shows DB2 server that uses DB2 native encryption

IBM Global Security Kit (GSKit) – это компонент, с помощью которого продукт DB2 for Linux, UNIX, and Windows (а также другие продукты IBM) поддерживает свои криптографические возможности, сертифицированные на соответствие стандарту FIPS 140-2s. Дополнительная информация приведена в разделе Местоположение библиотек GSKit.

Начиная с версии GSKit 8.0.50.10, в хранилище PKCS#12 можно хранить мастер-ключи. До этой версии поддерживалось только хранение сертификатов. Компонент GSKit включается при установке сервера баз данных DB2. Это учебное пособие посвящено хранению мастер-ключей в хранилище ключей, соответствующем стандарту PKCS#12.

Настройка среды DB2 для нативного шифрования DB2

Прежде чем приступить к использованию нативного шифрования DB2, убедитесь в том, вы указали правильный маршрут к библиотекам GSKit и что вы используете надлежащую версию инструмента GSKCapiCmd.

Местоположение библиотек GSKit

Библиотеки GSKit устанавливаются на сервере DB2 автоматически в процессе установки программного обеспечения DB2. Убедитесь в том, что маршрут к библиотекам GSKit добавлен в переменную среды операционной системы. В следующей таблице показаны корректные настройки переменной среды для различных операционных систем.

Операционная системаПеременные средыМаршрут к библиотекам GSKit
32-разрядные версии Linux и UNIX LD_LIBRARY_PATH, LIBPATH или SHLIB_PATH
  • $INSTHOME/sqllib/lib32/gskit
64-разрядные версии Linux и UNIX LD_LIBRARY_PATH, LIBPATH или SHLIB_PATH
  • $INSTHOME/sqllib/lib64/gskit
32-разрядная версия Windows PATH
  • C:\Program Files \IBM\gsk8\lib
64-разрядная версия Windows PATH
  • 64-разрядные версии библиотек GSKit:
    C:\Program Files\IBM\gsk8\lib64
  • 32-разрядные версии библиотек GSKit:
    C:\Program Files (x86)\IBM\gsk8\lib

Местоположение инструмента GSKCapiCmd

Инструмент командной строки GSKit можно использовать для управления мастер-ключами и хранилищами ключей. Этот инструмент устанавливается автоматически вместе с программным обеспечением DB2. В следующей таблице приведены каталоги, в которых находится инструмент GSKCapiCmd в случае его установки на сервере DB2.

Операционная системаМестоположение
32-разрядные версии Linux и UNIX
  • $INSTHOME/sqllib/gskit/bin/gsk8capicmd
64-разрядные версии Linux и UNIX
  • $INSTHOME/sqllib/gskit/bin/gsk8capicmd_64
32-разрядная версия Windows
  • C:\Program Files\IBM\gsk8\bin\gsk8capicmd.exe
64-разрядная версия Windows
  • 64-разрядные версии исполняемых файлов инструмента 64-bit GSKCapiCmd:
    C:\Program Files\IBM\gsk8\bin\gsk8capicmd_64.exe
  • 32-разрядные версии исполняемых файлов инструмента 64-bit GSKCapiCmd: C:\Program Files(x86)\IBM\gsk8\bin\gsk8capicmd.exe

Проверка версии инструмента GSKCapiCmd

Убедитесь в том, что вы используете такую же версию инструмента GSKit, как на своем сервере DB2, для чего проверьте местоположение и версию этого инструмента. Если на вашем сервере DB2 установлено несколько продуктов IBM, у вас может оказаться несколько копий этого инструментаl.

Для проверки используемой версии библиотек GSKit выполните следующую команду:

gsk8capicmd_64 -version

Для проверки используемой версии библиотек GSKit выполните следующую команду:

gsk8ver_64

В 32-разрядной среде вместо вышеуказанных команд используйте команды gsk8capicmd и gsk8ver.

Хранилище ключей PKCS#12

Хранилище ключей PKCS#12 – это локальный файл, в котором хранятся мастер-ключи шифрования, а также сертификаты. В пакете DB2 10.5 Fix Pack 5 нативное шифрование DB2 поддерживают только хранилища ключей типа PKCS12.

Хранилище ключей всегда зашифровано с помощью пароля, задаваемого при создании этого хранилища. За этот пароль отвечает создатель хранилища ключей. Вы должны защищать и оберегать этот пароль для последующего использования.

Этот пароль требуется при любом обращении к хранилищу ключей. Пароль можно задать в инструменте GSKCapiCmd с помощью опции –pw. Пароль также можно задать при запуске экземпляра DB2 с помощью опции open keystore в команде db2start.

Выбор местоположения для хранилища ключей

Выбирайте каталог не на том физическом устройстве, на котором хранятся файлы контейнера табличного пространства и файлы резервных копий. Это предотвратит доступ к хранилищу ключей в случае, если диск, содержащий файлы контейнера табличного пространства, будет потерян или украден.

Мы рекомендуем использовать каталог в личном каталоге владельца экземпляра. Не следует использовать каталог экземпляра (/sqllib), поскольку он может быть перезаписан в ходе обновления. В средах с секционированными базами данных или в средах DB2 pureScale® хранилище ключей должно находиться в общем местоположении, доступном всем членам.

Принятие решения: ввод пароля или использование stash-файла

В дополнение к ручному вводу пароля для получения доступа к хранилищу ключей, вы можете для облегчения доступа хранить обфусцированную — а не зашифрованную — копию пароля в stash-файле. Такую копию можно создать в процессе создания хранилища ключей или сгенерировать после создания хранилища ключей. Имя stash-файла совпадает с именем файла хранилища ключей, но имеет расширение sth (файл хранилища ключей имеет расширение p12). Опция -stashed в инструменте GSKCapiCmd позволяет использовать stash-файл вместо ввода пароля.

Использование пароля вместо stash-файла более безопасно. Пароль, хранящийся в stash-файле, может быть уязвим для атак. Однако необходимость указания пароля для каждой операции накладывает дополнительную нагрузку на создателя хранилища ключей, поскольку он должен присутствовать в каждой ситуации, когда требуется пароль. В качестве примера рассмотрим предоставление пароля с помощью команды db2start. Если сервер баз данных прекращает работать, создатель хранилища ключей должен быть доступен, чтобы предоставить пароль и восстановить доступ к зашифрованной базе данных. Вам необходимо найти компромисс между безопасностью и удобством пользования и выбрать для своей среды DB2 наиболее подходящий вариант.

Если вы используете stash-файл, обращайтесь с этим файлом с таким же уровнем безопасности, как для хранилища ключей. Не забывайте, что наличие доступа к stash-файлу разрешает доступ к хранилищу ключей.

Создание хранилища ключей PKCS#12

Чтобы владеть хранилищем ключей и сопровождать его, владелец экземпляра DB2 должен сначала создать это хранилище. Чтобы создать хранилище ключей, войдите в систему в качестве владельца экземпляра и вызовите инструмент GSKCapiCmd со следующими опциями.

gsk8capicmd_64 -keydb -create -db <name> [-pw <passwd>] [-type <pkcs12|p12>] [-stash][-strong] [-empty | -populate] [-f]

В следующей таблице приведены краткие описания опций для создания хранилища ключей.

Таблица 1. Опции командной строки для создания хранилища ключей

Имя опции

Описание

-stash

Создает stash-файл со скрытым в нем паролем.

-strong

Требует, чтобы указанный пароль был сильным паролем, удовлетворяющим следующим требованиям.

  • Длина пароля должна составлять не менее 14 символов.
  • Пароль должен иметь не менее одного символа в нижнем регистре, одного символа в верхнем регистре и одной цифры или одного специального символа (такого как *$#%). Пробел классифицируется как специальный символ.
  • Каждый символ не должен встречаться в пароле более трех раз.
  • Не более двух последовательных символов в пароле могут быть идентичными.
  • Все символы должны входить в стандартный набор печатаемых символов ASCII в диапазоне от 0x20 до 0x7E включительно.

-empty

Создает пустое хранилище ключей. Эта опция используется по умолчанию; для нативного шифрования DB2 она является достаточной.

-populate

Создает хранилище ключей с начальным набором заранее заданных сертификатов от доверенного центра сертификации.

-f

Принудительно перезаписывает любое существующее хранилище ключей с таким же именемe.

В следующем примере показано, как создать хранилище ключей типа PKCS#12 со stash-файлом, задающим сильный пароль.

 gsk8capicmd_64 -keydb -create -db keystore.p12 -type pkcs12 -pw TheLong73#Pass$word8 -stash –strong

В этом учебном пособии всегда используется хранилище ключей PKCS#12; соответственно имя файла хранилища ключей имеет расширение p12. В версии DB2 10.5 Fix Pack 5 нативное шифрование DB2 поддерживает только хранилища ключей этого типа.

Настройка разрешений

Один из способов принудительной реализации защиты хранилища ключей и stash-файла состоит в использовании полномочий файловой системы в операционной системе. Доступ к хранилищу ключей и к stash-файлу должен иметь только создатель этого хранилища ключей. В средах DB2 создателем хранилища ключей должен быть владелец экземпляра.

В операционных средах Linux и UNIX хранилище ключей следует создавать с полномочиями по чтению и записи (rw) только для владельца экземпляра (0600). Остальные пользователи не должны иметь доступа.

В операционной среде Windows файл хранилища ключей создается с файловыми полномочиями, наследуемыми от папки, где он создается. Весьма вероятно, что эти полномочия не подходят для хранилища ключей, поэтому их следует изменить. Если вы используете расширенные средства безопасности Windows, то только у группы DB2ADMNS должен иметься полный контроль над этим файлом. Ни у кого больше не должно быть доступа к нему, даже по чтению. Если вы не используете расширенные средства безопасности, то полный контроль над этим файлом следует предоставлять только пользователю с сервисной учетной записью DB2. В любом случае если локальная системная учетная запись соответствует пользователю с сервисной учетной записью DB2, то у SYSTEM также должен иметься полный контроль над файлом хранилища ключей.

Менее строгие разрешения на доступ к файлу хранилища ключей и к stash-файлу могут открыть хранилище ключей неавторизованным пользователям. Доступ к мастер-ключам неявным образом предоставляет доступ к данным, которые были зашифрованы с помощью этих ключей.

Генерация мастер-ключа

Первый шаг при управлении мастер-ключом – это генерация самого мастер-ключа. Для решения этой задачи обычно используется криптографически надежный генератор псевдослучайных чисел. Серверы баз данных DB2 поддерживают мастер-ключи длиной 128, 192 или 256 разрядов для использования с шифрованием по стандарту AES.

Использование специального файла /dev/random

Специальный файл /dev/random предоставляет интерфейс для встроенного генератора случайных чисел в Linux и UNIX. Эта опция пользуется популярностью в криптографии.

Семантика этого специального файла меняется в зависимости от операционной системы; перед его использованием необходимо ознакомиться с соответствующей документацией по операционной системе.

В следующем примере показано, как использовать файл /dev/random для генерации n байтов случайных данных в файл random-data.

head -c <n> /dev/random > random-data

В этом примере n может принимать значение 16, 24 или 32, чтобы генерировать мастер-ключ длиной 128, 192 или 256 разрядов соответственно.

Использование команды rand (OpenSSL)

OpenSSL – это реализация с открытым исходным кодом протоколов SSL и TLS, пользующаяся большой популярностью в криптографии.

В средах Linux, UNIX и Windows для генерации значения мастер-ключа можно воспользоваться командой rand для OpenSSL. Эта команда генерирует псевдослучайные байты.

В следующем примере показано, как генерировать n байтов случайных данных в файл random-data.

openssl rand -out random-data <n>

В этом примере n iможет принимать значение 16, 24 или 32, чтобы генерировать мастер-ключ длиной 128, 192 или 256 разрядов соответственно. Для получения дополнительной информации обратитесь к документации по команде rand.

Добавление мастер-ключа в хранилище ключей

Добавить мастер-ключ в хранилище ключей можно путем вставки мастер-ключа или импорта мастер-ключа из другого хранилища ключей.

Выбор эффективных имен для меток мастер-ключа

Добавляя мастер-ключ, выберите подходящее имя для метки мастер-ключа (мастер-метки). Если в хранилище ключей содержится много мастер-ключей из разных баз данных, которые ротируются с течением времени, подходящее имя мастер-метки позволяет выбрать правильный мастер-ключ и избежать путаницы. DB2 генерирует имена меток в следующем формате:

DB2_SYSGEN_<instancename>_<databasename>_<timestamp>

Мы рекомендуем использовать имя метки, которое содержит информацию, позволяющую установить, где используется данный мастер-ключ и когда он использовался в первый раз (см. следующий пример).

<Business_name>_<instancename>_<databasename>_<timestamp>

При наличии этой информацией можно легко определить, когда необходимо ротировать мастер-ключ и какая база данных ассоциирована с этим мастер-ключом.

Вставка мастер-ключа

Чтобы вставить мастер-ключ в хранилище ключей, вызовите инструмент GSKCapiCmd с опциями -secretkey и -add следующим образом.

 gsk8capicmd_64 -secretkey -add -db <name> [-pw <passwd> | -stashed] [–type <pkcs12|p12>] –file <filename> -label <label> [-format <ascii | binary>]

В следующем примере для того, чтобы вставить мастер-ключ в хранилище ключей с именем keystore.p12, используется значение в файле random-data. Эта команда также задает имя мастер-метки и указывает, что пароль хранится в stash-файле.

 gsk8capicmd_64 -secretkey -add -db keystore.p12 -stashed –file random-data –format binary -label mybusiness_db2inst1_db1_2015-03-03

Поскольку мастер-ключ хранится в файле с именем random-data, его необходимо удалить, чтобы не оставить мастер-ключ незащищенным. В следующем примере производится удаление айла с именем random-data.:

rm random-data

Импорт мастер-ключа

Чтобы импортировать мастер-ключ в хранилище ключей, вызовите инструмент GSKCapiCmd с опциями -cert и -import следующим образом.

 gsk8capicmd_64 -cert -import –[db <name>|file <filename>] [-pw <passwd> | -stashed] -label <label> -type <pkcs12 | p12> ] –[target <name> ] [-target_pw <passwd>] [-new_label] [-target_type <pkcs12 | p12>]

Вам необходимо иметь хранилище ключей с именем temp_keystore.p12, содержащее мастер-ключ, который вы хотите импортировать. Дополнительная информация о создании этого временного хранилища ключей содержится в разделе Извлечение и экспорт мастер-ключей.

В следующем примере показано, как импортировать мастер-метку mybusiness_db2inst1_db1_2015-03-03 из временного хранилища ключей в целевое хранилище ключей.

 gsk8capicmd_64 -cert -import -db temp_keystore.p12 -pw temp0RaryPassw0rd -label mybusiness_db2inst1_db1_2015-03-03 -target keystore.p12 -target_pw newsitepw

Извлечение и экспорт мастер-ключей

Вы можете извлечь или экспортировать мастер-ключ для перемещения из одного хранилища ключей в другое хранилище ключей. Ниже изложены подробности об этих методах и рекомендации по их применению.

Экспорт мастер-ключа

Чтобы экспортировать пары "мастер-ключ и метка" из своего текущего хранилища ключей на удаленный сайт, вызовите инструмент GSKCapiCmd с опциями -cert и –export следующим образом.

 gsk8capicmd_64 -cert -export -db <name> [-pw <passwd> | -stashed] -label <label> [-type <pkcs12 | p12>] -target <name> [-target_pw <passwd>] [-target_type <pkcs12 | p12>]

Следующие опции указывают на исходное хранилище ключей, которое содержит мастер-метку для экспорта.

-db <name> [-pw <passwd> | -stashed] -label <label>

Следующие опции указывают на целевое хранилище ключей, в которое экспортируется мастер-метка.

 -target <name> [-target_pw <passwd>] -target_type <pkcs12 | p12>

Например, если вы настраиваете функциональность HADR (high-availability disaster recovery) и хотите иметь одинаковый мастер-ключ в первичной базе данных и в резервной базе данных, скопируйте этот мастер-ключ безопасным способом, для чего выполните следующие шаги.

  1. Экспортируйте конкретную пару "мастер-ключ и метка" во временное хранилище ключей PKCS12.
  2. После экспорта мастер-ключа в хранилище ключей PKCS12 с именем temp_keystore.p12 переместите это временное хранилище ключей на удаленный сайт, на котором находится резервная база данных.
  3. Импортируйте пару "мастер-ключ и метка" в удаленное хранилище ключей.

В следующем примере показано, как экспортировать мастер-ключ для мастер-метки mybusiness_db2inst1_db1_2015-03-03 из хранилища ключей.p12keystore в хранилище ключей temp_keystore.p12.:

 gsk8capicmd_64 -cert -export -db keystore.p12 -pw Str0ngPassw0rd –label mybusiness_db2inst1_db1_2015-03-03 -target temp_keystore.p12 -target_pw temp0RaryPassw0rd -target_type pkcs12

Извлечение мастер-ключа

Еще одна возможность для перемещения пар "мастер-ключ и метка" между хранилищами ключей состоит в извлечении самого мастер-ключа в файл в двоичном формате или в формате ASCII.

Чтобы извлечь мастер-ключ, вызовите инструмент GSKCapiCmd с опциями –secretkey и –extract.

 gsk8capicmd_64 -secretkey -extract -db <name> [-pw <passwd> | -stashed] -label <label> -file <name> [-format <ascii | binary>]

В следующем примере показано, как извлечь мастер-ключ для мастер-метки mybusiness_db2inst1_db1_2015-03-03 в файл keymaterial в двоичном формате.

 gsk8capicmd_64 -secretkey -extract -db keystore.p12 -label mybusiness_db2inst1_db1_2015-03-03 -file keymaterial -format binary

Создание списка всех мастер-меток в хранилище ключей

Чтобы создать список всех мастер-меток для сертификатов и мастер-ключей, хранящихся в определенном хранилище ключей, вызовите инструмент GSKCapiCmd с опциями -cert и -list.

 gsk8capicmd_64 -cert -list [<all | personal | CA>] {-db <name>} [-pw <passwd> | -stashed] [-type <pkcs12|p12>]

В следующем примере показан список всех мастер-меток для хранилища ключей с именем keystore.p12.

 gsk8capicmd_64 -cert -list all -db keystore.p12 -stashed Certificates found * default, - personal, ! trusted, # secret key # mybusiness_db2inst1_db1_2015-03-03 # mybusiness_db2inst1_db1_2014-12-03 # mybusiness_db2inst1_db1_2014-09-03

Пример перемещения мастер-ключей между двумя серверами DB2

Бывают ситуации, когда необходимо переместить мастер-ключ между серверами DB2, например, при восстановлении зашифрованной резервной копии базы данных на другом сервере DB2 или при настройке функции HADR в среде DB2.

Предположим, вам нужно иметь одинаковый мастер-ключ на сервере db2serverA и на сервере db2serverB. Кроме того, вы хотите, чтобы каждый сервер DB2 имел свое собственное хранилище ключей. В следующей таблице показаны действия, которые необходимо выполнить на каждом сервере DB2, чтобы безопасно переместить мастер-ключ с сервера db2serverA на сервер db2serverB.

Действия для перемещения мастер-ключа
db2serverA
  1. Создание хранилища ключей:
    gsk8capicmd_64 -keydb –create -db keystoreA.p12 –type pkcs12 -stash
  2. Генерация случайных данных, которые будут использоваться для создания мастер-ключа:
    head -c 32 /dev/random > /tmp/randfile
  3. Вставка случайных данных в хранилище ключей, указывающее на имя мастер-метки:
    gsk8capicmd_64 -secretkey -add -db keystoreA.p12 -stashed –label mybusiness_db2inst1_db1_2015-03-03
       –file /tmp/randfile
  4. Верификация вставки мастер-ключа:
    gsk8capicmd_64 -cert -list all -db keystore.p12 –stashed
     Certificates found
     * default, - personal, ! trusted, # master key
     #mybusiness_instA_dbA_2015-03-03
  5. Удаление файла случайных данных:
    rm /tmp/randfile
  6. Защищенный экспорт мастер-ключа во временное хранилище ключей:
    gsk8capicmd_64 -cert -export -db keystoreA.p12 -stashed -label mybusiness_instA_dbA_2015-03-03
       -file temp_keystore.p12 –target_type pkcs12 -target_pw Str0ngPassw0rd
  7. Копирование временного хранилища ключей на сервер db2serverB. В следующем примере используется команда:
    scp temp_keystore.p12 db2serverB:/tmp/temp_keystore.p12
db2serverB
  1. Создание хранилища ключей:
    gsk8capicmd_64 -keydb –create -db keystoreB.p12 –type pkcs12 -stash
  2. Импорт мастер-ключа с сервера db2serverA:
    gsk8capicmd_64 -cert -import -db /tmp/temp_keystore.p12 -pw Str0ngPassw0rd
       -label mybusiness_instA_dbA_2015-03-03 -target keystoreB.p12 -stashed
  3. Верификация вставки мастер-ключа:
    gsk8capicmd_64 -cert -list all -db keystoreB.p12 –stashed
     Certificates found
     * default, - personal, ! trusted, # master key
     # mybusiness_instA_dbA_2015-03-03
  4. Удаление временного хранилища ключей:
    rm /tmp/temp_keystore.p12

Более подробные сведения об инструменте GSKCapiCmd

Более глубокое изучение этого инструмента и его дополнительных опций расширяет возможности выбора при управлении мастер-ключами.

Типовые опции утилиты командной строки GSKit

У команд инструмента GSKCapiCmd имеется ряд типовых опций. В следующей таблице описаны наиболее важные из них.

Имя опцииОписание
-db <name> Указывает имя файла хранилища ключей.
-pw <passwd> | -stashed Задает пароль или stash-файл, необходимый для доступа к хранилищу ключей. Если эта опция опущена, инструмент отображает запрос на ввод пароля.
-label <label> Указывает имя мастер-ключа.
-format <ascii | binary>
Указывает, в каком формате (в двоичном формате или в формате ASCII с кодировкой Base64) представлен мастер-ключ в команде, которая извлекает либо вставляет мастер-ключ или сертификат из хранилища ключей. При вставке нового мастер-ключа опция format должна соответствовать формату входного файла. При вставке мастер-ключа, извлеченного из другого хранилища ключей, необходимо задать такую же опцию format, которая использовалась при извлечении мастер-ключа. При вставке мастер-ключей, сгенерированных DB2, всегда используется двоичный формат.
-type | target_type
<cms | kdb| pkcs12 | p12 | pkcs7 | pkcs11>
Задает тип хранилища ключей при создании хранилища ключей и экспорте или импорте мастер-ключей. Эта опция не является обязательной. Если эта опция опущена, инструмент определяет тип по расширению имени файла хранилища ключей. Для имени этого файла поддерживаются следующие расширения: cms, kdb, pkcs12, p12, pkcs7 и pkcs11. Например, при расширении файла p12 инструмент определяет тип хранилища ключей как PKCS12. Если расширение не соответствует ни одному из поддерживаемых расширений, вам необходимо во всех командах указывать опцию -type, чтобы использовался корректный тип хранилища ключей.
Используйте только тип pkcs12. Типы cms, kdb, pkcs7 и pkcs11 несовместимы со стандартом PKCS12 и не поддерживаются нативным шифрованием DB2 в версии DB2 10.5 Fix Pack 5.

Проблемы взаимодействия

Необходимо учитывать, что при наличии нескольких установок компонента GSKit на одном сервере DB2 могут возникать проблемы взаимодействия, если инструмент GSKCapiCmd использует одну версию, а ссылается на библиотеки GSKit другой версии. Проблемы взаимодействия могут порождать непредсказуемое поведение, а инструмент может возвращать сообщения об ошибках. Ниже приведены примеры возможных сообщений об ошибках на этапе исполнения:

  • gsk8capicmd_64: relocation error: gsk8capicmd_64: symbol _ZTV9GSKBuffer, version gsk8 not defined in file libgsk8cms_64.so with link time reference
  • gsk8capicmd_64: Symbol `_ZTV15GSKASNNamedBits' has different size in shared object, consider re-linking
  • gsk8capicmd_64: Symbol `_ZTV21GSKASNGeneralizedTime' has different size in shared object, consider re-linking

Чтобы устранить эти ошибки, позаботьтесь о том, чтобы инструмент GSKCapiCmd загружал правильную версию библиотек GSKit. Для этого присвойте маршруту в переменных среды соответствующее значение для используемой операционной системы.

Включение режима FIPS

Инструмент GSKCapiCmd можно использовать в режиме FIPS (Federal Information Processing Standards). В этом режиме инструмент инициализирует обеспечивающий криптографический провайдер в режиме FIPS, вследствие чего тот использует только алгоритмы, проверенные на соответствие стандарту FIPS 140-2.

Сервер DB2 выполняет все свои криптографические функции в режиме FIPS. При управлении хранилищем ключей с помощью инструмента GSKCapiCmd следует всегда включать режим FIPS. Чтобы принудительно включить или отключить режим FIPS, используйте опцию –fips следующим образом.

gsk8capicmd_64 -fips [<true>|<false>] …

Если вы задали опцию –fips true , а провайдер невозможно инициализировать в режиме FIPS, то выполнение этой команды, которую вы запускаете с помощью инструмента GSKCapiCmd, завершится неудачей. Если вы задали опцию –fips false или вообще не задали опцию –fips, а провайдер невозможно инициализировать в режиме FIPS, то инструмент попытается исполнить команду в режиме без поддержки FIPS.

В дополнение к управлению мастер-ключами инструмент GSKCapiCmd можно использовать для управления сертификатами и для запросов к сертификатам внутри хранилища ключей. Более подробная информация содержится в документе GSKCapiCmd Users Guide

Управление хранилищами ключей

Помимо вставки новых мастер-ключей у вас может возникнуть необходимость изменить пароль, который шифрует определенное хранилище ключей, или сделать резервную копию файла хранилища ключей и stash-файла в рамках управления жизненным циклом хранилища ключей.

Изменение пароля для хранилища ключей

Политики компании или нормативные требования могут требовать регулярного изменения пароля, используемого для шифрования хранилища ключей. В этой ситуации вам необходимо менять пароль вне зависимости от того, используете ли вы stash-файл.

Вы должны быть в состоянии ассоциировать предыдущую резервную копию хранилища ключей с требуемым паролем для этого хранилища. Предположим, что вы восстанавливаете хранилище ключей, которое использовало 23 пароля. Выберите метод, который позволяет вам идентифицировать пароль и время, когда он был действительным.

Мы предлагаем следующий простой метод.

  1. Измените пароль.
  2. Создайте резервную копию файла хранилища ключей. Модифицируйте имя файла резервной копии, включив в него дату этого изменения.
  3. Если вы используете stash-файл, создайте и его резервную копию. Модифицируйте имя stash-файла, включив в него такую же дату.
  4. Добавьте новый пароль и дату изменения к своим записям.

Генерация stash-файла

Stash-файл генерируется автоматически при создании хранилища ключей. Тем не менее существуют сценарии, когда вам приходится создавать stash-файл самостоятельно. Например, если вы сейчас не используете stash-файл, но хотите начать использовать его, или если исходный stash-файл стал недоступен вследствие случайного удаления или воздействия злых духов.

В предположении, что вам известен пароль, использованный для шифрования хранилища ключей, вы можете легко создать stash-файл с помощью следующей команды.

gsk8capicmd_64 -keydb -stashpw -db <name> [-pw <passwd>]

В следующем примере показано, как создать stash-файл для файла хранилища ключей keystore.p12.

gsk8capicmd_64 -keydb -stashpw -db keystore.p12 -pw TheLong73#Pass$word8

Эта команда создает в текущем каталоге stash-файл с именем keystore.sth. Проследите, чтобы ассоциированные с этим stash-файлом полномочия разрешали доступ только создателю соответствующего хранилища ключей. Дополнительная информация содержится в разделе Настройка разрешений.

Резервное копирование и восстановление хранилища ключей

Для успешного использования шифрования данных на протяжении длительного периода необходимо техническое сопровождение резервных копий хранилища ключей, пароля, использованного для шифрования хранилища ключей, и stash-файла. Отсутствие технического сопровождения этой информации может привести к недоступности всех зашифрованных данных.

Мастер-ключи, используемые в нативном шифровании DB2, имеют достаточную длину, чтобы предотвратить возможность отгадывания ключа методом грубой силы. Если вы шифруете свои резервные копии базы данных DB2, вы не сможете восстановить их без доступа к хранилищу ключей.

Техническое сопровождение резервных копий хранилища ключей является настолько важным, что необходимо сохранять все резервные копии хранилища ключей. Это объясняется тем, что для архивирования вам может понадобиться большая часть мастер-ключей в хранилище ключей. Старые мастер-ключи, подвергнутые ротации, понадобятся вам для восстановления из старой резервной копии базы данных DB2. Старые мастер-ключи используются не слишком часто, поэтому любое повреждение может оставаться незамеченным в течение некоторого времени. Решение состоит в том, чтобы иметь несколько резервных копий хранилища ключей, поскольку резервная копия – это единственная альтернатива для нахождения действительного мастер-ключа.

Если вы изменяете пароль для хранилища ключей, необходимо сохранить использованный пароль для обращения к резервным копиям этого хранилища. Дополнительная информация содержится в разделе Изменение пароля для хранилища ключей. Сохраняйте запись этого пароля для обращения к хранилищу ключей отдельно от резервной копии хранилища ключей.

Если вы используете stash-файл, вы можете дополнительно создать его резервную копию. Вы всегда сможете создать stash-файл, если знаете пароль — особенно если вы обязаны знать значение, использованное для старой резервной копии хранилища ключей. Храните резервную копию stash-файла отдельно от резервной копии хранилища ключей: если резервная копия файла хранилища ключей или stash-файла будет скомпрометирована, то только одна из них станет доступной, а ваши данные будут по-прежнему защищены.

Управление мастер-ключами

Чтобы воспользоваться дополнительными операциями для управления своими мастер-ключами, вы должны знать, как определить размер мастер-ключа в своем хранилище ключей и как удалить мастер-ключ из хранилища ключей.

Вычисление размера мастер-ключа в хранилище ключей

Для определения размера мастер-ключа в хранилище ключей имеется два способа. Рекомендуемый способ состоит в извлечении мастер-ключа во временный файл с последующей проверкой размера этого временного файла.

В следующем примере показано, как извлечь мастер-ключ с меткой mybusiness_db2inst1_db1_2015-03-03 из файла хранилища ключей keystore.p12 во временный файл masterkeyfile.

 gsk8capicmd_64 -secretkey -extract -db keystore.p12 -format binary -label mybusiness_db2inst1_db1_2015-03-03 -file masterkeyfile -stashed

В следующем примере показано, как проверить размер временного файла ключа masterkeyfile.

 ls -l masterkeyfile -rw-r--r-- 1 user group 32 2015-02-04 15:24 masterkeyfile

В выходной информации этой команды размер файла составляет 32 байта. Соответственно, размер мастер-ключа, ассоциированного с меткой mybusiness_db2inst1_db1_2015-03-03, составляет 32 байта или 256 битов.

Не забудьте удалить временный файл мастер-ключа после определения размера файла.

rm masterkeyfile

В качестве альтернативного варианта этот размер можно вычислить на основе результата исполнения инструмента GSKCapiCmd с опциями -cert и -details.

 gsk8capicmd_64 -cert -details [-file <name>] {-db <name> -type <pkcs12 | p12>} [-pw <passwd> | -stashed] -label <label>

Выходная информация этой команды представляет собой шестнадцатеричный дамп мастер-ключа. Чтобы вычислить размер мастер-ключа, вам придется вручную подсчитать байты в этой информации. В следующем примере показано, как отобразить шестнадцатеричный дамп мастер-ключа, ассоциированного с меткой mybusiness_db2inst1_db1_2015-03-03 в файле хранилища ключей с именем keystore.p12.

 gsk8capicmd_64 -cert -details -label mybusiness_db2inst1_db1_2015-03-03 -db keystore.p12 -stashed Label : mybusiness_db2inst1_db1_2015-03-03 master key 4B A7 1D FA 6A 3B 39 A0 91 84 9E 7F 3F 46 2E 49 10 0F 0F BE F1 E3 D6 CE 06 C9 A8 0B 85 A3 61 8E

Подсчет битов в выходной информации команды из этого примера показывает, что размер мастер-ключа составляет 256 битов.

Удаление мастер-ключа из хранилища ключей

Большую часть времени вам следует сохранять все пары "мастер-ключ и метка" для хранилища ключей. В среде DB2 удаление мастер-ключа может породить проблемы в будущем. Если мастер-ключ удален, то резервные образы DB2 и журнальные файлы, которые были зашифрованы с использованием этого мастер-ключа, становятся недоступными. Необходимо отметить, что при принятии решения об удалении пары "мастер-ключ и метка" следует всегда соблюдать максимальную осторожность.

Чтобы удалить мастер-ключ, вызовите инструмент GSKCapiCmd со следующими опциями:

 gsk8capicmd_64 -cert -delete {-db <name> -type <pkcs12 | p12>} [-pw <passwd> | -stashed] -label <label>

В некоторых сценариях удаление пары "мастер-ключ и метка" имеет смысл. Например, если вы вставляете мастер-ключ в формате ASCII и хотите преобразовать его в двоичный формат, необходимо удалить этот мастер-ключ, а затем снова вставить его в двоичном формате.

Следующая команда демонстрирует удаление мастер-ключа, ассоциированного с мастер-меткой mybusiness_db2inst1_db1_2015-03-03 в файле хранилища ключей keystore.p12.

 gsk8capicmd_64 -cert -delete -db keystore.p12 -pw Str0ngPassw0rd -label mybusiness_db2inst1_db1_2015-03-03

Заключение

Теперь, когда вы знаете, как аккуратно генерировать мастер-ключи, управлять своим хранилищем ключей, управлять мастер-ключами и осуществлять техническое сопровождение хранилища ключей и stash-файла, вы можете успешно использовать нативное шифрование DB2, а также безопасность и защищенность баз данных DB2.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=1029061
ArticleTitle=Я зашифровал свою базу данных! Как мне теперь управлять мастер-ключами?
publish-date=03292016