SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Ignite で発表された Always Encrypted についての情報について

leave a comment

Ignite で SQL Server 2016 の機能として Always Encrypted が発表されました。
この機能の情報を少しまとめてみたいと思います。

セキュリティ系のアップデートは、毎度恒例 Overview and Roadmap for Microsoft SQL Server Security を参照していただければと。

SQL Server 2016 / SQL Database として発表されていますので、両データベースで最終的には使用できるようになるのかと思います。

image

こちらはキーノート等で発表されていた情報となります。
image

冒頭で紹介したセッションでは、さらに追加の情報が公開されています。
基本的な仕組みについてはキーノートで発表されたものと同じになっています。
image

追加の情報として、暗号化方式についての解説が行われています。
image

暗号化の方法として、

  • Randomized Encryption
  • Deterministic Encryption

の 2 種類が提供されるようです。

ランダム化された暗号化では、同一のデータを暗号化した場合でも、暗号化ごとに異なるデータとして格納が行われれています。

決定的な暗号化では、同一のデータを暗号化しても、同じデータで暗号化されます。
そのため、決定的な暗号化を使用している場合は、WHERE 句等の操作系の列として使用することができます。

セッション内ではデモも行われています。
CMK (Column Master Key) を使用した、CEK (Column Encryption Key) の作成からデモが行われています。

暗号化をするためには、CMK を使用して、CEK を作成する必要があります。
image

CMK のキーストアとしては、

  • 証明書ストア
  • Hardware Security Module (HSM)
  • Azure Key Valut

というような複数の CMK ストアを使用することができます。
image

格納したキーについては「sys.column_master_key_definitions」で確認をすることができます。
image

これらのテーブルについては、すでに SQL Database v12 では実装されているようですね。
image

作成した CEK を使用して、各列を暗号化することができますが、テーブルを作成する際に、暗号化の設定をするようです。
image
image

sys.columns にも以下の項目が暗号化の状態を示す項目として拡張が行われています。
# v12 でも確認することができます。

image

  • encryption_type
  • encryption_type_desc
  • encryption_algorithm_name
  • column_encryption_key_id
  • column_encryption_key_database_id

既に登録済みのデータを暗号化するための方法として、SSIS を使用したデータのインポートが紹介されています。

SSIS で、「.Net Framework Data Provider for SqlServer」を使用する際のオプションとして、「Column Encryption Setting」を設定できるようになっています。
image

これにより、既存データを暗号化データとして再インポートすることが可能となっています。

暗号化されたデータをアプリケーションで扱うためには接続文字列にも設定が必要となります。

暗号化された状態のデータに対して、通常の接続文字列でアクセスをすると、以下のようにバイトデータとしての認識となります。

image

Always Encrypted で暗号化されたデータにアクセスするためには、アプリケーション側でも「Column Encryption Setting」を有効にする必要があります。
image

これにより、アプリケーションから、暗号化されたデータを複合化することができます。

image

暗号化されたデータへのアクセスは、SQL Profiler 等でキャプチャをしても、暗号化された状態で検索が行われるため、複合化されたデータについてはクエリレベルのアクセスでも表れてこない形となります。
image

Column Encryption Setting については、SqlClient Connection String Structure を読んでみるとよいかと思います。

Always Encrypted は SQL Server 2005 で実装された CLE (Cell Level Encryption) を透過的に利用できるように拡張したものというイメージでしょうかね。

Share

Written by Masayuki.Ozawa

5月 9th, 2015 at 8:48 pm

Leave a Reply