#検証 #実装方法 SecurityAPIオブジェクトによる暗号化処理

こんにちは、植田です。

今回はGeneXus 16 Upgrade 8より実装されている、「SecurityAPIオブジェクト」について学んでいきたいと
思います。こちらのAPIには情報の暗号化処理やXML デジタル署名、JSON Web Token の実装等の機能が
集約されています。

参考:GeneXus Security API

今回の検証内容

GeneXusでは、主にログインパスワード等の文字列を暗号化・複合化するにあたり
Encrypt64関数及びDecrypt64関数が使用可能です。

今回ご紹介するSecurityAPIオブジェクトにも、同様に文字列を秘匿する為の機能が存在します。
今回は簡単に(本来は異なる使い方になるのかもしれませんが)こちらのオブジェクトを使用し
パスワード管理ができるようにしてみたいと思います。

GeneXus Cryptography Moduleによる文字列の暗号化・複合化

まず始めに、GeneXus上のKBで文字列の暗号化ライブラリを有効化します。
暗号化方式には様々な種類が使用できますが今回はSSL通信でも使用されるAES(128)を使用していきます。

メニュー→ナレッジマネージャ→参照モジュールの管理を選択

SecurityAPICommons(暗号化・複合化に必要なKey及びIV生成用のライブラリ)と
GeneXusCryptography(暗号化・複合化関数が含まれるライブラリ)を選択し、「インストール」を押下

(私の環境では既にインストール済のため、「復元」ボタンが表示されます。)

新規にプロシージャを作成し、以下のコードを記述

//UsrPas、&wKey、&wIV、&wUsrPasはそれぞれVerChar(256)
//&SymmetricKeyGenerator及び&SymmetricBlockCipherはインストールしたモジュール内のデータ型

//キーとIVを生成
&wKey = &SymmetricKeyGenerator.DoGenerateKey(symmetricKeyType.GENERICRANDOM,128)
&wIV = &SymmetricKeyGenerator.DoGenerateIV(symmetricKeyType.GENERICRANDOM,128)

//AESアルゴリズムで暗号化
&wUsrPas = &SymmetricBlockCipher.DoEncrypt(SymmetricBlockAlgorithm.AES,symmetricBlockMode.ECB,symmetricBlockPadding.PKCS7PADDING,&wKey,&wIV,&pUsrPas)

トランザクションに更新時の処理として実装し、結果を確認

パスワードが暗号化されて保存されていることが確認できます

暗号化されたパスワードを復元するには、以下のコード(一例)を記述します。

//&SymmetricBlockCipherはインストールしたモジュール内のデータ型
//UsrPasKey、UsrPasIV、UsrPasは暗号化時点で生成した値を保持している項目属性

//アルゴリズムで複合化
&wUsrPas = &SymmetricBlockCipher.DoDecrypt(SymmetricBlockAlgorithm.AES,symmetricBlockMode.ECB,symmetricBlockPadding.PKCS7PADDING,UsrPasKey,UsrPasIV,UsrPas)

DB上から複合化したパスワードと画面入力上のパスワード比較をログイン画面に適用した例

暗号化前のパスワード入力での認証が通り、通常メニューが利用可能になりました

まとめ

通信の際の本文を暗号化する目的で利用することが想定される機能ですが、今回は検証ということで
簡単なパスワード管理としての暗号化・複合化について試してみました。

モジュールをKBに取り込んでの実装となりましたが、従来の記述方法で違和感なく記述できる
ところは流石GeneXusですね。
また、こちらのAPIだけでも様々な暗号化方式や、認証方式など、いろいろな組み合わせがあることを知り
兎に角実装して動かしてみるGenXusの特性と相まって非常に理解が深まりました。

最後までご覧いただきありがとうございました!