Перейти к тексту

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Вся введенная информация защищена.

  • Закрыть [x]

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

Вся введенная информация защищена.

  • Закрыть [x]

Шифрование на уровне столбцов таблиц в Informix Dynamic Server

Контроль безопасности информации в DB2 и Informix Dynamic Server

Маной Мохан, конструктор-разработчик безопасности программного обеспечения, IBM
Маной Мохан (Manoj Mohan) работал разработчиком в команде IBM-IDS пять лет. У него есть опыт проектирования и внедрения съемного модуля аутентифиации (Pluggable Authentication Module) и IP V6 поддержки в IDS сервер. Также у него есть опыт проектирования и внедрения поддержки доверительного контекста в DB2 для Linux, UNIX и Windows.
Линетт Д. Адияламурьил, инженер по разработке IDS Security Software, IBM
Линетт Адияламурьил вот уже более девяти лет работает с IDS в качестве инженера. Она обладает огромным опытом в областях безопасности и kernel.

Описание:  В статье рассматривается возможность шифрования данных на уровне столбцов таблиц (CLE), доступная в IBM Informix® Dynamic Server (IDS) версии 10 и более поздних.

Дата:  20.10.2009
Уровень сложности:  средний
Активность:  1211 просмотров
Комментарии:  


Introduction

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

CLE

С выходом IDS v10 у пользователей появилась возможность усовершенствовать конфиденциальность данных благодаря основанному на SQL решению CLE. Эта возможность предоставляет встроенный SQL-интерфейс для наиболее популярных симметричных алгоритмов шифрования. Таких, как Triple-Data Encryption Standart (TDES) и Advanced Encryption Standart (AES). Новые встроеные SQL-функции обеспечивают для храниения данных в столбцах в зашифрованном формате.

Реализация CLE в IDS не обеспечивает управления ключами. Поэтому задача по управлению ключами ложится на приложения, либо пользователей. При использовании CLE данные шифруются с использованием ключа, генерируемого по паролю через встроенные SQL-функции шифрования. Пароль может быть установлен на уровне сессии при помощи выражения SET ENCRYPTION или в качестве аргумента к функциям шифрования. Зашифрованные данные могут быть извлечены или модифицированы только при указанном в запросе пароле. IDS предоставляет пользователям простой способ запоминания паролей - при помощи подсказок. При настройке шифрования данных по паролю может быть указана подсказка. Подсказку можно увидеть используя специальную встроенную SQL-функцию. Пароли и подсказки не хранятся открытым текстом в какой-либо таблице системного каталога. Ключ, используемый в процессе - случайное значение, зависящее от текущего времени. СУБД инициализирует ключ при старте сервера. При выключении сервера ключ уничтожается.

Для шифрования IDS использует специальный виртуальный процессор encrypt VP, который занимается собственно шифрованием и дешифрованием. Параметр конфигурации VPCLASS вместе с ключевым словом может быть использован для конфигурирования encrypt VP. Если параметр VPCLASS не сконфигурирован, СУБД запускает encrypt VP автоматически при первом вызове любой функции шифрования/дешифрования, определенных для CLE. Encrypt VP также может быть добавлен динамически при помощи утилиты onmode.

Конфигурирование encrypt VP

Ниже представлен пример использования параметра конфигурации:

VPCLASS encrypt,num=5

Пример использования утилиты onmode для динамического добавления encrypt VP:

				
onmode -p 5 encrypt
	

Встроенные SQL-функции и выражения, предназначенные для CLE

