論理合成可能SHA-1コプロセッサのDSSHA1の理解

要約

チャレンジ/レスポンス認証では、隠されたシークレットと公開されたデータに基づいてMAC発行元とMAC受取り側がメッセージ認証コードを計算する必要があります。発行元は、通常はSHA-1認証用ICまたはSHA-1エンジン内蔵の保護されたメモリです。MAC受取り側は、アプリケーションのホストプロセッサです。このアプリケーションノートは、DS2460 SHA-1コプロセッサまたはマイクロプロセッサに基づく実装の代替としてASIC (application-specific integrated circuit)またはFPGA (field-programmable gate array)の形で実装することができる、論理合成可能SHA-1コプロセッサのDSSHA1について説明します。

はじめに

チャレンジ/レスポンス認証は、メッセージ認証コード(MAC)の計算に基づいています。この方式にはMAC発行元とMAC受取り側という2つのエンティティが関与し、両者は隠されたシークレットを共有します。MAC発行元の真正性を証明するために、MAC受取り側は乱数を生成し、それをチャレンジとして発行元に送信します。次に、MAC発行元はシークレット、メッセージ、およびチャレンジに基づいて新しいMACを計算し、受取り側にそれを送り返す必要があります。発行元が任意のチャレンジに対して有効なMACを生成することができることを証明した場合、シークレットを知っていることが確実になり、真正と考えることができます。徹底的に精査され、国際的に認定されたメッセージ認証コード計算アルゴリズムとして、米国国立標準技術研究所(NIST)によって開発されたSHA-1があります。

マキシムはSHA-1アルゴリズムを採用した一連の認証デバイスを製造しています。チュートリアル3675 「セキュア認証によるR&D投資の保護」では、セキュアメモリおよびDS2460 SHA-1コプロセッサという形のマキシムの認証ソリューションについて説明しています。メモリマップSHA-1コプロセッサのDSSHA1により、DS2460の計算機能をASIC (application-specific integrated circuit)またはFPGA (field-programmable gate array)で実装することが可能で、複雑なSHA-1計算を実行するソフトウェアの開発が不要になります。DSSHA1またはDS2460によって計算されるMACは、マキシムのSHA-1デバイスのみに適用可能です。

説明

DSSHA1は、64バイトのメッセージを保存する64バイトの汎用RAMを内蔵した、論理合成可能なメモリマップSHA-1コプロセッサです。入力メッセージはSHA-1 MACの計算に使用されます。DSSHA1の入出力ポート信号は、内部で32ビットバスに接続するように設計されています。比較結果の一致によって、ホストシステムとスレーブアクセサリの間で認証セキュリティが実現されます。

図1は、DSSHA1のブロック図を示します。表1は、DSSHA1とホストシステムを接続する信号の説明です。データバス入力、アドレス、および制御信号を使用して、64バイトのSHA-1メッセージがRAMに挿入されます。入力信号RUN_SHAをロジックハイにトリガすることによって、SHA-1計算が開始されます。出力信号BUSYは、計算が実行中であることを示します。BUSY信号が終了した時点で、結果レジスタに格納された20バイトのメッセージダイジェストを読み取ることができます。

5485Fig01

図1. ブロック図

表1. 信号の説明
Name Type* 機能
CLK I クロック。立上りエッジで、信号DATAI[31:0]およびDATAO[31:0]上のデータがクロックイン/クロックアウトされます。
RSTZ I アクティブローのリセット。RSTZ信号は、CLK信号の立上りエッジのインターバルごとに評価されます。512ビットのメッセージのロードおよびMAC計算の前に、毎回リセットを行う必要があります。
CSZ I アクティブローのチップセレクト。レジスタおよびメモリに対するすべてのアクセスは、この信号がローになっている必要があります。
WRZ I アクティブローの書込みイネーブル。すべての書込み動作中は、この信号がローになっている必要があります。
ADDR[4:0] I アドレス[4:0]。これらの5つの信号はアドレス信号です。
DATAI[31:0] I データバス入力。これらの32の信号は入力データバスです。
DATAO[31:0] O データバス出力。これらの32の信号は出力データバスです。
BUSY O ビジー。この信号がハイの場合、SHA-1コプロセッサが計算を実行中であることを示します。この信号がハイの間は、データアクセスを行わないでください。
RUN_SHA I SHA-1実行。この信号は1クロック周期幅のみとする必要があり、CLK信号の立上りエッジでSHA-1計算を開始します。
*I = 入力、O = 出力

レジスタの詳細

DSSHA1のメモリは21個の32ビットワードで構成され、最初の部分が入力バッファで、後の部分がMACの結果を読み取るためのレジスタです(表2)。

