STM32G4 – AES
Advanced Encryption Standardハードウェア･アクセラレータ
1.0版

STM32のAdvanced Encryption Standardハードウェアアクセラ
レータのプレゼンテーションにようこそ。ここでは、暗号アプリ
ケーションで広く使用されているAESインタフェースの機能の説明を行います。

1

概要• 平文と呼ばれる元のテキストを暗号文と呼ばれる読取り不能テキストにセキュアな暗号鍵を用いて変換

暗号鍵

暗号文

平文

AES

2

• CPUまたはDMAによって使用されるハードウェア･アクセラレータとして設計連鎖モード･ロジック

暗号化の方向復号化の方向• 多くの標準動作モードと2種類の鍵サイズ（128ビットまたは256ビット）に対応

アプリケーション側の利点• データの機密性と真正性を保護• CPU処理時間の低減

AESアルゴリズムは、128ビット長か256ビット長の秘密暗号鍵を用いて情報の暗号化と復号化を行うための対称ブロック暗号です。暗号化では、暗号文と呼ばれる判読不能なフォーマットにデータを変換し、復号化では、平文と呼ばれる元のフォーマットに暗号文を変換します。
AESペリフェラルには、AESアルゴリズムがNIST FIPS 197準拠で実装されており、処理時間についてはソフトウェアライブラリよりも高効率です。AESペリフェラルは複数の連鎖モードに対応しており、モードに応じて、データの機密性またはデータの機密性および真正性を保護します。

2

AESブロック図
AES
32256
鍵鍵IV

IV、カウンタ

AHB
スレーブ

3

制御
ステータス

バンク
レジスタ

128
保存／復元

128

データ入力

データ入力

データ出力

データ出力

スワップ

AESコア

128

aes_in_dma
aes_in_dma
aes_it

DMA
リクエスト
IRQ
リクエスト

コントロールロジック

平文データを暗号文に暗号化したり、その反対に暗号文を平文に復号化したりするには、すべてをソフトウェアで行うと大きな負荷となる集中的な演算が必要となります。AESハードウェ
アアクセラレータによって、AESコアの中で暗号化と復号化の処理が行われ、CPUの負荷が軽減されます。
AESブロックはAHBスレーブの1つです。CPUがAESブロックにデータ、鍵、初期化ベクトルをメモリマップドレジスタに書き込んた後に読出して結果を取得するか、2本のDMAチャネル（1本はAESへのデータの書き込み、もう1本は結果の読出し）によってデータの移動が保証されます。
AESがより優先順位の高い別メッセージを処理する必要がある
場合は、ソフトウェアで元のメッセージをサスペンドする事が可能で、その後レジュームする事が出来ます。
AESコアは、データ処理を担当するユニットです。そのロジックは、1、8、16、32ビットデータのスワッピングに対応しています。
内部データパスは、データと初期値には128ビット幅、鍵には256ビット幅です。128ビット鍵にも対応しています。
3

AESを用いた機密性保護

4• 暗号化とは、平文と呼ばれる元データを、暗号文と呼ばれるランダムで読取り不能に見える形式に変換する方法• 第1の目的：データの機密性の保護

送信者
鍵
平文

暗号化

受信者

暗号文

暗号文

鍵

平文

複合化

AESの暗号化と復号化のアルゴリズムは、セキュアネットワー
クルータ、ワイヤレス通信、ならびに、セキュアスマートカード、セキュアビデオ監視システム、セキュア電子会計トランザクショ
ンを含む暗号化データストレージなどのさまざまなアプリケーションに適しています。
送信者は、秘密鍵を用いて平文メッセージを暗号化します。受信者は、同じ秘密鍵を用いてそのメッセージを復号化します。
したがって、AESは対称鍵に基づいており、同じ鍵が暗号化と復号化の両方に使用されます。

4

AESを用いた認証済み暗号化

5• メッセージの機密性の保護に加えて、受信者は、メッセージが本物であり転送中に変更されていないどうかについても知りたいケース• これは、メッセージ認証コード（MAC）計算と呼ばれる追加処理で達成

