Always Encrypted

Always Encryptedで暗号化されたカラムを格納するバイト数を調べてみた

Always Encryptedで暗号化されたカラムを格納するのに必要なバイト数の情報は、以下のサイトに記載されている。
https://docs.microsoft.com/ja-jp/sql/relational-databases/security/encryption/always-encrypted-cryptography?view=sql-server-ver15

上記サイトを確認すると、暗号化した後の文字列のバイト数は、VARCHAR型の文字列の場合、以下の計算式で計算できる。
1 + 32 + 16 + (FLOOR(DATALENGTH(cell_data)/16) + 1) * 16

例えば、暗号化前の文字列がVARCHAR(16)の場合、暗号化した後の文字列のバイト数は、
1 + 32 + 16 + (FLOOR(16/16) + 1) * 16 = 1 + 32 + 16 + 2 * 16 = 81 となり、
暗号化した後の文字列は、実際、VARCHAR(81)のデータ型に格納できる。

今回は、16文字の暗号化した文字列を、VARCHAR型、文字列長81のデータ型に格納してみたので、その手順を共有する。

前提条件

下記記事の実装が完了していること。

Always Encryptedで暗号化されたカラムを更新してみたJDBC接続文字列に「columnEncryptionSetting=Enabled」を追加し、Azure Key Vault に対する...

やってみたこと

  1. USER_PASSテーブルの再作成
  2. 暗号化文字列の更新
  3. 暗号化文字列のバイト数確認

USER_PASSテーブルの再作成

前提条件で作成したUSER_PASSテーブルは、暗号化前文字列長が16、暗号化後文字列長が81になっていないため、USER_PASSテーブルを再作成する。その手順は以下の通り。

1) USER_PASSテーブルを削除するため、以下のSQLを実行する。

USER_PASSテーブルの再作成_1

2) USER_PASSテーブルを作成するため、以下のSQLを実行する。

USER_PASSテーブルの再作成_2

3) USER_PASSテーブルにデータを追加する。

USER_PASSテーブルの再作成_3

4) USER_PASSテーブルの追加されたデータを確認する。

USER_PASSテーブルの再作成_4

5) USER_PASSテーブルのカラム「pass_encrypted」を暗号化する。
その手順は、以下の記事の「SSMSを使ったAlways Encryptedによるカラム暗号化」を参照のこと。

SQL DatabaseのカラムをSSMSを使ってAlways Encryptedで暗号化してみたAlways Encryptedを利用すると、SQL DatabaseやSQL Serverのデータベースに格納された、クレジットカード...

6) USER_PASSテーブルの暗号化されたデータを確認する。

USER_PASSテーブルの再作成_6

暗号化文字列の更新

パスワード・暗号化したパスワードの更新は、下記記事のプログラムを利用して行う。

Always Encryptedで暗号化されたカラムを更新してみたJDBC接続文字列に「columnEncryptionSetting=Enabled」を追加し、Azure Key Vault に対する...

今回は、パスワードを16文字の「12345abcdeABCDE1」に更新し、ローカル環境で実行するものとする。

1) ローカル環境のApp Service、Azure Functionsを起動し、「http:// (ホスト名):(ポート番号)」とアクセス後、パスワード「12345abcdeABCDE1」を指定し「UserPassを更新」ボタンを押下する。
パスワードの更新_1

2) パスワードが更新され、以下の画面が表示される。その後「getUserPassの値を取得」ボタンを押下する。
パスワードの更新_2

3) 以下のように、更新後パスワードが表示されることが確認できる。
パスワードの更新_3

暗号化文字列のバイト数確認

パスワードと暗号化したパスワードの更新後結果を確認する。その手順は、以下の通り。

1) USER_PASSテーブルのデータを確認すると、以下のように、画面で指定した通りに、パスワード・暗号化したパスワードが更新されていることが確認できる。

●復号化しなかった場合
パスワードの確認_1_1

●復号化した場合
パスワードの確認_1_2

2) パスワード・暗号化したパスワードのバイト数を確認すると、以下のように、暗号化前のパスワード文字列が16バイト、暗号化後のパスワード文字列が81バイトであることが確認できる。

パスワードの確認_2

要点まとめ

  • Always Encryptedで暗号化されたカラムを格納するための文字列のバイト数は、特定の計算式で計算できる。
  • VARCHAR型の文字列の場合は、Always Encryptedで暗号化されたカラムを、VARCHAR(算出したバイト数)のデータ型に格納できる。