HMACの計算

Go down

HMACの計算 Empty HMACの計算

投稿 by HARADA Koichi on 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

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

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

HARADA Koichi

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by HARADA Koichi on 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

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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


miyako

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

miyako さん

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

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

HARADA Koichi

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

追伸

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

miyako

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

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

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

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

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

HARADA Koichi

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

miyakoさん

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

HARADA Koichi

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

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

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

miyako

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

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

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

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

miyako

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by miyako on 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

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

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

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

miyako

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

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

miyakoさん

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

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

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

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

HARADA Koichi

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

トップに戻る Go down

HMACの計算 Empty Re: HMACの計算

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


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