表2. メモリマップ
Address (Hex) Type Access 機能
00h to 0Fh RAM Read/write 64バイトのバッファ入力。この512ビットの入力ブロックに、通常は64ビットのスレーブデバイスのシークレットと、ランダムなチャレンジおよび各種データで構成された448ビットの入力メッセージが含まれます。
10h to 14h Registers Read 20バイトの結果。このMACを、受信したSHA-1スレーブデバイスのMACと比較します。

Input Buffer (00h~0Fh)


SHA-1エンジンは、処理するデータを64バイトの入力バッファを介して受信します。このバッファに512ビットのメッセージが格納され、それをSHA-1エンジンが処理してMACを生成します。入力バッファには、シークレットおよびその他のメッセージデータが格納されます。シークレットのセキュリティは設計者が確保する必要があります。データの形式は、個々のマキシム製SHA-1スレーブデバイスによって定義されています。


MAC Result (10h~14h)


SHA-1計算の20バイトのMACが、MAC Resultアドレス空間に格納されます。

デバイスの動作

アプリケーションにおけるDSSHA1の標準的な使用法には、書込み、読取り、およびSHA-1エンジンの実行が含まれ、MACの結果を使用して外部でこのブロックを1-Wire SHA-1デバイスのMACと比較する必要があります。これらのすべての動作は、ASICまたはFPGAの内部バスと容易に接続可能な個別のデータ入力および出力ラインによる32ビットインタフェースを介して制御されます。この後の「SHA-1エンジンの制御」の項で、データの入力および出力の形式と、SHA-1エンジンにMAC計算の実行を指示する方法について説明します。


SHA-1エンジンの制御


DSSHA1は、SHA-1エンジンの作業を実行します。入力バッファは、メッセージを受け取ります。MAC出力バッファは、SHA-1計算の結果を受け取ります。図2に、SHA-1エンジンの入出力のデータフローを示します。

パワーリセットの適用によって、SHA-1エンジンの使用の第1段階が開始されます。次に、表3の形式でメッセージが入力バッファにロードされます。メッセージのロードが完了した時点で、ユーザーはRUN_SHA入力信号にパルスを印加します。SHA-1計算の期間中は、BUSYがロジックハイのままになります。SHA-1計算が完了した時点で、BUSY信号が再びロジックローになります。5つすべてのMRRレジスタ(表4を参照)にMACの結果が格納され、読み取ることができます。

5485Fig02

図2. データフロー図

表3. 入力メッセージの形式
M0[31:24] = (IB + 0) M0[23:16] = (IB + 1) M0[15:8] = (IB + 2) M0[7:0] = (IB + 3)
M1[31:24] = (IB + 4) M1[23:16] = (IB + 5) M1[15:8] = (IB + 6) M1[7:0] = (IB + 7)
M2[31:24] = (IB + 8) M2[23:16] = (IB + 9) M2[15:8] = (IB + 10) M2[7:0] = (IB + 11)
M3[31:24] = (IB + 12) M3[23:16] = (IB + 13) M3[15:8] = (IB + 14) M3[7:0] = (IB + 15)
M4[31:24] = (IB + 16) M4[23:16] = (IB + 17) M4[15:8] = (IB + 18) M4[7:0] = (IB + 19)
M5[31:24] = (IB + 20) M5[23:16] = (IB + 21) M5[15:8] = (IB + 22) M5[7:0] = (IB + 23)
M6[31:24] = (IB + 24) M6[23:16] = (IB + 25) M6[15:8] = (IB + 26) M6[7:0] = (IB + 27)
M7[31:24] = (IB + 28) M7[23:16] = (IB + 29) M7[15:8] = (IB + 30) M7[7:0] = (IB + 31)
M8[31:24] = (IB + 32) M8[23:16] = (IB + 33) M8[15:8] = (IB + 34) M8[7:0] = (IB + 35)
M9[31:24] = (IB + 36) M9[23:16] = (IB + 37) M9[15:8] = (IB + 38) M9[7:0] = (IB + 39)
M10[31:24] = (IB + 40) M10[23:16] = (IB + 41) M10[15:8] = (IB + 42) M10[7:0] = (IB + 43)
M11[31:24] = (IB + 44) M11[23:16] = (IB + 45) M11[15:8] = (IB + 46) M11[7:0] = (IB + 47)
M12[31:24] = (IB + 48) M12[23:16] = (IB + 49) M12[15:8] = (IB + 50) M12[7:0] = (IB + 51)
M13[31:24] = (IB + 52) M13[23:16] = (IB + 53) M13[15:8] = (IB + 54) M13[7:0] = (IB + 55)
M14[31:24] = (IB + 56) M14[23:16] = (IB + 57) M14[15:8] = (IB + 58) M14[7:0] = (IB + 59)
M15[31:24] = (IB + 60) M15[23:16] = (IB + 61) M15[15:8] = (IB + 62) M15[7:0] = (IB + 63)
Mt = input buffer of SHA-1 engine; 0 ≤ t ≤ 15; 32-bit words with a start address at 00h and ending address at 0Fh. IB = input buffer.

