PIC32 FRM Section 49. Section 47. Crypto Engine (CE) and

注意 : この日本語版文書は参考資料としてご利用ください。最新情報は必ずオリジ
ナルの英語版をご参照願います。
セクション 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.