Project Fx 2.0

怪文書と備忘録を書きます

関数電卓プログラミングの世界:闇の魔術編

この記事は、闇の魔術に対する防衛術Advent Calendar 2020の第23日目の記事です(投稿は24日目)。遅刻本当にすみませんでした。 qiita.com

また、本記事は以下の別記事を読んでいることを前提に書かれています。そんなに長くないのでぜひ併せてご覧ください。 stepney141.hatenablog.com


今年も盛り上がっている闇の魔術に対する防衛術アドカレですが、私には闇の魔術を自ら操ってその成果を解説できるような能力はありません。 なので代わりに、関数電卓(高機能電卓)でのプログラミングの世界で、私が闇の魔術が使われていると感じた技術・出来事をいくつか紹介してみます。

RSA署名鍵リバースエンジニアリング事件

高機能電卓に関する(色んな意味での)闇のレベルを知るにはこの事件について解説するのが一番でしょう。

きっかけは2009年7月、とあるマニアがTexas Instruments (TI) 社製の高機能電卓「TI-83 Plus」のファームウェア(OS)に付けられていたRSA暗号電子署名鍵を素因数分解し、秘密鍵の値をインターネットフォーラムで公開したこと。 当時、TI電卓のOSにはRSA-155による認証鍵が付与されており、これによってOSが確かにTI社公式のものであることを保証し、同時に署名されていないOSの実行を弾いていました。 しかしこれは、電卓に自前のファームウェアを入れて遊びたいマニアにとっては厄介な存在でした。 ところが、秘密鍵さえ分かってしまえば、自前のファームウェアだろうと公式の鍵で署名をしてしまうことが可能になり、「これは正規のファームウェアである」と認識されて何も特別なハックをしなくても電卓にインストールできるようになるのです。 そしてとあるマニアがこの鍵の値を突き止めてしまったという訳です。 ちなみにこのマニア本人が語るところによれば、素因数の特定には「一般数体ふるい法」(GNFS)というアルゴリズムを用い1Athlon 64 (1.9GHz) というCPUを搭載したPCで1745時間(=73日弱)を費やしたとのことです。
さらにこの投稿から約2カ月後、フォーラムのメンバーの共同作業により、OSをアップグレードする機能がある全てのTI電卓について認証鍵が特定されました。 これらの情報はマニアの間で広く知れ渡り、一部のマニアはバックアップ代わりに自身のWebサイトにこれを転載しました。

高機能電卓に自前のファームウェアを入れて何が嬉しいのかというと、公式のOSには搭載されていないがマニアからしたらぜひ欲しいという機能が使えるようになります。 高機能電卓マニアのコミュニティ上では、ゲームや便利系ツールや科学技術計算パッケージなど、電卓上で動く様々な種類のソフトウェアが大量に公開・やり取りされています。例えばticalc.orgはそうしたパッケージの交換プラットフォームの一つです。 こうしたソフトウェアをいくつも電卓に導入して用いる人やその開発者にとっては、多くのパッケージを管理できるファイルマネージャや、プログラムを簡単に書ける便利なエディタなどの機能が必要不可欠です (PCでコードを書く時もターミナルやらエディタやらの使い勝手って大事ですよね?それと似たような感覚だと思えばだいたい合っています)。 しかしメーカーは当然そんなハードコアな使い方を想定していませんから、そういう機能はメーカー公式のOSには搭載されていないのです。

これに対してメーカー側には、ユーザーによる不正な改造を積極的に防がなければならないそれ相応の理由があります。 欧米圏では、高機能電卓は中等教育・高等教育における理数系科目の学習に用いるためのものであり、高機能電卓を使って計算することを前提としているテストも多くあります(アメリカのSATなども確か部分的に電卓を使うらしいですね)。
このため、高機能電卓をハックする技術が下手に出回ると、それを利用してカンニングをする学生が出てくる恐れもあり、メーカーからしたらまあ非常に面倒くさいことになる訳です。 こういう事態を防ぐため、メーカー各社は電卓を不正にハックするような試みを排除しようとする傾向があります(会社ごとにかなりの温度差がありますが、その中でもTIはマニアに対し当たりが強いです)。

さて、フォーラムで公開された例の認証鍵ですが、この事実はほどなくしてTI社の知るところとなります。 当然のことながらTI社はこれを問題視し、認証鍵の情報を掲載しているフォーラムや個人サイトの運営者に対してDMCA通知を送付しました。 そして多くの人がこれを受理し、認証鍵の情報は削除されました。 DMCA通知。最近で言うとyoutube-dlで話題になったアレですね。
しかしこの措置のせいでかえって認証鍵の情報に注目が集まり、マニアの内外から「リバースエンジニアリングの権利を妨げる不法行為だ」という非難も出ました。 この結果、まさかのWikiLeaksにまで認証鍵の情報が掲載されるに至ります。 wikileaks.org

