注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ ナルの英語版をご参照願います。 セクション 49. 暗号化エンジンと乱数生成器 (RNG) ハイライト 本書には以下の主要項目を記載しています。 49.1 49.2 49.3 49.4 49.5 49.6 49.7 49.8 49.9 49.10 49.11 49.12 はじめに ..................................................................................................................... 49-2 制御レジスタ ............................................................................................................. 49-4 暗号化エンジンのバッファ ディスクリプタ ............................................................ 49-23 暗号化エンジンのセキュリティ アソシエーション構造 .......................................... 49-28 暗号化エンジンの動作 ............................................................................................. 49-35 暗号化エンジンの割り込み ...................................................................................... 49-40 乱数生成器の動作 .................................................................................................... 49-42 乱数生成器の割り込み ............................................................................................. 49-43 各種リセットの影響 ................................................................................................. 49-43 省電力モード中の動作 ............................................................................................. 49-43 関連アプリケーション ノート ................................................................................. 49-44 改訂履歴 ................................................................................................................... 49-45 49 暗号化エンジンと 乱数生成器 (RNG) © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-1 PIC32 ファミリ リファレンス マニュアル Note: ファミリ リファレンス マニュアルの本セクションは、デバイス データシートの補 足を目的としています。本書の内容は PIC32 ファミリの一部のデバイスには対応 していません。 本書の内容がお客様のご使用になるデバイスに対応しているかどうかは、最新デバイス データシート内の「暗号化エンジンと乱数生成器 (RNG)」の冒頭に記載している注意書き でご確認ください。 デバイス データシートとファミリ リファレンス マニュアルの各セクションは、Microchip 社のウェブサイト (http://www.microchip.com) からダウンロードできます。 49.1 はじめに 49.1.1 暗号化エンジンの特長 暗号化エンジンは、暗号化機能を必要とするアプリケーションの実行を高速化する事を目的と します。ハードウェア モジュールを使ってこれらの機能を実行する事で、ソフトウェアのオー バーヘッドが減少し、暗号化、解読、認証等の実行を大幅に高速化できます。 暗号化エンジンは、データの暗号化とパケット ポインタ (Scatter/Gather データフェッチが可 能 ) を効率的にプログラミングするために、ディスクリプタ方式の DMA を使います。インテ リジェントなステートマシンは、プロトコルの選択とバケット境界に基づいて暗号化エンジン をスケジューリングします。ハードウェア エンジンは、暗号化と認証を順次または並列に実行 できます。 暗号化エンジンの主な特長は以下の通りです。 • バルク暗号化およびハッシュ エンジン • 処理負荷を軽減する内蔵 DMA - バッファ ディスクリプタ方式 - バッファ ディスクリプタごとのセキュリティ アソシエーション • 一部の機能は並列実行可能 暗号化エンジンが処理できるバルク暗号は以下の通りです。 • AES: - 128/192/256 ビットのキーサイズ - CBC、ECB、CTR、CFB、OFB モード • DES/TDES: - CBC、ECB、CFB、OFB モード 暗号化エンジンで使える認証エンジンは以下の通りです。 • • • • SHA-1 SHA-256 MD-5 AES-GCM • HMAC 演算 ( 全ての認証エンジン向け ) 図 49-1: 暗号化エンジンのブロック図 SFR System Bus DS60001246A_JP - p. 49-2 Packet RD DMA Controller Crypto FSM OUTB FIFO Packet WR AES Local Bus System Bus INB FIFO TDES SHA-1/256 MD5 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 49.1.2 乱数生成器 (RNG) の特長 乱数生成器 (RNG) コアは、熱雑音を用いる真性乱数生成器 (TRNG) と、暗号用として安全な擬 似乱数生成器 (PRNG) を実装しています。 TRNG は、複数のリングオシレータと、集積回路で発生する熱雑音を使って、真性乱数を生成 します。この乱数は PRNG の初期化用に使えます。 PRNG は最大長 64 ビットの柔軟な LSFR です。 乱数生成器の主な特長は以下の通りです。 • TRNG: - 最大 25 Mbps のランダムビット - マルチ リングオシレータ構造 - バイアス補正器を内蔵 • PRNG: - LSFR 方式 最大 64 ビットの多項式長 多項式はプログラマブル TRNG が生成した乱数をシード値として使用可能 図 49-2: 乱数生成器のブロック図 System Bus Target SFR PRNG TRNG 49 暗号化エンジンと 乱数生成器 (RNG) BIAS Corrector Edge Comparator Ring Oscillator © 2014 Microchip Technology Inc. Ring Oscillator DS60001246A_JP - p. 49-3 PIC32 ファミリ リファレンス マニュアル 49.2 制御レジスタ PIC32 の暗号化エンジンは以下の特殊機能レジスタを備えます。 • CEVER: 暗号化エンジン リビジョン / バージョン /ID レジスタ この読み出し専用レジスタは、暗号化エンジンコアのバージョン情報を格納します。 • CECON: 暗号化エンジン制御レジスタ このレジスタは暗号化エンジンを制御し、DMA とバッファ ディスクリプタ プロセッサを 有効 / 無効にします。 • CEBDADDR: 暗号化エンジン バッファ ディスクリプタ レジスタ この読み出し専用レジスタは、バッファ ディスクリプタ プロセッサが現在処理中のバッ ファ ディスクリプタのアドレスを格納します。 • CEBDPADDR: 暗号化エンジン バッファ ディスクリプタ プロセッサ レジスタ このレジスタは、DMA がバッファ ディスクリプタのフェッチを開始するアドレスを制御 します。 • CESTAT: 暗号化エンジン ステータス レジスタ この読み出し専用レジスタは、暗号化エンジンの現在のステータスを格納します。 • CEINTSRC: 暗号化エンジン割り込み要因レジスタ このレジスタは、暗号化エンジンコアが引き起こした割り込みの要因を示します。この要 因には DMA、送信バッファ ディスクリプタ エンプティ、DMA パケット完了が含まれます。 • CEINTEN: 暗号化エンジン割り込みイネーブル レジスタ このレジスタは、暗号化エンジンコアの各割り込み要因を有効 / 無効にします。 • CEPOLLCON: 暗号化エンジン ポーリング制御レジスタ このレジスタは、直前にフェッチされたディスクリプタが無効になった場合に、ディスク リプタ制御ワードを再フェッチする前にバッファ ディスクリプタ プロセッサが待機する サイクル数を定義します。 • CEHDLEN: 暗号化エンジン ヘッダ長レジスタ このレジスタは、パケットのヘッダの長さを制御します。ヘッダ内のデータは変更されず、 データの書き込みはヘッダの後ろから始まります。 • CETRLLEN: 暗号化エンジン トレーラ長レジスタ このレジスタはパケットのトレーラの長さを制御します。パケットの最後にあるトレーラ 内のデータは変更されません。 • CEDTXSTAT: 暗号化エンジン DTX デバッグ ステータス レジスタ この読み出し専用レジスタは、暗号化エンジン内の送信 FIFO のステータスを示します。 • CEDRXSTAT: 暗号化エンジン DRX デバッグ ステータス レジスタ この読み出し専用レジスタは、暗号化エンジン内の受信 FIFO のステータスを示します。 • RNGVER: 乱数生成器 ID/ バージョン / リビジョン レジスタ この読み出し専用レジスタは、乱数生成器 (RNG) コアのバージョン情報を格納します。 • RNGCON: 乱数生成器制御レジスタ このレジスタは乱数生成器を制御します (TRNG と PRNG の有効化 / 無効化、TRNG から PRNG へのシード値の転送、擬似乱数の連続的な生成の有効化等 )。 • RNGPOLY1: 乱数生成器多項式レジスタ 1 このレジスタは、擬似乱数ビットの生成に使う多項式の下位バイト(32ビット)を制御します。 • RNGPOLY2: 乱数生成器多項式レジスタ 2 このレジスタは、擬似乱数ビットの生成に使う多項式の上位バイト(32ビット)を制御します。 DS60001246A_JP - p. 49-4 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) • RNGNUMGEN1: 擬似乱数生成器レジスタ 1 このレジスタは、PRNG の現在の乱数の下位バイト (32 ビット ) を格納します。このレジ スタには、PRNG の初期シード値を書き込む事ができます。 • RNGNUMGEN2: 擬似乱数生成器レジスタ 2 このレジスタは、PRNG の現在の乱数の上位バイト (32 ビット ) を格納します。このレジ スタには、PRNG の初期シード値を書き込む事ができます。 • RNGSEED1: 真性乱数生成器シード値レジスタ 1 この読み出し専用レジスタは、TRNG の乱数の下位バイト (32 ビット ) を格納します。 • RNGSEED2: 真性乱数生成器シード値レジスタ 2 この読み出し専用レジスタは、TRNG の乱数の上位バイト (32 ビット ) を格納します。 • RNGRCNT: 真性乱数生成器カウントレジスタ この読み出し専用レジスタは、TRNG の RNGSEEDx レジスタ内の有効ビット数を示しま す。乱数度を確保するには、このレジスタの値が目標ビット数に達するまで、RNGSEEDx レジスタ内の値を使わない事が必要です。 49 暗号化エンジンと 乱数生成器 (RNG) © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-5 表 49-1: 暗号化エンジン関連 SFR の一覧 レジスタ名 Bit 31/15 Bit 30/14 Bit 29/13 Bit 28/12 Bit 27/11 Bit 26/10 Bit 25/9 Bit 24/8 Bit 23/7 Bit 22/6 Bit 21/5 Bit 20/4 Bit 19/3 Bit 118/2 Bit 17/1 Bit 16/0 31:16 CEVER CECON CEBDADDR CEBDPADDR VERSION<7:0> ID<15:0> 31:16 — — — — — — — — — — — — — 15:0 — — — — — — — — — SWRST SWAPEN — — 31:16 BDPADDR<15:0> 31:16 BASEADDR<31:16> 15:0 CEINTEN CEPOLLCON CEHDLEN CETRLLEN CEDTXSTAT CEDRXSTAT — — DMAEN BASEADDR<15:0> ERRMODE<2:0> ERROP<2:0> ERRPHASE<1:0> 15:0 CEINTSRC — BDPCHST BDPPLEN BDPADDR<31:16> 15:0 31:16 CESTAT © 2014 Microchip Technology Inc. 凡例 : REVISION<7:0> 15:0 — — BDSTATE<3:0> START ACTIVE BDCTRL<15:0> 31:16 — — — — — — — — — — — — — — — — 15:0 — — — — — — — — — — — — AREIF PKTIF CBDIF PENDIF 31:16 — — — — — — — — — — — — — — — — 15:0 — — — — — — — — — — — — AREIE PKTIE CBDIE PENDIE 31:16 — — — — — — — — — — — — — — — — — — — — — — — — — — BDPPLCON<15:0> 15:0 31:16 — — — — — — — — 15:0 — — — — — — — — 31:16 — — — — — — — — 15:0 — — — — — — — — 31:16 — — — — — — — — — — — — DTXBLEN<15:12> — — — — — — DRXBLEN<15:12> 15:0 31:16 — HDRLEN<7:0> — — — — DTXBLEN<11:0> — — 15:0 — = 未実装、 「0」として読み出し — — — — DTXBLEN<11:0> — TRLRLEN<7:0> DTXSTATE<3:0> DRXSTATE<3:0> PIC32 ファミリ リファレンス マニュアル DS60001246A_JP - p. 49-6 表 49-1 と表 49-2 に、暗号化エンジンと乱数生成器に関連するレジスタの一覧を示します。その後で各レジスタの各ビットについて詳 細に説明します。 © 2014 Microchip Technology Inc. 表 49-2: 乱数生成器関連 SFR の一覧 レジスタ名 RNGVER RNGCON RNGPOLY1 RNGPOLY2 RNG1 RNGSEED1 RNGSEED2 RNGRCNT 凡例 : 31:16 ID<15:8> 15:0 VERSION<7:0> REVISION<7:0> 31:16 — — — — — — 15:0 — — — LOAD — CONT — — PRNGEN TRNGEN 31:16 — — — — — — — — — — — — PLEN<6:0> POLY1<31:16> 15:0 POLY1<15:0> 31:16 POLY2<31:16> 15:0 POLY2<15:0> 31:16 RNG1<31:16> 15:0 RNG1<15:0> 31:16 RNG2<31:16> 15:0 RNG2<15:0> 31:16 RDATA1<31:16> 15:0 RDATA1<15:0> 31:16 RDATA2<31:16> 15:0 RDATA2<15:0> 31:24 — — — — — — — — — 7:0 — — — — — — — — — — = 未実装、 「0」として読み出し — — — — RCNT<6:0> DS60001246A_JP - p. 49-7 セクション 49. 暗号化エンジンと乱数生成器 (RNG) RNG2 Bit 31/15 Bit 30/14 Bit 29/13 Bit 28/12 Bit 27/11 Bit 26/10 Bit 25/9 Bit 24/8 Bit 23/7 Bit 22/6 Bit 21/5 Bit 20/4 Bit 19/3 Bit 118/2 Bit 17/1 Bit 16/0 49 暗号化エンジンと 乱数生成器 (RNG) PIC32 ファミリ リファレンス マニュアル レジスタ 49-1: CEVER: 暗号化エンジン リビジョン / バージョン /ID レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 REVISION<7:0> R-0 R-0 VERSION<7:0> ID<15:8> ID<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-24 REVISION<7:0>: 暗号化エンジン リビジョンビット bit 23-16 VERSION<7:0>: 暗号化エンジン バージョンビット bit 15-0 ID: 暗号化エンジン ID ビット DS60001246A_JP - p. 49-8 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) レジスタ 49-2: CECON: 暗号化エンジン制御レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 R/W-0 R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 — SWRST SWAPEN — — BDPCHST BDPPLEN DMAEN 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットをクリア x = ビットは未知 未実装 :「0」として読み出し SWRST: ソフトウェア リセットビット 1 = 暗号化エンジンのソフトウェア リセットを開始する 0 = 通常動作 bit 5 SWAPEN: I/O スワップ イネーブルビット 1 = 専用 DMA による読み出し時に入力データをバイトスワップする 0 = 専用 DMA による読み出し時に入力データをバイトスワップしない bit 4-3 未実装 :「0」として読み出し bit 2 BDPCHST: バッファ ディスクリプタ プロセッサ フェッチ イネーブルビット このビットは、全ての DMA ディスクリプタのプログラミングを完了した後で有効にする必要があります。 1 = バッファ ディスクリプタ プロセッサによるディスクリプタのフェッチを有効にする 0 = バッファ ディスクリプタ プロセッサによるディスクリプタのフェッチを無効にする bit 1 BDPPLEN: バッファ ディスクリプタ プロセッサ ポーリング イネーブルビット このビットは、全ての DMA ディスクリプタのプログラミングを完了した後で有効にする必要があります。 1 = 有効ビットがセットされるまでディスクリプタをポーリングする 0 = ポーリングしない bit 0 DMAEN: DMA イネーブルビット 1 = 暗号化エンジン DNA を有効にする 0 = 暗号化エンジン DNA を無効にする © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-9 49 暗号化エンジンと 乱数生成器 (RNG) bit 31-7 bit 6 PIC32 ファミリ リファレンス マニュアル レジスタ 49-3: CEBDADDR: 暗号化エンジン バッファ ディスクリプタ レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 BDPADDR<31:24> R-0 R-0 BDPADDR<23:16> R-0 R-0 BDPADDR<15:8> R-0 R-0 BDPADDR<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 BDPADDR<31:0>: 処理中バッファ ディスクリプタ アドレス ステータスビット これらのビットは、バッファ ディスクリプタ プロセッサによって現在処理されているディスクリプタの アドレスを格納します。 レジスタ 49-4: CEBDPADDR: 暗号化エンジン バッファ ディスクリプタ プロセッサ レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 BASEADDR<31:24> R/W-0 R/W-0 BASEADDR<23:16> R/W-0 R/W-0 BASEADDR<15:8> R/W-0 R/W-0 BASEADDR<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 BASEADDR<31:0>: DMA ベースアドレス ステータスビット これらのビットは、DMA コントローラのベースアドレスを格納します。リセット後にフェッチはこのア ドレスから始まります。 DS60001246A_JP - p. 49-10 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) レジスタ 49-5: CESTAT: 暗号化エンジン ステータス レジスタ ビット レンジ 31:24 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 ERRMODE<2:0> U-0 23:16 15:8 U-0 ERROP<2:0> — — R-0 R-0 R-0 R-0 R-0 R-0 R-0 ERRPHASE<1:0> R-0 BDSTATE<3:0> R-0 R-0 R-0 START ACTIVE R-0 R-0 R-0 R-0 R-0 R-0 BDCTRL<15:8> 7:0 R-0 R-0 BDCTRL<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-29 ERRMOD<2:0>: 内部エラーモード ステータスビット 111 = 予約済み • • • 001 = 予約済み 000 = 通常動作 bit 28-26 ERROP<2:0>: 内部エラー動作ステータスビット 111 = 予約済み 110 = 予約済み 101 = 予約済み 100 = 認証 011 = 予約済み 010 = 復号 001 = 暗号化 000 = 予約済み bit 25-24 ERRPHASE<1:0>: DMA 内部エラーフェイズ ステータスビット 11 = デスティネーション データ 10 = ソースデータ 01 = セキュリティ アソシエーション アクセス 00 = バッファ ディスクリプタ アクセス bit 23-22 未実装 :「0」として読み出し 49 • • • 0111 = 予約済み 0110 = セキュリティ アソシエーション フェッチ 0101 = フェッチ バッファ ディスクリプタは無効 0100 = ディスクリプタは完了した 0011 = データフェイズ 0010 = バッファ ディスクリプタ プロセッサはロード中 0001 = ディスクリプタ フェッチ要求は保留中 0000 = バッファ ディスクリプタ プロセッサはアイドル中 bit 17 START: DMA 開始ステータスビット 1 = DMA は開始された 0 = DMA は開始されていない © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-11 暗号化エンジンと 乱数生成器 (RNG) bit 21-18 BDSTATE<3:0>: バッファ ディスクリプタ プロセッサ状態ビット これらのビットは、バッファ ディスクリプタ プロセッサの現在の状態を示す値を格納します。 1111 = 予約済み PIC32 ファミリ リファレンス マニュアル レジスタ 49-5: CESTAT: 暗号化エンジン ステータス レジスタ ( 続き ) bit 16 ACTIVE: バッファ ディスクリプタ プロセッサ ステータスビット 1 = バッファ ディスクリプタ プロセッサはアクティブ 0 = バッファ ディスクリプタ プロセッサはアイドル中 bit 15-0 BDCTRL<15:0>: ディスクリプタ制御ワード ステータスビット これらのビットは、処理中ディスクリプタの制御ワードを格納します。 DS60001246A_JP - p. 49-12 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) レジスタ 49-6: CEINTSRC: 暗号化エンジン割り込み要因レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 R-0, HS R-0, HS R-0, HS R-0, HS — — — — AREIF(1) PKTIF(1) CBDIF(1) PENDIF(1) 凡例 : HS = ハードウェアでセット R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-4 未実装 :「0」として読み出し bit 3 AREIF: アクセス応答エラー割り込みビット (1) 1 = 暗号化エンジンは無効なメモリアドレスへのアクセスを試みた 0 = エラーは発生していない bit 2 PKTIF: DMA パケット完了割り込みステータスビット (1) 1 = DMA パケットは完了した 0 = DMA パケットは完了していない bit 1 BDPIF: バッファ ディスクリプタ送信ステータスビット (1) 1 = 直近のバッファ ディスクリプタ送信は処理された 0 = 直近のバッファ ディスクリプタ送信はまだ処理されていない bit 0 PENDIF: 未処理暗号化エンジン割り込みステータスビット (1) 1 = 未処理の暗号化エンジン割り込みが存在する ( このビットの値は、暗号化エンジンの全ての割り込み ステータスビットの論理和です ) 0 = 未処理の暗号化エンジン割り込みは存在しない 割り込みをクリアするには、このビットに「1」を書き込む必要があります。 © 2014 Microchip Technology Inc. 暗号化エンジンと 乱数生成器 (RNG) Note 1: 49 DS60001246A_JP - p. 49-13 PIC32 ファミリ リファレンス マニュアル レジスタ 49-7: CEINTEN: 暗号化エンジン割り込みイネーブル レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 — — — — AREIE PKTIE BDPIE PENDIE(1) 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-4 未実装 :「0」として読み出し bit 3 AREIE: アクセス応答エラー割り込みイネーブルビット 1 = アクセス応答エラー割り込みを有効にする 0 = アクセス応答エラー割り込みを無効にする bit 2 PKTIE: DMA パケット完了割り込みイネーブルビット 1 = DMA パケット完了割り込みを有効にする 0 = DMA パケット完了割り込みを無効にする bit 1 BDPIE: DMA バッファ ディスクリプタ プロセッサ割り込みイネーブルビット 1 = バッファ ディスクリプタ プロセッサ割り込みを有効にする 0 = バッファ ディスクリプタ プロセッサ割り込みを無効にする bit 0 PENDIE: マスタ割り込みイネーブルビット (1) 1 = 暗号化エンジン割り込みを有効にする 0 = 暗号化エンジン割り込みを無効にする Note 1: PENDIE ビットはグローバル イネーブルビットであり、必要な他の割り込みと一緒に有効にする必要が あります。 DS60001246A_JP - p. 49-14 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) レジスタ 49-8: CEPOLLCON: 暗号化エンジン ポーリング制御レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 BDPPLCON<15:8> R/W-0 R/W-0 BDPPLCON<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-16 未実装 :「0」として読み出し bit 15 BDPPLCON<15:0>: バッファ ディスクリプタ プロセッサ ポーリング制御ビット これらのビットは、直前にディスクリプタ フェッチが無効になった場合に、ディスクリプタ制御ワード を再フェッチする前に DMA 送信バッファ ディスクリプタ プロセッサが待機するサイクル数を定義しま す。 レジスタ 49-9: CEHDLEN: 暗号化エンジン ヘッダ長レジスタ ビット レンジ 23:16 15:8 7:0 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 HDRLEN<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-8 未実装 :「0」として読み出し bit 7-0 HDRLEN<7:0>: DMA ヘッダ長ビット 各パケットでは、このビットで指定した長さのヘッダ内のデータを変更せず、その直後からデータの書き 込みを始めます。 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-15 49 暗号化エンジンと 乱数生成器 (RNG) 31:24 Bit 31/23/15/7 PIC32 ファミリ リファレンス マニュアル レジスタ 49-10: CETRLLEN: 暗号化エンジン トレーラ長レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 TRLRLEN<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-8 未実装 :「0」として読み出し bit 7-0 TRLRLEN<7:0>: DMA トレーラ長ビット 各パケットでは、このビットで指定した長さのトレーラ内のデータを変更せず、その後に次のパケット が開始します。 レジスタ 49-11: CEDTXSTAT: 暗号化エンジン DTX デバッグ ステータス レジスタ ビット レンジ 31:24 23:16 15:8 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 R-0 R-0 R-0 R-0 — — — — R-0 R-0 R-0 R-0 R-0 R-0 R-0 DTXBLEN<15:12> R-0 R-0 R-0 R-0 R-0 R-0 R-0 DTXBLEN<11:4> 7:0 R-0 DTXBLEN<3:0> R-0 DTXSTATE<3:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-16 未実装 :「0」として読み出し bit 15-4 DTXBLEN<15:0>: 実行中 DMA 送信バッファ長デバッグ ステータスビット bit 3-0 DTXSTATE<3:0>: 実行中 DMA 送信ステート デバッグ ステータスビット 1111 = 予約済み • • • 0110 = 予約済み 0101 = 暗号化エンジン内部メモリへの送信中 0100 = 予約済み 0011 = 待機 0010 = 予約済み 0001 = 予約済み 0000 = アイドル DS60001246A_JP - p. 49-16 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) レジスタ 49-12: CEDRXSTAT: 暗号化エンジン DRX デバッグ ステータス レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 R-0 R-0 R-0 R-0 — — — — R-0 R-0 R-0 R-0 R-0 R-0 R-0 DRXBLEN<15:12> R-0 R-0 R-0 R-0 R-0 R-0 R-0 DTXBLEN<11:4> R-0 R-0 DRXBLEN<3:0> DRXSTATE<3:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-16 未実装 :「0」として読み出し bit 15-4 DTXBLEN<15:0>: 実行中 DMA 受信バッファ長デバッグ ステータスビット bit 3-0 DTXSTATE<3:0>: 実行中 DMA 受信ステート デバッグ ステータスビット 0000 = アイドル これ以外の全ての値は、トランザクションが実行中である事を意味します。 レジスタ 49-13: RNGVER: 乱数生成器 ID/ バージョン / リビジョン レジスタ ビット レンジ 23:16 15:8 7:0 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 ID<15:8> R-0 R-0 R-0 R-0 ID<15:8> R-0 R-0 R-0 R-0 VERSION<7:0> R-0 R-0 R-0 R-0 R-0 REVISION<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-16 ID<15:8>: ブロック ID ビット bit 15-8 VERSION<7:0>: ブロック バージョンビット bit 7-0 REVISION<7:0>: ブロック リビジョンビット © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-17 49 暗号化エンジンと 乱数生成器 (RNG) 31:24 Bit 31/23/15/7 PIC32 ファミリ リファレンス マニュアル レジスタ 49-14: RNGCON: 乱数生成器制御レジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 R/W-0, HC U-0 R/W-0 R/W-0 R/W-0 — — — LOAD — CONT PRNGEN TRNGEN U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 — PLEN<6:0> 凡例 : HC = ハードウェアでクリア R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット 0 = ビットはクリア x = ビットは未知 bit 31-13 未実装 :「0」として読み出し bit 12 LOAD: TRNG からの読み込み制御ビット このビットを「1」にセットすると、PRNG へのシード値を TRNG から読み込みます。このビットはハー ドウェアによって自動的にクリアされます。 bit 11 未実装 :「0」として読み出し bit 10 CONT: 周期的 PRNG 乱数生成イネーブルビット 1 = PRNG 乱数を周期的に生成する 0 = 直前の乱数が読み出された時に次の PRNG 乱数を生成する bit 9 PRNGEN: PRNG 動作イネーブルビット 1 = PRNG の動作を有効にする 0 = PRNG の動作を無効にする bit 8 TRNGEN: TRNG 動作イネーブルビット 1 = TRNG の動作を有効にする 0 = TRNG の動作を無効にする bit 7 未実装 :「0」として読み出し ( 常に「0」として書き込む必要があります ) bit 6-0 PLEN<6:0>: PRNG 多項式長ビット これらのビットは、PRNG で使う多項式の長さを格納します。 DS60001246A_JP - p. 49-18 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) レジスタ 49-15: RNGPOLY1: 乱数生成器多項式レジスタ 1 ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 POLY1<31:24> R/W-0 POLY1<23:16> R/W-0 POLY1<15:8> R/W-0 POLY1<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 POLY1<31:0>: PRNG LFSR 多項式上位バイトビット これらのビットは LSFR とは逆順です。従って、これらのビットは LSFR の bit 32-63 を表します。 レジスタ 49-16: RNGPOLY2: 乱数生成器多項式レジスタ 2 ビット レンジ 31:24 23:16 7:0 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 POLY2<31:24> R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 49 POLY2<23:16> R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 POLY2<15:8> R/W-0 POLY2<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 POLY2<31:0>: PRNG LFSR 多項式下位バイトビット これらのビットは LSFR とは逆順です。従って、これらのビットは LSFR の bit 0-31 を表します。 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-19 暗号化エンジンと 乱数生成器 (RNG) 15:8 Bit 31/23/15/7 PIC32 ファミリ リファレンス マニュアル レジスタ 49-17: RNGNUMGEN1: 擬似乱数生成器レジスタ 1 ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 RNG1<31:24> R/W-0 RNG1<23:16> R/W-0 RNG1<15:8> R/W-0 RNG1<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 RNG1<31:0>: PRNG 現在値下位バイト値ビット レジスタ 49-18: RNGNUMGEN2: 擬似乱数生成器レジスタ 2 ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 RNG2<31:24> R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 RNG2<23:16> R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 RNG2<15:8> R/W-0 RNG2<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 RNG2<31:0>: PRNG 現在値上位バイト値ビット DS60001246A_JP - p. 49-20 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) レジスタ 49-19: RNGSEED1: 真性乱数生成器シード値レジスタ 1 ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 RDATA1<31:24> R-0 R-0 RDATA1<23:16> R-0 R-0 RDATA1<15:8> R-0 R-0 RDATA1<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 RDATA1<31:0>: TRNG 下位 32 ビット値 レジスタ 49-20: RNGSEED2: 真性乱数生成器シード値レジスタ 2 ビット レンジ 31:24 23:16 15:8 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 RDATA2<31:24> R-0 R-0 R-0 R-0 R-0 RDATA2<23:16> R-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 RDATA2<15:8> R-0 R-0 RDATA2<7:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-0 0 = ビットはクリア x = ビットは未知 RDATA2<31:0>: TRNG 上位 32 ビット値 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-21 49 暗号化エンジンと 乱数生成器 (RNG) 7:0 Bit 31/23/15/7 PIC32 ファミリ リファレンス マニュアル レジスタ 49-21: RNGRCNT: 真性乱数生成器カウントレジスタ ビット レンジ 31:24 23:16 15:8 7:0 Bit 31/23/15/7 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 U-0 U-0 U-0 U-0 U-0 U-0 U-0 — — — — — — — — U-0 R-0 R-0 R-0 R-0 R-0 R-0 R-0 — RCNT<6:0> 凡例 : R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し -n = POR 時の値 1 = ビットはセット bit 31-7 未実装 :「0」として読み出し bit 6-0 RCNT<6:0>: RNGSEEDx 内有効ビット数 DS60001246A_JP - p. 49-22 0 = ビットはクリア x = ビットは未知 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 暗号化エンジンのバッファ ディスクリプタ 49.3 ホスト ソフトウェアはバッファ ディスクリプタのリンクリストを作成し、それらはハードウェ アによって更新されます。表 49-3 に暗号化エンジンバッファ ディスクリプタの一覧を示し、 図 49-3 ~図 49-10 に各ディスクリプタのフォーマットを示します。 表 49-3: 暗号化エンジン バッファ ディスクリプタ Bit 31/23/15/7 名称 BD_CTRL 31:24 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 UPD_RES CRDMA_EN DESC_EN 23:16 SEC_CODE<0> SA_FETCH_EN 15:8 7:0 Bit 27/19/11/3 LAST_BD BD_SAADDR<23:16> 15:8 BD_SAADDR<15:8> BD_UPDPTR BD_MSG_LEN 7:0 BD_SAADR<7:0> 31:24 BD_SRCADDR<31:24> 23:16 BD_SRCADDR<23:16> 15:8 BD_SRCADDR<15:8> 7:0 BD_SRCADDR<7:0> 31:24 BD_DSTADDR<31:24> 23:16 BD_DSTADDR<23:16> 15:8 BD_DSTADDR<15:8> 7:0 BD_DSTADDR<7:0> 31:24 BD_NXTADDR<31:24> 23:16 BD_NXTADDR<23:16> 15:8 BD_NXTADDR<15:8> 7:0 BD_NXTADDR<7:0> 31:24 BD_UPDADDR<31:24> 23:16 BD_UPDADDR<23:16> 15:8 BD_UPDADDR<15:8> BD_UPDADDR<7:0> 31:24 MSG_LENGTH<31:24> 23:16 MSG_LENGTH<23:16> 15:8 MSG_LENGTH<15:8> 49 MSG_LENGTH<7:0> BD_ENC_OFF 31:24 ENCR_OFFSET<31:24> 23:16 ENCR_OFFSET<23:16> 15:8 ENCR_OFFSET<15:8> 7:0 ENCR_OFFSET<7:0> © 2014 Microchip Technology Inc. PKT_INT_EN CBD_INT_EN 暗号化エンジンと 乱数生成器 (RNG) 7:0 7:0 LIFM BD_BUFLEN<7:0> 23:16 BD_NXTPTR Bit 24/16/8/0 BD_BUFLEN<15:8> BD_SAADDR<31:24> BD_DSTADDR Bit 25/17/9/1 SEC_CODE<7:1> BD_SA_ADDR 31:24 BD_SRCADDR Bit 26/18/10/2 DS60001246A_JP - p. 49-23 PIC32 ファミリ リファレンス マニュアル 図 49-3: BD_CTRL のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 31-24 DESC_EN 23-16 — — CRY_MODE<2:0> SA_ — LAST_BD UPD_RES FETCH_EN Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 15-8 BD_BUFLEN<15:8> 7-0 BD_BUFLEN<7:0> — LIFM Bit 25/17/9/1 Bit 24/16/8/0 — PKT_ INT_EN — CBD_ INT_EN DESC_EN: ディスクリプタ イネーブル 1 = ハードウェアがディスクリプタを所有する (BD の処理後、ハードウェアはこのビットを「0」に リセットします ) 0 = ソフトウェアがディスクリプタを所有する bit 30 未実装 : 常に「0」として書き込み bit 29-27 CRY_MODE<2:0>: 暗号化モード 111 = 予約済み 110 = 予約済み 101 = 予約済み 100 = 予約済み 011 = CEK 動作 010 = KEK 動作 001 = プリブート認証 000 = 通常動作 bit 22 SA_FETCH_EN: 外部メモリからのセキュリティ アソシエーションのフェッチ 1 = SA ポインタから SA をフェッチする ( このビットは、新しいパケットごとに「1」にセットする必 要があります ) 0 = SA がフェッチされた、または内部 SA bit 21-20 未実装 : 常に「0」として書き込み bit 19 LAST_BD: 直近バッファ ディスクリプタ 直近の BD の後、BD_PTR は CSR 内のベースアドレスへ移動します。 bit 18 LIFM: フレーム内最終 受信パケット ( ハードウェア → ホスト ) の場合、このフィールドはハードウェアによって書き込ま れ、パケットが複数のバッファ ディスクリプタにまたがるかどうかを示します。送信パケット ( ホ スト → ハードウェア ) の場合、このフィールドはこの BD がフレーム内の最後の BD かどうかを示 します。 bit 17 PKT_INT_EN: パケット割り込みイネーブル パケットの最後のバッファ ディスクリプタの処理が完了した後に割り込みを生成します。 bit 16 CBD_INT_EN: CBD 割り込みイネーブル 現在のバッファ ディスクリプタの処理が完了した後に割り込みを生成します。 bit 15-0 BD_BUFLEN<15:0>: バッファ ディスクリプタ長 このフィールドはバッファの長さを格納し、レシーバによって実際に書き込まれた長さに更新され ます。 bit 31 図 49-4: BD_SADDR のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 31-24 BD_SAADDR<31:24> 23-16 BD_SAADDR<23:16> 15-8 BD_SAADDR<15:8> 7-0 BD_SAADDR<7:0> bit 31-0 Bit 25/17/9/1 Bit 24/16/8/0 BD_SAADDR: セキュリティ アソシエーション IP セッション アドレス セッションのセキュリティ アソシエーション ポインタは、キーおよび IV 値を持ちます。 DS60001246A_JP - p. 49-24 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 図 49-5: BD_SRCADDR のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 31-24 BD_SCRADDR<31:24> 23-16 BD_SCRADDR<23:16> 15-8 BD_SCRADDR<15:8> 7-0 BD_SCRADDR<7:0> bit 31-0 Bit 25/17/9/1 Bit 24/16/8/0 BD_SCRADDR: バッファ ソースアドレス 暗号化または認証向けに PE-CRDMA を介して引き渡す必要のあるバッファのソースアドレス 図 49-6: BD_DSTADDR のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 31-24 BD_DSTADDR<31:24> 23-16 BD_DSTADDR<23:16> 15-8 BD_DSTADDR<15:8> 7-0 BD_DSTADDR<7:0> bit 31-0 BD_DSTADDR: バッファ デスティネーション アドレス 暗号化または認証向けに PE-CRDMA を介して引き渡す必要のあるバッファのデスティネーション アドレス 図 49-7: BD_NXTADDR のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 BD_NXTADDR<31:24> 23-16 BD_NXTADDR<23:16> 15-8 BD_NXTADDR<15:8> 7-0 BD_NXTADDR<7:0> bit 31-0 Bit 24/16/8/0 BD_NXTADDR: 次のバッファ ディスクリプタ ポインタアドレス 次のバッファ ディスクリプタのアドレスを格納します。 次のバッファは、直前のバッファの次のセグメントまたは新しいパケットです。 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-25 49 暗号化エンジンと 乱数生成器 (RNG) 31-24 Bit 25/17/9/1 PIC32 ファミリ リファレンス マニュアル 図 49-8: BD_UPDPTR のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 31-24 BD_UPDADDR<31:24> 23-16 BD_UPDADDR<23:16> 15-8 BD_UPDADDR<15:8> 7-0 BD_UPDADDR<7:0> bit 31-0 BD_UPDADDR: 更新アドレス 更新アドレスは CRDMA 結果が書き込まれるアドレスです。更新結果は必要に応じて ICV 値、キー 出力値です。 図 49-9: BD_MSG_LEN のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 31-24 MSG_LENGTH<31:24> 23-16 MSG_LENGTH<23:16> 15-8 MSG_LENGTH<15:8> 7-0 MSG_LENGTH<7:0> bit 31-0 Bit 25/17/9/1 Bit 24/16/8/0 Bit 25/17/9/1 Bit 24/16/8/0 MSG_LENGTH: 総メッセージ長 ハッシュおよび HMAC アルゴリズムの場合、総メッセージ長 ( バイト数 ) GCM アルゴリズム (LEN-C) の場合、暗号バイトの総数 図 49-10: BD_ENC_OFF のフォーマット Bit Range Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 31-24 ENCR_OFFSET<31:24> 23-16 ENCR_OFFSET<23:16> 15-8 ENCR_OFFSET<15:8> 7-0 ENCR_OFFSET<7:0> bit 31-0 ENCR_OFFSET: 暗号化オフセット マルチタスク テストの場合、暗号化オフセット ( 暗号化および認証向け ) GMC アルゴリズム (LEN-A) の場合、AAD バイトの数 DS60001246A_JP - p. 49-26 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 例 49-1: バッファ ディスクリプタの C 構造体 typedef struct bdCtrl { unsigned int BUFLEN :16; unsigned int CBD_INT_EN :1; unsigned int PKT_INT_EN :1; unsigned int LIFM :1; unsigned int LAST_BD:1; unsigned int :2; unsigned int SA_FETCH_EN :1; unsigned int :4; unsigned int CRY_MODE:3; unsigned int :1; unsigned int DESC_EN :1; } bdCtrl; typedef struct bufferDescriptor { bdCtrl BD_CTRL; unsigned int SA_ADDR; unsigned int SRCADDR; unsigned int DSTADDR; unsigned int NXTPTR; unsigned int UPDPTR; unsigned int MSGLEN; unsigned int ENCOFF; } bufferDescriptor; 49 暗号化エンジンと 乱数生成器 (RNG) © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-27 PIC32 ファミリ リファレンス マニュアル 暗号化エンジンのセキュリティ アソシエーション構造 49.4 表 49-4 に、セキュリティ アソシエーション構造を示します。 暗号化エンジンは、セキュリティ アソシエーションを使って、バッファ ディスクリプタ プロ セッサの処理設定を定義します。セキュリティ アソシエーションは以下を定義します。 • • • • • • • 使用するアルゴリズム 認証エンジンと暗号化 / 復号エンジンを並列で使うかどうか キーのサイズ 認証キー 暗号化 / 復号キー 認証初期化ベクタ (IV) 暗号化 IV 表 49-4: 暗号化エンジンのセキュリティ アソシエーション構造 Bit 31/23/15/7 名称 SA_CTRL Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 31:24 — — VERIFY — NO_RX OR_EN ICVONLY IRFLAG 23:16 LNC LOADIV FB FLAGS — — — ALGO<6> ENCTYPE KEYSIZE<1> 15:8 7:0 ALGO<5:0> KEYSIZE<0> MULTITASK<2:0> CRYPTOALGO<3:0> SA_AUTHKEY1 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_AUTHKEY2 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_AUTHKEY3 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_AUTHKEY4 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_AUTHKEY5 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_AUTHKEY6 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_AUTHKEY7 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_AUTHKEY8 31:24 AUTHKEY<31:24> 23:16 AUTHKEY<23:16> 15:8 AUTHKEY<15:8> 7:0 AUTHKEY<7:0> SA_ENCKEY1 31:24 ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> 7:0 ENCKEY<7:0> SA_ENCKEY2 31:24 ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> 7:0 ENCKEY<7:0> DS60001246A_JP - p. 49-28 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 表 49-4: 暗号化エンジンのセキュリティ アソシエーション構造 ( 続き ) Bit 31/23/15/7 名称 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 SA_ENCKEY3 31:24 ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> 7:0 ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> ENCKEY<7:0> SA_ENCKEY6 31:24 ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> 7:0 ENCKEY<7:0> SA_ENCKEY7 31:24 ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> 7:0 ENCKEY<7:0> SA_ENCKEY8 31:24 ENCKEY<31:24> 23:16 ENCKEY<23:16> 15:8 ENCKEY<15:8> 7:0 ENCKEY<7:0> SA_AUTHIV1 31:24 AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> 7:0 AUTHIV<7:0> SA_AUTHIV2 31:24 AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> 7:0 AUTHIV<7:0> AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> 7:0 AUTHIV<7:0> SA_AUTHIV4 31:24 AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> AUTHIV<7:0> SA_AUTHIV5 31:24 AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> 7:0 AUTHIV<7:0> SA_AUTHIV6 31:24 AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> 7:0 AUTHIV<7:0> SA_AUTHIV7 31:24 AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> 7:0 AUTHIV<7:0> SA_AUTHIV8 31:24 AUTHIV<31:24> 23:16 AUTHIV<23:16> 15:8 AUTHIV<15:8> 7:0 AUTHIV<7:0> © 2014 Microchip Technology Inc. 49 暗号化エンジンと 乱数生成器 (RNG) SA_AUTHIV3 31:24 7:0 Bit 24/16/8/0 ENCKEY<7:0> SA_ENCKEY5 31:24 7:0 Bit 25/17/9/1 ENCKEY<7:0> SA_ENCKEY4 31:24 7:0 Bit 26/18/10/2 DS60001246A_JP - p. 49-29 PIC32 ファミリ リファレンス マニュアル 表 49-4: 暗号化エンジンのセキュリティ アソシエーション構造 ( 続き ) Bit 31/23/15/7 名称 SA_ENCIV1 SA_ENCIV2 SA_ENCIV3 SA_ENCIV4 Bit 30/22/14/6 Bit 29/21/13/5 Bit 28/20/12/4 Bit 27/19/11/3 31:24 ENCIV<31:24> 23:16 ENCIV<23:16> 15:8 ENCIV<15:8> 7:0 ENCIV<7:0> 31:24 ENCIV<31:24> 23:16 ENCIV<23:16> 15:8 ENCIV<15:8> 7:0 ENCIV<7:0> 31:24 ENCIV<31:24> 23:16 ENCIV<23:16> 15:8 ENCIV<15:8> 7:0 ENCIV<7:0> 31:24 ENCIV<31:24> 23:16 ENCIV<23:16> 15:8 ENCIV<15:8> 7:0 ENCIV<7:0> DS60001246A_JP - p. 49-30 Bit 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 図 49-11: SA_CTRL のフォーマット ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 31-24 — — VERIFY — NO_RX 23-16 LNC LOADIV FB FLAGS — 15-8 7-0 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 Bit 25/17/9/1 Bit 24/16/8/0 OR_EN ICVONLY IRFLAG — — ALGO<6> ENC KEY SIZE<1> ALGO<5:0> KEY SIZE<0> MULTITASK<2:0> CRYPTOALGO<3:0> bit 31-30 予約済み : 使用不可 bit 29 VERIFY: NIST プロセス検証設定 1 = NIST プロセスを使う 0 = NIST プロセスを使わない bit 28 予約済み : 使用不可 bit 27 NO_RX: 受信 DMA 制御設定 1 = 認証校正用に ICV の計算だけ行う 0 = 通常処理 bit 26 OR_EN: レジスタビット論理和イネーブル設定 1 = CSR レジスタ内の各ビットの論理和を取る 0 = 通常処理 bit 25 ICVONLY: 未完了チェック値限定フラグ これは SHA-1 アルゴリズムにのみ影響します。AES アルゴリズムには影響しません。 1 = HMAC 結果の 3 ワードのみ利用可能 0 = HMAC 結果の全てが利用可能 bit 24 IRFLAG: ハッシュの即時結果設定 このビットは、ハッシュの即時結果が必要な場合にセットします。 1 = ハッシュの即時結果を保存する 0 = 即時結果を保存しない bit 23 LNC: 新キー ロード設定 1 = 暗号化と認証向けに新しいキーのセットをロードする 0 = 新しいキーをロードしない bit 22 LOADIV: IV ロード設定 1 = このセキュリティ アソシエーションから IV をロードする 0 = 次の IV を使う bit 21 FB: 先頭ブロック設定 このビットは、このブロックがIV値を適用するためのデータの最初のブロックである事を示します。 1 = これはデータの先頭ブロックである 0 = これはデータの先頭ブロックではない bit 20 FLAGS: 受信 / 送信フロー設定 1 = セキュリティ アソシエーションは送信フローに関連する 0 = セキュリティ アソシエーションは受信フローに関連する 49 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-31 暗号化エンジンと 乱数生成器 (RNG) bit 19-17 予約済み : 使用不可 PIC32 ファミリ リファレンス マニュアル Figure 49-11:SA_CTRL のフォーマット ( 続き ) bit 16-10 ALGO<6:0>: 使用するアルゴリズムのタイプ 1xxxxxx = HMAC 1 x1xxxxx = SHA-256 xx1xxxx = SHA1 xxx1xxx = MD5 xxxx1xx = AES xxxxx1x = TDES xxxxxx1 = DES bit 9 ENC: 暗号化タイプ設定 1 = 暗号化 0 = 復号 bit 8-7 KEYSIZE<1:0>: SA_AUTHKEYx または SA_ENCKEYx 内のキーのサイズ 11 = 予約済み ( 使用禁止 ) 10 = 256 ビット 01 = 192 ビット 00 = 128 ビット (1) bit 6-4 MULTITASK<2:0>: 暗号化エンジン内の並列動作の組み合わせ方法 111 = 受信データの暗号化と認証を平行して行う ( 並列パス ) 101 = 受信データを暗号化し、その後で認証を行う ( パイプパス ) 011 = 予約済み 010 = 予約済み 001 = 予約済み 000 = 暗号化または認証または復号のどれか ( パスなし ) bit 3-0 CRYPTOALGO<3:0>: 暗号化アルゴリズムの動作モード 1111 = 予約済み 1110 = AES_GCM (AES 処理向け ) 1101 = RCTR (AES 処理向け ) 1100 = RCBC_MAC (AES 処理向け ) 1011 = ROFB (AES 処理向け ) 1010 = RCFB (AES 処理向け ) 1001 = RCBC (AES 処理向け ) 1000 = REBC (AES 処理向け ) 0111 = TOFB ( トリプル DES 処理向け ) 0110 = TCFB ( トリプル DES 処理向け ) 0101 = TCBC ( トリプル DES 処理向け ) 0100 = TECB ( トリプル DES 処理向け ) 0011 = OFB (DES 処理向け ) 0010 = CFB (DES 処理向け ) 0001 = CBC (DES 処理向け ) (DES 処理向け ) 0000 = ECB Note 1: この設定は、セキュリティ アソシエーション内の SA_AUTHKEYx または SA_ENCKEYx のサイズを 変更せず、使用する SA_AUTHKEYx および SA_ENCKEYx のビット数のみを変更します。 DS60001246A_JP - p. 49-32 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 図 49-12: SA_AUTHKEYx のフォーマット (x = 1 ~ 8) ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 31-24 AUTHKEY<31:24> 23-16 AUTHKEY<23:16> 15-8 AUTHKEY<15:8> 7-0 AUTHKEY<7:0> bit 31-0 Bit 25/17/9/1 Bit 24/16/8/0 AUTHKEY<31:0>: 認証エンジン処理で使用するキー 認証エンジンを使わない場合、これらのエントリは「0」にクリアする必要があります。 図 49-13: SA_ENCKEYx のフォーマット (x = 1 ~ 8) ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 31-24 ENCKEY<31:24> 23-16 ENCKEY<23:16> 15-8 ENCKEY<15:8> 7-0 ENCKEY<7:0> bit 31-0 Bit 25/17/9/1 Bit 24/16/8/0 ENCKEY<31:0>: 暗号化エンジン処理で使用するキー 暗号化エンジンを使わない場合、これらのエントリは「0」にクリアする必要があります。 図 49-14: SA_AUTHIVx のフォーマット (x = 1 ~ 8) ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 AUTHIV<31:24> 23-16 AUTHIV<23:16> 15-8 AUTHIV<15:8> 7-0 AUTHIV<7:0> bit 31-0 Bit 24/16/8/0 49 AUTHIV<31:0>: 認証エンジン処理で使用する IV 認証エンジンを使わない場合、これらのエントリは「0」にクリアする必要があります。 図 49-15: SA_ENCIVx のフォーマット (x = 1 ~ 4) ビット レンジ Bit 31/23/15/7 Bit 30/22/14/6 Bit Bit Bit Bit 29/21/13/5 28/20/12/4 27/19/11/3 26/18/10/2 31-24 ENCIV<31:24> 23-16 ENCIV<23:16> 15-8 ENCIV<15:8> 7-0 ENCIV<7:0> bit 31-0 Bit 25/17/9/1 Bit 24/16/8/0 ENCIV<31:0>: 暗号化エンジン処理で使用する IV 暗号化エンジンを使わない場合、これらのエントリは「0」にクリアする必要があります。 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-33 暗号化エンジンと 乱数生成器 (RNG) 31-24 Bit 25/17/9/1 PIC32 ファミリ リファレンス マニュアル 例 49-2: セキュリティ アソシエーションの C 構造体 typedef struct saCtrl { unsigned int CRYPTOALGO :4; unsigned int MULTITASK :3; unsigned int KEYSIZE :2; unsigned int ENCTYPE :1; unsigned int ALGO :7; unsigned int :3; unsigned int FLAGS :1; unsigned int FB :1; unsigned int LOADIV :1; unsigned int LNC :1; unsigned int IRFLAG :1; unsigned int ICVONLY :1; unsigned int OR_EN :1; unsigned int NO_RX :1; unsigned int :1; unsigned int VERIFY :1; unsigned int :2; } saCtrl; typedef struct securityAssociation { saCtrl SA_CTRL; unsigned int SA_AUTHKEY[8]; unsigned int SA_ENCKEY[8]; unsigned int SA_AUTHIV[8]; unsigned int SA_ENCIV[4]; } securityAssociation; DS60001246A_JP - p. 49-34 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 49.5 暗号化エンジンの動作 49.5.1 暗号化セキュリティ エンジン PIC32 ファミリの処理要求を低減するため、暗号化エンジンは 4 つの暗号化セキュリティ エン ジンを備えています。これらのセキュリティ エンジンは、各種のセキュリティ アプリケーショ ンで最も一般に用いられるタイプの暗号化、復号、数値計算を実行します。これらは公開鍵 / 非公開鍵ペアのネゴシエーション、メッセージ ハッシュ認証、バルクデータの暗号化 / 復号演 算を高速化します。これらのエンジンを並列またはデイジーチェーン化して使う事で、セキュ リティを高める事ができます。 以下の 4 種類のエンジンを実装しています。 • • • • トリプル DES (TDES) 共通鍵暗号化規格 (AES) セキュア ハッシュ アルゴリズム (SHA-1、SHA-256) Message Digest 5 (MD5) 49.5.1.1 トリプル DES (TDES) データ暗号化標準 (DES) は、1970 年代初頭に開発された暗号化アルゴリズムです。これはブ ロック暗号の一種であり、データを 64 ビットブロックで暗号化します。エンジンを通して送 信された各 64 ビットブロックに対して 1 つの 64 ビットブロックが返されます。 DESは56ビット長のキーを使います。 キーは通常64ビット値として表現されますが、 DESの定義 により、8 ビットごとにキーのパリティチェック用に使われて破棄されます。つまり、64 ビット キーの 8/16/24/32/40/48/56 番めのビットは破棄されるため、56 ビットだけがキーとして使われ ます。 処理する受信データのサイズを 8 の倍数バイトに揃えるために、ビットのパディングが必要で す。このパディングには処理から除外されるヘッダ / トレーラ データを含めず、追加するビッ トの値は「0」である事が必要です。 トリプル DES (TDES) では、このアルゴリズムを同一データブロックに対して 3 回実行し (DES では 1 回だけ )、56/112/168 ビット長のキーを使えます。DES と同様に、TDES は対称アルゴ リズムです ( つまり、暗号化と復号に同じアルゴリズムとキーを使います )。 49.5.1.2 共通鍵暗号化規格 (AES) AES では、128/192/256 ビット長のキーを使う事ができ、キーの長さに応じて、入力から出力 への変換に使う変換ラウンドの数が決まります。アルゴリズム実行の実効ビットレートもキー の長さによって決まります。 処理する受信データのサイズを 16 の倍数バイト (128 の倍数ビット ) に揃えるために、ビット のパディングが必要です。このパディングには、処理から除外されるヘッダ / トレーラ データ を含めず、追加するビットの値は「0」である事が必要です。 49.5.1.3 セキュア ハッシュ アルゴリズム (SHA-1、SHA-256) セキュアハッシュ アルゴリズム (SHA) は、米国家安全保障局 (NSA) が設計した暗号学的ハッ シュ関数です。これは一方向のメッセージ ダイジェスト関数であり、任意の長さを持つ入力 データから 160 ビット (SHA-1 の場合 ) または 256 ビット (SHA-256 の場合 ) のダイジェスト を生成します。 どちらのバージョンも 512 ビットブロックで動作します。入力データの長さを 64 の倍数バイ トに揃えるために、パディングが必要です。パディングの最上位ビットは必ず「1」とし、そ の後に「0」ビットを追加する事で、512 ビット (64 バイト ) に 64 ビット足りない長さまでパ ディングします。これに続く最後の 64 ビットには、パディング前のメッセージの長さ ( バイナ リ表現 ) を格納します。これにより、異なるメッセージがパディング後に同じになってしまう 事を防ぎます。 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-35 49 暗号化エンジンと 乱数生成器 (RNG) AES エンジンは、NIST( 米国立標準技術研究所 ) の定義に従う共通鍵暗号化規格 ( 元の名称は Rijndael) を実装します。DES と同様に、AES もブロック暗号の一種であり、暗号化と復号に 同じキーを使います。AES は、キーのサイズに関係なく、128 ビットブロックで動作します。 PIC32 ファミリ リファレンス マニュアル 49.5.1.4 メッセージ ダイジェスト 5 (MD5) メッセージ ダイジェスト 5 (MD5) は、SHA と同様に、暗号学的ハッシュ関数です。MD5 は、 1991 年に、以前の MD4 に置き換わるハッシュ関数として Ron Rivest によって設計されまし た。MD5 は、任意長 ( 制限なし ) の入力データから 128 ビットのハッシュ値を生成します。 MD5 は 512 ビットブロックで動作します。入力データの長さを 64 の倍数バイトに揃えるため に、パディングが必要です。パディングの最上位ビットは必ず「1」とし、その後に「0」ビッ トを追加する事で、512 ビット (64 バイト ) に 64 ビット足りない長さまでパディングします。 これに続く最後の 64 ビットには、パディング前のメッセージの長さ ( バイナリ表現 ) を格納し ます。これにより、異なるメッセージがパディング後に同じになってしまう事を防ぎます。 49.5.1.5 動作モード TDES および AES ブロック暗号化エンジンは、最大で 6 種類の動作モードを備え、単一キーで 暗号を繰り返し安全に使う事ができます。6 つのモードは以下の通りです。 • • • • • CBC (Cipher-Block Chaining) ECB (Electronic Code Book) CTR (Counter) - AES only CFB (Cipher Feedback) OFB (Output Feedback) • GCM (Galois/Counter) - AES 専用 使用中のモードは、データ処理時にセキュリティ アソシエーションによって指定されます。 49.5.2 暗号化エンジンの実行 暗号化エンジンは一連のバッファ ディスクリプタによって設定されます。これらのディスクリ プタは、データの各ブロックの処理方法と使用するセキュリティ アソシエーションをエンジン に指示します。1 つのセキュリティ アソシエーションを複数のバッファ ディスクリプタに割り 当てる事ができ、そうする事でメモリを節約できます。 図 49-16 に、1 つのセキュリティ アソシエーションに対する複数のバッファ ディスクリプタと データの関係を示します。 図 49-16: セキュリティ アソシエーションに対するバッファ ディスクリプタとデータの関係 0x80001300 Buffer Descriptor 1 BD_CTRL BD_SA_ADDR BD_SRCADDR BD_DSTADDR BD_NXTPTR BD_UPDPTR BD_MSG_LEN BD_ENC_OFF 0x80001000 Header 0x80002000 Data 1 Data 1 Trailer 0x80001100 Header Header Trailer 0x80002100 Header 0x80001340 Security Association Data 2 0x80001500 Buffer Descriptor 2 SA_CTRL Trailer 0x80001188 0x80001504 SA_AUTHKEY Data 2 Header Trailer 0x80002188 Header 0x80001380 Buffer Descriptor 3 0x80001524 SA_ENCKEY Data 3 Data 3 Trailer Trailer 0x80001544 SA_AUTHIV 0x80001F00 0x80001564 SA_ENCIV Buffer Descriptor n DS60001246A_JP - p. 49-36 Header 0x80002F00 Header 0x80001400 Data n Data n Trailer Trailer © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 49.5.2.1 データブロックのヘッダとトレーラ アプリケーションによっては、各データブロックがヘッダまたはトレーラ情報 ( もしくはその両 方 ) を格納している場合があり、暗号化エンジンはそれらを変更せずに通過させる必要がありま す。CEHDLEN および CETRLLEN レジスタは、それぞれヘッダとトレーラの長さを指定します。 各レジスタを設定する事で、それぞれ最大で 255 バイトを予約できます。 49.5.2.2 セキュリティ アソシエーションの作成 セキュリティ アソシエーションは、暗号化エンジンに対して、そのブロックに対するエンジン の動作方法と、使用すべきセキュリティ キーおよび初期化ベクタ (IV) を指定します。セキュリ ティ アソシエーションは、少なくとも以下の情報を提供する必要があります。 • • • • • • • 使用するアルゴリズム (HMAC、SHA256、SHA1、MD5、AES、TDES、DES) 初期化ベクタ (IV) をロードするかどうか 動作の方向 ( 受信または送信 ) 暗号化するのか復号するのか キーサイズ マルチタスク オプション 動作モード ( 一部のアルゴリズムにのみ適用 ) セキュリティ アソシエーションを作成して設定するためのサンプルコードを例 49-3 に示しま す。 例 49-3: セキュリティ アソシエーションの設定 securityAssociation enc_sa __attribute__((aligned (8))); securityAssociation dec_sa __attribute__((aligned (8))); memset((void *)&enc_sa, 0, sizeof(enc_sa)); memset((void *)&dec_sa, 0, sizeof(dec_sa)); /* Set up the Security Association */ enc_sa.SA_CTRL.ALGO = 0b0000010; /* TDES */ enc_sa.SA_CTRL.LNC = 1; enc_sa.SA_CTRL.LOADIV = 1; enc_sa.SA_CTRL.FB = 1; enc_sa.SA_CTRL.ENCTYPE = 1; /* Encryption */ enc_sa.SA_CTRL.CRYPTOALGO = 0b0101; /* TCBC */ dec_sa.SA_CTRL.ALGO = 0b0000010; /* TDES */ dec_sa.SA_CTRL.LNC = 1; dec_sa.SA_CTRL.LOADIV = 1; dec_sa.SA_CTRL.FB = 1; dec_sa.SA_CTRL.ENCTYPE = 0; /* Decryption */ dec_sa.SA_CTRL.CRYPTOALGO = 0b0101; /* TCBC */ 49 暗号化エンジンと 乱数生成器 (RNG) /* Load the encryption keys */ enc_sa.SA_ENCKEY[2] = 0x01234567; enc_sa.SA_ENCKEY[3] = 0x89abcdef; enc_sa.SA_ENCKEY[4] = 0xfedeba98; enc_sa.SA_ENCKEY[5] = 0x76543210; enc_sa.SA_ENCKEY[6] = 0x89abcdef; enc_sa.SA_ENCKEY[7] = 0x01234567; dec_sa.SA_ENCKEY[2] dec_sa.SA_ENCKEY[3] dec_sa.SA_ENCKEY[4] dec_sa.SA_ENCKEY[5] dec_sa.SA_ENCKEY[6] dec_sa.SA_ENCKEY[7] = = = = = = 0x01234567; 0x89abcdef; 0xfedeba98; 0x76543210; 0x89abcdef; 0x01234567; /* Load the initialization vector (IV) */ enc_sa.SA_ENCIV[2] = 0x12345678; enc_sa.SA_ENCIV[3] = 0x90abcdef; dec_sa.SA_ENCIV[2] = 0x12345678; dec_sa.SA_ENCIV[3] = 0x90abcdef; © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-37 PIC32 ファミリ リファレンス マニュアル 49.5.2.3 バッファ ディスクリプタの作成 バッファ ディスクリプタは、暗号化エンジンに対して、処理する必要のある各データブロック のデータ処理方法を指定します。バッファ ディスクリプタは、少なくとも以下の情報を提供す る必要があります。 • • • • • • セキュリティ アソシエーションのアドレス (BD_SA_ADDR) 処理するソースデータのアドレス (BD_SRCADDR) 処理後のデスティネーション データのアドレス (BD_DSTADDR) 次のバッファ ディスクリプタのアドレス (BD_NXTPTR) ハッシュ アルゴリズムの更新を保存するアドレス (BD_UPDADDR) 総メッセージ長 ( バイト数 ) (MSG_LENGTH) バッファ ディスクリプタを作成して設定するためのサンプルコードを例 49-4 に示します。 例 49-4: バッファ ディスクリプタの設定 /* vector is the source data for the encryption phase. cipher is the destination for the encryption phase, and the source data for the decryption phase. plain is the destination for the decryption phase. /* Set up the Buffer Descriptor */ enc_bd.BD_CTRL.BUFLEN = sizeof(vector); enc_bd.BD_CTRL.LIFM = 1; enc_bd.BD_CTRL.SA_FETCH_EN = 1; enc_bd.BD_CTRL.LAST_BD = 1; enc_bd.BD_CTRL.DESC_EN = 1; dec_bd.BD_CTRL.BUFLEN = sizeof(cipher); dec_bd.BD_CTRL.LIFM = 1; dec_bd.BD_CTRL.SA_FETCH_EN = 1; dec_bd.BD_CTRL.LAST_BD = 1; dec_bd.BD_CTRL.DESC_EN = 1; enc_bd.SA_ADDR enc_bd.SRCADDR enc_bd.DSTADDR enc_bd.NXTPTR enc_bd.MSGLEN = = = = = KVA_TO_PA(&enc_sa); KVA_TO_PA(vector); KVA_TO_PA(cipher); KVA_TO_PA(&dec_bd); sizeof(vector); dec_bd.SA_ADDR dec_bd.SRCADDR dec_bd.DSTADDR dec_bd.MSGLEN = = = = KVA_TO_PA(&dec_sa); KVA_TO_PA(cipher); KVA_TO_PA(plain); sizeof(cipher); 49.5.2.4 バッファ ディスクリプタ プロセッサの起動 セキュリティ アソシエーションとバッファ ディスクリプタを設定した後、以下のようにバッ ファ ディスクリプタ プロセッサ (BDP) を起動します。 1. 2. 3. 最初のバッファ ディスクリプタのアドレスをエンジンに対して指示する。 有効にする割り込みを選択する。 暗号化 DMA エンジンを有効にする。 例 49-5 に、処理を開始するためのサンプルコードを示します。 例 49-5: バッファ ディスクリプタを処理するための暗号化エンジンの設定 CEBDPADDR = KVA_TO_PA(&enc_bd); CEINTEN = 0x07; CECON = 0x07; DS60001246A_JP - p. 49-38 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 49.5.3 暗号化エンジン動作のガイドライン 暗号化エンジンを正しく設定して動作させるためのガイドラインを以下に記載します。 Note: L1 キャッシュを備えるデバイス上のキャッシュ コヒーレンシ問題を防ぐため、全 てのバッファ ディスクリプタとセキュリティ アソシエーションには、KSEG1 また は KSEG3( キャッシュなし ) セグメントからアクセスする必要があります。 • データの配置 - セキュリティ アソシエーション構造は 8 ビット境界に配置する必要があります。これは、 aligned 変数属性を使う事で可能です ( 例 49-3 参照 )。 - バッファ ディスクリプタ構造は 8 ビット境界に配置する必要があります。これも、aligned 変数属性を使う事で可能です ( 例 49-4 参照 )。 - バッファ ディスクリプタで使うソースおよびデスティネーション アドレスは、32 ビッ ト境界に配置する必要があります。 • データ長 - 各バッファ ディスクリプタのバッファ長フィールドの値は、使用する暗号化アルゴリズ ムのワードサイズの倍数である事が必要です。データブロックは、破損を防ぐため、 「0」 ビットをパディングする事で必要なサイズに揃える必要があります。各アルゴリズムの ワードサイズを表 49-5 に示します。 表 49-5: 暗号化アルゴリズムのワードサイズ アルゴリズム ワードサイズ AES 16 バイト TDES 24 バイト DES 8 バイト © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-39 49 暗号化エンジンと 乱数生成器 (RNG) - 複数のバッファ ディスクリプタにまたがるデータの総長は、使用する暗号化アルゴリズ ムのワードサイズの倍数である事が必要です。各アルゴリズムのワードサイズは表 49-5 に記載しています。 - ハッシュ アルゴリズム (MD5、SHA1、SHA256) の最小パケット長は 64 バイトです。 - 入力データ長が上記のガイドラインに適合しない場合、 「0」ビットをパディングする事 で長さを揃える事が必要です。 • アルゴリズム、初期化ベクタ (IV) - AES GCM の IV のサイズは 96 ビットに制限されます。 - AES GCM の暗号化 IV の第 4 ワード (LSB 32 ビット ) は「1」である事が必要です。 - 認証エンジンと暗号化エンジンを並列で使う場合、HMAC を使う必要があります。 - HMAC は、認証エンジン (MD5/SHA1/SHA256) のいずれか 1 つと組み合わせて使う必要 があります。 PIC32 ファミリ リファレンス マニュアル 49.6 暗号化エンジンの割り込み PIC32 は、暗号化エンジンの動作中に発生したイベントを反映して割り込みを生成できます。 暗号化エンジンの各割り込みイベントに対応する割り込みイネーブルビットは、CEINTEN レ ジスタに格納されています。割り込みを生成するには、対応するイネーブルビットをセットす る必要があります。しかし、全ての割り込みイベントのステータスは、CEINTEN レジスタの 値に関係なく、CEINTSRC レジスタから直接読み出せます。従ってソフトウェアは、CEINTSRC レジスタをポーリングする事で、割り込みをモジュール外に伝搬させる事なく、割り込みイベ ントを監視できます。 割り込みをクリアするには、CEINTSRC レジスタ内の対応するステータスビットと PENDIF ビットの両方に、ソフトウェアで「1」を書き込む必要があります。 暗号化エンジンは以下の割り込みイベントを生成します。 • アクセス応答エラー割り込み : ステータスは AREIF ビット (CEINTSRC<3>) で示され、AREIE ビット (CEINTEN<3>) で有効にします。このイベントは、暗号化エンジン DMA がメモリア クセス中にアドレスエラーに起因するバスエラーに遭遇した時点で発生します。例えば、暗 号化エンジンが予約済みメモリまたは暗号化エンジンによるアクセスから保護されているメ モリへのアクセスを試みた場合、この割り込みが生成されます。このエラーから回復するに は、SWRST ビット (CECON<6>) を使って暗号化エンジンをソフトリセットする必要があり ます。 • DMA パケット完了割り込み : ステータスは PKTIF (CEINTSRC<2>) ビットで示され、PKTIE ビット (CEINTEN<2>) で有効にします。このイベントは、暗号化エンジンがメモリの転送を 完了した時点で発生します。 • バッファ ディスクリプタ処理割り込み : ステータスは CBDIF ビット (CEINTSRC<1>) で示 され、CBDIE ビット (CEINTEN<1>) で有効にします。このイベントは、暗号化エンジンが バッファ ディスクリプタの処理を完了した時点で発生します。 • マスタ割り込み : ステータスは PENDIF ビット (CEINTSRC<0>) で示され、PENDIE ビット (CEINTEN<0>) で有効にします。これは、上記の各割り込み要因のステータス値の論理和に よって生成されるグローバル割り込みです。暗号化エンジンから割り込みを生成するには、 個々の割り込み要因に加えて、このグローバル割り込みも有効にする必要があります。 暗号化エンジンに属する全ての割り込みは、暗号化エンジン割り込みベクタに割り当てられま す。 これに対応する暗号化エンジン割り込みフラグは CRPTIF (IFS3<11>) です。この割り込みフラ グは、割り込みを引き起こした原因を処理した後に、ソフトウェアでクリアする必要がありま す。 暗号化エンジンは、対応する暗号化エンジン割り込みイネーブルビット CRPTIE (IEC3<11>) を セットする事で、割り込み要因として有効になります。 以下の割り込み優先度ビットと割り込み副優先度ビットも設定する必要があります。 • CRPTIP<2:0> (IPC26<28:26>) • CRPTIS<1:0> (IPC26<25:24>) 暗 号 化 エ ン ジ ン 割 り 込 み 発 生 時 に 使 う 割 り 込 み サ ー ビ ス ル ー チ ン は、VOFF107<17:1> (OFF107<17:1>) ビットで設定します。 Note: 49.6.1 IFSx、IECx、IPCx、OFFx レジスタの割り込みビットの詳細については、『PIC32 ファミリ リファレンス マニュアル、セクション 08. 割り込み』(DS60001108) を参 照してください。 割り込みの設定 暗号化エンジンは、内部割り込みフラグ (AREIF、PKTIF、CBDIF、PENDIF) と、それらに対 応する割り込みイネーブル制御ビット (AREIE、PKTIE、CBDIE、PENDIE) を備えます。しか し、割り込みコントローラ内には、暗号化エンジン専用の割り込みフラグビットは 1 つしかあ りません。このフラグビットは CRPTIF (IFS3<11>) であり、対応する割り込みイネーブル / マ スクビットは CRPTIE (IEC3<11>) です。 Note: 暗号化エンジンの全ての割り込み条件は 1 つの割り込みベクタを共有します。 暗号化エンジンは、他の周辺モジュールから独立した固有の優先度と副優先度を持ちます。 CRPTIF ビットは、対応するイネーブルビット (CRPTIE) の状態に関係なくセットされます。必 要に応じて、ソフトウェアで CRPTIF ビットをポーリングできます。 DS60001246A_JP - p. 49-40 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) CRPTIE ビットは、対応する CRPTIF ビットがセットされた時の割り込みコントローラの挙動 を定義します。CRPTIE ビットをクリアした場合、割り込みコントローラは、対応するイベン トが発生しても CPU 割り込みを生成しません。CRPTIE ビットをセットした場合、割り込み コントローラは、対応する CRPTIF ビットがセットされた時点で、後述の優先度と副優先度に 基づいて CPU 割り込みを生成します。 割り込みを処理するユーザ ソフトウェアは、サービスルーチンを完了する前に、対応する割り 込みフラグビットをクリアする必要があります。 暗号化エンジン割り込みの優先度は、割り込みコントローラの IPC26 レジスタで設定できま す。この優先度は、割り込み要因をどの優先度グループに割り当てるのかを定義します。各優 先度グループは 7 ( 最優先 ) から 0 ( 割り込みを生成しない ) の優先度を持ちます。ある割り込 みをサービスしている時に、これよりも高優先度のグループに属する割り込みが発生した場合、 サービス中の割り込みは保留されます。 副優先度ビットを使うと、同一優先度グループに属する割り込み要因に異なる優先度を設定で きます。副優先度の値は、3 ( 最優先 ) から 0 ( 最低優先度 ) の範囲で設定できます。ある割り 込みのサービス中に、優先度グループが同じで副優先度がより高い割り込みが発生しても、サー ビス中の割り込みは保留されません。ただし、同一優先度グループに属する 2 つの割り込みが 保留中である場合、副優先度が高い方の割り込みが先に処理されます。 優先度グループと副優先度ビットを使うと、複数の割り込み要因に同一の優先度と副優先度を 割り当てる事ができます。そのように設定した複数の割り込みが同時に発生した場合、それら の各割り込み要因が持つ自然順序優先度によって、生成される割り込みが決まります。 自然順序優先度は割り込み要因のベクタ番号に基づきます。ベクタ番号が小さいほど、割り込 みの自然順序優先度が高くなります。自然順序優先度に従って保留された割り込み要因は、サー ビス中の割り込みの割り込みフラグがクリアされた後に、優先度、副優先度、自然順序優先度 に基づいて順番に割り込みを生成します。 有効な割り込みが発生すると、CPU はその割り込みに割り当てられているベクタへジャンプし ます。割り込みのベクタ番号がそのまま自然優先順位となります。CPU は、ジャンプ先のベク タアドレスからコードの実行を始めます。このベクタアドレスから始まるユーザコードは、任 意のアプリケーション動作を実行し、CRPTIF 割り込みフラグをクリア ( および、ソフトウェ アでクリア可能な割り込みであれば、CEINTSRC レジスタ内の対応するイベントもクリア ) し た後に、終了する必要があります。 詳細については、『PIC32 ファミリ リファレンス マニュアル、セクション 08. 割り込み』 (DS60001108) を参照してください。 例 49-6: 割り込みを有効にする暗号化エンジン初期化コード 49 © 2014 Microchip Technology Inc. 暗号化エンジンと 乱数生成器 (RNG) /* Start the engine */ CEBDPADDR = KVA_TO_PA(&enc_bd); CEINTEN = 0x07; CECON = 0x07; DS60001246A_JP - p. 49-41 PIC32 ファミリ リファレンス マニュアル 49.7 乱数生成器の動作 乱数生成器 (RNG) コアは、熱雑音を用いる真性乱数生成器 (TRNG) と、暗号的に安全な擬似乱 数生成器 (PRNG) を実装しています。 TRNG は、複数のリングオシレータと、集積回路で生じる熱雑音を使って真性乱数を生成しま す。この乱数は PRNG の初期化用に使えます。 PRNG は柔軟なリニアシフト フィードバック レジスタ (LSFR) であり、最大で 64 ビット長の LFSR を表現できます。 49.7.1 TRNG の使用 TRNG の動作は、TRNGEN ビット (RNGCON<8>) を使って有効にします。このビットをセッ トすると、TRNG は乱数の生成を始めます。 乱数は RNGSEED1 および RNGSEED2 レジスタから読み出せます。これにより、最大で 64 ビッ ト幅の乱数が得られます。これらのレジスタ内の有効ビット数は、RNGCNT レジスタで示され ます。RNGSEED1 および RNGSEED2 レジスタから乱数を読み出す前に、RNGCNT レジスタの 値が必要なビット数以上になるまで待つ事を推奨します。 49.7.2 PRNG の使用 PRNG の動作を開始する前に、初期シード値、多項式の長さ、多項式自体を設定する必要があ ります。 初期シード値は、RNGNUMGEN1 および RNGNUMGEN2 レジスタに書き込みます (PRNG が 生成した乱数を読み出す場合も、これらのレジスタを使います )。 LOAD ビット (RNGCON<12>) に「1」を書き込むと、TRNG から初期シード値をロードする 事もできます。この動作は、RNGSEEDx レジスタ内の現在の値を対応する RNGNUMGENx レ ジスタに転送します。 LSFR の多項式の長さ ( ビット数 ) は、PLEN<7:0> ビット (RNGCON<7:0>) で設定します。多 項式の最大長は 64 ビットであるため、このレジスタの最大値は 64 です。しかし、実際に必要 な長さは、アプリケーション要件と擬似乱数に要求する乱数度によって決まります。 多項式自体は RNGPOLYx レジスタで設定します。これらのレジスタ内のビットをセットする と、乱数生成用の対応するタップが有効になります。 PRNGEN ビット (RNGCON<9>) に「1」を書き込むと、PRNG の動作が有効になります。 例 49-7 のサンプルコードは、PRNG を [ 多項式の最大長 = 42 ビット、多項式 = x42 + x41 + x20 + x19 + 1、設定値で乱数を初期化 ] に設定した後に、RPNG を有効にします。 例 49-7: PRNG の設定 RNGPOLY1 = 0x00C00003; RNGPOLY2 = 0x00000000; RNGNUMGEN1 = 0x090a0b0c; RNGNUMGEN2 = 0x0d0e0f10; RNGCON.PLEN = 42; RNGCON.CONT = 1; PRNG を有効にした後、PLEN サイクルが経過してから RNGNUMGENx レジスタを読み出す 必要があります。RNGNUMGENx レジスタを読み出すと、次の乱数の生成が始まり、これが完 了 す る ま で に PLEN ク ロ ッ ク サ イ ク ル を 要 し ま す。別 の 方 法 と し て、CONT ビ ッ ト (RNGCON<10>) をセットする事で、PLEN クロックサイクル周期で新しい乱数を生成する事も できます。 DS60001246A_JP - p. 49-42 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 49.8 乱数生成器の割り込み PIC32 の乱数生成器は割り込みを生成しません。 49.9 各種リセットの影響 49.9.1 デバイスリセット 全ての暗号化エンジンおよび乱数生成器レジスタは、デバイスリセット時にそれぞれのリセッ ト状態に戻ります。暗号化エンジンで処理中であったデータ転送は、全て中止されます。TPRNG と PRNG は乱数生成動作を停止します。 49.9.2 パワーオン リセット 全ての暗号化エンジンおよび乱数生成器レジスタは、パワーオン リセット時にそれぞれのリ セット状態に戻ります。 49.9.3 ノンマスカブル割り込み (NMI) リセット NMI カウントダウンが終了してフルリセットが発生すると、全ての暗号化エンジンおよび乱数 生成器レジスタは、それぞれのリセット状態に戻ります。 49.10 省電力モード中の動作 49.10.1 スリープ中の暗号化エンジンの動作 PIC32 がスリープに移行するとシステムクロックは停止します。スリープ中は、暗号化エンジ ンによる転送は一切発生しません。全てのクロックが停止するため、暗号化エンジンは動作を 継続できません。スリープへ移行する前に、暗号化エンジンで処理中であった動作が完了する まで待機するかどうかは、ソフトウェアで決定する必要があります。 49.10.2 アイドル中の暗号化エンジンの動作 デバイスがアイドルに移行しても、システムおよび周辺モジュールバス クロック源は機能し続 けます。暗号化エンジンはアイドル中も動作を継続でき、割り込みを生成して CPU を復帰さ せる事ができます。 49.10.3 スリープ中の乱数生成器の動作 49 PIC32 がスリープに移行するとシステムクロックは停止します。 TRNG は、システムクロックに依存しないリングオシレータを使って動作するため、スリープ 中も乱数の生成を続行できます。しかし、乱数をクロックに同期して RNGSEEDx レジスタに 書き込む事はできません。 49.10.4 アイドル中の乱数生成器の動作 デバイスがアイドルに移行しても、システムおよび周辺モジュールバス クロック源は機能し続 けます。 PRNG は、CONT ビットがセットされていれば、乱数の生成を継続します。 TRNG は乱数の生成を継続します。 乱数生成器は割り込みを生成できないため、CPU を復帰させる事はできません。 © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-43 暗号化エンジンと 乱数生成器 (RNG) PRNG は、CONT ビットがセットされていても、乱数の生成を停止します。RNG レジスタの 状態は保持されるため、スリープ前の状態から乱数の生成を再開できます。 PIC32 ファミリ リファレンス マニュアル 49.11 関連アプリケーション ノート 本セクションに関連するアプリケーション ノートの一覧を下に記載します。一部のアプリケー ション ノートは PIC32 デバイスファミリ向けではありません。ただし概念は共通しており、変 更が必要であったり制限事項が存在するものの利用が可能です。暗号化エンジンと乱数生成器 (RNG) モジュールに関連する最新のアプリケーション ノートは下記の通りです。 タイトル アプリケーション ノート番号 現在、関連するアプリケーション ノートはありません。 Note: DS60001246A_JP - p. 49-44 N/A PIC32 ファミリ関連のアプリケーション ノートとサンプルコードは Microchip 社の ウェブサイト (www.microchip.com) でご覧頂けます。 © 2014 Microchip Technology Inc. セクション 49. 暗号化エンジンと乱数生成器 (RNG) 49.12 改訂履歴 リビジョン A (2013 年 11 月 ) 本書は初版です。 49 暗号化エンジンと 乱数生成器 (RNG) © 2014 Microchip Technology Inc. DS60001246A_JP - p. 49-45 PIC32 ファミリ リファレンス マニュアル NOTE: DS60001246A_JP - p. 49-46 © 2014 Microchip Technology Inc. Microchip 社製デバイスのコード保護機能に関して次の点にご注意ください。 • Microchip 社製品は、該当する Microchip 社データシートに記載の仕様を満たしています。 • Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流 通している同種製品の中でも最も高度であると考えています。 • しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、 Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所 有権の侵害に該当する可能性が非常に高いと言えます。 • Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。 • Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護 機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。 コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社 のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著 本書に記載されているデバイス アプリケーション等に関する 情報は、ユーザの便宜のためにのみ提供されているものであ り、更新によって無効とされる事があります。お客様のアプ リケーションが仕様を満たす事を保証する責任は、お客様に あります。Microchip 社は、明示的、暗黙的、書面、口頭、法 定のいずれであるかを問わず、本書に記載されている情報に 関して、状態、品質、性能、商品性、特定目的への適合性を は じ め と す る、い か な る 類 の 表 明 も 保 証 も 行 い ま せ ん。 Microchip 社は、本書の情報およびその使用に起因する一切の 責任を否認します。Microchip 社の明示的な書面による承認な しに、生命維持装置あるいは生命安全用途に Microchip 社の製 品を使用する事は全て購入者のリスクとし、また購入者はこ れによって発生したあらゆる損害、クレーム、訴訟、費用に 関して、Microchip 社は擁護され、免責され、損害をうけない 事に同意するものとします。暗黙的あるいは明示的を問わず、 Microchip社が知的財産権を保有しているライセンスは一切譲 渡されません。 商標 Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、 KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、 PIC32 ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、 米 国お よ びそ の 他の 国 にお け る Microchip Technology Incorporated の登録商標です。 FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、 MTP、SEEVAL、Embedded Control Solutions Company は、 米国における Microchip Technology Incorporated の登録商標 です。 Silicon Storage Technology は、 その他の国における Microchip Technology Incorporated の登録商標です。 Analog-for-the-Digital Age、Application Maestro、BodyCom、 chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、 dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、 HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、 MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、 Omniscient Code Generation、PICC、PICC-18、PICDEM、 PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、 SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、 WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ る Microchip Technology Incorporated の登録商標です。 SQTP は、米国における Microchip Technology Incorporated のサービスマークです。 GestICとULPPは、その他の国におけるMicrochip Technology Germany II GmbH & Co. & KG (Microchip Technology Incorporated の子会社 ) の登録商標です。 その他、本書に記載されている商標は各社に帰属します。 ©2013, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved. ISBN: 978-1-63276-113-2 QUALITY MANAGEMENT SYSTEM CERTIFIED BY DNV == ISO/TS 16949 == 2014 Microchip Technology Inc. Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham ( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォ ルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を 取得しています。Microchip 社の品質システム プロセスおよび手順は、 PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイ ス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、ア ナログ製品に採用されています。さらに、開発システムの設計と製造 に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得し ています。 DS60001246A_JP - p. 49-47 各国の営業所とサービス 北米 アジア / 太平洋 アジア / 太平洋 ヨーロッパ 本社 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel:480-792-7200 Fax:480-792-7277 技術サポート : http://www.microchip.com/ support URL: www.microchip.com アジア太平洋支社 Suites 3707-14, 37th Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel:852-2943-5100 Fax:852-2401-3431 インド - バンガロール Tel:91-80-3090-4444 Fax:91-80-3090-4123 オーストリア - ヴェルス Tel:43-7242-2244-39 インド - ニューデリー Tel:91-11-4160-8631 Fax:91-11-4160-8632 デンマーク - コペンハーゲン Tel:45-4450-2828 Fax:45-4485-2829 インド - プネ Tel:91-20-3019-1500 フランス - パリ Tel:33-1-69-53-63-20 Fax:33-1-69-30-90-79 アトランタ Duluth, GA Tel:678-957-9614 Fax:678-957-1455 中国 - 北京 Tel:86-10-8569-7000 Fax:86-10-8528-2104 オーストラリア - シドニー Tel:61-2-9868-6733 Fax:61-2-9868-6755 オースティン (TX) Tel:512-257-3370 中国 - 成都 Tel:86-28-8665-5511 Fax:86-28-8665-7889 ボストン Westborough, MA Tel:774-760-0087 Fax:774-760-0088 中国 - 重慶 Tel:86-23-8980-9588 Fax:86-23-8980-9500 シカゴ Itasca, IL Tel:630-285-0071 Fax:630-285-0075 クリーブランド Independence, OH Tel:216-447-0464 Fax:216-447-0643 ダラス Addison, TX Tel:972-818-7423 Fax:972-818-2924 デトロイト Novi, MI Tel:248-848-4000 中国 - 杭州 Tel:86-571-8792-8115 Fax:86-571-8792-8116 中国 - 香港 SAR Tel:852-2943-5100 Fax:852-2401-3431 中国 - 南京 Tel:86-25-8473-2460 Fax:86-25-8473-2470 中国 - 青島 Tel:86-532-8502-7355 Fax:86-532-8502-7205 中国 - 上海 Tel:86-21-5407-5533 Fax:86-21-5407-5066 ヒューストン (TX) Tel:281-894-5983 中国 - 瀋陽 Tel:86-24-2334-2829 Fax:86-24-2334-2393 インディアナポリス Noblesville, IN Tel:317-773-8323 Fax:317-773-5453 中国 - 深圳 Tel:86-755-8864-2200 Fax:86-755-8203-1760 ロサンゼルス Mission Viejo, CA Tel:949-462-9523 Fax:949-462-9608 ニューヨーク (NY) Tel:631-435-6000 中国 - 武漢 Tel:86-27-5980-5300 Fax:86-27-5980-5118 中国 - 西安 Tel:86-29-8833-7252 Fax:86-29-8833-7256 サンノゼ (CA) Tel:408-735-9110 中国 - 厦門 Tel:86-592-2388138 Fax:86-592-2388130 カナダ - トロント Tel:905-673-0699 Fax:905-673-6509 中国 - 珠海 Tel:86-756-3210040 Fax:86-756-3210049 Fax:43-7242-2244-393 日本 - 大阪 Tel:81-6-6152-7160 Fax:81-6-6152-9310 ドイツ - デュッセルドルフ Tel:49-2129-3766400 日本 - 東京 Tel:81-3-6880- 3770 Fax:81-3-6880-3771 ドイツ - ミュンヘン Tel:49-89-627-144-0 Fax:49-89-627-144-44 韓国 - 大邱 Tel:82-53-744-4301 Fax:82-53-744-4302 ドイツ - プフォルツハイム Tel:49-7231-424750 イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781 韓国 - ソウル Tel:82-2-554-7200 Fax:82-2-558-5932 または 82-2-558-5934 イタリア - ベニス Tel:39-049-7625286 マレーシア - クアラルンプール Tel:60-3-6201-9857 Fax:60-3-6201-9859 オランダ - ドリューネン Tel:31-416-690399 Fax:31-416-690340 マレーシア - ペナン Tel:60-4-227-8870 Fax:60-4-227-4068 ポーランド - ワルシャワ Tel:48-22-3325737 フィリピン - マニラ Tel:63-2-634-9065 Fax:63-2-634-9069 シンガポール Tel:65-6334-8870 Fax:65-6334-8850 台湾 - 新竹 Tel:886-3-5778-366 Fax:886-3-5770-955 スペイン - マドリッド Tel:34-91-708-08-90 Fax:34-91-708-08-91 スウェーデン - ストックホルム Tel:46-8-5090-4654 イギリス - ウォーキンガム Tel:44-118-921-5800 Fax:44-118-921-5820 台湾 - 高雄 Tel:886-7-213-7830 台湾 - 台北 Tel:886-2-2508-8600 Fax:886-2-2508-0102 タイ - バンコク Tel:66-2-694-1351 Fax:66-2-694-1350 03/25/14 DS60001246A_JP - p. 49-48 2014 Microchip Technology Inc.
© Copyright 2024 ExpyDoc