2023 Second Quarter 振り返り

さて、2023年第2四半期の振り返りです。なかなか仕事が忙しい時期だったりして思うようには進まなかったな〜

2023年4月~6月で何をしていたか

暗号理論

まずは暗号理論での進捗です。暗号理論の勉強をちょうどGWから開始しました。

自分の知識としては、数論などについての数学的な内容はそれなりに知識があったものの、暗号そのものについては疎かったこともあり、目標としてまず暗号の基礎・一般的なところを理解するという点に注力しました。

使用したテキストは次の書籍です:

第1章 現代暗号の誕生:公開鍵暗号の発見と暗号標準化
第2章 現在のネットワークで使われている暗号
第3章 現代暗号の理論
第4章 ビットコインの誕生:電子マネー革命
第5章 ポスト量子暗号
第6章 新しい暗号:進化発展する公開鍵暗号

この本の第1章から第3章までを読みました。

第1章と第2章とで暗号理論の基礎的な知識がコンパクトにまとまっており、 公開鍵暗号ディジタル署名といった基礎の基礎を学習しました。これら主要な概念が明確かつシンプルに書かれておりとても勉強しやすかったです。公開鍵の歴史的な発展の流れなどもありその点も楽しかったです。

暗号理論では初等数論から群論、有限体、楕円曲線などが重要な基礎として登場します。 多くの本では代数学や数論などの入門から扱っているものが多く(もちろんその方が本来好ましいのですが)一方それら必要な数学を既に知っていると冗長でかえって読みづらかったりします… この本で特に暗号理論のエッセンスとなる要点にだけに集中できました。

またいったんこの本で公開鍵基盤 (PKI) まで読み進めれば、SSL/TLSの詳細な本を見たときに理論として必要なことをどう実装に落とし込むかが見えてきて面白かったです!

一方、第3章は主に暗号の安全性についての議論なのですが、こちらは助けになる知識もなくなかなか難しかったです。扱われていたのはだいたいゼロ知識証明、汎用的結合可能性といったトピックになります。

ゼロ知識証明もいわゆる数学における厳密な”証明”とは違い、あくまで確率的な話なのが以外でした。自分のしっかりとした理解のためには、ここの細かい議論は別途改めてより詳しいものを当たらないといけないようです。

また汎用的結合可能性は「諸々の暗号機能を組合せたときの安全性を保証したい」ということはわかりましたが、そのシミュレーションの定式化から安全性の証明まで多くのことが消化不良で終わりました…こちらはまた別の機会に深めたほうがよさそうですね。実際のコンピュータでの実装などを見ることになったらもう少し具体性を帯びるかもしれません。

OS・カーネル

前半は次の書籍でLinuxカーネルについて学んでいました:

第1章 Linux カーネルの基礎
第2章 Linux カーネルのモジュール管理
第3章 Linux カーネルのビルド方法
第4章 タスクスケジューラの仕組み
第5章 仮想メモリーを実現する仕組み
第6章 コンテキストスイッチの仕組み
第7章 物理メモリー管理の仕組み
第8章 ファイルシステムの仕組み

この内当四半期で読んだのは第1章と第2章のみです。

カーネルモジュールなどまだLinuxカーネルの話題としては基礎で自分が知らないことでありとても勉強になりました。 将来的にモジュールの自作などしてみると面白そうですね。

ただ前四半期からこの分野の勉強は理論・座学がほぼ全てとなっており、そろそろ実際に手を動かして試行錯誤しないとだんだん要点や知識的な地理感がわからなくなってきていました。

そこで座学は一旦休みにして、6月頃からOS自作をスタートさせました。 有名なOS自作本『ミカン本』をもとに、本書でC言語で書かれているものをRustに移植するというものです:

さてRustで書くにあたりUEFIまわりの実装をどうするかですが、以下の面白い記事を読みました:

engineers.ntt.com

UEFIのRust wrapperはすでによく知られたものがあるようですね:

github.com

確かにUEFIのRust wrapperがあれば実装はスムースかもしれませんが、UEFI自体に深入りせず結果として肝となるようなところを素通りしてしまえば、せっかくのOS自作なのにCS修行としてはいまひとつ足りないものになりそうです。

しかしだからといって、今の自分にUEFIを実装しながらさらにOS自作のいろいろなことを吸収・実装するのは到底無理があるように思えました。

折衷案としてuefi-rs配下にuefi-rawという、UEFI Specificationをそのまま実装したのではないかと見えるcrateがありました。こちらどれくらいの完成度かわからないのですが、現在このuefi-rawを使いながらMikanOSを実装しています。

とはいえなかなか難しいですね、結局UEFI Specificationとuefi-rsのコードの両方とにらめっこしながら実装しています。四苦八苦ですがこういうのはなかなか好きで楽しいです!

uefi.org

アルゴリズム演習

当四半期ではLeetCodeなどの演習自体は特にやりませんでした。

そういえばZennではじめて記事を書きました:

zenn.dev

どこへ向かうか

さて2023年も折返しです。今後の動きについてはまず

OS・カーネルはOS自作を原則継続

になります。これが半年で完了するかどうか自信がありません… (悲しいけど普段は労働者なのよね)とはいえある程度概算で見通しを立てたいですね。

暗号理論についてはこの後ネットワークとの関連性を深めようと思います、つまりSSL/TLSです。

SSL/TLSについては次の有名な本の前半から入ろうと思っています:

さてこちらも最終的には何か自作的なものになるのでしょうか?

では2023年後半も励んでまいります!