Slim3のモデル暗号化についての内容です。
※ハマっちゃいました。filterの書き方大事。
☓ MyModel userData = Datastore.query(t) .filter("myname", FilterOperator.EQUAL, "hoge").asSingle(); ◯ MyModel userData = Datastore.query(t) .filter( t.myname.equal("hoge")).asSingle();なんでオレ、上の書き方してたんやろ・・・
以下、Slim3公式の説明より引用
元となったディスカッションはこちら
http://groups.google.com/group/slim3-user-japan/browse_thread/thread/4999dfd7553c5f38?pli=1
Cipher Text
https://sites.google.com/site/slim3appengine/slim3-datastore/defining-data-classes/cipher-text
個人情報や機密情報を安全に扱うために暗号化をする必要がある場合があります。Slim3は暗号化機能をサポートしています。暗号化アルゴリズムと対象のフィールド型は次の通りです:
- アルゴリズム: AES (Advanced Encryption Standard)
- 暗号利用モード(Block cipher mode): CBC (Cipher Block Chaining)
- 暗号鍵: 128bit (192 bit と 256bit はサポートしていません)
- フィールド型: java.lang.String, com.google.appengine.api.datastore.Text
Slim3でBigtableのデータを暗号化するのはとても簡単です:
- 対象のフィールドに @Attribute(cipher = true) アノテーションを使用します。
- 暗号鍵をSlim3 Datastoreに設定します。
- Slim3 Datastoreを使用した操作をします。
モデル定義の例です:
@Attribute(cipher=true) private String myString; @Attribute(cipher=true, lob=true) private String myLobString; @Attribute(cipher=true) private Text myText;暗号鍵を設定する例です:
Datastore.setLimitedCipherKey("hogehogehogehoge"); Datastore.setGlobalCipherKey("hogehogehogehoge");setLimitedCipherKeyは、スレッドローカルの暗号鍵を設定します。その鍵は現在のスレッド内の暗号化・復号化で使用されます。
FrontControllerは各コントローラを呼び出した後に暗号鍵をクリアします。このメソッド(setLimitedCipherKey)はコントローラー毎に異なる暗号鍵を使用する場合を想定しています。
setGlobalCipherKeyは暗号鍵をスタティック領域に設定します。その鍵は全てのスレッドで使用されます。FrontControllerはsetGlobalCipherKeyメソッドで設定された暗号鍵はクリアしません。このメソッドはシステム内で固定の暗号鍵を使用する場合を想定しています。
LimitedCipherKeyの方がGlobalCipherKeyよりも優先されます。さらに両方の値が未設定の場合、例外がスローされます。128bit(16文字)の暗号鍵を設定してください。
GlobalCipherKeyの値は appengine-web.xml で指定できます:
<system-properties> <property name="slim3.cipherGlobalKey" value="hogehogehogehoge"/> </system-properties>暗号化と復号化は自動的に行われます。
暗号化フィールドに対して、インメモリのフィルタとソートは全てサポートされています。
暗号化フィールドに対するデータストアクエリのフィルタには制限があります。以下のフィルタがサポートされています:
- EqualCriterion
- IsNotNullCriterion
- NotEqualCriterion
データストアクエリのソートはサポートされていません。
0 件のコメント:
コメントを投稿