Mt = SHA-1エンジンの入力バッファ(0 ≤ t ≤ 15)。開始アドレスが00hで終了アドレスが0Fhの32ビットワードです。IB = 入力バッファ。

表4に、MACを格納する5つの32ビット変数A~Eがそれぞれの位置にどのようにマッピングされるかを示します。

表4. 出力メッセージの形式
Address (Hex) MAC Result Registers (MRR)
10h MRR[31:0] = A[31:0] (least significant)
11h MRR[31:0] = B[31:0]
12h MRR[31:0] = C[31:0]
13h MRR[31:0] = D[31:0]
14h MRR[31:0] = E[31:0] (most significant)

MACの比較


マスターは、スレーブのMACをDSSHA1のMACと照合してテストする必要があります。スレーブのMACとDSSHA1のMACの値が等しい場合、真正性が確認されます。スレーブのMACとDSSHA1のMACが異なる場合、偽造が確認されます。


機能の検証


DSSHA1のテストとして、テストメッセージ「abc」によって機能を検証することができます。このテストメッセージに適切なパディングを加えたものは、以下の入力ブロックに変換することができます。

W[0] = 61626380 W[8] = 00000000
W[1] = 00000000 W[9] = 00000000
W[2] = 00000000 W[10] = 00000000
W[3] = 00000000 W[11] = 00000000
W[4] = 00000000 W[12] = 00000000
W[5] = 00000000 W[13] = 00000000
W[6] = 00000000 W[14] = 00000000
W[7] = 00000000 W[15] = 00000018

表3の形式を使用することによって、このテストメッセージの入力ブロックは表5に示す値になります。

表5. 「abc」のテストパケットのSHA-1入力
M0[31:24] = 61h M0[23:16] = 62h M0[15:8] = 63h M0[7:0] = 80h
M1[31:24] = 00h M1[23:16] = 00h M1[15:8] = 00h M1[7:0] = 00h
M2[31:24] = 00h M2[23:16] = 00h M2[15:8] = 00h M2[7:0] = 00h
M3[31:24] = 00h M3[23:16] = 00h M3[15:8] = 00h M3[7:0] = 00h
M4[31:24] = 00h M4[23:16] = 00h M4[15:8] = 00h M4[7:0] = 00h
M5[31:24] = 00h M5[23:16] = 00h M5[15:8] = 00h M5[7:0] = 00h
M6[31:24] = 00h M6[23:16] = 00h M6[15:8] = 00h M6[7:0] = 00h
M7[31:24] = 00h M7[23:16] = 00h M7[15:8] = 00h M7[7:0] = 00h
M8[31:24] = 00h M8[23:16] = 00h M8[15:8] = 00h M8[7:0] = 00h
M9[31:24] = 00h M9[23:16] = 00h M9[15:8] = 00h M9[7:0] = 00h
M10[31:24] = 00h M10[23:16] = 00h M10[15:8] = 00h M10[7:0] = 00h
M11[31:24] = 00h M11[23:16] = 00h M11[15:8] = 00h M11[7:0] = 00h
M12[31:24] = 00h M12[23:16] = 00h M12[15:8] = 00h M12[7:0] = 00h
M13[31:24] = 00h M13[23:16] = 00h M13[15:8] = 00h M13[7:0] = 00h
M14[31:24] = 00h M14[23:16] = 00h M14[15:8] = 00h M14[7:0] = 00h
M15[31:24] = 00h M15[23:16] = 00h M15[15:8] = 00h M15[7:0] = 18h
Mt = input buffer of SHA-1 engine; 0 ≤ t ≤ 15; 32-bit words with a start address at 00h and ending address at 0Fh.

Mt = SHA-1エンジンの入力バッファ(0 ≤ t ≤ 15)。開始アドレスが00hで終了アドレスが0Fhの32ビットワードです。

 

このブロックの計算の出力は、以下のようになります。

A[31:0] = 42541B35
B[31:0] = 5738D5E1
C[31:0] = 21834873
D[31:0] = 681E6DF6
E[31:0] = D8FDF6AD

マキシムのデバイスは、これらのワードを最上位ワードから先に受け取り、個々のバイトを最下位バイト(LSB)から先に受け取ります。そのため、MACのバイトレベルの転送シーケンスは次のようになります。

