プリントスタック TOKYO

データベースとセキュリティの世界から離れて早数年。過去の記憶を探しています。

PCI DSSとセキュリティ トークン

PCI DSS でのカード番号の取り扱いについて、Tokenization と呼ばれるものがあります。
これは、VISA のデータ暗号のベスト プラティクス文書に掲載されています。

参照:Visa Best Practices for Tokenization Version 1.0 (PDF)(英語)

さて、この Tokenization(トークナイゼーション)とは何のことでしょうか?
これは、セキュリティ トークンの仕組みです。然るべき場所に保管されている乱数文字列から元のデータを取得するとき、クライアントは、要求されたトークンの数字(ユーザーIDなど)を入力するといった方法です。前述の然るべき場所とは、HSM(Hardware Security Module(ハードウエア セキュリティ モジュール))などが適切な場所といえるでしょう。

一見して、透過的データ暗号と何が違うのか判らないかもしれませんが、このトークナイゼーションは、ソフトウエアとハードウエア セキュリティのアプローチになり、元のデータと暗号データが確実に1対1で結びつきを持つ点です。

RSAセキュリティ株式会社の「セキュリティ・トークン化」ページに判りやすい説明が掲載されています。

Oracle Transparent Data Encryptionの仕様と制限

Oracle Transparent Data Encryption(以降、TDE)にも、当然ながら仕様や制限があります。このページでは、マニュアルに掲載されている主な仕様と制限を掲載します。※2010年10月の Oracle 11g 時点


利用可能なエディション

Oracle TDE は、Oracle Advanced Security オプションに包含されているものです。この Oracle Advanced Security オプションは、Oracle Enterprise Edition からの提供になり、Oracle Standard Edition では、利用することができません。


利用可能な暗号アルゴリズム

Oracle TDEで利用が可能な暗号アルゴリズムは、世界的にも代表的なものです。3DES(トリプルデス)は、2010年問題の対象になっていない 3-keys が採用されています。
パラメータ名暗号アルゴリズム10g11g
3DES1683-keys 3DES(168-bit)
AES128AES 128-bit
AES192AES 192-bit(デフォルト)
AES256AES 256-bit


利用可能なデータ型

Oracle TDEでは、主要なデータ型をサポートしています。
データ型種別10g11g
CHAR文字型
VARCHAR2文字型
NCHAR文字型
NVARCHAR2文字型
DATE日付型
TIMESTAMP日付型
TIMESTAMP WITH TIME ZONE日付型
TIMESTAMP WITH LOCAL TIME ZONE日付型
INTERVAL DAY TO SECOND日付型
INTERVAL YEAR TO MONTH日付型
NUMBER数値型
RAWバイナリ型
BINARY_DOUBLEバイナリ型
BINARY_FLOATバイナリ型


制限事項

利用可能なデータ型のうち、下表の文字型には上限があります。
データ型上限(最大許容サイズ)
CHAR1932 バイト
VARCHAR23932 バイト
NCHAR966 バイト
NVARCHAR21966 バイト

PostgreSQL "client encoding missmatch" with unixODBC

PostgreSQL 8.3.11 に PostgreSQL ODBC Drviver 7.3.2 を unixODBC 2.4.3 で接続を行うと下記のエラーが出現します。

[unixODBC]client encoding missmatch

これは、PostgreSQLODBCドライバにおける下位互換の問題です。これは、下記のSQL文を発行することで解決することができます。

postgresq=# alter user [PostgresSQLのユーザー]
set client_encoding to EUC_JP

文字コードの種類については、PostgreSQLの「文字セットサポート」を参照してください。

Visual Studio 2005 のコマンドでビルド

製品開発において、Windowsプラットフォームのデイリービルドは、非常に面倒です。なぜならば、Visual Studioで開発している場合においては、C言語のコンパイルが UnixLinux のようにシェルスクリプトに make コマンドを記述してデーモンで実行できないからです。
しかし、よく調べてみると Visual Studio にもコマンドでビルドできることがわかりました。これは、devenv.exe を用いて行えます。この devenv.exe は、"\Common7\IDE\" フォルダに配置されています。

利用方法は、下記のようになります。
この場合は、CVSのユーザーをRSA認証できるように(パスフレーズ入力なし)設定しなければなりません。

ソリューションでビルド

devenv.exe [solution file] [build type] [build target]
例: devenv.exe Sample.sln /Build "Release|Win32"

プロジェクト単位でビルド

devenv.exe [solution file] [build type] [build target] /Project [project name]
例: devenv.exe Sample.sln /Build "Release|Win32" /Project sample_project

ログに出力

devenv.exe [solution file] [build type] [build target] /Project [project name] /Out [output]
例: devenv.exe Sample.sln /Build "Release|Win32" /Project sample_project /Out Sample.log

これをBATファイルに記述してWindowsのタスクに登録するれば日、週などの単位でビルドを繰り返すことができます。

