RL78マイコンのセキュリティIDを一意に決めたい

目的

RL78の開発環境において,セキュリティID設定というものがある(下図参照).16進数10バイトで設定できるものではあるが,その値を完全な乱数ではなくて,一意に決める方法のひとつを紹介する.

RL78のセキュリティID設定(画面はe2studioの英語版)

上記のセキュリティID設定では,不一致だった場合にフラッシュメモリーのデータ(コード領域およびデータフラッシュ領域両方)を消去するかどうか選択できる.

結論

ファイルのハッシュ値計算と同じ方法で,これを10ケタに区切ることで,特定の文字列に対して一意の16進数10バイト(20ケタ)が得られる:

$ echo -n 0x; echo -n foo-bar | md5sum | cut -c 1-20
0xe5f9ec048d1dbe19c70f

文字列foo-barに対する32ケタのMD5の計算結果の内,先頭の20ケタを切り出して,0xを先頭に付加したものが0xe5f9ec048d1dbe19c70f.これをセキュリティIDの値として使う.PowerShellコマンドプロンプトでは通常実施できないが,近頃はGitを使うことが大半であるため,Git Bashを使うことでWindows環境下でも上記コマンドが実行できる.

その他

セキュリティIDについて

セキュリティIDは,あくまでデバッグ(オンチップデバッグ)開始時のセキュリティ設定であって,RL78のチップへの不正アクセスというよりは,RL78のチップへ不正にアクセスしてデバッグを開始しようとしたときに,有効な機能である.既に書き込まれているセキュリティIDの値と,デバッグしようとしている側のセキュリティIDが異なっていた場合にデバッグを開始できなくするという動作をする.

開発環境におけるデバッグセッション構成

デフォルトでは,デバッグ開始時にフラッシュROMを消去してからデバッグという設定となっている.そのため,セキュリティIDの照合に失敗しても,結局フラッシュROMを消去してからデバッグを開始するので,あまり影響はないと考えられる(e2studioにて確認).