Pythonで学ぶ暗号理論

Pythonで学ぶ暗号理論

多くのPythonプログラムを動かしながら,暗号理論の核心を原理面から学ぶ一冊

ジャンル
発行年月日
2024/10/15
判型
B5
ページ数
208ページ
ISBN
978-4-339-02946-8
Pythonで学ぶ暗号理論
在庫あり
2営業日以内に出荷致します。

定価

3,850(本体3,500円+税)

カートに入れる

購入案内

  • 内容紹介
  • まえがき
  • 目次
  • 著者紹介

本書は、暗号理論を専門的に学ぶ大学生、大学院生、技術者向けの教科書です。暗号技術の理論と実践を網羅的に学べる内容となっており、WiFiやインターネットショッピング、ICカード、携帯電話のSIMカード、SNSでの暗号通信、そしてブロックチェーンなど、現代生活に欠かせない技術を深く理解するための一冊です。

本書の大きな特徴は、以下の3つのシミュレーションや実装が含まれている点です。

1. ブロック暗号に対する差分解読法、線形解読法のシミュレーション
2. ハッシュ関数の衝突のシミュレーション
3. 楕円曲線暗号の実装とそのために必要な数学の解説

暗号の説明とPythonのコードを提供する書籍は他にもありますが、上記の内容は他の和書には見られないものです。本書は、理論の学習だけでは得られない実践的な理解を深めるために最適です。共通鍵暗号、ハッシュ関数、RSA暗号、ラビン暗号、楕円曲線暗号の詳細な解説とともに、これらのシミュレーションや実装を体験できるPythonプログラムを提供しています。Pythonを用いることで、実際にプログラムを動かしながら暗号の仕組みを楽しく学び、理論の理解をより一層深めることができます。

暗号理論は情報セキュリティ技術の中核を成し、特に重要な領域です。暗号理論と実践をバランスよく学び、現代の情報セキュリティ分野で活躍するための確固たる基礎を築くために、ぜひ本書をご活用ください。

☆発行前情報のため,一部変更となる場合がございます

本書は,専門的に暗号理論を学ぶ大学生,大学院生,技術者向けの教科書である。もともと,暗号の研究は,軍事的な目的で秘密裏になされていた。1970年代の終わりに,標準暗号アルゴリズムDESや,公開鍵暗号が発明され,後にインターネットが普及してから暗号の研究が急速に拡大した。Wi-Fi,インターネットショッピング,IC乗車券,携帯電話のSIMカード,SNSでの暗号通信,ブロックチェーン技術など,いまや暗号なしの生活は考えられない。情報セキュリティ技術はソフトウェアを含む広大な領域であり,暗号理論は,その一部にすぎないが,きわめて重要な領域である。暗号は,自己と他者を区別する免疫の役割を担っているからである。

暗号理論の核心部分は,共通鍵暗号,ハッシュ関数,公開鍵暗号の3つである。本書では,共通鍵暗号,ハッシュ関数,RSA暗号,ラビン暗号,楕円曲線暗号の解説とともに,ブロック暗号に対する差分解読法,線形解読法,そしてハッシュ関数の解析,RSA暗号に対する攻撃などを体験できるPythonプログラムを提供する。本書を活用することにより,理論の学習だけでは実感が湧きにくい暗号の仕組みについて,プログラムを動かしながら楽しく学べると考えている。

Pythonには,暗号処理用のモジュールが用意されており,これらを使えば,ほとんどのことができる。そのためには,そこで何が行われているかを理解しておく必要がある。また,IoT端末などでは,ハードウェア規模や電力リソースの制限などで,便利なモジュールを直接利用できないことも多く,そうした機器への暗号技術の実装のためには,原理面からの理解が欠かせないのである。本書では,暗号の解読技術を通じて「何が危険なのか」の説明に比較的多くのページを割いている。また,利用されている暗号のアルゴリズムについても,どのような難しさがあり,それがどう克服されているか,またはどのように現実と妥協しているかについても説明する。

暗号理論は,符号理論と並んで,実用的な技術の基礎理論としては際立って純粋数学的であり,特に代数学に関する知識が多用される。伝統的な工学教育では特に代数の教育がきわめて限定的で,そのことが暗号理論を学ぶ際の大きな障害となっているように思われる。数学科で学ぶような代数学(群論,環論,体論,初等整数論)の基礎をすべて学んでから暗号理論を学ぶのは理想的だが,工学系の学生には負担が大きすぎるであろう。本書ではこうした知識を補い,Pythonで実際にアルゴリズムを実装して理解を深めていく。暗号で必要になる代数学の知識は多岐にわたるが,必要になった段階で導入する形をとった。

適宜,Pythonの操作やプログラムの実行などを含む基本的な問題が出題されているので,解いてみていただきたい。ごく一部を除いては簡単に解くことができるはずである。やや時間がかかりそうな問題には,*印がついている。時間がないときは*印のついている問題を飛ばして読んでも問題なく読み進めることができるように配慮した。プログラムの実行には,Spyder,Visual Studio等の統合環境を想定しているが,実習の際には,Jupyter Notebookを使う方が適しているかもしれない。読者にとって最も適当な環境で使っていただければ幸いである。

暗号学習者が陥りがちな罠は,暗号理論の一部のみの学習を深めてしまうことである。例えば,数学が達者な人は公開鍵暗号ばかり勉強してしまいがちであるが,それだけでは実用的なシステムをつくることは難しい。少なくとも,共通鍵暗号,ハッシュ関数,公開鍵暗号とその周辺技術,モジュールまで含めた理解とソフトウェア実装経験が必要であろう。

