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 が採用されています。パラメータ名 | 暗号アルゴリズム | 10g | 11g |
3DES168 | 3-keys 3DES(168-bit) | ○ | ○ |
AES128 | AES 128-bit | ○ | ○ |
AES192 | AES 192-bit(デフォルト) | ○ | ○ |
AES256 | AES 256-bit | ○ | ○ |
利用可能なデータ型
Oracle TDEでは、主要なデータ型をサポートしています。データ型 | 種別 | 10g | 11g |
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 | バイナリ型 | ○ |
制限事項
利用可能なデータ型のうち、下表の文字型には上限があります。データ型 | 上限(最大許容サイズ) |
CHAR | 1932 バイト |
VARCHAR2 | 3932 バイト |
NCHAR | 966 バイト |
NVARCHAR2 | 1966 バイト |
PostgreSQL "client encoding missmatch" with unixODBC
PostgreSQL 8.3.11 に PostgreSQL ODBC Drviver 7.3.2 を unixODBC 2.4.3 で接続を行うと下記のエラーが出現します。
[unixODBC]client encoding missmatch
これは、PostgreSQLのODBCドライバにおける下位互換の問題です。これは、下記のSQL文を発行することで解決することができます。
postgresq=# alter user [PostgresSQLのユーザー] set client_encoding to EUC_JP
文字コードの種類については、PostgreSQLの「文字セットサポート」を参照してください。
Visual Studio 2005 のコマンドでビルド
製品開発において、Windowsプラットフォームのデイリービルドは、非常に面倒です。なぜならば、Visual Studioで開発している場合においては、C言語のコンパイルが Unix や Linux のようにシェルスクリプトに make コマンドを記述してデーモンで実行できないからです。
しかし、よく調べてみると Visual Studio にもコマンドでビルドできることがわかりました。これは、devenv.exe を用いて行えます。この devenv.exe は、"
利用方法は、下記のようになります。
この場合は、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 Server と Oracle 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 のインストール
PostgreSQL のODBCドライバ(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