この記事では [Crypt〇〇] 系の関数について紹介します。自社用の カスタム App を作成するときにはなかなか触れることのない関数だと思いますので、ぜひこの記事で関数の動きについて確認してみてください。

 今回ご紹介するのは以下の関数です。

・ CryptAuthCode
・ CryptDecrypt
・ CryptDecryptBase64
・ CryptDigest
・ CryptEncrypt
・ CryptEncryptBase64
・ CryptGenerateSignature ( v18~ )
・ CryptVerifySignature ( v18~ )


CryptAuthCode

 CryptAuthCode ( データ ; アルゴリズム ; キー )

 CryptAuthCode 関数は、あるデータに対して 共通鍵 を用いて固定長のデータを算出する、メッセージ認証コード: MAC( Message Authentication Code )のうち、ハッシュ関数を用いる方式 HMAC( Hash-based Message Authentication Code )を用いて、ハッシュ値を算出する関数です。共通鍵を使用することで、データの 正真性 が保護され、不正な改ざんを防ぐことができます。(共通鍵がなければ、改ざん後のデータのハッシュを求めることができない。)公開鍵 を用いるデジタル署名と異なり、否認防止の性質を持たない 点は覚えておきましょう。

  • 共通鍵 を用いたハッシュ値を比べることで、データが改ざんされていないかは検出できる。
  • 共通鍵 を用いているが故に、そのデータを誰が作成したのかを特定することはできない。

データ

 ハッシュ値を算出する元となるテキストデータを指定します。

アルゴリズム

 使用する暗号化アルゴリズム名を指定します。未指定の場合は SHA512 が適用されますが、認識されない名称を指定すると関数は [?] という結果を返しますのでご注意ください。

・ MD5
・ SHA1
・ SHA224
・ SHA256
・ SHA384
・ SHA512

 ※以下のアルゴリズムはバージョン19においては使えなくなりましたのでご注意ください。バージョン18 からのマイグレーションの際には改修を行う必要があります。

・ MDC2
・ SHA

キー

 ハッシュ値の算出に使用するキーとなるデータを指定します。


CryptDigest

 CryptDigest ( データ ; アルゴリズム )

 CryptDigest 関数は、あるデータに対してハッシュ値を算出するメッセージダイジェスト: Message Digestというアルゴリズムを利用し、指定された暗号化アルゴリズムを使用して、ハッシュ値を算出する関数です。Message Digest は、データの同一性を判定するのに用いられます。

 前述の CryptAuthCode 関数と異なり、キーは使用されません。戻り値は「digest.data」という名称のオブジェクトデータとなります。

データ

 ハッシュ値を算出する元となるテキストデータを指定します。

アルゴリズム

 使用する暗号化アルゴリズム名を指定します。未指定の場合は SHA512 が適用されますが、認識されない名称を指定すると関数は [?] という結果を返しますのでご注意ください。

・ MD5
・ SHA1
・ SHA224
・ SHA256
・ SHA384
・ SHA512


CryptEncrypt

 CryptEncrypt ( データ ; キー )

 指定されたキーを用いて暗号化されたオブジェクトデータを返します。戻り値は「encrypted.data」という名前のオブジェクトデータとなります。

データ

 暗号化するデータを指定します。

キー

 ハッシュ値を算出する元となるテキストデータを指定します。


CryptDecrypt

 CryptDecrypt ( オブジェクト ; キー )

 指定されたキーでオブジェクトデータを復号して、その結果のテキストデータ、もしくはオブジェクトデータを返します。キーが不正な場合は、? を返します。

オブジェクト

 CryptEncrypt 関数 で計算した結果のオブジェクトデータを指定します。

キー

 オブジェクト を CryptEncrypt 関数 で暗号化する際に用いたものと同じ [キー] を指定します。


CryptEncryptBase64

 CryptEncryptBase64 ( データ ; キー )

 指定されたキーを用いて暗号化された RFC 4648標準の Base64 テキストデータを返します。結果が Base64 のデータであることを除いて、CryptEncrypt 関数と同じ動作をします。

データ

 暗号化するデータを指定します。

キー

 ハッシュ値を算出する元となるテキストデータを指定します。


CryptDecryptBase64

 CryptDecryptBase64 ( オブジェクト ; キー )

 指定されたキーでオブジェクトデータを復号して、その結果のテキストデータ、もしくはオブジェクトデータを返します。キーが不正な場合は、? を返します。オブジェクト に CryptEncryptBase64 関数で作成したデータを用いることを除いて、CryptDecrypt 関数と同じ動作をします。

オブジェクト

 CryptEncryptBase64 関数 で計算した結果の Base64 テキストデータを指定します。

キー

 オブジェクト を CryptEncryptBase64 関数 で暗号化する際に用いたものと同じ [キー] を指定します。


CryptGenerateSignature

 CryptGenerateSignature ( データ ; アルゴリズム ; プライベート RSA キー ; キーパスワード )

 指定した アルゴリズム と RSA 秘密鍵 を使用して、データのデジタル署名を生成します。

データ

 署名を生成する対象のファイルやテキストを指定します。

アルゴリズム

 使用する暗号化アルゴリズム名を指定します。

・ MD5
・ SHA1
・ SHA224
・ SHA256
・ SHA384
・ SHA512

プライベート RSA キー

 この関数とは別途、用意した RSA 秘密鍵 を指定します。RSA 秘密鍵は OpenSSL ツールキット などで生成できます。

キーパスワード

 用意した RSA 秘密鍵 にパスワードを設定している場合、そのパスワードを指定します。パスワードが設定されていない場合は 「 “” 」と指定します。


CryptVerifySignature

 CryptGenerateSignature ( データ ; アルゴリズム ; パブリック RSA キー ; 署名 )

 指定したデータに対して、デジタル署名が有効かを検証します。戻り値は 0 か 1 です。

データ

 署名が有効かの検証を行う対象となるファイルやテキストを指定します。

アルゴリズム

 使用する暗号化アルゴリズム名を指定します。

・ MD5
・ SHA1
・ SHA224
・ SHA256
・ SHA384
・ SHA512

パブリック RSA キー

 この関数とは別途、用意した RSA 公開鍵 を指定します。RSA 公開鍵は OpenSSL ツールキット などで生成できます。

署名

 CryptGenerateSignature 関数などによって生成されたデジタル署名を指定します。


 FileMaker Pro 19 には、ハッシュ値の生成やデータの暗号化、デジタル署名の生成・検証など、セキュリティについて最低限必要な関数が揃っています。これらの関数を利用して、よりセキュアなソリューションを開発することを心がけたり、外部サービスとの連携の可能性を模索していければ、いろいろとできることが広がりそうですね。