マイコンで楕円曲線暗号を扱うときのためのメモ

卒研の関係でPICでECDHやECDSAを使ってるので,その概要について軽くまとめておく.
なお,楕円曲線暗号とは言っても実際に使われるのはECDHやECDSAのみで,楕円ElGamal暗号については実装が少ないので触れていない.楕円ElGamal暗号よりもECDH+AESの方が高速なためだろうか…(軽く調べても出てこなかった).
 

マイクロコントローラ上での暗号機能の実装

IoTが流行っている最近では,マイコンにプログラムを載せ,扱うデータの暗号化することや相手の認証を行いたいという需要がある.このような暗号化機能(ここでは暗号化や認証,ハッシュを含むものとする.長いから.)はマイコン上に載せるか,専用のチップを使うか,2通りの選択肢がある.

マイコン上に実装する場合

マイコンで暗号化機能を行う場合はチップをまとめることができるので省面積で低コストにできる一方で,暗号化機能は比較的処理が重いため大量のデータを扱う場合はメインの処理が遅くなる可能性がある.

専用チップを使用する場合

それに対し専用チップを使用する方法では,面積も大きくなりコストも増えるが,高性能なため大量のデータを扱いやすく,その負荷はメインのマイコンには影響しない.また,開発をする際に問題の切り分けがしやすいという利点もある.
 
 

実際の選択肢

“マイコン”と言ってもその種類は様々なものがある.代表的なものの中で楕円曲線を扱うことができるか,使用可能なライブラリが存在するかどうかについて調査する.

専用チップ

Microchip社のCryptoAuthentication Devicesの中にはECDH,ECDSA,RSA,SHA256などを行うものがある.
例えばATECC108Aは256ビット又は283ビットのECDSAを行うことができる.価格は公式サイトで5,000個購入する場合は$ 0.51だが,1個単位で購入する場合はMouserで88.5円となっている.
また,より高機能なATECC608AではECDH,ECDSA,SHA256,AES-128を行うことができる.価格は公式サイトで5,000個購入する場合は$ 0.53だが,1個単位で購入する場合はMouserで90.9円となっている.
ただし,通信速度はそこまで速くないこともあるので,扱いには注意が必要.

PIC

PICの中にはいくつかの種類があり,その中で32ビットのものであればMPLAB Harmonyという開発用フレームワークを使用することができる.この中にはCrypto Libraryが含まれており,その中にはECDSA,ECDH,AES-256,SHA256,RSAが含まれている.なお,その実装の元となったのはWolfSSLで,HarmonyのCrypto Libraryはこれのラッパーのようだ.
つまり,PIC32~~という型番のものであれば,(プログラムメモリが許す限り)簡単に暗号化機能を扱うことができる.
また,PIC24とPIC32MZにはHardware Crypto Engineが搭載されている.これにより高速にAESやSHAを実行することができる.

Arduino

Arduinoの中で一番有名なArduino UnoはATmega328Pを使用しており,これのSRAMは2[KB]となっている.処理速度はともかく,実際に暗号化機能を使う場合はECDH,ECDSA,AES,SHAなどが必要になり,メインの処理を加えるとおそらくSRAMが足りなくなる.ということをこのフォーラムで議論している.
公式でライブラリが用意されていないため,使用するのは少し躊躇われる.

ESP-WROOM-32

ESP-WROOM-32では520[KB]のSRAMを搭載している.開発元が提供しているArduino core for ESP32によりArduinoの開発環境を使用することができる.この中にはmbedtls含まれており,この中にECDHECDSAが実装されている.
使用方法に関してはESP-WROOM-32を用いてTLSを扱うWiFiClientSecureを読みつつ,mbedtlsのAPIリファレンスを参照しながら開発すると楽にできそう.

mbed

mbedtlsが使えるのでmbedに対応したものであれば楕円曲線暗号を扱うことができる.mbedの特徴として,開発環境がオンラインであるというものがある.開発環境を整える手間がアカウント登録程度で済むため楽.秋月でも開発ボードを購入することができる.

Raspberry Pi

これはもはやマイコンではなくLinux PCなので,opensslでも使えばいいと思う.
Pythonなどの高級言語を使いたい場合はこっちの方が良いかもしれない.
Zero Wであればマイコンの開発ボードとそれほど価格的には変わらない.