@echo off
SET CVSROOT=:ext:account@domain.com:/home/user/cvs
SET DEVENV=[visual Studioのインストールフォルダ]\Common7\IDE\
SET _SRC=[source project]
SET _DRIVE=%~d0
SET _PATH=%~p0
SET _CURRENT=%_DRIVE%%_PATH%
SET _DATE=-%date:~-10,4%%date:~-5,2%%date:~-2,2%
SET _LOG=%_CURRENT%%_DATE%.log
Rem: ソースコードのチェックアウトもしくはアップデート
IF NOT EXIST "%_CURRENT%%_SRC%\." GOTO CHECKOUT
IF EXIST "%_CURRENT%%_SRC%\." GOTO UPDATE
:CHECKOUT
echo ソースをチェックアウト
START /WAIT cvs checkout %_SRC%>NUL
:UPDATE
echo ソースのアップデート
START /WAIT cvs update %_SRC%>NUL
%DEVENV%\devenv.exe Sample.sln /Clean "Release|Win32" /Out %_LOG%
%DEVENV%\devenv.exe Sample.sln /Build "Release|Win32" /Out %_LOG%
FIND "1 失敗" %_LOG% > NUL
IF %ERRORLEVEL% == 0 (
echo ビルドに失敗している可能性があります。
FIND /N "1 失敗" %_LOG% >> ERROR%_DATE%.log
)

2010年4月 RDBMSベンダの暗号機能リスト

2010年4月時点の SQL ServerOracle Database のデータ暗号機能についてまとめを掲載します。

RDBMSタイプ単位暗号アルゴリズムサポートされるデータ型
Microsoft SQL Server 2005 関数 DES
DES3
DESX
RC2
RC4
RC4 128-bit
AES 128-bit
AES 192-bit
AES 256-bit
Char / Varcha
Nchar / Nvarchar
Binary / Varbinary
Microsoft SQL Server 2008 TDE ページ 3DES
AES 128-bit
AES 192-bit
AES 256-bit
ページ単位のためなし(要確認)
Oracle 10g TDE AES 128-bit
AES 192-bit
AES 256-bit
DES3 3-keys(168-bit)
CHAR / VARCHAR2
NCHAR / NVARCHAR2
DATE
TIMESTAMP
TIMESTAMP WITH TIME ZONE
TIMESTAMP WITH LOCAL TIME ZONE
INTERVAL DAY TO SECOND
INTERVAL YEAR TO MONTH
NUMBER
RAW
Oracle 11g TDE
表領域
AES 128-bit
AES 192-bit
AES 256-bit
DES3 3-keys(168-bit)
Oracle 10g のサポートデータ型に加え
BINARY_DOUBLE
BINARY_FLOAT
(最大許容サイズ)
CHAR型 最大 1932 byte
VARCHAR2型 最大 3932 byte
NVARCHAR2型 最大 1966 byte
NCHAR型 最大 966 byte

OpensSSLのインストール

CentOS 5.3 i386 に OpenSSL のインストールを実施しました。

OpenSSLの最新版を取得(http://www.openssl.org/source/

# cd /usr/local/src
# wget http://www.openssl.org/source/openssl-0.9.8n.tar.gz展開します。
# tar xzf openssl-0.9.8n.tar.gzコンパイルの準備をします。
# cd /usr/local/src/openssl-0.9.8n
# ./config -fPIC sharedコンパイルします。# makeインストールします。# make installセットアップします。# echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
# ldconfig
|

PostgreSQL ODBC Driver のインストール

PostgreSQLODBCドライバ(psqlodbcw.so)のソースコードを入手してコンパイルインストールを行います。この記事では、PostgreSQL ODBC Driver 08.04.200 を用いています。
※unixODBCがインストールされていなければなりません。

PostgreSQL ODBC Driverの最新版を取得

# cd /usr/local/src
# wget http://wwwmaster.postgresql.org/redir/323/f/odbc/versions/src/psqlodbc-08.04.0200.tar.gz
~省略~
100%[=================================================>] 725,393 2.12M/s in 0.3s 20:18:05 (2.12 MB/s) - `psqlodbc-08.04.0200.tar.gz' を保存しました [725393]

TARボールを展開

# tar -zxvf psqlodbc-08.04.0200.tar.gz
~省略~
# chown -R postgres.postgres psqlodbc-08.04.0200

環境変数LD_LIBRARY_PATHの登録

$ vi .bash_profile
~省略~
export LD_LIBRARY_PATH=/usr/local/lib:/usr/local/pgsql/lib

コンパイル準備

# ./configure
~省略~

configureの実行後に出力される最終行付近で下記のエラーが出力されたら環境変数LDFLAGSを設定して実行してください。

checking size of long... configure: error: cannot compute sizeof (long), 77
# export LDFLAGS='-Xlinker -rpath /usr/local/lib'
# ./configure
~省略~

上記と同じように libpq のエラーが現れた場合は、configure オプションに "--with-libpq" を付与します。

# ./configure --with-libpq=/usr/local/pgsql

configure オプションに "--with-unixodbc" も必要になる場合があります。

# ./configure --with-unixodbc --with-libpq=/usr/local/pgsql

コンパイル

$ make

インストール

# make install
~省略~
make[1]: ディレクトリ `/usr/local/src/psqlodbc-08.04.0200' から出ます

確認

# ls /usr/local/lib/psqlodbcw.so
/usr/local/lib/psqlodbcw.so

ODBCの設定

$ cd ~/
$ vi odbc.ini
[PGSQL]
Driver=/usr/local/lib/psqlodbcw.so
#Driver=/usr/local/lib/libpsqlodbc.so
Database=postgres
Servername=localhost
Port=5432

環境変数ODBCINIの設定

$ export ODBCINI=/home/postgres/odbc.ini

接続確認

$ isql -v PGSQL postgres password
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> quit