ヘッダ（真正性検証のみ済）

メッセージの例

MAC：メッセージ認証コード

暗号化済ペイロード（暗号化、真正性検証済）

送信者

受信者

鍵

鍵

平文

暗号文

暗号文

暗号化

平文
復号化

MAC

MAC

鍵

MAC計算

MAC計算

鍵

暗号文にメッセージ認証コードを追加することにより、受信者は、そのメッセージが期待される送信者が元となっていることの確認が可能となります。
AESブロックは、データ暗号化の中でMACの生成が可能です。

5

AES機能（1/3）

6• NIST FIPS 197に準拠したAESアルゴリズムの実装• NISTによって標準化された6種類のAES連鎖モード：• 128ビットブロックを処理する「ブロック」暗号モード• 1）電子コードブック（ECB）• 2）暗号ブロック連鎖（CBC）• あらゆるデータ･サイズを処理する「ストリーム」暗号モード（メッセージがモジュロ128ビットである必要は無い）• 3）カウンタ･モード（CTR）• MAC計算を用いた特殊ストリーム暗号である「認証済み」暗号モード• 4）ガロア･カウンタ･モード（GCM）• 5）GCMの1種であるガロア･メッセージ認証コード･モード（GMAC）• 6）CBC-MAC付きカウンタ（CCM）

米国標準技術研究所（NIST）は、暗号化規格を規定する連邦情報処理規格（FIPS）広報物を発行しています。
ブロック暗号モードは、暗号化するデータがバッファに格納されている場合に有益です。
ストリーム暗号モードは、（ブロックレベルでは無く）ビットレベルで効率的にデータの暗号化や復号化を行うために便利です。
このモードには鍵のスケジューリングが不要です。
認証済みモードは、（有効化されている場合に）暗号化されたデータとともにメッセージ認証コード（MAC）を生成するために用いられます。

6

AES機能（2/3）

7• 3種類のAES動作モード：• モード1：暗号化• モード2：暗号化のための鍵導出（ECBとCBCのみ）• モード3：復号化

AESは3種類の動作モードを特徴としています。
• モード1：平文暗号化• モード2：電子コードブック（ECB）または暗号ブロック連鎖（CBC）の暗号化鍵連鎖ECBまたはCBCの連鎖モードでモード3を選択する前に使用する必要があります。AESアク
セラレータを有効化する前に、AESキーレジスタに格納された値に基づいて、新しい鍵が鍵導出によって導出されます。
• モード3：暗号文復号化7

AES機能（3/3）

8• 128、256ビットキーと128ビットデータ･ブロックの処理に対応• メッセージ･サイズがブロック･サイズの倍数ではない場合に、ECBモードとCBCモードではciphertext stealingテクニックをソフトウェアによって実装する必要あり• 1、8、16、32ビットデータをサポートするデータ･スワッピング･ロジック• 優先順位の高い別のメッセージを処理する必要がある場合に、メッセージをサスペンド• DMA機能：2チャネル（1チャネルは受信データ、1チャネルは送信データ用）

AESキーの長さは128ビットか256ビットです。
データスワッピングは、128ビットデータブロック内の1、8、16、32ビットのスワッピングに対応しています。
サスペンド／レジュームメカニズムによって、処理するメッセー
ジの優先度に応じたプリエンプションが可能です。
サイズがブロックサイズ（128ビット）の倍数ではないメッセージを管理する場合、ソフトウェアは、NIST特別広報800-38Aの付録に記載されているものなどのciphertext stealingテクニックを実装する必要があります。

8

ECB（電子コード･ブック）
平文ブロック1
鍵

鍵

暗号化

平文ブロック2
鍵暗号化

平文ブロック3
鍵

暗号化

暗号文ブロック1

暗号文ブロック2

暗号文ブロック3

平文ブロック1

平文ブロック2

平文ブロック3

キースケ
ジューリング

復号化

暗号文ブロック1

