復習問題 2026-09-29
昨日も記録がないので、引き続きネットワーク(15問・30%)を軸にします。今日は昨日の5問の一段下と裏側だけで組みました。第1問は昨日の「同じネットワークかどうか」を実際に計算する問題、第2問は昨日 DHCP の誤答選択肢に出てきた NAPT、第3問は昨日の CSRF の裏側の XSS、第4問は第3正規形の一段手前の第2正規形。第5問だけ 8/22 に「腑に落ちていない」と書いてあった公開鍵の向きに当てています。
第1問 ネットワーク(サブネットマスクとホスト数)
IP アドレス 192.168.10.0/26 のネットワークについて、割り当てられるホスト数と、192.168.10.70 が同じネットワークに属するかの組合せとして正しいものはどれか。
- ホスト数 64 ・ 同じネットワークに属する
- ホスト数 62 ・ 同じネットワークに属する
- ホスト数 62 ・ 別のネットワークである
- ホスト数 30 ・ 別のネットワークである
解答
解答: c
昨日の第1問で「PC は送信前に、自分の IP とサブネットマスクで宛先が同じネットワークかを計算する」と書きました。今日はその計算そのものです。
手順1 — ホスト部のビット数を出す。IPv4 は全部で 32 ビット。/26 はネットワーク部が 26 ビットという意味なので、ホスト部は 32 − 26 = 6 ビット。
手順2 — ホスト数を出す。6 ビットで表せるのは 26 = 64 通り。ただし両端の2つは使えません。
- すべて 0 → ネットワークアドレス(
192.168.10.0)。ネットワークそのものを指す名前 - すべて 1 → ブロードキャストアドレス(
192.168.10.63)。全員宛て
よって 64 − 2 = 62 台。「2 のホスト部乗 − 2」は午前で頻出なので、この引き算を忘れないことがそのまま得点になります(a が引き忘れの誤答)。
手順3 — 範囲を出す。このネットワークが使えるのは 192.168.10.1 〜 192.168.10.62。.70 は .63 を越えているので別のネットワーク(次のブロック 192.168.10.64/26 側)です。
/26 は「第4オクテットを 64 ずつに区切る」と覚えると暗算できます。区切りは 0・64・128・192 の4ブロック。昨日の話につなげると、.70 宛てのパケットは ARP で直接取りに行かず、デフォルトゲートウェイへ投げられることになります。
| プレフィックス | ホスト部 | 使えるホスト数 | 第4オクテットの区切り |
|---|---|---|---|
| /24 | 8 ビット | 254 | 256 ずつ(区切りなし) |
| /25 | 7 ビット | 126 | 128 ずつ |
| /26 | 6 ビット | 62 | 64 ずつ |
| /27 | 5 ビット | 30 | 32 ずつ |
8/25 に「サブネットの意味を理解した」と書いてあった内容が、数字で使える形になるとここまで来ます。この表の4行を書けるようにしておけば、午前のサブネット問題はほぼ落としません。
第2問 ネットワーク(NAPT)
社内の複数の PC が、1つのグローバル IP アドレスを共有してインターネットへ接続している。このときルータが行っている変換はどれか。
- プライベート IP アドレスとグローバル IP アドレスを1対1で置き換える
- プライベート IP アドレスとポート番号の組を、1つのグローバル IP アドレスと異なるポート番号の組へ置き換える
- ドメイン名を IP アドレスへ置き換える
- MAC アドレスを IP アドレスへ置き換える
解答
解答: b
昨日の第2問で、DHCP リレーエージェントの誤答選択肢として出てきた NAPT です。8/22 に「IP マスカレードは NAT にポート番号の変換を加えたもの」と書いてあったものと同じ話なので、ここで1本につなげてしまいます。
| 名前 | 変換するもの | 同時に外へ出られる台数 |
|---|---|---|
| NAT | IP アドレスのみ(a) | グローバル IP の数だけ |
| NAPT(IP マスカレード) | IP アドレス + ポート番号 | 1つのグローバル IP で多数 |
ポート番号まで書き換えるのは、戻ってきた応答を誰に渡すかを見分けるためです。PC-A と PC-B が同じサイトへ同時にアクセスしても、ルータが「グローバル IP のポート 50001 は PC-A、50002 は PC-B」と対応表を持っているので、応答を正しく配り分けられます。家庭用ルータがやっているのもこれです。
c は DNS、d は逆向きの ARP(IP から MAC を引く)で、どちらもアドレス変換ではありますが NAT の話ではありません。実務で「NAT」と呼んでいるものはほぼ NAPT のことですが、午前の選択肢では区別されます。ポート番号という語があるかどうかだけで見分けられます。
第3問 情報セキュリティ(XSS 対策)
Web アプリケーションにおけるクロスサイトスクリプティング(XSS)への対策として最も適切なものはどれか。
- リクエストに第三者が推測できないトークンを埋め込み、サーバ側で照合する
- 利用者の入力値を画面へ出力するとき、記号を HTML エスケープする
- ログイン失敗が一定回数続いたらアカウントをロックする
- 通信経路を TLS で暗号化する
解答
解答: b
昨日の第3問(CSRF)と同じ表を逆から聞いた問題です。8/22 に挙がっていた「トークン=CSRF、エスケープ=XSS」の混同は、片方向だけ覚えていると本番で入れ替わります。両方向から出して固定します。
XSS は、攻撃者の書いたスクリプトがそのサイトのページの一部として被害者のブラウザで動いてしまう攻撃です。入力された <script> がそのまま HTML に混ざるのが原因なので、出力時に < を < へ、& を & へ置き換え、タグではなく文字として表示させるのが対策です。
ポイントは、エスケープするのが入力時ではなく出力時だという点。出力先が HTML か JavaScript か URL かでエスケープすべき記号が変わるため、使う直前に行うのが正しい形です。ここは午後 問1 の記述でも問われます。
| 攻撃 | 対策 | キーワード |
|---|---|---|
| XSS | 出力時のエスケープ | エスケープ |
| CSRF | トークンの照合 | トークン |
| SQL インジェクション | プレースホルダ | プレースホルダ |
| ディレクトリトラバーサル | パス名の直接指定をさせない | パス |
a は昨日の答え(CSRF)、c はパスワードリスト攻撃・総当たり攻撃への対策、d は盗聴と改ざんへの対策です。d は「とりあえず正しそう」に見えて選びがちですが、TLS で守れるのは経路だけで、届いた先のページに埋め込まれたスクリプトは止まりません。
第4問 データベース(第2正規形)
関係「受注明細(伝票番号, 商品番号, 商品名, 数量)」(下線は主キー)があり、商品名は商品番号だけで一意に決まる。この関係について正しいものはどれか。
- 第2正規形を満たしている
- 部分関数従属があるため第2正規形ではない
- 推移的関数従属があるため第3正規形ではないが、第2正規形は満たしている
- 繰返し項目があるため第1正規形ではない
解答
解答: b
昨日の第4問で第3正規形を扱ったので、今日はその一段手前です。午後 問6 は正規化の過程を説明させる設問が定番なので、どの段で何を切り出したかを言葉で言えると強くなります。
主キーは {伝票番号, 商品番号} の2つ組です。ところが商品名は、そのうち商品番号だけで決まってしまいます。主キーの一部から決まる状態が部分関数従属で、これがあるうちは第2正規形ではありません。
切り出すとこうなります。
- 受注明細(伝票番号, 商品番号, 数量)
- 商品(商品番号, 商品名)
こうしておくと、商品名を変えるときに1行直せば済みます(分けないと、その商品が載っている全明細を直す必要があり、直し漏れると矛盾します)。これが正規化の目的である更新時異状の除去です。
2つの従属の見分け方は、主キーとの位置関係だけです。
| 従属 | 形 | 除く段 |
|---|---|---|
| 部分関数従属 | 主キーの一部 → 非キー属性 | 第2正規形 |
| 推移的関数従属 | 主キー → 非キー属性 → 別の非キー属性 | 第3正規形 |
「主キーが複数列でないと部分関数従属は起こらない」も覚えておくと便利です。主キーが1列の関係は、その時点で自動的に第2正規形を満たします。c は推移的従属(社員番号→部門コード→部門名の形)で、この問題の形ではありません。d は1行に商品が複数並んでいる場合で、この関係は行が分かれているため第1正規形は満たしています。
第5問 情報セキュリティ(公開鍵暗号とディジタル署名の鍵の向き)
A が B へメッセージを送る。「第三者に内容を読まれないようにする」場合と「B が A 本人からのものだと確認できるようにする」場合で、A が使う鍵の組合せとして正しいものはどれか。
- 秘密にする:A の秘密鍵 / 本人確認:B の公開鍵
- 秘密にする:B の公開鍵 / 本人確認:A の秘密鍵
- 秘密にする:B の公開鍵 / 本人確認:B の公開鍵
- 秘密にする:A の公開鍵 / 本人確認:A の公開鍵
解答
解答: b
8/22 に「暗号化鍵は公開・復号鍵は非公開だと何が嬉しいのかが腑に落ちていない」と書いてあった点に当てた問題です。用語ではなく、まず嬉しさから。
共通鍵暗号だと、送る前に鍵そのものを安全に渡す必要があります。ところが安全な渡し方があるなら、最初からそれで本文を送れば済む。これが鍵配送問題です。公開鍵暗号の嬉しさは、鍵を渡す必要が消えることにあります。受信者の鍵は世界中に公開されていて構わない。公開鍵で閉じた錠は、対になる秘密鍵でしか開かないからです。
そこから、向きは2種類しかありません。
| 目的 | 暗号化/署名に使う鍵 | 復号/検証に使う鍵 | 成り立つ理由 |
|---|---|---|---|
| 秘密にしたい(守秘) | 受信者 B の公開鍵 | 受信者 B の秘密鍵 | 開けられるのは B だけ |
| 本人だと示したい(署名) | 送信者 A の秘密鍵 | 送信者 A の公開鍵 | 作れるのは A だけ |
覚え方は「相手の公開鍵で隠す、自分の秘密鍵で署名する」の一文で足ります。迷ったら「その鍵を持っているのは誰か」を考えると自動的に決まります。誰でも持てる公開鍵で作れるものに証明の価値はなく、本人しか持たない秘密鍵で作れるものだから証明になる、という筋です。
実際のディジタル署名では、メッセージ全体ではなくハッシュ値を秘密鍵で暗号化します(処理が軽く、署名も短くなる)。受信側は、届いたメッセージから自分でハッシュを計算し、公開鍵で復号した署名と一致するかを見ます。一致すれば本人であること(認証)と改ざんされていないこと(完全性)が同時に確認できます。8/23 に整理した原像計算困難性・衝突発見困難性は、ここで効いてくる性質です。
8/22 に出てきた DKIM は、この署名をメール送信ドメインに対して行う仕組みです。送信側が秘密鍵で署名し、受信側が DNS に公開された公開鍵で検証する——並べてみると、表の下の行そのものになっています。
今日もこの5問だけで達成です。第1問だけ計算がありますが、やることは「32 から引く」「2 の累乗を出す」「2 を引く」の3手だけで、手順どおりなら暗算で終わります。
第3問と第5問は、どちらも 8/22 に自分で「曖昧」と書いた場所です。1か月前のメモがそのまま今日の出題になっている、というだけの話で、記録は残っていれば後から効きます。