世界標準暗号AES 仕様書のチェックポイント


バグったなら,暗号文のMSB/LSB並びを再確認

IoTから車載まで! 世界標準暗号をマイコンに軽量実装

AES(Advanced Encryption Standard)は,128ビット,192ビット,256ビットの鍵サイズで暗号化を行う対称鍵暗号方式です.その堅牢性と効率性から,暗号の世界標準として広く採用されています.ここでは,AESの仕様書に基づいた実装において重要なチェックポイントと,マイコンへの実装に関する技術について解説します.

1. バイト・オーダとビット配列の確認

AESは,16バイト(128ビット)のデータを「ステート」と呼ばれる形式で処理します.ステートは4x4のバイト配列として扱われ,暗号化や復号化の各ラウンドで変形されます.AES仕様書(FIPS 197)に従う際,LSB(Least Significant Bit)とMSB(Most Significant Bit)の扱いに注意が必要です.AESのステート内のバイト配列は通常,左がLSB,右がMSBです.

たとえば,次のようなビット配列を考えます.

\[ \begin{align} \text{bit}_{127} \quad & \text{in15} \quad \dots \quad \text{in0} \quad \text{bit}_0 \end{align} \]

このように,配列の添字を取り扱う際にミスを防ぐため,正確なバイト・オーダを確認することが重要です.

2. 暗号化と復号化の各ステップ

AESの暗号化プロセスは主に4つのステップから構成されています.

  1. SubBytes
  2. ShiftRows
  3. MixColumns
  4. AddRoundKey

これらは順にステートに適用され,データが暗号化されます.復号化プロセスでは,各操作の逆写像が逆順で適用されます.

  $\blacktriangleright \text{SubBytesの処理}$

`SubBytes`では,各バイトに対してS-Boxという置換関数が適用されます.この処理は,バイトごとに有限体(GF(2^8))での逆元を計算し,さらにアフィン変換を行います.逆元演算は次のように定義されます.

\[ x^{-1} = x^{254} \quad \text{(GF(2^8)における逆元)} \]

S-Boxは,暗号の強度を高めるために非常に重要です.マイコンに実装する際,S-Boxのテーブルを参照することで効率化を図ることができます.

  $\blacktriangleright \text{ShiftRowsの処理}$

`ShiftRows`では,ステート内の各行のバイトがローテーションされます.たとえば,2行目のバイトは1バイト分左にシフトし,3行目は2バイト,4行目は3バイト分シフトします.このシフト操作によって,データが分散され,暗号強度が向上します.

3. GF(2$^8$)での乗算とアフィン変換

AESのもう1つの特徴は,有限体GF(2$^8$)における演算です.MixColumnsのステップでは,次のような行列乗算が行われます.

\[ \begin{align} s' &= \begin{bmatrix} 2 & 3 & 1 & 1 \\ 1 & 2 & 3 & 1 \\ 1 & 1 & 2 & 3 \\ 3 & 1 & 1 & 2 \end{bmatrix} \cdot \begin{bmatrix} s_0 \\ s_1 \\ s_2 \\ s_3 \end{bmatrix} \end{align} \]

これにより,列全体に拡散効果が生じます.逆行列を使って復号化する場合も,GF(2$^8$)での逆元演算が必要です.

マイコンへのAES実装のポイントと最適化

AESの実装は,セキュリティを確保しつつ,計算資源の制限があるマイコン環境でどれだけ効率化できるかが重要です.以下では,マイコン上でAESを実装する際の最適化ポイントを解説します.

1. テーブルベースの最適化

AESのS-Boxや逆S-Boxは,事前に計算された値をテーブルとして保持しておくことで,演算の効率を大幅に向上させることができます.マイコンのメモリが限られている場合,テーブルサイズを圧縮しながら,必要な部分だけを動的に計算することが求められます.

2. ループ展開による速度向上

暗号化や復号化の過程で,多くの処理はループによって繰り返し行われます.たとえば,`MixColumns`の処理では,各バイトに対して同様の操作が繰り返されます.マイコンのキャッシュ効率を考慮し,ループ展開を行うことで,計算速度を向上させることができます.

3. 鍵スケジュールの効率化

AESではラウンドごとに鍵が変わるため,鍵スケジューリングも重要です.ラウンド鍵の生成は,次のようなステップで行われます.

\[ \text{RotWord} \rightarrow \text{SubWord} \rightarrow \text{Rcon XOR} \]

この鍵生成を効率的に行うことが,全体の処理速度に大きく影響します.ループや関数の最適化に加え,テーブルベースのアプローチを併用することも有効です.

まとめ

AES暗号のマイコン実装では,メモリ制約や計算速度を考慮しつつ,仕様に忠実な実装が求められます.ステートのバイト・オーダや逆元演算,行列の掛け算など,多くの処理が正確でなければ暗号強度が損なわれるため,慎重な設計と最適化が必要です.〈ZEPマガジン〉

動画を見る,または記事を読む

著者紹介

  • NTT,IBM,Sony,NECの各研究所において高性能回路IPやハイレベルシンセシスの研究,およびプレイステーションなどの製品用SoC開発に従事した後,現職にて民間宇宙ロケットの飛行制御コンピュータの研究開発に従事.FPGAや高位合成を活用している

著書

  1. [VOD/KIT]一緒に動かそう!Lチカから始めるFPGA開発【基礎編&実践編】,ZEPエンジニアリング株式会社.
  2. [VOD/KIT]Xilinx製FPGAで始めるHDL回路設計入門,ZEPエンジニアリング株式会社.
  3. [VOD/KIT]一緒に動かそう!Lチカから始めるFPGA開発【基礎編】,ZEPエンジニアリング株式会社.
  4. [VOD/KIT]Zynqで初めてのFPGA×Linux I/O搭載カスタムSoC製作,ZEPエンジニアリング株式会社.
  5. [VOD/KIT]Tiny FPGA実習!高校生から始めるHDLプログラミング,ZEPエンジニアリング株式会社.
  6. [VOD/Pi KIT]カメラ×ラズパイで一緒に!初めての画像処理プログラミング,ZEPエンジニアリング株式会社.
  7. スパコンでも破れない!高セキュリティ・マイコン・プログラミング,ZEPエンジニアリング株式会社.
  8. [YouTube]宇宙軌道ロケット 成功の方程式,企画:ZEPエンジニアリング株式会社,DigiKeyチャンネル.
  9. [YouTube]宇宙ロケットの電子回路開発,企画:ZEPエンジニアリング株式会社,DigiKeyチャンネル.
  10. FPGA/Zynqで作るカスタム・コンピュータ・チップ,ZEPエンジニアリング株式会社.
  11. Lチカ入門!ソフトウェア屋のためのHDL事はじめ,ZEPエンジニアリング株式会社.
  12. USBカメラの動画キャプチャ&描画用 Pythonプログラム,ZEPエンジニアリング株式会社.
  13. ライブラリ完備!組立式ラズパイI/O増設ボード MCC DAQ HATSファミリ誕生,ZEPエンジニアリング株式会社.

参考文献

  1. [VOD/KIT] 実習キットで一緒に作る!オープンソースCPU RISC-V入門,ZEPエンジニアリング株式会社.
  2. [VOD/KIT]ARM Cortex-A9&FPGA内蔵SoC Zynqで初体験!オリジナル・プロセッサ開発入門,ZEPエンジニアリング株式会社.