鍵

復号化
暗号文ブロック2

9

鍵

復号化
暗号文ブロック3

ECBは最も単純な動作モードです。連鎖操作も特別な初期化ステージもありません。メッセージはブロックに分割され、各ブロックが個別に暗号化または復号化されます。
ECBの復号化では、最初のラウンドの復号化のカギを、暗号化の最終ラウンドの鍵から導出する必要があります。これは、復号化を行う前に、暗号化の完全なキースケジュールが必要となるためです。

9暗号ブロック連鎖（CBC）モード
平文ブロック1

平文ブロック2

10

平文ブロック3

初期化ベクタ
鍵

暗号化

鍵

暗号化

鍵

暗号化

暗号文ブロック1

暗号文ブロック2

暗号文ブロック3

平文ブロック1

平文ブロック2

平文ブロック3

初期化ベクタ鍵

キースケ
ジューリング

復号化

暗号文ブロック1

鍵

復号化
暗号文ブロック2

鍵

復号化
暗号文ブロック3

排他的論理和CBCモードでは、平文の各ブロックが前の暗号文ブロックとXORされてから暗号化されます。各メッセージを一意にするために、最初のブロック処理時に初期化ベクタが使用されます。
CBCの復号化では、最初のラウンドの復号化の鍵を、暗号化の最終ラウンドの鍵から導出する必要があります。これは、復号化を行う前に、暗号化の完全なキースケジュールが必要となるためです。

10カウンタ（CTR）モード
カウンタ

カウンタ+1

鍵暗号化

平文ブロック1

鍵暗号化

平文ブロック2

暗号文ブロック1

カウンタ
復号化

平文ブロック1
暗号文ブロック1

カウンタ

鍵

暗号化

値+2

平文ブロック3

暗号文ブロック2

カウンタ+1

暗号文ブロック3+1

カウンタ

鍵

復号化

値+1値

鍵+1値+1値

鍵

11

復号化

平文ブロック2
暗号文ブロック2値+2

平文ブロック3
暗号文ブロック3

排他的論理和カウンタ（CTR）モードでは、AESコアを使用してキーストリームを生成します。鍵は、その後平文との排他的論理和をとって暗号文を得ます。
この連鎖スキームでは、キーストリームまたはカウンタブロックの生成にAESコアが暗号化モードで必ず使用されるため、ECBモードやCBCモードとは異なり、CTRの復号化にキースケジューリングは必要ありません。

11ガロア／カウンタ･モード（GCM）
初期化ベクタカウンタ+1

カウンタ

鍵

暗号化

12

値+1
鍵

鍵

初期化（暗号化）

暗号化

平文
ブロック2

HASH

平文
ブロック3

平文ブロック1

暗号文ブロック2

暗号文ブロック3

GF2mul

GF2mul

GF2mul
最終MAC/TAG

排他的論理和ガロア／カウンタモード（GCM）では、平文メッセージが暗号化されている間に、並列でメッセージ認証コード（MAC）が計算され、対応する暗号文とそのMAC（認証タグとも言います）が生成されます。AESの機密性のあるカウンターモードをベースとして、加算と乗算を繰り返しタグを生成します。最初に初期化ベクトルが必要です。
GCMメッセージの一部（ここではブロック1）は暗号化されないことがあります（認証済みヘッダと呼ばれます）。

12ガロア･メッセージ認証コード（GMAC）モード

13

初期化ベクタ鍵

初期化（暗号化）

HASH

平文ブロック1

平文ブロック2

平文ブロック3GF2mul

GF2mul

GF2mul
最終

MAC/TAG

排他的論理和ガロアメッセージ認証コード（GMAC）を使用すると、メッセージの認証と、対応するメッセージ認証コード（MAC）の生成が可能となります。
平文の認証済みヘッダのみが含まれるメッセージ（すなわち、ペイロードなし）に適用されることを除けば、GMACはGCMと似ています。
ペイロードフェーズが使用されないことを除くと、手順と設定はGCMとすべて同じです。

