| 58 | |
| 59 | |
| 60 | == C++プログラマの為のセキュリティ入門 == |
| 61 | |
| 62 | * 基本的且つ普遍的な事柄が中心ですよ~ |
| 63 | |
| 64 | === セキュリティって? === |
| 65 | |
| 66 | * ツッコミが恐い世界w |
| 67 | * ここ数年のトレンドは常に追っていこう |
| 68 | * こうしておけば安心というのは幻想 |
| 69 | * セキュリティはトータル |
| 70 | * コスパは重要 |
| 71 | * 存在時の被害よりコストが増大では意味がない |
| 72 | * 攻撃に成功するのにかかるコストが十分に大きければよい |
| 73 | * リスクアセスメント |
| 74 | * 情報資産の棚卸し |
| 75 | * CIA の観点からリスクを列挙 (機密性、完全性、可用性) |
| 76 | * コストパフォーマンス |
| 77 | * そもそも何を防ぐべき? |
| 78 | * 意図しない/許さない |
| 79 | * 権限の取得 |
| 80 | * 処理の実行 |
| 81 | * 情報の漏洩、盗聴、削除、改ざん |
| 82 | * DoS |
| 83 | * spam/嵐 |
| 84 | * H/W の損壊/盗難 |
| 85 | * どう防ぐべき? |
| 86 | * 権限管理 |
| 87 | * 入力チェック <- ? |
| 88 | * 入出力の正確なエンコード/デコード/エスケープ/アンエスケープ |
| 89 | * 暗号 |
| 90 | * 証明 |
| 91 | * ケンジントンロック |
| 92 | * 法的圧力 |
| 93 | * etc... |
| 94 | * 公開されているロジックで (暗号の話) |
| 95 | * 安全性の定義 |
| 96 | * 暗号の安全性 |
| 97 | * 情報理論的安全性 |
| 98 | * 正解が (理論的に) わからない →強秘匿性 |
| 99 | * 暗号文と同じ分量の鍵情報が必要になる。使い回しできない。 |
| 100 | * 計算量的安全性 |
| 101 | * 大量のコスト (時間、CPU) をかけなければ解けない |
| 102 | * コンピュータの進化は早い… |
| 103 | * 事例を追いかけよう |
| 104 | |
| 105 | === さまざまな問題 === |
| 106 | |
| 107 | * 通信の盗聴 |
| 108 | * バッファオーバーフロー |
| 109 | * 整数オーバーフロー |
| 110 | * エスケープ |
| 111 | * セッションハイジャック |
| 112 | * 辞書攻撃 |
| 113 | * ファイルパス |
| 114 | * ファイルコンテンツ |
| 115 | |
| 116 | === 歴史 === |
| 117 | |
| 118 | * DES の最強っぷりと衰退、そして AES へ |
| 119 | |
| 120 | === さまざまな技術 === |
| 121 | |
| 122 | * ハッシュ関数 |
| 123 | * MD5, SHA1, SHA2 |
| 124 | * MD5, SHA1 は非推奨… |
| 125 | * 一方向性関数 |
| 126 | * 暗号 |
| 127 | * 秘密分割 |
| 128 | * XOR |
| 129 | * 秘密分散 |
| 130 | * 多項式+有限体 |
| 131 | * 上記 2つは情報理論的暗号性、強秘匿性があるよ |
| 132 | * 乱数 |
| 133 | * 真性乱数 |
| 134 | * 偏りが現れる。 |
| 135 | * 一般的に遅い。 |
| 136 | * 疑似乱数 |
| 137 | * PKI |
| 138 | * 実在証明でしかない |
| 139 | * おれおれ証明書だとなりすましを防げないよ |
| 140 | * 証明書の更新時には秘密鍵もちゃんと更新しよう! |
| 141 | * TPI |
| 142 | |
| 143 | === C++ では === |
| 144 | |
| 145 | * クライアントで動作するコードであれば |
| 146 | * すべてクラック可能 |
| 147 | * システム管理者とユーザーとゲストとリモートアクセスに対してどのようにあるべきか |
| 148 | * クラックにも難易度が |
| 149 | * コードサイニング (署名) |
| 150 | * サーバーで動作するコードであれば |
| 151 | * 入出力チェックを厳格に |
| 152 | * バッファーオーバーラン対策 |
| 153 | * 文字数上限チェック |
| 154 | * マルチバイト周り、サロゲートペア周りでちょんぼしないこと |
| 155 | * 整数オーバーフロー対策→値域上限チェック |
| 156 | * 正しくエスケープ |
| 157 | * 不正な文字エンコードの検出 |
| 158 | * UTF-8 でのチェック逃れ |
| 159 | * マルチバイト文字列での閉じ文字喰い |
| 160 | * ファイルパス |
| 161 | * 相対パスのチェック |
| 162 | * NGワードの除外 |
| 163 | * 偽バックスラッシュ |
| 164 | * UNICODE 外のエンコードに変換時にバックスラッシュに化ける |
| 165 | * UNICODE 制御文字 |
| 166 | * Shift と XOR を使った文字列の難読化 |
| 167 | * nul 文字を nul 文字のままに出来る |
| 168 | * セキュアな乱数 |
| 169 | * Windows: CryptGenRandom() |
| 170 | * Linux: /dev/random, /dev/urandom |
| 171 | * /dev/random は長時間ブロックする場合がある。 /dev/urandom は必ずしもセキュアではない。 |
| 172 | * ライブラリ |
| 173 | * Crypto++ |
| 174 | * Crypto API |
| 175 | * Windows の Crypt API を使用する上での注意 |
| 176 | * JISEC と JCMVP |
| 177 | |
| 178 | === 参考情報 === |
| 179 | |
| 180 | * IPA |
| 181 | * セキュアプログラミング講座 |
| 182 | * JISEC |
| 183 | * JCMVP |
| 184 | * セミナー・イベント |
| 185 | * JPCERT CC |
| 186 | * セキュリティーホールmemo |
| 187 | * 本当は恐い文字コードの話 |
| 188 | * それ Unicode で |
| 189 | * 暗号技術大全 |