復習問題 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 が同じネットワークに属するかの組合せとして正しいものはどれか。

  1. ホスト数 64 ・ 同じネットワークに属する
  2. ホスト数 62 ・ 同じネットワークに属する
  3. ホスト数 62 ・ 別のネットワークである
  4. ホスト数 30 ・ 別のネットワークである
解答

解答: c

昨日の第1問で「PC は送信前に、自分の IP とサブネットマスクで宛先が同じネットワークかを計算する」と書きました。今日はその計算そのものです。

手順1 — ホスト部のビット数を出す。IPv4 は全部で 32 ビット。/26 はネットワーク部が 26 ビットという意味なので、ホスト部は 32 − 26 = 6 ビット。

手順2 — ホスト数を出す。6 ビットで表せるのは 26 = 64 通り。ただし両端の2つは使えません。

よって 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オクテットの区切り
/248 ビット254256 ずつ(区切りなし)
/257 ビット126128 ずつ
/266 ビット6264 ずつ
/275 ビット3032 ずつ

8/25 に「サブネットの意味を理解した」と書いてあった内容が、数字で使える形になるとここまで来ます。この表の4行を書けるようにしておけば、午前のサブネット問題はほぼ落としません。

第2問 ネットワーク(NAPT)

社内の複数の PC が、1つのグローバル IP アドレスを共有してインターネットへ接続している。このときルータが行っている変換はどれか。

  1. プライベート IP アドレスとグローバル IP アドレスを1対1で置き換える
  2. プライベート IP アドレスとポート番号の組を、1つのグローバル IP アドレスと異なるポート番号の組へ置き換える
  3. ドメイン名を IP アドレスへ置き換える
  4. MAC アドレスを IP アドレスへ置き換える
解答

解答: b

昨日の第2問で、DHCP リレーエージェントの誤答選択肢として出てきた NAPT です。8/22 に「IP マスカレードは NAT にポート番号の変換を加えたもの」と書いてあったものと同じ話なので、ここで1本につなげてしまいます。

名前変換するもの同時に外へ出られる台数
NATIP アドレスのみ(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)への対策として最も適切なものはどれか。

  1. リクエストに第三者が推測できないトークンを埋め込み、サーバ側で照合する
  2. 利用者の入力値を画面へ出力するとき、記号を HTML エスケープする
  3. ログイン失敗が一定回数続いたらアカウントをロックする
  4. 通信経路を TLS で暗号化する
解答

解答: b

昨日の第3問(CSRF)と同じ表を逆から聞いた問題です。8/22 に挙がっていた「トークン=CSRF、エスケープ=XSS」の混同は、片方向だけ覚えていると本番で入れ替わります。両方向から出して固定します。

XSS は、攻撃者の書いたスクリプトがそのサイトのページの一部として被害者のブラウザで動いてしまう攻撃です。入力された <script> がそのまま HTML に混ざるのが原因なので、出力時に < を &lt; へ、& を &amp; へ置き換え、タグではなく文字として表示させるのが対策です。

ポイントは、エスケープするのが入力時ではなく出力時だという点。出力先が HTML か JavaScript か URL かでエスケープすべき記号が変わるため、使う直前に行うのが正しい形です。ここは午後 問1 の記述でも問われます。

攻撃対策キーワード
XSS出力時のエスケープエスケープ
CSRFトークンの照合トークン
SQL インジェクションプレースホルダプレースホルダ
ディレクトリトラバーサルパス名の直接指定をさせないパス

a は昨日の答え(CSRF)、c はパスワードリスト攻撃・総当たり攻撃への対策、d は盗聴と改ざんへの対策です。d は「とりあえず正しそう」に見えて選びがちですが、TLS で守れるのは経路だけで、届いた先のページに埋め込まれたスクリプトは止まりません。

第4問 データベース(第2正規形)

関係「受注明細(伝票番号, 商品番号, 商品名, 数量)」(下線は主キー)があり、商品名は商品番号だけで一意に決まる。この関係について正しいものはどれか。

  1. 第2正規形を満たしている
  2. 部分関数従属があるため第2正規形ではない
  3. 推移的関数従属があるため第3正規形ではないが、第2正規形は満たしている
  4. 繰返し項目があるため第1正規形ではない
解答

解答: b

昨日の第4問で第3正規形を扱ったので、今日はその一段手前です。午後 問6 は正規化の過程を説明させる設問が定番なので、どの段で何を切り出したかを言葉で言えると強くなります。

主キーは {伝票番号, 商品番号} の2つ組です。ところが商品名は、そのうち商品番号だけで決まってしまいます。主キーの一部から決まる状態が部分関数従属で、これがあるうちは第2正規形ではありません。

切り出すとこうなります。

こうしておくと、商品名を変えるときに1行直せば済みます(分けないと、その商品が載っている全明細を直す必要があり、直し漏れると矛盾します)。これが正規化の目的である更新時異状の除去です。

2つの従属の見分け方は、主キーとの位置関係だけです。

従属形除く段
部分関数従属主キーの一部 → 非キー属性第2正規形
推移的関数従属主キー → 非キー属性 → 別の非キー属性第3正規形

「主キーが複数列でないと部分関数従属は起こらない」も覚えておくと便利です。主キーが1列の関係は、その時点で自動的に第2正規形を満たします。c は推移的従属(社員番号→部門コード→部門名の形)で、この問題の形ではありません。d は1行に商品が複数並んでいる場合で、この関係は行が分かれているため第1正規形は満たしています。

第5問 情報セキュリティ(公開鍵暗号とディジタル署名の鍵の向き)

A が B へメッセージを送る。「第三者に内容を読まれないようにする」場合と「B が A 本人からのものだと確認できるようにする」場合で、A が使う鍵の組合せとして正しいものはどれか。

  1. 秘密にする:A の秘密鍵 / 本人確認:B の公開鍵
  2. 秘密にする:B の公開鍵 / 本人確認:A の秘密鍵
  3. 秘密にする:B の公開鍵 / 本人確認:B の公開鍵
  4. 秘密にする: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か月前のメモがそのまま今日の出題になっている、というだけの話で、記録は残っていれば後から効きます。

← 一覧へ