サイト内検索

前回はSilicon Labs社のEFM32PG/JGの仕様についてご紹介しました。EFM32PG/JGは、EFM32に共通な「低消費電力」という特長をしっかりと受け継ぎつつ、暗号化ハードウェアを内蔵しているという非常にユニークな製品です。(前回の記事はこちら
今回はその特徴的な機能である暗号化ハードウェア(CRYPTO)の性能を見ていきたいと思います。

どんなサンプルコードが用意されている?

EFM32PG/JGの開発環境として、Simplicity Studioというソフトウェアが提供されています。このSimplicityStudioには、コンパイル・デバッグ・プログラミングといった一般的な統合開発環境(IDE)が持つ機能に加え、消費電流測定ツール(Energy Profiler)、ペリフェラル設定ツール(Configurator)、製品ドキュメント、サンプルコード、などの機能・情報がまるごと搭載されています。

サンプルコードも豊富で、Lチカからインベーダゲーム(笑)まで色々と提供されているのですが、暗号化を取り扱ったものとしては次の2種類用意されています。

  • AES(プロジェクト名:SLSTK3401A_aescrypt)
  • ECDSA(プロジェクト名:SLSTK3401A_ecdsa)


サンプルコードのreadmeファイルを読んでみると、AESのサンプルコードではAESとSHAハッシュ関数を使っているようです。ECDSA(楕円曲線DSA)は、P-192、P-224、P-256を切り替えて評価できるようです。

Article header iot時代のマイコン3 1  1
色々なサンプルコードが用意されている

まずはECDSAから…

readmeファイルの情報を頼りに、とりあえず動かしてみましょう。
このサンプルコードは、ECDSA用のAPIを使ってコーディングされていますが、その処理に要した時間をカウントしておき、結果を仮想COMポートから出力する、というシンプルなものになっています。

スターターキット(SLSTK3401A)をPCに接続して、Simplicity Studioを起動します。SLSTK3401AはPearl GeckoとJade Geckoの共通のスターターキットになっていて、マイコンはPearl Geckoが載っています。


Article header iot時代のマイコン3 2  1

EFM32 Pearl Gecko スターター・キット SLSTK3401A


これからECDSAのサンプルコード(SLSTK3401A_ecdsa)をロードし、ビルドし、できたバイナリをEFM32PGにダウンロードするわけですが、その前にビルド設定を“Release”にしておきます。“Debug”にすると論理合成の際に圧縮がかかりませんので、フェアな比較ができないからです。

Article header iot時代のマイコン3 3png  1


また、ビルド時のパラメータ設定で、暗号化ハードウェア(CRYPTO)を有効にするか無効にするかを選択できるようになっています。以下の手順で暗号化ハードウェアを無効にします。

手順: プロジェクトを選択 → 右クリック → Property → C/C++ Build → Setting → GNU ARM C Compiler → Expert Settingに“-DNO_CRYPTO_ACCELERATION”を追加

Article header iot時代のマイコン3 5png  2


設定が済んだらビルドおよびダウンロードを行います。
なお、サンプルコードのmainを見るとECC P-256を使用する設定になっていますので、この宣言を変更すればP-192もしくはP-224を使用して評価することもできます。

Article header iot時代のマイコン3 4png  1

PC側の設定

結果(処理時間)は仮想COMポート経由で送られてきますので、ターミナルソフトを使ってデータを受信する必要があります。今回はTera Termを使います。JLink CDC UART Portを選択し、通信設定は115200-8-N-1(ボーレート115200、データ長8bit、パリティなし、ストップビット1bit)に設定します。

Article header iot時代のマイコン3 6  2

  

ソフト処理の結果(Cortex-M4F, 40MHz動作, 暗号化ハードウェア=無効)

スターターキットのリセットボタンを押すと、サンプルコードが動作して、結果がTeraTermに表示されます。

Article header iot時代のマイコン3 7  2

  

ハード処理の結果(Cortex-M4F, 40MHz動作, 暗号化ハードウェア=有効)

今度は暗号化ハードウェアを有効にして、同様に結果を見てみましょう。

Article header iot時代のマイコン3 8  2

結果を比較すると下表のとおりになりました。各処理時間の算出は、タイムスタンプ(カウンタ値)をリードし、API処理(鍵生成など)を行い、タイムスタンプ(カウンタ値)を再度リードして、タイムスタンプ間の差分を求めることで行っているようですので、暗号化以外の処理時間も多少含まれています。
ここで留意しておきたいのは、これはCortex-M4Fを使用しての結果という点です。非力なマイコンを使用すると、更に差は開くかもしれません。

ソフト処理(暗号化ハードウェア無効)ハード処理(暗号化ハードウェア有効)
鍵生成761 ms37 ms
署名生成804 ms76 ms
署名検証1580 ms103 ms


次回はAESのサンプルコードを試してみたいと思います。

EFM32シリーズマイコンが気になった方はこちらもご覧ください

関連記事