4D-JUG
Would you like to react to this message? Create an account in a few clicks or log in to continue.

HMACの計算

2 posters

Go down

HMACの計算 Empty HMACの計算

投稿 by HARADA Koichi 2020-04-14, 10:46 pm

みなさんこんにちは。

JWSを生成するためにHMACを計算するコードを4Dで書いているのですが、正しい答えを計算できず行き詰まっております。
どなたか、ここがおかしいじゃん、とご指摘いただけるとありがたいです。以下のコード例はHMAC-SHA256を前提にしています。

なおこのストラクチャーは
github.com/KoichiHaradaEndor/Crypto
に置いてありますので、こちらが見にくければ、ぜひそちらをご参照ください。
_t : テキスト型
_x : BLOB型

Code:

  // 鍵の前処理
CONVERT FROM TEXT($key_t;"UTF-8";$key_x)
If (BLOB size($key_x)>64)
  // 鍵のサイズがブロック長を超えていたらハッシュする
 $key_t:=Generate digest($key_x;SHA256_Digest)
 CONVERT FROM TEXT($key_t;"UTF-8";$key_x)
End if

  // ブロック長まで0x00で埋める
SET BLOB SIZE($key_x;$blockSize_l;0x0000)

  // ipadKeyとopadKeyを作成する
SET BLOB SIZE($ipadKey_x;$blockSize_l;0x0036)
SET BLOB SIZE($opadKey_x;$blockSize_l;0x005C)

  // KeyとのXORをとる
For ($i;0;$blockSize_l-1)
 $ipadKey_x{$i}:=$key_x{$i} ^| $ipadKey_x{$i}
 $opadKey_x{$i}:=$key_x{$i} ^| $opadKey_x{$i}
End for

  // H(ipad || M)
CONVERT FROM TEXT($message_t;"UTF-8";$message_x)
COPY BLOB($message_x;$ipadKey_x;0;BLOB size($ipadKey_x);BLOB size($message_x)) // ipad || M
$firstDigest_t:=Generate digest($ipadKey_x;$algorithm_l)
CONVERT FROM TEXT($firstDigest_t;"UTF-8";$firstDigest_x)

  // H(opad || FirstDigest)
COPY BLOB($firstDigest_x;$opadKey_x;0;BLOB size($opadKey_x);BLOB size($firstDigest_x))
$hmac_t:=Generate digest($opadKey_x;$algorithm_l)

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi 2020-04-14, 10:49 pm

追記
先ほどのコードで
$blockSize_l は 64 です。

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi 2020-04-14, 10:51 pm

ちなみにmacOSでは
Code:

$command_t:="openssl dgst -"+$algorithm_t+" -hmac \""+$key_t+"\""
LAUNCH EXTERNAL PROCESS($command_t;$message_t;$hmac_t;$error_t)
でHMAC計算できるのは見つけました。

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako 2020-04-15, 8:19 am


miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi 2020-04-15, 9:06 am

miyako さん

いつも素早いリプライありがとうございます。
はい、JWTをHMAC等で署名してJWSにしたかったのです。

早速参考にさせていただきます。

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako 2020-04-15, 9:14 am

追伸

バージョンは未定ですが,4D for iOSの関係で,"ES256 json web token"を標準コマンドでサポートするための作業が現在進行中です。近々,上記のようなソリューションは採用しなくても良くなるかもしれません。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi 2020-04-15, 9:27 am

Ya Hoo!
それは嬉しいニュースです。
標準コマンドで用意されるのが一番ですからね。

ところで一番標準コマンドで欲しいのは、暗号論的疑似乱数を生成するコマンドだったりします。
みなさんセッションIDやJWSの鍵生成などどうされているのでしょう。

"ES256 json web token"を標準コマンドとして実装する時に同時に鍵生成コマンドもないと、4D的にはすべて内部で生成・検証を行う形になり、ひいては4D for iOSでしか使えないなんてことにならないかな。そういう意味ではJWKもサポートして欲しいところです。

ああっすみません、嬉しくてつい欲求が溢れ出してしまいました。

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi 2020-04-15, 3:29 pm

miyakoさん

情報をいただきありがとうございました。
ミスは、HEX文字列をUTF-8としてBLOBにしていたことでした。
一つの文字づつ4byteにつっこむべきでした。

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako 2020-04-15, 8:15 pm

(ライブラリに)いろいろバグがあったので,こちらも修正しました。

https://github.com/miyako/4d-plugin-jwt

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako 2020-04-16, 8:55 am

「鍵生成コマンドもないと・・」

前述したcryptoですが,ECDSAキーペア(ES256, ES384, ES512用)とRSAキーペア(RS256, RS384, RS512, PS256, PS384用)の生成はサポートされることになりそうです。

しかし,暗号論的疑似乱数については,何も予定されていないようです。

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako 2020-04-16, 9:24 am

ざっとネットサーフィンしただけなので,間違っているかもしれませんが・・

Windows: BCryptOpenAlgorithmProvider+ BCRYPT_RNG_ALGORITHM+ BCryptGenRandom

macOS: arc4random

で合格でしょうか。

c.f.

https://tics.tiobe.com/viewerCPP/index.php?ID=2636
https://www.jpcert.or.jp/m/sc-rules/c-msc30-c.html

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako 2020-04-16, 12:24 pm

参考資料として作成してみました

https://miyako.github.io/2020/04/16/4d-plugin-random.html

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi 2020-04-16, 3:10 pm

miyakoさん

調査いただきありがとうございます。

いやー、それなら大丈夫!と言うことができるならよいのですがね。
わたしはそちらの専門ではないので、だからこそ4Dに安全なセッションIDやHMAC鍵を発行するコマンドを用意して欲しいのです。

これはIPAの資料にも書いてありますが、素人が勝手に「これでよいだろう」と判断するのではなく、ベンダーが提供する機能を使えとなっています。

なので、ここはセキュリティや暗号の専門家の方にお任せしたいです。

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako 2020-08-20, 11:34 pm

HARADA Koichi wrote:Ya Hoo!
それは嬉しいニュースです。
標準コマンドで用意されるのが一番ですからね。

4D v18 R4 で Crytokey クラスが追加され,コマンドで鍵が発行できるようになりました。

新機能をぜひご確認ください。

ご参考記事https://blog.4d.com/cryptokey-encrypt-decrypt-sign-and-verify/
ドキュメントhttp://developer.4d.com/docs/ja/API/cryptoClass.html
サンプルhttps://github.com/4D-JP/HDI/releases/download/18r4/HDI_Cryptokey_class.zip

---

暗号論的疑似乱数について

Random関数が内部的に使用している関数は下記のとおりです。

https://4d-jp.github.io/2020/08/20/random/

miyako

投稿数 : 480
登録日 : 2016/07/05

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi 2020-08-21, 12:16 am

miyakoさんありがとうございます。
鍵も生成できるし、嬉しい限りです。

せっかく作ったJWTコンポーネントは一回も陽の目を見ることなく、ネイティブに置き換えられましたが、良い方向です。

HARADA Koichi

投稿数 : 14
登録日 : 2020/04/10

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可