週末はInsomni'hack の問題を4時間くらい眺めていた。人々はMapna CTFというやつに出ていたっぽい? ので見誤った感はある。
なんとCryptoは一問だけだった。R1CSファイルが渡されるだけという問題で、 https://github.com/iden3/r1csfile で適当にパースしたら解けそうだったけど、なんかリポジトリに仕様とかも置いてあったのでKaitai Structでなんとかならないかと思ってksyファイル書いていた。
R1CSのバイナリフォーマットはheaderセクションとconstraintsセクションがあって、constraintsセクションをパースするにはheaderセクションの情報が必要だけど、各セクションの順番は不定なのでKaitai Structではきれいにパースできなかった。一旦header以外のセクションはパースしないことにして、パース後にセクションの中身を改めてパースするksyファイル2個方式でなんとかした。
みたいなことをやってパースはできたんだけど、出てきた式をこねくりまわしてもフラグっぽい値にならなくて解けなかった。なぜかというと値は上のやつじゃなくてなんか楕円曲線上の値? だったから……。そんなことは仕様には書いてなくて実装だけがそうなっていた。だるすぎる……
このR1CSのバイナリフォーマット、別に標準のそれとかじゃないっぽいけどこういうの出すんだな。私もなんか適当なフォーマット考えてリポジトリにおいておいて、急にCTFにだしたりしたろかな……