13

CBC-MAC付きカウンタ（CCM）モード
B0

カウンタ

+1

カウンタ

暗号化

鍵

暗号化

14

値+1
鍵

鍵

初期化（暗号化）

平文
ブロック2
平文ブロック1

暗号化

平文
ブロック3
暗号文ブロック2

暗号化

暗号文ブロック3

暗号化
最終
タグ

排他的論理和暗号ブロック連鎖-メッセージ認証コード付きカウンタ（CCM）モードでは、平文メッセージのペイロード部が暗号化されている間に、並列でそのメッセージ全体に対するメッセージ認証コード（MAC）が計算され、対応する暗号文と対応するMAC（タグとも言います）が生成されます。
CCMモードは、AESの機密性のあるカウンターモードをベースとして、CBCを使用してメッセージ認証コードを計算します。初期値が必要です。
CCM規格では、最初の認証ブロック（規格ではB0と呼ぶ）に対して特定の暗号化規則を定義しています。具体的に言うと、最初のブロックにはフラグ、ノンス、ペイロード長（単位：バイト）が含まれています。
CCM連鎖モードは、GCMのように平文の認証済みデータのみで構成されたメッセージ（すなわち、ヘッダのみでペイロードなし）に適用することもできますが、こうすることはNISTが推奨していません。CCMをこのように使用することはCMACとは呼ばれない（GCM/GMACとは異なります）ことに注意してください。CMACは、SP800-38Bに規定されている別種のNISTモードです。

14

AESアクセラレータ･ブロック図
送信データ転送用
DMAリクエスト

AES動作モード

鍵導出

データスワッピング

データスワッピング

データ入力（32ビット）

暗号化
復号化
鍵：128/256ビット

AES連鎖モード

ECBCBC

CTR

GCM

GMAC

CCM

データ出力
（32ビット）

受信データ転送用
DMAリクエスト

AESアクセラレータ（128ビット）
フラグ

WRERR

15

RDERR

CCF

場合による•平文
•
暗号文
•MAC

BUSY
CCFIE

ERRIE

NVIC

AESアクセラレータのこの単純化されたブロック図には、左側のデータ入力から右側のデータ出力へのデータパスが示されています。
AESアクセラレータは、データスワッピングオプションを使用して、または使用せずに、128ビットまたは256ビット長の暗号化キーを用いて128ビットデータブロッ
クを処理します。
エラーフラグブロックは、次の2種類のフラグを介してAESアクセラレータの動作をチェックします。
計算フェーズまたは入力フェーズ中に予期しない読出し操作が検出されたときに、AESステータスレジスタに読出しエラーフラグ（RDERR）がセットされます。
出力フェーズまたは計算フェーズ中に予期しない書込み操作が検出されたときに、AESステータスレジスタに書込みエラーフラグ（WRERR）がセットされます。
AES制御レジスタのエラー割込み有効（ERRIE）ビットが事前にセットされていた
場合、これら2種類のエラーフラグの1つがセットされたときに割込みを生成できます。
計算完了フラグ（CCF）ビットは、計算が完了したときに、ハードウェアによってセットされます。CCF割込みイネーブルビットが事前にセットされていた場合、割込みが生成されます。
BUSYフラグはGCMモードのみで使用され、暗号化モードの場合に、優先順位の高いメッセージがGCMペイロードフェーズ中に現在のメッセージに割り込めることを示します。
15

AES処理時間（1/2）

16• 処理時間（AHBクロック･サイクル･ユニットの128ビットデータ･ブロック当たり）
キー長

128ビット

256ビットアルゴリズム

入力
フェーズ

計算
フェーズ

出力
フェーズ

合計

モード 1：暗号化

ECB、CBC、CTR

938

451

モード 2：鍵導出

-

-59-

59

モード 3：復号化

ECB、CBC、CTR

938

451

モード 1：暗号化

ECB、CBC、CTR

1358

475

モード 2：鍵導出

--82-

82

モード 3：復号化