Ниже представлен список функциональностей, поддерживаемых CLE:

  • ENCRYPT_TDES: Данная функция возвращает значение, которое является результатом шифрования символьной строки, или BLOB/CLOB значения. Шифрование первого аргумента функции производится алгоритмом TDES (или DES3).
    ENCRYPT_TDES(data-string-expression [, password-string [, hint ]])        
    		

  • ENCRYPT_AES: Функция ENCRYPT_AES возвращает зашифрованное значение, полученное в результате обработки первого аргумента алгоритмом AES. Первый аргумент должен быть незашифрованной строкой символов, либо smart large object (тип данных BLOB или CLOB).
    ENCRYPT_AES(data-string-expression [, password-string [, hint ]])       
    		

  • DECRYPT_CHAR: Функция DECRYPT_CHAR в качестве первого аргумента принимает зашифрованную строку символов любого символьного типа данных (CHAR, LVARCHAR, NCHAR, NVARCHAR, или VARCHAR). Пароль должен быть указан в качестве второго аргумента, если только пароль не совпадает с паролем сессии, установленным выражением SET ENCRYPTION.
    Decrypt_char(EncryptedData [, Password])    
    		

  • DECRYPT_BINARY: Функция DECRYPT_BINARY принимает в качестве первого аргумента принимает зашифрованный большой объект типа BLOB или CLOB. Пароль должен быть указан вторым аргументом если только пароль не совпадает с паролем сессии, установленным выражением SET ENCRYPTION.
    Decrypt_binary(EncryptedData [, Password])     
    		

  • GETHINT: Функция GETHINT возвращает строку символов, указанную ранее в качестве подсказки в выражении SET ENCRYPTION PASSWORD для шифрования с помощью функции ENCRYPT_AES или ENCRYPT_TDES. Эта подсказка обычно предоставляет информацию, которая может помочь пользователю указать нужный пароль для получения расшифрованных данных с помощью функции DECRYPT_CHAR или DECRYPT_BINARY.
    GETHINT(EncryptedData)       
    		

  • SET ENCRYPTION PASSWORD: Данная функция используется для определения либо сброса пароля сессии для шифрования/дешифрования символов, BLOB- или CLOB-объектов. Только IDS поддерживает данное выражение, которое является расширением стандартов ANSI/ISO для SQL. Это выражение может быть использовано в ESQL/C.
    SET ENCRYPTION PASSWORD  "password"  [ WITH HINT "hint-string" ]
    		

Use CLE in a dbaccess application

Следующий пример иллюстрирует использование алгоритма шифрования AES и функции decrypt_char , входящих в состав CLE, в среде приложения dbaccess. В данном примере данные шифруются с помощью алгоритма AES с указанием пароля mypassword1 and mypassword2, которые используются в качестве ключа шифрования. Если какой-либо другой пользователь попытается извлечь эти данные, он получит лишь зашифрованный вариант, лишенный всякого смысла. Но если операция SELECT>выполняется с использованием функции дешифрования (например decrypt_char) с указанным верным паролем, то пользователь увидит вполне осмысленные расшифрованные данные.


Листинг 1. Использование AES и decrypt_char в приложении dbaccess
                
create database test with log;
Database created.

create table tab (custname char(32), ccard char(16), enc_ccard lvarchar(3000));
Table created.

insert into tab values ("Manoj Mohan", "1234567890",
    encrypt_aes("1234567890", "mypassword1"));
1 row(s) inserted.

insert into tab values ("Lynette Daniel", "2345678901",
    encrypt_aes("2345678901", "mypassword2"));
1 row(s) inserted.

select * from tab;

custname   Manoj Mohan
ccard      1234567890
enc_ccard  0gH//AAAAEAWnTjoJu721chtLzYumGZUshGnfI2elmV

custname   Lynette Daniel
ccard      2345678901
enc_ccard  0Sbb/AAAAEAy4rjGrXe6wqETDb3d/thwySlcjVWYttH

2 row(s) retrieved.

select custname, ccard, decrypt_char(enc_ccard, "mypassword1")
    as clear_ccard from tab where custname="Manoj Mohan";

custname     Manoj Mohan
ccard        1234567890
clear_ccard  1234567890

1 row(s) retrieved.

select custname, ccard, decrypt_char(enc_ccard, "mypassword2")
    as clear_ccard from tab where custname="Lynette Daniel";

custname     Lynette Daniel
ccard        2345678901
clear_ccard  2345678901

1 row(s) retrieved.

Database closed.
      

Использование CLE в ESQL/C-приложении

CLE также может быть использован в ESQL/C-приложении. В нижеследующем примере приводится пример использования алгоритма шифрования TDES и функции дешифрования decrypt_binary.


