| | 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 | * 暗号技術大全 |