ECB、CBC、CTR

1358

475

動作モード

ここには、各種のキーサイズとアルゴリズムに対する処理時間が示されています。

16AES処理時間（2/2）

17• 処理時間（AHBクロック･サイクル･ユニットの128ビットデータ･ブロック当たり）• 注：ヘッダ内に1データ･ブロック、ペイロード内に1データ･ブロック（GCM、CCM）
キー長

128ビット

256ビット

動作モード

アルゴリズム初期
ヘッダ ペイロード
タグフェーズ フェーズ フェーズ フェーズ

合計

モード 1：暗号化
モード 3：復号化

GCM

64

3551

59

209

CCM

6355

114

58

290-

GMAC

6435-

59

158

モード 1：暗号化
モード 3：復号化

GCM

883575

75

273

CCM

8779

162

82

410-

GMAC

8835-75198

ここには、各種のキーサイズとアルゴリズムに対する処理時間が示されています。

17

割込みとDMA割込みイベント

18

説明

AES計算完了フラグ

計算が完了したときにセット

AES読出しエラー･フラグ（計算フェーズまたはデータ入力フェーズで）AES Data Outレジスタからの予期しない読出し操作が検出されたときにセット

AES書込みエラー･フラグ（計算フェーズまたはデータ出力フェーズで）AES Data Inレジスタへの予期しない書込み操作が検出されたときにセット• DMA機能：2チャネル（1チャネルは受信データ、1チャネルは処理済みの送信データ用）• 入力用DMAリクエストチャネル：INPUTフェーズ中、AES Data In（AES_DINR）レジスタにワードを書き込む必要があるたびに、AESは DMAリクエスト（AES_IN）を開始• 出力用DMAリクエスト･チャネル：OUTPUTフェーズ中、AES Data Out（AES_DOUTR）レジスタからワードを読み出す必要があるたびに、AESはDMAリクエスト（AES_OUT）を開始

ここでは、ネスト化されたベクタ割込みコントローラで割り込みをトリガ可能なイベントである、AES計算完了、AES読出しエラー、AES書込みエラーの概要を示します。
ダイレクトメモリアクセスリクエストは、受信データと送信データの両方に対して内部で生成されます。DMAチャネルは、32ビットデータサイズで、メモリからペリフェラルモードまたはペリフェラルからメモリモードに設定する必要があります。

18

低電力モードモード

19

説明RUN有効SLEEPRCCで無効低電力RUN

有効低電力SLEEPRCCで無効STOP0/STOP1

停止 ペリフェラルレジスタの内容は保持

STANDBY

パワーダウン状態 ペリフェラルは、STANDBYモード終了後に再初期化する必要あり

SHUTDOWN

パワーダウン状態 ペリフェラルは、SHUTDOWNモード終了後に再初期化する必要あり

ここでは、各低電力モードにおけるAESアクセラレータのステータ
スの概要を示します。
デバイスがSTOPモードのときには、AESの動作はできません。

19

関連ペリフェラル

20• このペリフェラルに関連した以下のペリフェラル･トレーニングを参照してください。
• RCC（AESクロック制御、AESイネーブル／リセット）• 割込み（NVIC）• ダイレクト･メモリ･アクセス（DMA）コントローラ

これは、AESアクセラレータに関連したペリフェラルのリストです。詳細については、必要に応じてこれらのペリフェラルトレー
ニングを参照してください。

20

参照

21

• 詳細と追加情報については、以下を参照してください。
• 米国標準技術研究所（NIST）• SP800-38A：Ciphertext Stealing for CBC Mode
• SP800-38A：Recommendation for Block Cipher Modes of Operation• SP800-38D：Galois/Counter Mode (GCM) and GMAC
• SP800-38C：CCM Mode for Authentication and Confidentiality• AES Algorithm Validation Suite (AESAVS)• UM0586：STM32 暗号ライブラリ

詳細については、弊社ウェブサイトから入手可能なアプリケー
ションノートとユーザマニュアルを参照してください。

21