Листинг 2. ESQL/C-приложение, использующее TDES и decrypt_binary
                
#include <stdio.h>
#include <decimal.h>
#include <datetime.h>
EXEC SQL include sqlda;
EXEC SQL include sqlca;
EXEC SQL include sqltypes;

main()
{
EXEC SQL BEGIN DECLARE SECTION;
int id;
lvarchar a[3000], b[3000];
EXEC SQL END DECLARE SECTION;

EXEC SQL drop database test;
printf("SQLCODE %d\n", SQLCODE);
EXEC SQL create database test with log;
printf("SQLCODE %d\n", SQLCODE);
EXEC SQL create table tab (id int, credit_card lvarchar(3000),
    encrypted_credit_card lvarchar(3000));
printf("SQLCODE %d\n", SQLCODE);
EXEC SQL insert into tab values (1, "1234567890",
    encrypt_tdes("1234567890", "mypassword"));
printf("SQLCODE %d\n", SQLCODE);
EXEC SQL select id, credit_card, decrypt_binary(encrypted_credit_card, "mypassword")
    into :id, :a, :b from tab;
printf("SQLCODE %d\n", SQLCODE);
printf("credit_card: %s, enc_credit_card %s\n", a, b);
}
      

Использование CLE для установки и получения подсказок

CLE также поддерживает подсказки, которые могут хранится наряду с паролями. Более того, пользователь может установить пароль для любой сесии с помощью синтаксиса SET ENCRYPTION PASSWORD . Это позволяет пользователям использовать выражение INSERT или SELECT без указания пароля для функций шифрования/дешифрования.


Листинг 3. Пример использования CLE для установки или получения подсказок
                
create database test with log;
Database created.

create table tab (custname char(32), ccard char(16), enc_ccard lvarchar(3000));
Table created.

set encryption password "VJTICOLLEGEMUMBAI" with hint "what is my PG College name?";
Encryption password set.

insert into tab values ("Manoj Mohan", "1234567890", encrypt_aes("1234567890"));
1 row(s) inserted.

select * from tab;

custname   Manoj Mohan
ccard      1234567890
enc_ccard  0fIMgAAAAEAeliIJN4liR4qPCFw9//mIyq82berEiifNLgbd3vW23CVUzI3KSCy4kYQF
91PRuayfa3WpBpbTDQ=

1 row(s) retrieved.

select custname, gethint(enc_ccard) as hint from tab where custname="Manoj Mohan";

custname  Manoj Mohan
hint      what is my PG College name?

1 row(s) retrieved.

set encryption password "SOMAIYACOLLEGEMUMBAI" with hint "what is my Eng College name?";
Encryption password set.

insert into tab values ("Lynette Daniel", "2345678901", encrypt_aes("2345678901"));
1 row(s) inserted.

select custname, gethint(enc_ccard) as hint from tab where custname="Lynette Daniel";

custname  Lynette Daniel
hint      what is my Eng College name?

1 row(s) retrieved.
      

Требования CLE к хранению данных

Зашифрованные данные, которые хранятся в символьных колонках в IDS, занимают больше места нежели незашифрованные данные. Например, если введенные данные имеют длину N байт, то соответствующий шифр AES будет занимать:


Листинг 4. Пример расчета требуемого места для CLE
                
AES	 = B64(NGM(N, 16) + H + 8) + 11
Где,
H = 0 при отсутствии подсказки; H = 40 при наличии подсказки.
NGM(x,y): Следующий множитель для y, который больше, чем x = ((x + y) / y) * y
B64(x)  : Base-64 размер шифрования = ((x + 2) / 3) * 4
      

Аналогично рассчитывается требуемое место для шифра TDES:

TDES = B64(NGM(N, 8) + H + 8) + 11
Где,
H = 0 при отсутствии подсказки; H = 40 при наличии подсказки.
NGM(x,y): Следующий множитель для y, который больше, чем x = ((x + y) / y) * y 
B64(x)  : Base-64 размер шифрования = ((x + 2) / 3) * 4
      

Требования к хранению данных для AES и TDES

