Dan Bonehのオンライン暗号学講座(2017年)
(crypto.stanford.edu)- Stanford UniversityのDan Bonehによる無料のオンライン暗号学講座で、全講義一覧が公開されており、公式の課題・プロジェクト・期末試験はCourseraで提供される
- 無料教材A Graduate Course in Applied Cryptographyも併用され、講義より深い内容や安全性証明、演習問題を補完する
- カリキュラムはストリーム暗号からデジタル署名まで7週にわたり、各週が教材の章・講義動画・スライドと対応している
- one-time pad、PRG、DES、AES、MAC、HMAC、TLS 1.2、Diffie-Hellman、RSA、ElGamal、ハッシュベース署名など実用的な暗号の構成要素を幅広く扱う
- 個別講義はCourseraの動画で視聴でき、評価や修了が必要な場合はCoursera講座に登録する形式
受講方法と教材
- Stanford UniversityのDan Bonehが行うオンライン暗号学講座
- 無料講座の全講義が1ページに整理されている
- 課題、プロジェクト、期末試験まで含めて正式に受講するにはCoursra講座ページを利用する必要がある
- 無料教材はD. BonehとV. ShoupによるA Graduate Course in Applied Cryptography
- 講義よりも深い内容を扱い、安全性証明と多数の演習問題を含む
第1週: 講座概要とストリーム暗号
- 第1週は教材の第2–3章に相当し、講座概要、離散確率の基礎、ストリーム暗号を扱う
- スライドはIntroductionとStream ciphersのテーマで提供される
- 主な講義:
- Course overview: 10分
- What is cryptography: 15分
- History of cryptography: 18分
- Discrete probability (crash course): 18分
- Information theoretic security and the one-time pad: 18分
- Stream ciphers and pseudorandom generators: 19分
- Attacks on stream ciphers and the one-time pad: 23分
- Real-world stream ciphers: 19分
- PRG security definition: 24分
- Semantic security: 15分
第2週: ブロック暗号
- 第2週は教材の第4–5章に相当し、ブロック暗号とブロック暗号の利用方法を扱う
- スライドはBlock ciphersとUsing block ciphersのテーマで提供される
- 主な講義:
- What are block ciphers: 16分
- The Data Encryption Standard (DES): 21分
- Exhaustive search attacks: 19分
- More attacks on block ciphers: 16分
- The AES block cipher: 13分
- Block ciphers from PRGs: 11分
- Review: PRPs and PRFs: 11分
- Modes of operation: one-time key: 7分
- Security for many-time key (CPA security): 22分
- Modes of operation: many-time key (CBC): 16分
- Modes of operation: many-time key (CTR): 9分
第3週: メッセージ完全性と衝突耐性ハッシュ
- 第3週は教材の第6–8章に相当し、メッセージ認証コード(MAC)、衝突耐性、HMACを扱う
- スライドはMessage integrityとCollision resistant hashingのテーマで提供される
- 主な講義:
第4週: 認証付き暗号と実装上の落とし穴
- 第4週は教材の第9章に相当し、認証付き暗号と暗号システム利用時の落とし穴を扱う
- スライドはAuthenticated encryptionとOdds and endsのテーマで提供される
- 主な講義:
- Active attacks on CPA-secure encryption: 12分
- Definitions: 5分
- Chosen ciphertext attacks: 12分
- Constructions from ciphers and MACs: 20分
- Case study: TLS 1.2: 17分
- CBC padding attacks: 14分
- Attacking non-atomic decryption: 9分
- Key derivation: 13分
- Deterministic encryption: 14分
- Deterministic encryption: SIV and wide PRP: 20分
- Tweakable encryption: 14分
- Format preserving encryption: 12分
第5週: 鍵交換と数論の基礎
- 第5週は教材の第10章に相当し、鍵交換の問題と数論の基礎を扱う
- スライドはBasic key exchangeとCrash course in number theoryのテーマで提供される
- 主な講義:
- Trusted 3rd parties: 11分
- Merkle puzzles: 11分
- The Diffie-Hellman protocol: 19分
- Public-key encryption: 10分
- Notation: 14分
- Fermat and Euler: 18分
- Modular e'th roots: 17分
- Arithmetic algorithms: 12分
- Intractable problems: 18分
第6週: 公開鍵暗号
- 第6週は教材の第11–12章に相当し、トラップドア置換、RSA、Diffie-Hellmanベースの公開鍵暗号を扱う
- スライドはTrapdoor permutationとDiffie-Hellmanのテーマで提供される
- 主な講義:
- Definitions and security: 15分
- Constructions: 10分
- The RSA trapdoor permutation: 17分
- PKCS1: 21分
- Is RSA a one-way function?: 16分
- RSA in practice: 13分
- The ElGamal public-key system: 19分
- ElGamal security: 13分
- ElGamal variants with better security: 10分
- A unifying theme: 11分
- Farewell for now: 5分
第7週: デジタル署名
- 第7週は教材の第13–14章に相当し、デジタル署名とハッシュベース署名を扱う
- スライドはDigital signaturesとHash-based signaturesのテーマで提供される
1件のコメント
Hacker News のコメント
Stanford の学生だった頃、CS255 Intro to Cryptography は最も好きな科目の一つで、Dan は本当に優れた講師だった。
Stanford のセキュリティ講義資料をもっと見たいなら、CS253 Web Security (https://web.stanford.edu/class/cs253/) もおすすめ。念のため言っておくと、この科目は私が作ったもので、CS356 Topics in Computer and Network Security (https://cs356.stanford.edu/) も悪くない。
CS253 の動画はこちら: https://www.youtube.com/playlist?list=PL1y1iaEtjSYiiSGVlL1cH...
才能がずば抜けていて、概念の説明がとても上手い
数年前にこの教授のオンライン 暗号学講義 を受けたが、とても良かった。
数学の素養はあったのに、その授業を受けて自分は専門の暗号研究者にはなりたくないと気づき、それだけでもかなりの収穫だった。
冗談はさておき、暗号システムを 悪魔とのゲーム として分析し、暗号化されたバイト列からランダムなビット列を見分けようとするやり方が本当に楽しかった。
結論は、きちんとやるのが難しいので 自分で暗号を作るな ということ。かなりシニカルではあるが、もっと深く掘り下げたいという興味をある程度くじかれた
素晴らしい講義だ。ただし、完了予定時間の 23時間 は、そのテーマに関する事前の習熟度によって大きく変わりうる。
その点を踏まえて準備し、ペース配分を考えたほうがいい
良さそうだが、数学から始めるのではなく、暗号ライブラリの使い方 を実務者の観点から扱う資料があればいいのにと思う。
RSA の細部の構造を知る必要があるのではなく、求める性質を持つシステムを作るために、ほかの基本要素とどう安全に組み合わせるかを知りたい。
今 4 分の 3 ほど読み進めていて満足している。数学は軽めだが多少は踏み込み、内部動作を理解しないと使いにくいが、実際に内部実装をする必要はない人を対象にした本のように見える。
この本のおかげで、少なくとも見た目には意図どおり動くプロトコルを基本要素から組み立てられる程度には学べたと感じている。同時に、プロトコルを完全に壊しうる微妙な点が多く、基本要素の組み合わせが予想外の弱点を生みうること、そして私よりはるかに暗号に詳しい人たちでさえ、安全な基本要素で壊れたプロトコルを作ることがあるとも学んだ。
探していた本そのものではないかもしれないが、自分で設計したいのではなく暗号を理解したいなら良い本だと思う
たとえば、100 人の別の開発者がすでにうまくやってきたのと同じやり方で libsodium を使うなら大丈夫だ。しかし、ごく小さく微妙な数ステップを経るだけで、知らないうちに新しい暗号システムを合成してしまう。libsodium の基本要素でセキュアメッセージングシステムを作ろうとする試みがその例だ。
理論をたくさん学ぶ必要がある。重要だ
例: https://gist.github.com/tqbf/be58d2d39690c3b366ad または https://www.latacora.com/blog/2018/04/03/cryptographic-right...
Bruce Schneier、Niels Ferguson、Tadayoshi Kohno によるものだ
現代暗号学の大きな部分は、安全な組み合わせを見つけ出すことだ
このスレッドでは、理論なしの 実践中心の暗号学学習 に関心がある人が多いようだ。そういう場合は HN MVP tptacek の cryptopals.com を見てみるといい
こういう内容を CTF 形式 で練習したいなら https://cryptohack.org/ をおすすめする。素晴らしいサイトだ
素晴らしい講義で、自分のキャリアの成長に重要な役割を果たした。
Dan Boneh が a16z crypto 研究チーム のアドバイザーでもあり[1]、彼らと一緒にブロックチェーン関連のコンテンツを数多く作っている点も注目に値する[2]。
[1]: https://a16zcrypto.com/research/
[2]: https://a16zcrypto.com/team/dan-boneh/
現代の実装では楕円曲線を使い、歴史的には大きな素数体の部分群で離散対数を使っていたはずだ。また BLS 署名も扱っていて、これは完全に楕円曲線ベースだ。
一般に、セキュリティが離散対数に依存するものは何であれ楕円曲線で実装できる。しかし入門的な暗号学の授業でたいてい必要なのは素数位数群であり、楕円曲線もたいていブラックボックスな素数位数群のように扱えるため、これを実装詳細として扱う。
BLS 署名は例外だ。双線形ペアリングが必要で、これは単純なブラックボックス素数位数群ではない、特別な種類の楕円曲線を必要とする。
楕円曲線でできる素晴らしい 代数幾何学的トリック はたくさんあるが、そうした内容は入門暗号学の授業ではほとんど出てこないだろうし、もしかするとどんな計算機科学の授業でも目にしないかもしれない
Coursera の Cryptography II 講義をまだ待っている人はいる?
彼が共著した A Graduate Course in Applied Cryptography という本がとても役に立った。
https://toc.cryptobook.us/