内容紹介
ソフトウェアの仕組みを基礎からわかりやすく解説!
データやパスワードはどのように暗号化され守られているか、映画やゲームのグラフィックスはどのように作られているか、動画や画像はどのように圧縮されているか、巨大なデータベースの中でデータはどのように検索されているか、複数のプログラムが衝突することなく並行処理できるのはなぜか、地図のルートはどのように探されているか……美しいコンピューターグラフィックス、安全なオンラインショッピング、迅速なGoogle検索など、我々がふだん当然のように接しているテクノロジーの背後にある概念や基本的な考え方をわかりやすく解説します。学校教育などの学習教材にも好適です。
このような方におすすめ
プログラマー、エンジニア、学生、教職員、テクノロジー好きのノンプログラマーほか。
目次
詳細目次
目次
はじめに
1章 暗号化
1.1 暗号化の目的
1.2 転置:同じデータ、異なる順序
1.2.1 暗号鍵
1.2.2 暗号化への攻撃
1.3 換字:データの置き換え
1.3.1 換字パターンの変更
1.3.2 鍵の拡張
1.4 AES
1.4.1 2進法の基礎
1.4.2 10進数と2進数
1.4.3 ビット演算
1.4.4 データを2進形式に変換する
1.4.5 AES暗号化:その全体像
1.4.6 AESでの鍵の拡張
1.4.7 AES暗号化ラウンド
1.4.8 ブロックチェイン
1.4.9 なぜAESは安全なのか
1.4.10 AESへの考えられる攻撃
1.5 秘密鍵暗号化の限界
2章 パスワード
2.1 パスワードを数値に変換する
2.1.1 優れたハッシュ関数の特性
2.2 MD5ハッシュ関数
2.2.1 パスワードの符号化
2.2.2 ビット演算
2.2.3 MD5ハッシュ化ラウンド
2.2.4 優れたハッシュ関数の基準に合致
2.3 デジタル署名
2.3.1 同一性の問題
2.3.2 衝突攻撃
2.4 認証システムにおけるパスワード
2.4.1 パスワード表の危険性
2.4.2 パスワードのハッシュ化
2.4.3 辞書攻撃
2.4.4 ハッシュ表
2.4.5 ハッシュチェイン
2.4.6 反復ハッシュ化
2.4.7 パスワードとソルト
2.4.8 パスワード表は安全か?
2.5 パスワード保管サービス
2.6 最終的な見解
3章 Webセキュリティー
3.1 公開鍵暗号法は鍵共有問題をどのように解決するか
3.2 公開鍵暗号法のための計算ツール
3.2.1 可逆関数
3.2.2 一方向関数
3.2.3 落とし戸関数
3.3 RSA暗号方式
3.3.1 鍵を作成する
3.3.2 RSAを使ってデータを暗号化する
3.3.3 RSAの有効性
3.3.4 実社会でのRSAの利用
3.3.5 認証のためのRSA
3.4 Web上のセキュリティー:HTTPS
3.4.1 ハンドシェイク
3.4.2 HTTPSでのデータ送信
3.5 鍵共有問題は解決されたのか?
4章 映画のCGI
4.1 従来のアニメーションのためのソフトウェア
4.1.1 デジタル画像はどのように機能するか
4.1.2 色はどのように定義されるか
4.1.3 ソフトウェアはセルアニメーションをどのように作成するか
4.1.4 セルアニメーションソフトウェアから、レンダリングされた2Dグラフィックスへ
4.2 3D CGIのためのソフトウェア
4.2.1 3Dのシーンはどのように表現されるか
4.2.2 仮想カメラ
4.2.3 直接照明
4.2.4 グローバルイルミネーション
4.2.5 光はどのように追跡されるのか
4.2.6 フルスクリーン・アンチエイリアシング
4.3 本物と偽物を組み合わせる
4.4 映画品質のレンダリングの理想
5章 ゲームグラフィックス
5.1 リアルタイムグラフィックスのためのハードウェア
5.2 ゲームではなぜレイトレーシングが使われないのか?
5.3 すべて直線、曲線はなし
5.4 レイトレーシングを用いない投影
5.5 三角形をレンダリングする
5.5.1 画家のアルゴリズム
5.5.2 深度バッファリング
5.6 リアルタイム照明
5.7 影
5.8 環境光とアンビエントオクルージョン
5.9 テクスチャーマッピング
5.9.1 最近傍サンプリング
5.9.2 バイリニアフィルタリング
5.9.3 ミップマップ
5.9.4 トリリニアフィルタリング
5.10 反射(映り込み)
5.11 曲線を模造する
5.11.1 ディスタントインポスター
5.11.2 バンプマッピング
5.11.3 テッセレーション
5.12 リアルタイムでのアンチエイリアシング
5.12.1 スーパーサンプリング
5.12.2 マルチサンプリング
5.12.3 ポストプロセス・アンチエイリアシング
5.13 レンダリングのトレードオフ
5.14 ゲームグラフィックスの今後
6章 データ圧縮
6.1 ランレングス符号化
6.2 辞書圧縮
6.2.1 基本的な方法
6.2.2 ハフマン符号化
6.3 よりよい圧縮のためのデータの再編成
6.3.1 予測符号化
6.3.2 量子化
6.4 JPEG画像
6.4.1 色を保持するための異なる方法
6.4.2 離散コサイン変換
6.4.3 2次元のためのDCT
6.4.4 結果を圧縮する
6.4.5 JPEGの画質
6.5 高解像度ビデオの圧縮
6.5.1 時間的冗長性
6.5.2 MPEG-2ビデオ圧縮
6.5.3 時間的圧縮でのビデオ画質
6.6 ビデオ圧縮の現在と今後
7章 データ検索
7.1 検索の問題を明確にする
7.2 データを順番に並べる
7.2.1 選択ソート
7.2.2 クイックソート
7.3 二分探索
7.4 索引付け
7.5 ハッシュ化
7.6 Web検索
7.6.1 ランキングの結果
7.6.2 索引を効果的に使う
7.7 Web検索の今後
8章 並行処理
8.1 なぜ並行処理が必要なのか
8.1.1 パフォーマンス(処理速度)
8.1.2 マルチユーザー環境
8.1.3 マルチタスク
8.2 並行処理はどうして失敗するのか
8.3 並行処理を安全なものにする
8.3.1 読み取り専用データ
8.3.2 取引に基づく処理
8.3.3 セマフォ
8.4 無期限待機の問題
8.4.1 順序正しいキュー
8.4.2 循環待機によるスタベーション
8.5 セマフォのパフォーマンス上の問題
8.6 並行処理の今後
9章 地図のルート探索
9.1 ソフトウェアにとって地図はどのように見えているのか
9.1.1 最良優先探索
9.1.2 前の探索結果を再利用する
9.2 すべての最良のルートをまとめて探す
9.2.1 フロイドのアルゴリズム
9.2.2 ルートの方向を記録する
9.3 ルート探索の今後
索引
続きを見る