なお,本書を通じて,すでにモジュールが用意されていても,暗号の仕組みを理解するためにあえてプログラムを提供する場合がある。プログラムは練習問題の解答も含め,コロナ社のサイト(https://www.coronasha.co.jp/np/isbn/9784339029468/)より取得することができる。本書のプログラムはアルゴリズムを説明するためのものなので,説明の邪魔になる例外処理を含め情報セキュリティ上必要なパラメータのチェックなどは行っていない。そのまま製品やサービスに組み込まないようお願いする。本書のプログラムは,あくまで暗号の基本原理を理解するためにのみお使いいただければ幸いである。多数のプログラムが提供されるが,何度も利用される処理をまとめてクラスにまとめるようなことはしていない。あちこちで重複が生じているが,アルゴリズム全体を理解するには,このほうが好都合だと思われる。

本書は,著者(神永)が,工学部の「情報セキュリティ工学」と大学院電気工学専攻における「暗号・情報セキュリティ工学特論」で毎年アップデートして講義してきた内容をベースにして執筆した。神永が全体設計を行い,共通鍵暗号・ハッシュ関数の解析を得意とする𠮷川が,第3章(の前半),第4章,第6章を執筆し,両者で全体の見直し,表現の統一などを行ってまとめたものである。東北学院大学の森島佑氏には暗号利用モードの処理についてご教授いただいた。また,神永研究室の大学院生の佐藤健人君にもプログラムのチェックをしていただいた。記して感謝したい。

2024年8月
神永正博,𠮷川英機

☆発行前情報のため,一部変更となる場合がございます

1. 共通鍵暗号
1.1 共通鍵暗号の基本
 1.1.1 暗号化,復号,秘密鍵
 1.1.2 チャレンジレスポンス認証
 1.1.3 暗号用乱数と安全なパスワード生成
 1.1.4 リレーアタック
 1.1.5 暗号への攻撃法の種類
1.2 単換字式暗号と頻度解析

2. ブロック暗号の基礎
2.1 ブロック暗号の構成要素
2.2 写像の合成とブロック暗号
2.3 DES
2.4 DESのPythonプログラムの詳細
 2.4.1 線形変換
 2.4.2 非線形変換(Sボックス)
 2.4.3 トリプルDES
 2.4.4 DES-X

3. 現代のブロック暗号と暗号利用モード
3.1 ブロック暗号AES
3.2 ブロック暗号RC
3.3 Pycryptodomeモジュールと暗号利用モード
 3.3.1 Pycryptodomeモジュールの導入
 3.3.2 暗号利用モードとデータの暗号化の実際
 3.3.3 ECBモードの致命的な問題点

4. ブロック暗号に対する差分解読法・線形解読法
4.1 ブロック暗号FEAL
4.2 FEALに対する差分解読法
4.3 FEALに対する線形解読法

5. ハッシュ関数とメッセージ認証子
5.1 ハッシュ関数とは何か
5.2 バースデーパラドックス
5.3 マークル=ダンガード構成法
5.4 HMAC

6. ハッシュ関数の衝突シミュレーション
6.1 ハッシュ関数MD4の衝突を見つける
 6.1.1 ハッシュ関数MD
 6.1.2 MD4における圧縮関数の性質
6.2 MD4の衝突ペアの実例
6.3 MD4の衝突ペアの導出法

7. RSA暗号とRSA電子署名
7.1 数学的準備
 7.1.1 モジュラー算術
 7.1.2 群の概念
 7.1.3 既約剰余類群
7.2 RSA暗号の原理
7.3 RSA電子署名・ブラインド署名
7.4 ユークリッドの互除法・拡張ユークリッド互除法
7.5 RSA暗号の実装例

8. RSA暗号の実装アルゴリズム
8.1 べき乗剰余計算のアルゴリズム
8.2 中国人剰余定理
8.3 中国人剰余定理を使ったRSA復号処理の実装
8.4 RSA電子署名と検証の実際
 8.4.1 Pycryptodomeモジュールを利用したRSA電子署名
 8.4.2 RSA-OAEPと安全性の階層

9. 素数生成
9.1 素数の分布
9.2 素数分布を見る
9.3 素数定理の証明の大まかな方針とリーマンゼータ関数
9.4 素数生成

10. RSA暗号に対する攻撃
10.1 共通の公開モジュラスに対する攻撃
10.2 ブロードキャスト攻撃とその一般化
10.3 短い秘密指数に対する連分数攻撃
 10.3.1 連分数展開と主近似分数
 10.3.2 連分数攻撃の原理とシミュレーション

11. 平方剰余とラビン暗号
11.1 ラビン暗号
11.2 平方剰余
11.3 Nの素因数がわかればラビン暗号が解読できること
11.4 モジュラー平方根の計算と法の素因数分解は同値である
11.5 ラビン暗号のPython実装
11.6 トネリ・シャンクスアルゴリズム(発展事項)
11.7 平方剰余計算関数のPython実装

12. 楕円曲線と楕円曲線上の離散対数問題
12.1 素体
12.2 楕円曲線
12.3 有理点群
12.4 楕円曲線上のスカラー倍の実装
12.5 楕円曲線上の離散対数問題(ECDLP)
12.6 有理点群の位数の計算

13. 楕円曲線の暗号への応用
13.1 楕円曲線ディフィー・ヘルマン鍵交換(ECDH)
13.2 楕円曲線署名(ECDSA)
13.3 ECDSAの実装
13.4 PycryptodomeによるECDSA
13.5 Dual_EC_DRBGのバックドア

引用・参考文献
練習問題略解
索引

神永 正博(カミナガ マサヒロ)

吉川 英機

吉川 英機(ヨシカワ ヒデキ)

東北学院大学 工学部 情報基盤工学科 教授。
誤り訂正符号の性能評価、ブロック暗号の安全性評価に関する研究を行っています。