論理合成可能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バイトのメッセージダイジェストを読み取ることができます。
図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)。
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の結果が格納され、読み取ることができます。
図2. データフロー図
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がそれぞれの位置にどのようにマッピングされるかを示します。
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に示す値になります。
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 |
タイミング仕様
図3および図4は、DSSHA1に対する書込みと読取りのタイミング図を示します。表6に、ARM TSMC CL018G (0.18µmジェネリックプロセス) 1.8V SAGE-X標準セルライブラリ、バージョン2004q3v1を使用して、+25℃で電源電圧の50%から電源電圧の50%までを測定した遅延値を示します。出力信号は無負荷です。入力信号は電源電圧の10%から90%まで0.200nsの標準スルーで駆動しています。
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: この時間は、標準的なコーナーについて有効な出力までに発生する可能性のある最長の遅延として定義されます。 |
図3. 書込みサイクル
図4. 読取りサイクル
アプリケーション情報
FPGAまたはASICによって、設計したDSSHA1を集積化します。複数のモジュールを使用する、実現可能な認証方式によって設計が安全になります。図5では、マイクロプロセッサを使用する設計モジュールからDSSHA1にSHA-1計算をオフロードすることが可能です。図5で、設計者は最初にランダムなチャレンジを生成し、DSSHA1からの結果とDS28E01-100から受信したレスポンスを比較します。結果とレスポンスが一致する場合、設計の認証が完了し、製品の機能をイネーブルすることができます。多くの場合、ソフトウェアとハードウェアの認証プロセスに変化をつけることが望まれます。これによって、攻撃が成功する可能性が低下します。詳細については、アプリケーションノート1098 「白書3:1-Wire SHA-1デバイスはなぜ安全なのか」を参照してください。
図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の値が一致した場合、真正性が確認されます。