FileMaker 16新機能 – 暗号化

FileMaker 16ラインナップに搭載された文字列を暗号化する関数
「CryptEncrypt」と復号する関数「CryptDecrypt」

    

FileMaker 16ラインナップの場合、AES128-GCM-SHA256 という暗号化スイートを用います。この関数はPBKDF2アルゴリズムを使用して「キー引数」を暗号化キーに変換します。

暗号化関数「CryptEncrypt」は「encrypted.data」という名前のオブジェクトデータとして返します。オブジェクトデータは目で見て分かり難いので、Base64処理をしてエンコードテキストとすることで文字列とします。

・CryptEncrypt → CryptEncryptBase64 (暗号化) ・CryptDecrypt → CryptDecryptBase64 (復号)  ちなみに、「暗号化」の対義語は「復号」です ^_^

余談ですが、古くはDESという暗号化スイートが利用されてきましたが、この方法は解読技術の進化(鍵の総当たり方式で解読できてしまう)ということで2030年までに廃止することが「IPA 独立行政法人 情報処理推進機構」で推奨されています。その代わりに登場した暗号化スイートが「AES」で、「128」とはその中でも128ビットずつ平文を暗号化することを示します。

また、SHA256はSSL証明書などで「移行推奨」とされたことでも有名ですが、これは原文から256ビットのハッシュ値を算出することができるハッシュ関数です。

少し話が飛びましたが、前述DESの暗号化では二重、三重に暗号化する方法があり、それぞれ2DES、3DESと言われてきました。

そこで、以下のような実験をすることにしました。
・原文は落語で有名な「じゅげむ」を使用しました
・FileMaker 16 Pro のCryptEncryptBase64関数を使って暗号化
・この暗号化を5回周り暗号化 (5AES?)
・暗号化したデータを一気に復号
・さらに 999,999件のレコードで処理

ちなみに、Cryptキーは30文字(レコードごとに増分発行されるシリアルを使用)としました。

つまり、999,999件のデータを5回暗号化して復元したときに間違いなくもとに戻せるかという実験をしました。

1時間ほどでこの実験は完了。すべてのレコード(データ)で暗号化、復号は正しく処理されました。(さすがFileMaker !! と言いたいところですが、当然といえば当然です ^_^)

ちなみに、これも当然ですが暗号化1回目、2回目、3回目 … と増えるにつれ暗号化された文字列はどんどん長くなります(笑)

それから、Cryptキーはグローバルフィールドやグローバル変数ですべて同じにせず、全レコード異なるCryptキーを使いました。Cryptキーが分かってしまうと簡単に復号できてしまうからです。(もっとも、そのために5重の暗号化をしたのですが … )

また解読自体困難で、万が一DES同様、鍵の総当たりで解読できてしまう時代が来るならば全レコードで異なるCryptキーを使ってもあまり意味はありませんが、そんな時代が来る前の対策として異なるキー設定という考え方もありなのではないでしょうか。

解釈や理解が間違っている点もあるかもしれませんが、個人的な見解として

・暗号化キーは分かりづらい文字列をレコードごとに変える
・暗号化は1重でなく2重、3重で複雑にできる

これはFileMakerだけでなく、ネットでよく利用されるMySQL、PostgreSQL、はたまたその派生でも少し考えて見る価値はあると思います。

ちなみに、旧漢字ばかりの文字列を同じ処理に掛けた場合でも文字化けすることなく復号できました