そして9月に入り、電子フロンティア財団(EFF)がこの問題に関与。 EFFはDMCA通知を受け取ったマニア3名を支援し、「TI社は無意味な法的脅しをかけている」などと批判する声明を出しました。 www.eff.org

EFFはTIに対し「このDMCA通知は不当なので削除された投稿を2009年10月26日に復帰する」という通告をしましたが、TIはこれを無視。 このため10月26日に、削除されていた投稿のうち2つが復活しました。 ですがTIはEFFに対して無視を決め込み、なおも他のサイトへ通知を出し続けたため、EFFはこれを非難する追加の声明を出すに至ります。 www.eff.org

結局TIはEFFの声明に終始反応しないまま通知の送付を止め、認証鍵の情報は2020年現在でもインターネット上でそのまま公開され続けています。

この事件については、英語版Wikipediaからの翻訳記事を書いたのでそちらも参照してください。 ja.wikipedia.org

余談ですが、ファームウェア改造の応用として「ある機種Aにうまく調整したファームウェアを書き込むことで、機種Aの筐体に機種BのOSを書き込む」なんてことも可能です。 また、インストールした複数のOSを適宜切り替えて使うためのツールなんてものも存在します。 さらにこの方面の改造の別パターンとして、関数電卓の機種Aの基盤に刺さっている抵抗のうち、特定のものを取り除くことでファームウェアを機種Bに変更できるというものがあります。

さて、この事件を通じて、高機能電卓のユーザーコミュニティには色々と闇でカオスでハードコアな側面がある事がお分かりいただけたことかと思います。

高機能電卓でMathematicaに勝てるのか

高機能電卓と一口に言っても色々な種類がありますが、数式処理システム(CAS)というものを搭載しているか否かによって大雑把に上位機種か下位機種かを分けることができます。 CASというのは、要はMathematicaとかWolfram Alphaとかああいう類のソフトウェアのことです。 CASを積んでいる高機能電卓は、例えば2100みたいな長大な整数の絡む演算を正確に行えたり(多倍長計算)、記号を含む数式を処理したり、方程式を解いたり、不定積分ができたり、グレブナー基底を求めたり、とにかく色々な計算ができます。 要は、高級な高機能電卓は肩にちっちゃいWolfram Alphaを載せているのだと理解していただければそれでだいたい合っています。

いくらちっちゃいWolfram Alphaかて大したことできひんのやろ?と思われるかもしれませんが、実はそうでもないのです。

1997年、数式処理分野の学会が開いたカンファレンス「ISSAC '97」において、一つのベンチマークコンペのようなものが開かれました。 各数式処理ソフトごとに複数の参加チームに分かれて、各チームは自分たちの数式処理ソフトを駆使して計算問題を解き、正答した数と解答の正しさを競うというものです。 参加した数式処理ソフトウェアはMacsyma、Reduce、MuPAD、Mathematica、そしてTexas Instruments社のCAS搭載高機能電卓「TI-92」の5つ。 そして出された問題は以下のようなものでした。

gist.github.com

この10問が現代の数式処理システムや数値計算パッケージで簡単に処理できるかどうかは私には分かりませんが、少なくとも1997年当時のコンピュータには非常に荷の重い問題であっただろうということは想像がつくと思います。


2021-01-04追記:矢吹太朗先生が検証をしてくださり、Mathematica v12.1にて少なくとも8つが処理できる*1ことが判明しました。有難うございました。


最終的に最も正答数を稼いだチームはどこだったのかというと、なんとMathematicaとTI-92が1位タイでした2。 また、カンファレンス出席者の投票により、TI-92チームの解答が最も"interesting"であったとして最優秀賞を獲得しました。

コンペ終了後、各チームは自分たちの解答とその手順を公開しました。

Mathematicaチームによる報告がこれ。 Mathematica solutions to the ISSAC system challenge 1997 | ACM SIGSAM Bulletin

そしてTI-92チームによる報告がこれです。 A TI-92 solution to the ISSAC '97 challenge problem 1 | ACM SIGSAM Bulletin

