SlideShare のスライドを広告に遮られずに見る方法
よくわからないんですけど、全部タダで見られるようになったんですかね?
広告回避も同様にできます
w2w2.hatenablog.com
ホッケースティック恒等式と負の二項定理
こういうの、どれくらい常識なのかわからなくて困るな そんなに新規性はないです
ホッケースティック恒等式
, を非負整数とします。このとき等式
をホッケースティック恒等式などと言います。第二引数が fix されてる和がとれて、嬉しい!
この赤い丸で囲んだ場所の和が等しいことを主張していて、その形をパスカルの三角形に書くとホッケースティックのような形をしています。私はホッケースティックなんて見たことないのでホッケースティックのような形といえばホッケースティック恒等式の形ですが……
証明は易しく、(パスカルの三角形で隣り合う数を足したものがその下の数になっていること)を使って数学的帰納法を回すのが一番楽だと思います。組合せ的解釈で証明する方法もあって、知りたければ ABC154F - Many Many Paths の公式解説を読んでください。読んでないので嘘かも。
負の二項定理
は非負整数とします。適当に二項係数の定義域を拡張してあげれば一般の整数でも成り立ちます。
です。形式的べき級数だと思っていますが、 で収束するので普通のべき級数だと思ってもいいです。第二引数が fix されてて、嬉しい!
証明は、maspy さんいつもありがとうございます。
それらの関係
見るからに似ていますね。まずは負の二項定理の方が強そうな見た目をしているので、
負の二項定理ホッケースティック恒等式
以下:形式的べき級数に対して を の の係数とします。
負の二項定理より
。
をかけることは累積和をとることに対応していたから、
。
これと
を比較することで
を得ます。
ホッケースティック恒等式負の二項定理
実は逆もほぼ同様です。
に関する数学的帰納法を使います。
が成り立ったとして、 は累積和より、
ここでホッケースティック恒等式を使えば
より、示されました。
これは絵を描くとおもしろくて、
累積和をとると係数列が右下にずれるようになってるんですね~すごくない?全然気づかなかった
おわり
おわり
zer0pts CTF 2022 writeup
人々もすなる writeup といふものを私もしてみむとするなり
こういうのは堂々としていたほうがいいらしいです
Anti-Fermat
いつものみたいな RSA が置いてあって、素数を生成する方法だけ怪しくて、q と p の xor が下数桁以外違うみたい。ここに至るまでに 33 時間かかった( HUPC とか ARC とかが悪いよ)。
結局素因数分解をすれば良くて、n の下数桁と p, q の下数桁の積が等しいような p, q は全探索することにして、あと xor の情報から下数桁以外が復元できたらいいんだけど、これはできる。
p, q の bit を下から立てていくことにすると、p * q の i 番目の bit は畳み込みみたいな感じで求まって、例えば p, q の最下位 bit が違う場合だと p, q のどちらかの i 番目の bit を立てるかで p * q の i 番目の bit が変わってくるので、はい。最下位 bit が異なることは実はないので、うまくやらないとだめ。
ところで、実は繰り上がりっていうのがあって、困る。
なんか適当な writeup をみると賢いことをしていて賢いねになった。
OK
競技プログラマ、OK好きそうだと思ってるので解いてください
— 日暮唯愛🌇 (@keymoon_) 2022年3月20日
助かりまくり。問題は長くて、まず nc に v を渡すと k1 = (v - x1)**d mod n, k2 = (v - x2)**d mod n として k1 + key mod n と k2 + ciphertext mod n を返してくれる。こういうの典型として v = (x1 + x2)/2 とすると、k1 = -k2 になる( d は奇数 )。返してくれるものを足すと、 key + ciphertext mod n みたいなのが得られる。実は 0 <= key + ciphertext < 2*n なので、key + ciphertext は 2 択になる。実は ciphertext は flag を暗号化したやつ = f と key の xor なので f ^ key + key が得られた。
2 択なのは嫌なので絞っておくと、^key + key によって偶奇は変わらない(睨めばわかる)ので f と偶奇が同じ方があたり。nc をいっぱいすると key が毎回変わって f ^ key + key がいっぱい得られる。偶奇が同じ f ^ key + key を集めておくとどちらかが全部本物でどちらかが全部偽物です。
f ^ key + key いっぱいから f を求めるパート。ありがたい話として、xor では繰り上がりは起こらず、+ では繰り上がりは 1 つしか起こらない。
表を書くと、こんな感じになる。f の i bit 目に着目すると、1 のときは key の i bit 目によらない。0 のときはよって、これを使って決定していきたい。あといい感じの性質として i bit 目自体は key によらず、0 のときの繰り上がりにのみ関係する。これらの観察から、
- まず f ^ key + key の i bit 目が同じものを集める。
- もし、i bit 目が同じなのに i+1 bit 目が違っていたら、繰り上がりの有無が異なるということなので、f の i bit 目は 0。
- 同じだったら、2 択を当てまくるのは確率的にすごいことなので、高確率で 1。
というように復元できる。
あとは f を復号してやれば ok(しゃれ)。
— w2w2 (@w2w2_222) 2022年3月22日
コードとか貼れるのか?f を求めるパートは C++ で頑張ればよかったんだけど、nc をいっぱい叩くパートで Python を書いたのがちょっと辛かった。
感想
おもしれ~。CTF、crypto 以外もやりたいね。ところで句点を書くのすごい抵抗ある
2022/03/17
接続行列の完全単模性を見た 証明 3 秒で終わっていてすごいねえ