セキュリティキャンプ2021にL-IIトラック「暗号のままで計算しようゼミ」で参加してきました。
メインとしては、TFHEという完全準同型暗号の1つについての理論の理解と実装をしました。
長くだらだらと書いているので、です、ます調がごちゃごちゃになっているのはご了承ください。
セキュリティ・キャンプ全国大会2021 オンライン とは
情報処理推進機構(IPA)が主催している無料でセキュリティ技術が学べるイベントです。今年は疫病の影響もあり(去年もでしたが)8/9〜10/3という長期間開催になりました。
詳しくは下のリンクを見てください。
参加理由
3回生の夏休みってことで周りはインターンとか考えてるみたいだけど、あんまりインターンには興味がなかった。せっかくだし何か技術系のイベントに参加してみたいなあと漠然に思ってはいた。
1回生くらいからセキュリティキャンプの存在は知っていて、あまりよく覚えてはいないが、京大界隈では単位取得率botで有名なへいほぅさんがtwitterで参加します、みたいなことを言っていたのを見て存在を知った気はする。
ただ、セキュリティキャンプは低レイヤーな話が多い印象で、バリバリプログラミング書いているわけでもないし、最近は数学とか物理とかばっかりやっていたのもあって、自分が挑戦するにはハードルが高すぎるなあとも思っていた。
しかし、2021の講義一覧とか応募課題を見ると、Lトラック(暗号数理実装トラック)だったらいけるんじゃない?面白そうだし、という気持ちに。
学科の先輩(YトラックでOS作ったらしい)がtwitterでセキュキャンは技術よりやる気が買われるぞ!と言っていたのも見て、年齢制限(22歳までしか応募できないので最初で最後のチャンスだった)もあるしとりあえず申し込んでみるか〜となった。
L-IIトラックを選んだ理由
理由としては
- 準同型暗号とは何たるか知りたい
- 応募課題が取り組みやすかった
の2つかなと思う。応募課題が取り組みやすかったのが正直一番の決め手だと思う。
応募課題
応募課題のうちL-IIの部分をざっくり要約すると
- 準同型暗号について調べたことをまとめる(意欲と調査力を問う、準同型暗号だけでなく他の秘密計算との比較)
- プログラミング能力を図る(整数係数多項式の剰余演算、剰余環上のP進数をp進数に直すみたいなやつ)
- 自由記述
でした。超シンプル!
出した応募課題は載せないけど、どんな感じでやったかだけ書いてみようと思います。
↑書いた応募課題下に載せました
課題1
意欲を問うとのことだったのでとにかく書きまくってやろうという気持ちでがんばった。間違ったことを書いても減点されないらしいのでとにかく調べて書きまくるのだ。
去年の参加者の方が応募課題をあげていたのを発見。なんとこの方、今年のチューターさんでした。
とりあえず「準同型暗号」でググったりしていたら講師の方が書かれていたqiita記事を発見する。当然知らないワードがいっぱいあるのでそれの中から掘り下げたい単語をググる。
図書館で「準同型暗号」で調べてヒットした本を読んだ(これはネットで読めた)。
TFHEのいろんな論文にあたってみる。準同型暗号をまとめたスライドを見つけたので読んでみる。情報処理学会とかのpdfを読んでみる。など...
調べてはまとめてをひたすらやっていたら去年の参加者の応募課題晒しに書いてあることと理解が違うな、と思うなどしたり...
結局5000文字くらいにはなった。参考文献は20個。
課題2
2n-1次以下の多項式をXn+1で割ってください、という課題。ナイーブに割り算をすると構造はすぐ見える。pythonで課題を出したのでリストのスライス使えばプログラムとしてはなんと11文字だけで終わり(雛形の関数内にプログラムを追記する形式だった)。当然だけど説明のコメントはしっかり書いた。
割り算と繰り上がりみたいなのに気をつける。と完成。
とりあえず書いてみようと一番初めに手につけたのがこの課題で、すぐ書けたのでこれは課題出せる!という気持ちになった。
なんちゃらキャンプの課題解けたら出そうと思ったらなんかすぐとけたからあと一生懸命自己アピールすれば出せそう
— ポタージュ (@_2pt) 2021年5月8日
課題3
がんばって自己アピールをする。何かそういうイベントに応募したりとかインターンとか行ってはないのでとりあえず最近つくったものとかをそれっぽく書いた。
- 宇宙/雷雲/環境放射線のデータ分析、異常検知
- 学生証で入退室管理するシステムを作った - ポタージュを垂れ流す。←これの話
- AWSで学科のslackに教務情報流してる話(3月につくったものを紹介 - ポタージュを垂れ流す。←これの一番下)
あと大学で何やってるか。応用数学、応用物理、計算シミュレーション、機械学習アルゴリズムやってますとか、数理工学実験でこういうことやりました(数理工学実験でやったことは2回生後期の振り返り - ポタージュを垂れ流す。を参照)、とか。
ここまで暗号の話をなにもしていないので、最後に暗号の話を書いた。
暗号技術に興味を持つようになったのは最近。遡ると量子力学おもろいなあってのがまずあるけど、量子情報科学入門を手に取ってみて量子アルゴリズムや量子暗号ってこうなってるんだ〜へえ〜というのがきっかけになっていると思う。ちなみに読み切れてなくて積読になってる。はやく読もうね。
ところで、量子じゃない暗号についてなんも知らない...。
こんな感じのことと、暗号について勉強を始めたのは最近だから準同型暗号をきっかけに色々知りたいみたいなことを書いた。
応募課題晒し
選考通過
セキュキャン選考通過した‼️
— ポタージュ (@_2pt) 2021年6月10日
締め切りが1週間伸びた影響で結果の公表も1週間程度伸びてた
ちなみに、同学科同回生で一緒にPRMLゼミやってるんですが、そこのメンバーがL-IIのトラックに来てたりとか、L-IIIトラックにもメンバーが行ってたりした。
あ、通ってた!!でも1人なんやけど大丈夫なんかこれ
— ヅメ (@zume_univ) 2021年6月10日
L-IIIトラックに行った友人。選考通過者1人でウケた
講師の方もL-II,IIIともに京大の情報学研究科の方です。全国大会なのになんだか内輪感が...
閉講式の成果発表のときも...
Lトラック発表3/5弊学科だったらしい
— ヅメ (@zume_univ) 2021年10月3日
実際に参加してやったこと
オンラインなので講義の時間が被らなければ他の講義も取れる。集中コースと選択コースは時間被らないように時間割が設定されています。僕は追加でA2の講義を受けました。他にAIシステム・ハッキング入門とか申し込んでたけど外れました。かなしいね。
各受講生には専用のgoogle accountが配られ、講義にはgoogle meetが使用されていました。
L-IIの講義
メンバーとしては自分入れて4人+追加受講者1人の合計5人でした。
TFHEとは?
TFHE(Torus Fully Homomorphic Encryption)とは、データを暗号化したまま任意の演算を行うことができる完全準同型暗号の1つです。いくつかある完全準同型暗号の流派のなかでも特に高速なことで注目されているようです。
流れ(?)としては、
入力を0,1のバイナリとして、暗号化(ノイズを付加、トーラスに埋め込み、多項式にする、など)して、所望の論理ゲートの性質を満たすように暗号のまま加算、回転などをして、符号をとって復号する
という感じになっています。
最近ではパスワードモニター等の技術に応用されているようです。
詳しくは講師の方が書かれたものを見るのがいいかな、と思います
講義内容
講義は3回、13:30-17:30の4時間。8/11,9/19,9/26にあった。基本的に進捗を聞いて、暗号のしくみ等についての講義を1時間程度して、残りはひたすらハッカソンという感じでした。
8/11と9/19の間にすごい期間空いちゃっているけど、そこには週1回くらいのペースで1時間程度のミーティングがあった。進捗どうですかと講義。
講義の目的は理論と実装の間を埋めること。実際論文を見ると、書かれている順番が講義の順の方が自然だったりとか、実装とちょっと数字の取り方が違ったりとか、アルゴリズムもそうだけど理論に寄ってて実装に持ってくのが大変だなあと思ったりした。
ミーティングと旅行が被って野付半島にドライブした帰りにミーティング受けた日もあった(10泊11日 だいたい北海道ぐるっと - ポタージュを垂れ流す。←の9/14)。
セキュキャンのdiscordがあるのでそこで連絡を取ったりとか時には質問投げたりとか、通話して作業したりした。
オンラインのメリットはどこでもいつでも好きな時に進捗が生めることだなあとは思う。
けど、デメリットとしては、あんまり交流が生まれなかったなあ、っていうのがある。ここは難しいところだと思う。画面突き合わせてはい喋ってくださいってなっても難しいよね。あとは、些細な質問でもオフラインなら質問してたのかなあと思ったり。自分で考えたら解決する/した問題でも、聞いたことで新たな知見を得られることもあるしね。
成果
応募課題はpythonで出したが、c++を書いてみることにした。普段python書いてるけどc++もpython並みに使えるようになればいいかなと思って。実際ポインタとか理解が完全ではないにせよ、逃げていたようなところとかも通らざるを得なくなって勉強になった。
講義の目標はHom NANDをつくること。NANDが作れれば任意の論理演算ができます。僕は9/19の時点で完成していたので、講義の目標は達成できた。
ちなみに、昨年度より受講生の進捗はだいぶよかったみたいです。昨年はHom NAND実装まで到達してない人もいたみたい。今年は追加受講生の方以外はみんな到達できていたと思う。
追加でTBSR(という暗号形式)を用いた整数加算アルゴリズムを論文を読みつつ実装した。
見た目は地味だけど、実際走ってるのを見ると感動する。
Hom NANDは実行に50秒程度かかっているけど、FFTなどでちょっと高速化すると4秒程度にはなるらしい。高速化を目指すとさらに10ミリ秒単位くらいにはなるみたい。
結果だけ表示してるので、暗号になってるものを文字列として表示するとそれっぽくていいかもしれないですね。
今後の展望
- TBSRの加算だけ実装したので、乗算も実装しようと思う
- 今度は準同型暗号のライブラリを使って何かアプリケーションを作ってみる(L-IIIでやってたMNISTの分類とかを準同型暗号を使ってやってみる)
- 準同型暗号に限らず暗号についての知見を広げたい
A2の講義
講義内容
講義タイトルは「任意USBデバイス開発実験」でした。なんかちっちゃいマイコン触れるの面白そう〜というノリ。講義で使ったのは 開発ボード EZ-USB(FX2LP CY7C68013A) です。
Lチカから始まって開発ボードから文字入力、カーソル操作、USB通信の盗聴をみてみたり...
成果
Lチカをいじって3拍子に
#seccamp2021a2 pic.twitter.com/1usrqtzGue
— ポタージュ (@_2pt) 2021年8月10日
最後はBadUSBを作ろう!とのことだったのですが、何も思いつかなかったのでそのデバイスをパソコンに接続すると画面にフィボナッチ数列をひたすら表示するってのを作った。
交流会
時々交流会的なのが設定されていました。oviceというのをつかってやっていました。
自己紹介の回のときは機械学習に興味があるみたいな中学1年生の人がいたりしておじさんびっくりしちゃった。あと九十九里浜をひたすら歩いたみたいな話した人がいて、そのまま限界旅行の話になってしばらく盛り上がった。そこではじめて琵琶湖一周した時の話 - ポタージュを垂れ流す。の話をしたらめちゃくちゃウケた。みんなも昼夜逆転したらとりあえず琵琶湖一周するといいと思います。
グループワーク
「セキュリティ・キャンプ修了後にあなたが取り組むこと」ってテーマでランダムに5人グループが作られて、そこでグループで何をするか決めることになった。3回くらいそういう時間が設けられたかな。僕はブログリレーをすることになった。いつまで続けられるかは正直わからないが...。前の人が次の人のテーマを決めるというなかなかユニークなものなので、勉強になるとは思う。
ちなみに1つ目の自分の記事はVPNについて調べてみた - ポタージュを垂れ流す。です。分野外なだけあって伝えるのが難しい...。
企業イベント
協賛企業さんがお話してくれる。労働意識の低い僕にとっては企業というものに触れられるいい機会になった。
NTTデータの方が初めは全然セキュリティとか知らなかったけど会社入ってから色々な技術を学んでいったみたいな話してて僕でも就職できるかもしれんって思った。
ゲヒルンのお話を聞けたのは本当に良かったと思う。いつもtwitterとかアプリとかお世話になってます。あとスライドのデザインが良すぎ。好きです。
あんま関係ないけど気象データ扱ってるから雷のデータベースとか知りませんかって社長さんに聞いたら https://www.blitzortung.org/を教えてもらった。こんなんあんねや。
ノベルティ
たくさんいただきました
— ポタージュ (@_2pt) 2021年8月5日
— ポタージュ (@_2pt) 2021年8月5日
なんかトートバッグ届いた pic.twitter.com/DeoxdyzHen
— ポタージュ (@_2pt) 2021年7月24日
その他
修了証が後日届くらしいです。届いたら追記したい。
さいごに
夏休みに1つの思い出ができたかなと思う。自分からでは触れなかったであろう準同型暗号を実際に理論から実装まで勉強する機会になって良かった。これからの暗号技術の勉強のきっかけにしたい。
そして、運営の方々、講師の方、チューターの方、そして受講生仲間、ありがとうございました!
あと、これ読んでてセキュリティキャンプに応募するか迷っている人、応募に必要なのは技術よりやる気だ!バシバシ挑戦してみよう!