暗号アルゴリズムのデフォルトの変更について

2024年6月にリリースされた ColdFusion 2023 Update 8 / 2021 Update 14では、暗号アルゴリズムのデフォルトが変更されました。

これまでデフォルトのアルゴリズムは「CFMX_COMPAT」でした。CFMX_COMPATはColdFusion MX およびそれ以前から使用されていたアルゴリズムであり、もっとも安全性の低いものでした。

今回のUpdateから別のアルゴリズムがデフォルトに変更されますので、暗号アルゴリズムを使用している以下の8つの関数(暗号化・複合化の4つの関数、ハッシュ関数、3つの乱数処理関数)を使用している場合は、Update 8を適用した後に、実行結果が異なったりエラーが発生する可能性があります。

●暗号化・複合化の処理: Encrypt,Decrypt,EncryptBinary,DecryptBinary

デフォルトのアルゴリズムが、これまでの「CFMX_COMPAT」から「AES(AES/CBC/PKCS5Padding)」に変更されました。

コーディング例

<cfset str1="あいうえお">
<cfset enckey="enckeyword">

<cfset encrypted=encrypt(str1, enckey)>

暗号化された文字:<cfoutput>#encrypted#</cfoutput><br />

<cfset decrypted=decrypt(encrypted, enckey)>

複合化された文字:<cfoutput>#decrypted#</cfoutput><br />

実行時

Update 7まで

Update 8から


※エラーが発生するのは、CFMX_COMPATアルゴリズムでは任意の文字列をキーに指定できたのに対し、それ以外のアルゴリズムではGenerateSecretKey関数を使ってアルゴリズムに合ったキーを用意する必要があるためです

●ハッシュ処理: Hash

デフォルトのアルゴリズムが、これまでの「CFMX_COMPAT」から「SHA-256」に変更されました。そのためこれまでのCFMX_COMPATで生成されたハッシュされた値をDB内に保存して、その値を比較している処理などでは、Update8からはハッシュされた値が異なるため注意が必要です。

コーディング例

<cfset str1="あいうえお">

<cfset hashed1=hash(str1)>
<cfset hashed2=hash(str1, "CFMX_COMPAT")>
<cfset hashed3=hash(str1, "SHA-256")>


ハッシュされた文字:<br />
指定なし:<cfoutput>#hashed1#</cfoutput><br />
CFMX_COMPAT:<cfoutput>#hashed2#</cfoutput><br />
SHA-256:<cfoutput>#hashed3#</cfoutput><br />


実行時

Update 7まで

ハッシュされた文字:
指定なし:0951373E4D63D23503D7290A3069DB80
CFMX_COMPAT:0951373E4D63D23503D7290A3069DB80
SHA-256:FDB481EA956FDB654AFCC327CFF9B626966B2ABDABC3F3E6DBCB1667A888ED9A


Update 8から

ハッシュされた文字:
指定なし:FDB481EA956FDB654AFCC327CFF9B626966B2ABDABC3F3E6DBCB1667A888ED9A
CFMX_COMPAT:0951373E4D63D23503D7290A3069DB80
SHA-256:FDB481EA956FDB654AFCC327CFF9B626966B2ABDABC3F3E6DBCB1667A888ED9A

 

●乱数処理: RandRandomize, RandRange

乱数生成の処理で使用されるデフォルトのアルゴリズムも「CFMX_COMPAT」から、より高いランダム性である「SHA1PRNG」に変更されました。もし、RandRangeを使用してシードを固定し、Randで同じ乱数値を生成している場合は、使用するアルゴリズムが変更されるため、シード値や生成される乱数値が異なりますので注意してください。

コーディング例

<strong>指定なし</strong><br />
<cfset randomize(12345)><!--- 乱数固定シード値 --->
<cfloop index="i" from="1" to="3">
    <cfoutput>#i#回目: #rand()#</cfoutput><br />
</cfloop>

<strong>CFMX_COMPAT</strong><br />
<cfset randomize(12345,"CFMX_COMPAT")><!--- 乱数固定シード値 --->
<cfloop index="i" from="1" to="3">
    <cfoutput>#i#回目: #rand("CFMX_COMPAT")#</cfoutput><br />
</cfloop>

<strong>SHA1PRNG</strong><br />
<cfset randomize(12345,"SHA1PRNG")><!--- 乱数固定シード値 --->
<cfloop index="i" from="1" to="3">
    <cfoutput>#i#回目: #rand("SHA1PRNG")#</cfoutput><br />
</cfloop>

実行時

Update 7まで

指定なし
1回目: 0.932993485289
2回目: 0.833091348971
3回目: 0.326475756238
CFMX_COMPAT
1回目: 0.932993485289
2回目: 0.833091348971
3回目: 0.326475756238
SHA1PRNG
1回目: 0.850574456954
2回目: 0.717023215198
3回目: 0.61297831565


Update 8から

指定なし
1回目: 0.850574456954
2回目: 0.717023215198
3回目: 0.61297831565
CFMX_COMPAT
1回目: 0.932993485289
2回目: 0.833091348971
3回目: 0.326475756238
SHA1PRNG
1回目: 0.850574456954
2回目: 0.717023215198
3回目: 0.61297831565

 


Update 8を適用することによって、既存の処理に影響が生じる場合は、以下のいずれかの方法にて対応を行ってください。

  • 既存の暗号化済みのデータなどを新しいデフォルトアルゴリズムで再変換する
    • CFMX_COMPAT を使用した暗号化済みのデータは、一旦CFMX_COMPATアルゴリズムで複合化し(元の文字列に戻し)、再度新しいデフォルトの暗号化アルゴリズムで暗号化し直し、既存の暗号化データと置き換えます
    • ハッシュ関数やRandRange&Rand関数による乱数の固定化を使用している場合は、関数の実行結果の値が異なりますので、保存済みのデータを新しいアルゴリズムを使用して実行された値に置き換えます
       
  • 元のCFMX_COMPATをデフォルトのアルゴリズムに戻す
    • 修正範囲が多いなど、すぐに対応できない場合に備え、以前のデフォルトアルゴリズム(CFMX_COMPAT)に戻すためのJVM引数が新たに用意されました
    • ColdFusion Administratorの「サーバーの設定 > Java と JVM」の『JVM引数』に新たに追加されたJVMフラグ『-Dcoldfusion.encryption.useCFMX_COMPATAsDefault=TRUE』を指定することで、Update 8以降でもデフォルトアルゴリズムをCFMX_COMPATに戻すことができます。
      • ※JVM引数にフラグを追加する場合は、項目と項目の区切りは空白で、改行は入れないでください
      • ※このJVMフラグは、次のメジャーバージョンアップでは廃止される予定です
         
  • プログラムを修正し、対象の関数に対して「CFMX_COMPAT」を指定する
    • これまではデフォルトアルゴリズムとして省略が可能だったCFMX_COMPATを(デフォルトではなくなったため)対象の関数にアルゴリズムを明示します
      • 上記のプログラムコード例で言うと、Encrypt・Decrypt処理は以下のようになります
        <cfset encrypted=encrypt(str1, enckey)>

        <cfset encrypted=encrypt(str1, enckey,"CFMX_COMPAT")>

        <cfset decrypted=decrypt(encrypted, enckey)>

        <cfset decrypted=decrypt(encrypted, enckey,"CFMX_COMPAT")>
      • ハッシュ処理や乱数処理は、それぞれプログラムコード内にCFMX_COMPATをアルゴリズムとして明示している箇所がありますので、そちらを確認してください

 


記事公開日:2024年06月13日
最終更新日:2024年06月13日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.