ARMの電源波形を解析して遊ぶ
DWMのARM基板の電源波形を観察して解析して遊んでいます。
この基板はあくまで評価ボードですから、電源にノイズが乗るなら、それを使った楽しみ方をしたいですね。
まず、BL命令で無限ループさせた場合の波形を調べてみました。(BL命令というのは、ARMアセンブラの分岐命令です)
LOOP:大きなノイズのピークが2つと、小さなピークが2つ見えます。 この4つのピークが周期的に繰り返されています。 ピークが出る周期は約5.27MHzの逆数で、これはデフォルトのCPUのクロック周波数と一致します。 ピークとピークの間に小さなピークもあります。裏クロックでしょうか。
bl loop
この波形から、BL命令を無限に繰り返すと1周期に4サイクル要しているのではないかと推測されます。
一方、ARM7のテクニカルリファレンスマニュアルによれば、BL命令のサイクル数は「2S+N」と書かれています。Sはシーケンシャルサイクル、Nはノンシーケンシャルサイクルだそうです。大きなノイズはシーケンシャルサイクルのアクセスを、小さなノイズはノンシーケンシャルサイクルのアクセスを表しているのでしょうか。とりあえず、つぎにいきましょう。
次に、BL命令の前に、NOP(実際には、MOV R0,R0)を入れた場合の波形です。
LOOP:
nop
bl loop
NOP命令はデータ処理命令ですから、1Sサイクルで実行できるはずです。波形を見ると、大きなノイズが1個増えました。また、ループの周期は5になりました。
こんな調子で、ADD(足し算)命令程度なら追跡できそうなのですが、STR命令やMLA(積和)命令などは、さすがに分からなくなりました。
ARMは1クロックで1つの命令を実行できるわけではなく、ちょっと複雑な命令だとすぐに複数クロックを必要としてしまうことを痛感しました。電源の波形から命令の実行状態を追跡するにはARM7のバスサイクル、特にノンシーケンシャルサイクルについて勉強しなければいけなさそうです。
サイドチャネル解析ができないかなと思って始めた電源波形の解析ですが、予想以上に難航しています。0x55555555と0xAAAAAAAAを足し算させた場合と、0x55555555と0x55555555を足し算させた場合などでは、若干の差はあるような気がするのですが、有意な差があるとは言い切れませんでした。
| 固定リンク
コメント