CTFにおけるCrypto入門とまとめの1つです。
符号化
- 符号化 https://www.jstage.jst.go.jp/article/essfr/5/1/5_1_28/_pdf
- 通信路符号化
- 誤り検出符号
- CRC: 巡回冗長検査
- 誤り訂正符号
- 巡回符号
- BCH符号
- RS符号
- ゴッパ符号
- 巡回符号
- 誤り検出符号
- 誤り訂正アルゴリズム
- Berlekamp-Welch
- Guruswami-Sudan
- https://github.com/hash-hash/My-CTF-Challenges/tree/main/n1ctf%202025/n1share でもっとすごい誤り訂正論文が紹介されてる?
CRC: 巡回冗長検査
- 生成多項式(GF(2n))を用意して...
- https://crypto-writeup-public.hatenablog.com/entry/CRC
- CRCはビットフリップ攻撃との組み合わせに弱い https://writeups.thebusfactoris1.online/posts/2025-09-05-magnetic-tape-writeup
- アフィン線形で
crc(a) xor crc(b) xor crc(0) = crc(a xor b)らしい
RS符号: リード・ソロモン符号
- 符号理論における誤り訂正符号の一種
- 情報伝達のエラーを数学的に訂正する仕組み
- 応用例 https://www.youtube.com/watch?v=q-j1sn0PkRs
- アルゴリズム
- 送信者がメッセージmと生成行列Gを用意する
- 送信する符号語 w = mG を作り、送信する
- 送信時にエラーが発生して、w + eになる
- 受信者が検査行列 H を使い、エラーを特定する。 シンドローム wHを計算して全て0になればエラーが無い
- 検査行列 H は以下のように構成する | a0 a0 ... a0 | | a1 a2 ... an-k | H=| a2 a4 ... a2(n-k) | | ... | | an-1 a2(n-1) ... an-1(n-k) |
- シンドローム wH が0でない場合は出てきた値を元にエラーを特定していく
- w+eからeを除去して、wが手に入ったら、w*G^-1をしてmを復元可能
- https://www.youtube.com/watch?v=ZznDYmZY9e8 をまず見るとよさそう
- https://blog.tanglee.top/2024/08/09/Reed-Solomon-code-in-McEliece-and-Niederreiter.html
- https://blog.kroma.network/brain-fri-ed-diving-into-the-fri-protocol-and-more-85e979ee39fc
- 短縮リード・ソロモン符号
符号暗号
- Lumos Anthology Vol.1にあるmitsuさんの「HQCを実装しよう!」https://techbookfest.org/product/5hTLJywX6DXYRFJUTiEgNP?productVariantID=ryNiCXDm6MzM1uALSe2Vq が多分最強(まだ読んでないけれど、mitsuさんなので)
- QuasiなCyclicを笑いながらハミング https://speakerdeck.com/mitsu1119/quasinacyclicwoxiao-inagarahamingu
- HQC: Hamming Quasi-Cyclicを解説
- REED-MULLER符号
- REED-SOLOMON符号
- 連接符号
- QuasiなCyclicを笑いながらハミング https://speakerdeck.com/mitsu1119/quasinacyclicwoxiao-inagarahamingu
- SD問題: Syndrome Decoding問題
- 符号暗号の安全性の根拠となっている問題
- 係数、定数項および解が0と1のみで構成される多元連立1次方程式で、解における1の個数は問題ごとに与えられている定数以下である必要がある
- これは量子コンピュータを用いても効率的に解読できないとされている
- McEliece暗号 https://www.youtube.com/watch?v=ZznDYmZY9e8
- 線形符号でのいい感じの行列をG^ = S[G|R]Pとして定めたもの
- 送信時はcG^+eを送る。cGe=wとすると、線形符号と同じ状況。渡すのはcG^+eとS,Pの3つ
- Sは完全ランダムな正則行列
- Gは以下のようなk×nの行列(aはGF(p)で添え字が異なるものは互いに異なる)
|1 1 .... 1 | |a1 a2 .... an | |a1^2 a2^2 | |... | |a1^k-1 a2^k-1 ... | - [G|R]PはGにランダムな値を持つ列ベクトルをランダムな位置に差し込んだもの
- Rがランダムな値を持つ列ベクトルでPは列をランダムにシャッフルする行列
- mceliece348864
- m = 12 (体の拡大次数)
- n = 3488 (符号長)
- t = 64 (通常のエラー訂正能力)
- k = n - m×t = 3488 - 12×64 = 2720 (情報ビット数)
- エラー重みが小さい場合は脆弱っぽい OMEGA = 4(通常のt=64より大幅に小さい!)
- 線形符号でのいい感じの行列をG^ = S[G|R]Pとして定めたもの
- 符号暗号: 誤り訂正符号に基づく暗号化
- BIKE, ClassicalMcElience, HQC
- https://joint.imi.kyushu-u.ac.jp/wp-content/uploads/2022/08/220803_03narisada.pdf
- 線形符号復元問題の困難性を利用
- 符号理論はBCHが優秀でそれで十分感あるらしい
- 資料