AES搭載って珍しい?
AESアクセラレータを搭載したマイコンって、結構ありますよね。対応したマイコンを各社リリースしていますし、Silicon Labs社のEFM32ファミリも従来から搭載しています。
ただAESと一口に言っても、鍵長や暗号利用モード(BlockCipher modes of operation)に色々と種類があります。EFM32PG/JGのように多くのコンフィギュレーションに対応した製品は、なかなかないかもしれないですね。
サンプルコードを試してみる(暗号化)
では、さっそくサンプルコード(SLSTK3401A_aescrypt)を試してみたいと思います。まずは暗号化ハードウェア有効から。
前回の記事で取り上げたECDSAのサンプルコードと作業手順は同じで、EFM32PGにバイナリをダウンロードすると、Tera Term上にメッセージが。

「エンクリプト(暗号化)しますか?デクリプト(復号)しますか?」とのことですので、エンクリプトの“e”を入力。すると次のメッセージ。対話しながら進めていくサンプルコードのようです。

「暗号化のイニシャルベクタ生成に使うから、何か短いフレーズを入力して」とのことなので、macnicaと入力してみます。

次のメッセージは「暗号化したい文字列を入力して、終わったら<Enter>を押して」とのこと。「HelloNew World !!」と入力してリターン!瞬時にエンクリプトの結果(D69E3…)が表示されました。

これで終了のようです。暗号化の処理に要した時間(クロック数など)が表示されていないですが、ソフト処理にすれば、明らかに差が判るほどの時間差があるのでしょうか。楽しみは置いておいて、復号を行ってみます。
サンプルコードを試してみる(復号)
復号するには暗号化の結果が必要になりますので、先ほどの結果をコピーしておきます。

それから基板をリセット!暗号化 or 復号の選択では、今度はデクリプト(復号)を選んで先に進みます。
次のメッセージは、いよいよ「復号したいメッセージ(暗号文)を送って」とのこと。先ほどコピーしておいた暗号結果を貼り付けます。

そしてリターン。無事に、HelloNew World !!という文字列が複合できました。この処理時間も一瞬でした。

ソフト処理設定だとどうか?
さて、次はソフト処理です。前回の記事と同様にコンパイルオプションにおまじない
(-DNO_CRYPTO_ACCELERATION)を施して比較してみました。
エンクリプト時間 | デクリプト時間 | |
ハード処理 | 0.5秒 | 0.4秒 |
ソフト処理 | 2.3秒 | 2.1秒 |
結果については、ご意見分かれるところだと思います。暗号化・復号処理を行ってから、ターミナルソフト上に結果が表示されるまでの間にUSB-UART変換を行っていますので、生じた時間差がハード/ソフトの差、とまでは言い切れないかもしれないですね。処理時間の差を見るには、クロック数をカウントするようにサンプルコードを修正した方が良いかもしれません。
サイクル数の比較
他に適当なサンプルコードがないか探してみたところ、アプリケーションノートAN0955「CRYPTO」にAESのサンプルコードが含まれていました。しかも、暗号化・復号に要したクロックサイクル数をLCDに表示する、というものです。

128バイトのデータを暗号化・復号した場合のクロックサイクル数は、下表の通りでした。AESは鍵長256ビット、CBC(Cipher Block Chaining)モードを使用しています。このサンプルコードでは、データサイズを64バイトや256バイトに変えて試すことができますので、スターターキットをお持ちの方はぜひ試してみてください。
ソフト処理(暗号化ハードウェア無効) | ハード処理(暗号化ハードウェア有効) | |
暗号化 | 89182 clock | 6267 clock |
復号 | 50962 clock | 7396 clock |
最後に
IoTが普及していく上で、重要な課題の1つがセキュリティと言われています。
機器がゲートウェイを介してクラウドに繋がるといったモデルで考えた場合、インターネットやクラウドのセキュリティについては色々とサービスが充実してきています。しかし、IoT機器そのものにおけるセキュリティや、或いはIoT機器内のチップ間通信におけるセキュリティについては、チップ性能に依存する側面も強く、課題も多いのではないでしょうか。
EFM32PG/JGファミリは、様々な暗号をハードウェア処理することができる、時代を先取りしたような製品です。今後の製品設計を考える上で、ユーザに選択肢を与えてくれる貴重な存在となりそうです。