今回はSHR256アクセラレータです。ハッシュ計算用ハードウエアです。セキュリティに配慮したモダーンなマイコンで時々搭載されとる回路です。前回同様、RP2350には搭載されていますがRP2040には不在。それでは寂しいのでハッシュ素人老人が、ATSAMD51のハッシュ計算器と比較してみましたぞ。
※Pico関係投稿一覧は こちら 『Pico三昧』は一覧の末尾付近にひっそりと。
※Raspberry Pi Pico、Raspberry Pi Pico2のデータシートは、以下からダウンロードできます。
※2024年11月8日追記:本来「ビット」と書くべきところ「バイト」と誤って記している部分がありました。平にご容赦。すみません。
マイクロコントローラに搭載されるハッシュ計算器
昔風のマイクロコントローラ(MCU)、主記憶がマスクROMの場合、このようなハッシュ計算ハードウエアを搭載するということは無かったように思います。その昔はセキュリティとかにそれほど神経尖らせてなかったから?実際、マスクROMでは主記憶改竄しようとしてもできませんなあ。工場にお願いして修正してもらわないと。
その点、モダーンな、というより現代のほとんどのマイクロコントローラの場合、Flashメモリをコードおよび固定データの格納に使ってます。ともすればFlash上にあるコードを改竄されてしまう危険が考えられるわけであります。
ハッシュ計算ハードウエアを使って主記憶の整合性を絶えずチェックしておけば、そんな改竄に対処することが可能。また、到来するデータなどの確認にも同じハードウエアが使えるかもしれませぬ。
過去回を調べてみたら、以下の回で米Microchip社のATSAMD51マイコンの搭載するICMというお名前のハッシュ計算機能専用DMAコントローラを使用してみてました。
IoT何をいまさら(101) ATSAMD51、ICM、ハッシュ計算をする専用DMAC
RP2350のSHA256アクセラレータとの違いを後で比較してみたいと思います。
ソフトウエアによるハッシュ計算例
ハッシュ計算専用のハードウエアを搭載するのは、CPUと並行に計算させたいという要求があるためだと思います。主記憶改竄の検出はそのような用途かと。しかし、専用ハードウエアを搭載するほどでないけれど、各種の用途にハッシュ計算は必要かもです。例えば以下の過去回では、MicroPython処理系が搭載する hashlib というライブラリを使ってSHR256を計算してみています。
MicroPython的午睡(113) ESP32版、hashlib使ってsha256を計算
RP2350のSHA-256 accelerator
RP2350のSHA-256アクセラレータハードウエアは、512ビット・ブロックについてSHA-256ハッシュ(その名のとおり長さは256ビット)を計算してくれるものです。512ビットを超える分量に対しては処理を重ねていく必要があります。また、512ビットより短い端っこデータに対して計算する場合は、「適切なパディング」をしないとならないみたい。ハッシュ素人は何が適切か仕様書みないと分かりませぬが。
例によってSHA-256は、米国 NIST様 の以下の仕様の中のSHA-2により定義されているアルゴリズムらしいです(ちゃんと読んでないのよ。)
FIPS 180-4 Secure Hash Standard (SHS)
ATSAMD51搭載のICMとの比較
RP2350搭載のSHA256アクセラレータは、512ビットの単位ブロックの読み出しとそのSHA256ハッシュ計算に121サイクル(@150MHz)を要することになっています。RP2350の場合、ハッシュ計算に特化したハードウエアで自身の中にDMAコントローラなどは持ちません。メモリをスキャンする場合は、搭載されている標準のDMAを適切にプログラムする必要があるようです。勿論ソフトでイチイチ書き込んでも動くハズだけれど。
一方、Microchip社のArm Coretex M4搭載マイコンATSAMD51搭載のハッシュ計算器は、ICM = Integrity Check Monitorと呼ばれており、この機能専用のDMAコントローラを含み、結果のチェックまで行うステートマシンを搭載した自律的なシステムです。SHA1, SHA224, SHA256、3種のハッシュアルゴリズムに対応しています。SHA256の場合、RP2350と同等の処理を194サイクル(@120MHz)でできると思われます。
RP2350とATSAMD51の違いは、単純な計算アクセラレータであるRP2350に対してICMがかなり複雑なメモリ構造に対して自律的なチェックを行えることです。ICMの場合、メモリ上のディスクリプタのチェーンを使ってトビトビの複数のリージョンをつなぎ合わせたスキャッタ・ギャザー風のカッコイイDMA転送+ハッシュ計算が可能です。そして得た結果を自動で期待値と比較して、不正が検出されると割り込む機能までもっています。その上、一度ICMのレジスタ等をセットしてGoかけてしまうと、レジスタロック機能もあり、チェックに介入することはできなくなる念の入りようです。全部お任せできるICMと、計算を速くできるだけ(後はソフトでよしなに)なSHA256アクセラレータという感じっすかね。まあ、RP2350はセキュリティそのものにかなり力入っているのでここで専用ハード特有の機能に入れ込むこともないのかも知れんけど。