Следующая таблица иллюстрирует зависимость занимаемого шифром места от различных условий и методов шифрования (AES и TDES), рассчитанных согласно вышеприведенным формулам.


Таблица 1. Место, требуемое для шифров AES и TDES
Размер данных (байт)TDES (без подсказки)AES (без подсказки)TDES (с подсказкой)AES (с подсказкой)
1..735438799
8..1543439999
16..235567107119
24..316767119119
32..397587131139
40..478787139139
100163171215227
200299299355355
500695707747759

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


Поддерживаемые типы данных

CLE поддерживает шифрование всех встроенных типов данных, кроме BYTE и TEXT. Поддерживаемые типы данных включают в себя: CHAR, VARCHAR, NCHAR, NVARCHAR, LVARCHAR, SMALLINT, INTEGER, INT8, DECIMAL, SMALLFLOAT, FLOAT, DATE, DATETIME, INTERVAL, BOOLEAN, BLOB, CLOB. Зашифрованные данные хранятся в полях типа CHAR, VARCHAR или LVARCHAR. Зашифрованные данные типов BLOB и CLOB хранятся в BLOB-полях.

Комплексные типы данных, такие как Collection и Row, также могут быть зашифрованы. Но их шифрование требует их явного преобразования. Например:

ENCRYPT_AES(LIST{1,3,2}::LVARCHAR, 'PassWord')
DECRYPT_CHAR(enc_list, 'PassWord')::LIST(INT NOT NULL)
	

Определенные пользователем DISTINCT типы шифруются также как и базовые типы данных. Определенные пользователем непрозрачные (opaque) типы данных требуют их явного преобразования в или из LVARCHAR.

Заключение

CLE предоставляет встроенные SQL интерфейс для хорошо зарекомендовавших себя симметричных алгоритмов шифрования, таких как Triple-DES и AES. В данной статье были представлен обзор того, как пользователи могут использовать CLE с целью повышения безопасности, конфиденциальности и целостности данных.


Благодарности

Авторы выражают благодарность архитектору Джонатану Леффлеру за любезно предоставленную им презентацию о CLE, которая очень помогла в подготовке данной статьи.


Ресурсы

Научиться

Получить продукты и технологии

  • Создайте свой следующий проект с помощью IBM trial software, доступного для скачивания напрямую с developerWorks.

Обсудить

Об авторах

Маной Мохан (Manoj Mohan) работал разработчиком в команде IBM-IDS пять лет. У него есть опыт проектирования и внедрения съемного модуля аутентифиации (Pluggable Authentication Module) и IP V6 поддержки в IDS сервер. Также у него есть опыт проектирования и внедрения поддержки доверительного контекста в DB2 для Linux, UNIX и Windows.

Линетт Адияламурьил вот уже более девяти лет работает с IDS в качестве инженера. Она обладает огромным опытом в областях безопасности и kernel.

Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Спасибо. Эта запись была помечена для модератора.


Помощь по сообщениям о нарушениях

Сообщение о нарушениях

Сообщение о нарушении не было отправлено. Попробуйте, пожалуйста, позже.


developerWorks: вход


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


При первом входе в developerWorks для Вас будет создан профиль. Выберите информацию отображаемую в Вашем профиле — скрыть или отобразить поля можно в любой момент.

Выберите ваше отображаемое имя

При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

(Должно содержать от 3 до 31 символа.)


Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Оценить эту статью

Комментарии

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=438430
ArticleTitle=Шифрование на уровне столбцов таблиц в Informix Dynamic Server
publish-date=10202009
author1-email=manojm@us.ibm.com
author1-email-cc=
author2-email=lynetta@us.ibm.com
author2-email-cc=

Теги

Help
Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Используйте ползунок, чтобы отразить больше или меньше тегов.

КнопкаПопулярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere).

Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).

Используйте форму поиска, чтобы найти любой контент с данным тегом в My developerWorks. Кнопка Популярные теги отображает самые распространенные теги для данной области контента (например: Java, Linux, WebSphere). Кнопка Мои теги отображает Ваши теги для данной области контента (например: Java, Linux, WebSphere).