私は解析学線形代数を中途半端にかじっている程度の数学知識しかない非理工系のB1なので、ここで解説されている解法がいったいどういうものなのか完璧には理解できていないのですが、 しかしそれはそれとしてこの結果は、スペックがものすごくチャチであったTI-92であっても3、数学的能力に長けた人がうまく扱えばMathematica並みのことが可能になるということをこれ以上なく表しています。 筐体は極めてチャチではありますが、その潜在的能力は単なる教育用用途に留まるものではないことが示されていると言っても良いでしょう。

オーバークロック

高機能電卓は、当然ですがCPUを搭載しています。 しかし高機能電卓にいくらスペックの高いCPUを積んだところで使い道がありませんし、また消費電力も多くなってしまいますよね。 そのため特に昔の機種においては、やや性能が低めの組み込み向けチップを採用した上でクロック周波数を下げて販売されていることがあったそうです(昔のポケコンもこういうパターンが多かったらしいですね)。 しかしどこの世界にもオーバークロッカーという人種は存在するもので、彼らは高機能電卓の持つCPUのポテンシャルを最大限に引き上げることを楽しんでいます。 制約が大きい分、普通のパソコンでオーバークロックするよりも面白いところがあるのかもしれませんね。

そうしたオーバークロッカーが開発したオーバークロック用ツールはインターネット上で一般に配布され、誰でも使えるようになっています。 高機能電卓は基本的に動作がかなりトロいので、重い処理をさせたい人にとってはある種必須のツールと言えるかもしれません。 私も以前、高機能電卓でちょっとした数値計算をした際に計算時間短縮のためオーバークロックツールを使ったことがあります。

高機能電卓に積まれているCPUはメーカーによってかなり多種多様なのですが、 大きく分けてHP Saturnのようなメーカー独自の製品とMC68000Z80SuperH・ARMなどのメジャーな製品とに二分されます。 最近の機種ではeZ80とARMが主流ですね。 当然CPUや機種の仕様ごとにオーバークロックのメカニズムは全く異なるので一般的な手順については説明できないのですが、一例として最近出たこちらのエントリを見てみましょう。

www.zephray.me

この記事の作者の方は、TI社の最新機種「TI-Nspire CX II」シリーズのオーバークロックをいち早く成し遂げておられます。

リバースエンジニアリングに厳しいTI社はこの機種についても、認証されていないバイナリの実行が不可能なようにしているのですが、 ユーザーコミュニティではこの機種のOSに存在する脆弱性を突き(一種のゼロデイ攻撃のようなもの)、権限昇格攻撃を仕掛けてTI-Nspireシリーズでバイナリを実行するためのツール「Ndless」が開発されています。

github.com

stepney141.hatenablog.com

上で紹介した記事の作者の方は、オーバークロックを行うにあたってこのツールを利用することで、TI社のセキュリティをかいくぐって高機能電卓でC言語をビルドしたバイナリを実行しています。

高機能電卓でWin10 IoTを動かす

高機能電卓に自前のファームウェアを入れて動かそうという話は上で既に説明しましたが、高機能電卓に「既存のOSを入れてしまおう」というとんでもないことを考える人もそこそこいます。

高機能電卓にLinuxを導入している人がいることは前回の記事で説明しましたが、高機能電卓にWindows 10 IoTを導入してしまった人もいます。

www.imbushuo.net

この人がWin10を入れたのはHewlett Packard社製の「HP Prime」というモデルなのですが、この機種は競合他社のTexas Instruments社製電卓に比べてあまりハックが進んでおらず、これは色々な意味でとても興味深い偉業であると私は思っています。 巨人の肩に乗らずに何かを成し遂げるのって、特にこういう分野ではものすごく大変なことですよね。

まとめ

ここまで、関数電卓の闇の魔術というかマイナーでディープな世界の話をしてみました。 具体的な闇の魔術の話が出てこず興ざめだったかもしれませんがどうかご寛恕ください。 来年の闇の魔術アドカレではもっとディープな関数電卓の技術の話が出来るように、一年間精進しようと思います。


  1. GGNFS及びMsieveの2つの実装を併用したそうです。10年経った現在のCPUなら、73日どころか数時間で素因数分解できてしまいそうな気もします

  2. 参考文献:梅野善雄(2000)『グラフ電卓が切り開く数学教育の新世界』』6ページ、“TI-92 Wins System Challenge at Math Software Conference”

  3. CPU:10MHz の MC68000 / RAM容量:70KB ~ 100KB程度 (モデルごとに差がある)

*1:10問のうち2問はコンペ開始後に別の問題へ差し替えられており、矢吹先生が検証して下さった問題は差し替え前の問題。上で紹介した問題は差し替え後のもの