AD F6 FD D8 F6 6D 1E 68 73 48 83 21 E1 D5 38 57 35 1B 54 42
(E)
(D)
(C)
(B)
(A)

タイミング仕様

図3および図4は、DSSHA1に対する書込みと読取りのタイミング図を示します。表6に、ARM TSMC CL018G (0.18µmジェネリックプロセス) 1.8V SAGE-X標準セルライブラリ、バージョン2004q3v1を使用して、+25℃で電源電圧の50%から電源電圧の50%までを測定した遅延値を示します。出力信号は無負荷です。入力信号は電源電圧の10%から90%まで0.200nsの標準スルーで駆動しています。

表6. データバスのインタフェースタイミング
Parameter Symbol Min Max Units
CLK cycle (Note 1) tCYC 12.500   ns
Chip select setup before rising edge of CLK (Note 1) tCSS 0.229   ns
Chip select hold after rising edge of CLK (Note 1) tCSH 0.000   ns
Address and data setup before rising edge of CLK (Note 1) tAS 0.229   ns
Address and data hold after rising edge of CLK (Note 1) tAH 0.000   ns
Active output time to DATAO valid (Notes 1, 2) tAO   0.984 ns
Deactivate DATAO[31:0] (Note 1) tD   0.984 ns
注1: これらの値は、回路の実装に使用するプロセスに依存します。ここに示した値は単なる例であり、ARM TSMC CL018G (0.18µmジェネリックプロセス) 1.8V SAGE-X標準セルライブラリ、バージョン2004q3v1を使用してモデル化したものです。ARMの製品番号はA0082です。
注2: この時間は、標準的なコーナーについて有効な出力までに発生する可能性のある最長の遅延として定義されます。

5485Fig03

図3. 書込みサイクル

5485Fig04

図4. 読取りサイクル

アプリケーション情報

FPGAまたはASICによって、設計したDSSHA1を集積化します。複数のモジュールを使用する、実現可能な認証方式によって設計が安全になります。図5では、マイクロプロセッサを使用する設計モジュールからDSSHA1にSHA-1計算をオフロードすることが可能です。図5で、設計者は最初にランダムなチャレンジを生成し、DSSHA1からの結果とDS28E01-100から受信したレスポンスを比較します。結果とレスポンスが一致する場合、設計の認証が完了し、製品の機能をイネーブルすることができます。多くの場合、ソフトウェアとハードウェアの認証プロセスに変化をつけることが望まれます。これによって、攻撃が成功する可能性が低下します。詳細については、アプリケーションノート1098 「白書3:1-Wire SHA-1デバイスはなぜ安全なのか」を参照してください。

5485Fig05

図5. 標準FPGAまたはASICアプリケーション

物理的見積り

  • ゲート数:6,423 (NAND 2x1を使用して計算)
  • 面積(配線なし):85,470µm2
  • 面積(配線見積りを含む):102,256µm2

見積りに使用したライブラリ:

ARM TSMC CL018G (0.18µmジェネリックプロセス) 1.8V SAGE-X標準セルライブラリ、バージョン2004q3v1を使用しています。ARMの製品番号はA0082です。

検証

業界では一般にIPブロックの検証レベルを以下の記法で表しています。

  • ゴールドIPは、ターゲットシリコンまで検証済みです。
  • シルバーIPは、FPGAによるターゲットシリコンまで検証済みです。
  • ブロンズIPは、論理タイミングクロージャを使用したシリコンモデルで検証済みです。
  • 開発中IPは、未検証です。

:DSSHA1はシルバー状態を達成しています。

製品内容

DSSHA1のパッケージには、以下のものが含まれています。

  • Verilog HDL
  • Verilogテストベンチ
  • セットアップについてのReadme情報およびスクリプト

無料のDSSHA1 IPは、https://support.maximintegrated.com/jp/1-Wireからご請求ください。

まとめ

論理合成可能SHA-1コプロセッサのDSSHA1は、DS2460またはマイクロプロセッサに基づく実装の代替となるものです。FPGAまたはASICへの組込みが可能で、それらの中でメモリマップデバイスになります。動作としては、最初に16ワードの入力バッファにMACの計算用のデータが入力されます。RUN_SHA信号をアクティブ化することによって計算処理が開始され、BUSY信号がローからハイに変化します。BUSY信号がローに戻ったあと、5ワードのresultレジスタからMACを読み取ることができます。ホストプロセッサは、DSSHA1によって計算されたMACとセキュアメモリから提供されたMACを比較します。両方のMACの値が一致した場合、真正性が確認されます。